use of org.bouncycastle.crypto.params.HKDFParameters in project vsDiaryWriter by shilongdai.
the class StreamCipherTransformer method encryptData.
@Override
protected String encryptData(byte[] bytes) {
byte[] randomSource = new byte[16];
rand.nextBytes(randomSource);
int keysize = StreamCipherEncryptors.INSTANCE.getKeySize(algName) / 8;
int ivsize = StreamCipherEncryptors.INSTANCE.getIVSize(algName) / 8;
byte[] keyCombo = new byte[keysize + ivsize];
hkdf.init(new HKDFParameters(masterKey, randomSource, "Encryption Key".getBytes()));
hkdf.generateBytes(keyCombo, 0, keyCombo.length);
byte[] key = new byte[keysize];
byte[] iv = new byte[ivsize];
System.arraycopy(keyCombo, 0, key, 0, keysize);
System.arraycopy(keyCombo, keysize, iv, 0, ivsize);
StreamCipherEncryptor enc = StreamCipherEncryptors.INSTANCE.getEncryptor(algName);
byte[] ecrypted = enc.encrypt(bytes, key, iv);
ByteParameterPair pair = new ByteParameterPair(randomSource, ecrypted);
return pair.toString();
}
use of org.bouncycastle.crypto.params.HKDFParameters in project vsDiaryWriter by shilongdai.
the class BlockCipherMacTransformer method setPassword.
/**
* derive the key from the password
*
* @throws FailToSyncCipherDataException
*/
@Override
public void setPassword(String string) throws FailToSyncCipherDataException {
try {
String saltRaw = salts.read(StandardCharsets.US_ASCII);
if (saltRaw.length() > 0) {
saltPair = ByteParameterPair.valueOf(saltRaw);
} else {
byte[] encSalt = new byte[8];
byte[] macSalt = new byte[8];
rand.nextBytes(encSalt);
rand.nextBytes(macSalt);
saltPair = new ByteParameterPair(encSalt, macSalt);
salts.write(saltPair.toString(), StandardCharsets.US_ASCII);
}
} catch (IOException e) {
FailToSyncCipherDataException fc = new FailToSyncCipherDataException("Cannot load encryption and mac salt from file");
fc.initCause(e);
throw fc;
}
this.key = generateKey(string);
hkdf.init(new HKDFParameters(key, saltPair.getFirst(), "Encryption Key".getBytes()));
cryptKey = new byte[enc.getKeySize() / 8];
hkdf.generateBytes(cryptKey, 0, cryptKey.length);
byte[] macKey = new byte[getMacKeySize() / 8];
hkdf.init(new HKDFParameters(key, saltPair.getSecond(), "Mac Key".getBytes()));
hkdf.generateBytes(macKey, 0, macKey.length);
initMac(macKey);
}
Aggregations