From cff1b4a22bb47c8bcf064d5e8da8c7d7ef67ea52 Mon Sep 17 00:00:00 2001 From: mdxd44 Date: Fri, 17 Dec 2021 19:31:55 +0900 Subject: Split projects. --- .../limboauth/migration/MigrationHash.java | 54 ++++++++++++++++++++++ .../limboauth/migration/MigrationHashVerifier.java | 23 +++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/main/java/net/elytrium/limboauth/migration/MigrationHash.java create mode 100644 src/main/java/net/elytrium/limboauth/migration/MigrationHashVerifier.java (limited to 'src/main/java/net/elytrium/limboauth/migration') diff --git a/src/main/java/net/elytrium/limboauth/migration/MigrationHash.java b/src/main/java/net/elytrium/limboauth/migration/MigrationHash.java new file mode 100644 index 0000000..5296534 --- /dev/null +++ b/src/main/java/net/elytrium/limboauth/migration/MigrationHash.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 Elytrium + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.elytrium.limboauth.migration; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public enum MigrationHash { + + @SuppressWarnings("unused") + AUTHME((hash, password) -> { + String[] arr = hash.split("\\$"); // $SHA$salt$hash + return arr.length == 4 && arr[3].equals(MigrationHash.getSHA256(MigrationHash.getSHA256(password) + arr[2])); + }); + + final MigrationHashVerifier verifier; + + MigrationHash(MigrationHashVerifier verifier) { + this.verifier = verifier; + } + + public boolean checkPassword(String hash, String password) { + return this.verifier.checkPassword(hash, password); + } + + private static String getSHA256(String string) { + try { + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.reset(); + messageDigest.update(string.getBytes(StandardCharsets.UTF_8)); + byte[] array = messageDigest.digest(); + return String.format("%0" + (array.length << 1) + "x", new BigInteger(1, array)); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException(e); + } + } +} diff --git a/src/main/java/net/elytrium/limboauth/migration/MigrationHashVerifier.java b/src/main/java/net/elytrium/limboauth/migration/MigrationHashVerifier.java new file mode 100644 index 0000000..cbe5135 --- /dev/null +++ b/src/main/java/net/elytrium/limboauth/migration/MigrationHashVerifier.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2021 Elytrium + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package net.elytrium.limboauth.migration; + +public interface MigrationHashVerifier { + + boolean checkPassword(String hash, String password); +} -- cgit