mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-05-04 20:30:36 +00:00
Fix a bug where the password encode function added trailing null bytes
Funny story. Instead of obtaining the actual bytes from the ByteBuffer in the password encode function, we obtained the entire buffer. This caused some trailing null bytes to be added to the encoded password. Luckily (and strangely), PBKDF2 produces collisions for inputs with trailing null bytes and thus scrypt does this as well. As such, this bug doesn't affect us right now, but it would if we were to use that encode function for other purposes in the future. This also adds a test that checks for the expected collision behavior of scrypt.
This commit is contained in:
parent
24a93ecc9f
commit
afb9e59711
2 changed files with 49 additions and 3 deletions
|
@ -35,10 +35,14 @@ public class CryptoUtils {
|
|||
public static final int CRYPTO_SCRYPT_r = 8;
|
||||
public static final int CRYPTO_SCRYPT_p = 1;
|
||||
|
||||
public static SecretKey deriveKey(byte[] input, SCryptParameters params) {
|
||||
byte[] keyBytes = SCrypt.generate(input, params.getSalt(), params.getN(), params.getR(), params.getP(), CRYPTO_AEAD_KEY_SIZE);
|
||||
return new SecretKeySpec(keyBytes, 0, keyBytes.length, "AES");
|
||||
}
|
||||
|
||||
public static SecretKey deriveKey(char[] password, SCryptParameters params) {
|
||||
byte[] bytes = toBytes(password);
|
||||
byte[] keyBytes = SCrypt.generate(bytes, params.getSalt(), params.getN(), params.getR(), params.getP(), CRYPTO_AEAD_KEY_SIZE);
|
||||
return new SecretKeySpec(keyBytes, 0, keyBytes.length, "AES");
|
||||
return deriveKey(bytes, params);
|
||||
}
|
||||
|
||||
public static Cipher createEncryptCipher(SecretKey key)
|
||||
|
@ -123,6 +127,8 @@ public class CryptoUtils {
|
|||
private static byte[] toBytes(char[] chars) {
|
||||
CharBuffer charBuf = CharBuffer.wrap(chars);
|
||||
ByteBuffer byteBuf = StandardCharsets.UTF_8.encode(charBuf);
|
||||
return byteBuf.array();
|
||||
byte[] bytes = new byte[byteBuf.limit()];
|
||||
byteBuf.get(bytes);
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue