diff options
author | Moxie Marlinspike <moxie@thoughtcrime.org> | 2015-01-08 13:48:49 -0800 |
---|---|---|
committer | Moxie Marlinspike <moxie@thoughtcrime.org> | 2015-01-08 14:09:01 -0800 |
commit | 6445ea5f13850f42c3952bd06a2369317683ed88 (patch) | |
tree | f2bb37c8cf4710ff6a6a37a3e7e702c5a21ca504 /src/main/java/org/whispersystems/libaxolotl/kdf | |
parent | a4d8f7f6a4c4e9e89db35f299e558dceee2362a1 (diff) |
Break project up into Java and Android build/test.
Diffstat (limited to 'src/main/java/org/whispersystems/libaxolotl/kdf')
5 files changed, 0 insertions, 196 deletions
diff --git a/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedMessageSecrets.java b/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedMessageSecrets.java deleted file mode 100644 index b3f54fb8..00000000 --- a/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedMessageSecrets.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (C) 2014 Open Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.whispersystems.libaxolotl.kdf; - -import org.whispersystems.libaxolotl.util.ByteUtil; - -import java.text.ParseException; - -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; - -public class DerivedMessageSecrets { - - public static final int SIZE = 80; - private static final int CIPHER_KEY_LENGTH = 32; - private static final int MAC_KEY_LENGTH = 32; - private static final int IV_LENGTH = 16; - - private final SecretKeySpec cipherKey; - private final SecretKeySpec macKey; - private final IvParameterSpec iv; - - public DerivedMessageSecrets(byte[] okm) { - try { - byte[][] keys = ByteUtil.split(okm, CIPHER_KEY_LENGTH, MAC_KEY_LENGTH, IV_LENGTH); - - this.cipherKey = new SecretKeySpec(keys[0], "AES"); - this.macKey = new SecretKeySpec(keys[1], "HmacSHA256"); - this.iv = new IvParameterSpec(keys[2]); - } catch (ParseException e) { - throw new AssertionError(e); - } - } - - public SecretKeySpec getCipherKey() { - return cipherKey; - } - - public SecretKeySpec getMacKey() { - return macKey; - } - - public IvParameterSpec getIv() { - return iv; - } -} diff --git a/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedRootSecrets.java b/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedRootSecrets.java deleted file mode 100644 index 82cc541d..00000000 --- a/src/main/java/org/whispersystems/libaxolotl/kdf/DerivedRootSecrets.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.whispersystems.libaxolotl.kdf; - -import org.whispersystems.libaxolotl.util.ByteUtil; - -public class DerivedRootSecrets { - - public static final int SIZE = 64; - - private final byte[] rootKey; - private final byte[] chainKey; - - public DerivedRootSecrets(byte[] okm) { - byte[][] keys = ByteUtil.split(okm, 32, 32); - this.rootKey = keys[0]; - this.chainKey = keys[1]; - } - - public byte[] getRootKey() { - return rootKey; - } - - public byte[] getChainKey() { - return chainKey; - } - -} diff --git a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDF.java b/src/main/java/org/whispersystems/libaxolotl/kdf/HKDF.java deleted file mode 100644 index d190822d..00000000 --- a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDF.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (C) 2013 Open Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.whispersystems.libaxolotl.kdf; - -import java.io.ByteArrayOutputStream; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; - -public abstract class HKDF { - - private static final int HASH_OUTPUT_SIZE = 32; - - public static HKDF createFor(int messageVersion) { - switch (messageVersion) { - case 2: return new HKDFv2(); - case 3: return new HKDFv3(); - default: throw new AssertionError("Unknown version: " + messageVersion); - } - } - - public byte[] deriveSecrets(byte[] inputKeyMaterial, byte[] info, int outputLength) { - byte[] salt = new byte[HASH_OUTPUT_SIZE]; - return deriveSecrets(inputKeyMaterial, salt, info, outputLength); - } - - public byte[] deriveSecrets(byte[] inputKeyMaterial, byte[] salt, byte[] info, int outputLength) { - byte[] prk = extract(salt, inputKeyMaterial); - return expand(prk, info, outputLength); - } - - private byte[] extract(byte[] salt, byte[] inputKeyMaterial) { - try { - Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(salt, "HmacSHA256")); - return mac.doFinal(inputKeyMaterial); - } catch (NoSuchAlgorithmException | InvalidKeyException e) { - throw new AssertionError(e); - } - } - - private byte[] expand(byte[] prk, byte[] info, int outputSize) { - try { - int iterations = (int) Math.ceil((double) outputSize / (double) HASH_OUTPUT_SIZE); - byte[] mixin = new byte[0]; - ByteArrayOutputStream results = new ByteArrayOutputStream(); - int remainingBytes = outputSize; - - for (int i= getIterationStartOffset();i<iterations + getIterationStartOffset();i++) { - Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(prk, "HmacSHA256")); - - mac.update(mixin); - if (info != null) { - mac.update(info); - } - mac.update((byte)i); - - byte[] stepResult = mac.doFinal(); - int stepSize = Math.min(remainingBytes, stepResult.length); - - results.write(stepResult, 0, stepSize); - - mixin = stepResult; - remainingBytes -= stepSize; - } - - return results.toByteArray(); - } catch (NoSuchAlgorithmException | InvalidKeyException e) { - throw new AssertionError(e); - } - } - - protected abstract int getIterationStartOffset(); - -} diff --git a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv2.java b/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv2.java deleted file mode 100644 index 86e4bf5f..00000000 --- a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv2.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.whispersystems.libaxolotl.kdf; - -public class HKDFv2 extends HKDF { - @Override - protected int getIterationStartOffset() { - return 0; - } -} diff --git a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv3.java b/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv3.java deleted file mode 100644 index a1934c90..00000000 --- a/src/main/java/org/whispersystems/libaxolotl/kdf/HKDFv3.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.whispersystems.libaxolotl.kdf; - -public class HKDFv3 extends HKDF { - @Override - protected int getIterationStartOffset() { - return 1; - } -} |