use of org.syncany.crypto.SaltedSecretKey in project syncany by syncany.
the class CipherTransformer method initCipherSession.
private void initCipherSession(String masterKeyStr, String masterKeySaltStr) {
byte[] masterKeySalt = StringUtil.fromHex(masterKeySaltStr);
byte[] masterKeyBytes = StringUtil.fromHex(masterKeyStr);
SaltedSecretKey masterKey = new SaltedSecretKey(new SecretKeySpec(masterKeyBytes, "RAW"), masterKeySalt);
cipherSession = new CipherSession(masterKey);
}
use of org.syncany.crypto.SaltedSecretKey in project syncany by syncany.
the class UserConfig method writeExampleUserConfigFile.
private static void writeExampleUserConfigFile(File userConfigFile) {
UserConfigTO userConfigTO = new UserConfigTO();
try {
System.out.println("First launch, creating a secret key (could take a sec)...");
SaltedSecretKey configEncryptionKey = CipherUtil.createMasterKey(CipherUtil.createRandomAlphabeticString(USER_CONFIG_ENCRYPTION_KEY_LENGTH));
userConfigTO.setConfigEncryptionKey(configEncryptionKey);
userConfigTO.save(userConfigFile);
} catch (CipherException e) {
System.err.println("ERROR: " + e.getMessage());
System.err.println(" Failed to create masterkey.");
System.err.println();
} catch (ConfigException e) {
System.err.println("ERROR: " + e.getMessage());
System.err.println(" Failed to save to file.");
System.err.println();
}
}
use of org.syncany.crypto.SaltedSecretKey in project syncany by syncany.
the class CipherSessionTest method testCipherSessionWriteKeyReuseCountOfTwo.
@Test
public void testCipherSessionWriteKeyReuseCountOfTwo() throws Exception {
SaltedSecretKey masterKey = createDummyMasterKey();
CipherSession cipherSession = new CipherSession(masterKey, 999, 2);
CipherSpec cipherSpecAes128 = CipherSpecs.getCipherSpec(CipherSpecs.AES_128_GCM);
CipherSpec cipherSpecTwofish128 = CipherSpecs.getCipherSpec(CipherSpecs.TWOFISH_128_GCM);
SaltedSecretKey writeSecretKey1Aes128 = cipherSession.getWriteSecretKey(cipherSpecAes128);
SaltedSecretKey writeSecretKey2Aes128 = cipherSession.getWriteSecretKey(cipherSpecAes128);
SaltedSecretKey writeSecretKey3Aes128 = cipherSession.getWriteSecretKey(cipherSpecAes128);
SaltedSecretKey writeSecretKey1Twofish128 = cipherSession.getWriteSecretKey(cipherSpecTwofish128);
SaltedSecretKey writeSecretKey2Twofish128 = cipherSession.getWriteSecretKey(cipherSpecTwofish128);
SaltedSecretKey writeSecretKey3Twofish128 = cipherSession.getWriteSecretKey(cipherSpecTwofish128);
assertEquals(writeSecretKey1Aes128, writeSecretKey2Aes128);
assertNotSame(writeSecretKey1Aes128, writeSecretKey3Aes128);
assertEquals(writeSecretKey1Twofish128, writeSecretKey2Twofish128);
assertNotSame(writeSecretKey1Twofish128, writeSecretKey3Twofish128);
assertNotSame(writeSecretKey1Aes128, writeSecretKey1Twofish128);
}
use of org.syncany.crypto.SaltedSecretKey in project syncany by syncany.
the class CipherSessionTest method testCipherSessionReadKeyCacheSizeOfThree.
@Test
public void testCipherSessionReadKeyCacheSizeOfThree() throws Exception {
SaltedSecretKey masterKey = createDummyMasterKey();
CipherSession cipherSession = new CipherSession(masterKey, 2, 999);
CipherSpec cipherSpecAes128 = CipherSpecs.getCipherSpec(CipherSpecs.AES_128_GCM);
byte[] readKeySalt1 = CipherUtil.createRandomArray(cipherSpecAes128.getKeySize());
byte[] readKeySalt2 = CipherUtil.createRandomArray(cipherSpecAes128.getKeySize());
byte[] readKeySalt3 = CipherUtil.createRandomArray(cipherSpecAes128.getKeySize());
SaltedSecretKey readSecretKey1Aes128 = cipherSession.getReadSecretKey(cipherSpecAes128, readKeySalt1);
SaltedSecretKey readSecretKey2Aes128 = cipherSession.getReadSecretKey(cipherSpecAes128, readKeySalt2);
SaltedSecretKey readSecretKey3Aes128 = cipherSession.getReadSecretKey(cipherSpecAes128, readKeySalt3);
assertNotSame(readSecretKey1Aes128, readSecretKey2Aes128);
assertNotSame(readSecretKey1Aes128, readSecretKey3Aes128);
assertNotSame(readSecretKey2Aes128, readSecretKey3Aes128);
// TODO [medium] This does NOT TEST the actual read cache. How to test this. The cache is completely hidden/private?!
}
use of org.syncany.crypto.SaltedSecretKey in project syncany by syncany.
the class CipherUtilTest method testIntegrityHeaderVersion.
@Test(expected = Exception.class)
public void testIntegrityHeaderVersion() throws Exception {
SaltedSecretKey masterKey = createDummyMasterKey();
byte[] originalPlaintext = TestFileUtil.createRandomArray(50);
byte[] ciphertext = CipherUtil.encrypt(new ByteArrayInputStream(originalPlaintext), Arrays.asList(CipherSpecs.getCipherSpec(CipherSpecs.AES_128_GCM)), masterKey);
// Alter header VERSION
ciphertext[4] = (byte) 0xff;
byte[] plaintext = CipherUtil.decrypt(new ByteArrayInputStream(ciphertext), masterKey);
System.out.println(StringUtil.toHex(originalPlaintext));
System.out.println(StringUtil.toHex(plaintext));
fail("TEST FAILED: Ciphertext was altered without exception.");
}
Aggregations