mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 22:29:53 +01:00
Rename crypto methods and constants for Bluetooth key agreement
This commit is contained in:
@@ -244,7 +244,7 @@ implements InvitationListener {
|
|||||||
|
|
||||||
int getLocalInvitationCode() {
|
int getLocalInvitationCode() {
|
||||||
if (localInvitationCode == -1)
|
if (localInvitationCode == -1)
|
||||||
localInvitationCode = crypto.generateInvitationCode();
|
localInvitationCode = crypto.generateBTInvitationCode();
|
||||||
return localInvitationCode;
|
return localInvitationCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,35 +27,35 @@ public interface CryptoComponent {
|
|||||||
KeyParser getSignatureKeyParser();
|
KeyParser getSignatureKeyParser();
|
||||||
|
|
||||||
/** Generates a random invitation code. */
|
/** Generates a random invitation code. */
|
||||||
int generateInvitationCode();
|
int generateBTInvitationCode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives a shared master secret from two public keys and one of the
|
* Derives a shared master secret from two public keys and one of the
|
||||||
* corresponding private keys.
|
* corresponding private keys.
|
||||||
* @param alice whether the private key belongs to Alice or Bob.
|
* @param alice whether the private key belongs to Alice or Bob.
|
||||||
*/
|
*/
|
||||||
SecretKey deriveMasterSecret(byte[] theirPublicKey, KeyPair ourKeyPair,
|
SecretKey deriveBTMasterSecret(byte[] theirPublicKey, KeyPair ourKeyPair,
|
||||||
boolean alice) throws GeneralSecurityException;
|
boolean alice) throws GeneralSecurityException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives a confirmation code from the given master secret.
|
* Derives a confirmation code from the given master secret.
|
||||||
* @param alice whether the code is for use by Alice or Bob.
|
* @param alice whether the code is for use by Alice or Bob.
|
||||||
*/
|
*/
|
||||||
int deriveConfirmationCode(SecretKey master, boolean alice);
|
int deriveBTConfirmationCode(SecretKey master, boolean alice);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives a header key for an invitation stream from the given master
|
* Derives a header key for an invitation stream from the given master
|
||||||
* secret.
|
* secret.
|
||||||
* @param alice whether the key is for use by Alice or Bob.
|
* @param alice whether the key is for use by Alice or Bob.
|
||||||
*/
|
*/
|
||||||
SecretKey deriveInvitationKey(SecretKey master, boolean alice);
|
SecretKey deriveBTInvitationKey(SecretKey master, boolean alice);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives a nonce from the given master secret for one of the parties to
|
* Derives a nonce from the given master secret for one of the parties to
|
||||||
* sign.
|
* sign.
|
||||||
* @param alice whether the nonce is for use by Alice or Bob.
|
* @param alice whether the nonce is for use by Alice or Bob.
|
||||||
*/
|
*/
|
||||||
byte[] deriveSignatureNonce(SecretKey master, boolean alice);
|
byte[] deriveBTSignatureNonce(SecretKey master, boolean alice);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives initial transport keys for the given transport in the given
|
* Derives initial transport keys for the given transport in the given
|
||||||
|
|||||||
@@ -62,17 +62,17 @@ class CryptoComponentImpl implements CryptoComponent {
|
|||||||
return s.getBytes(Charset.forName("US-ASCII"));
|
return s.getBytes(Charset.forName("US-ASCII"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// KDF label for master key derivation
|
// KDF label for bluetooth master key derivation
|
||||||
private static final byte[] MASTER = ascii("MASTER");
|
private static final byte[] BT_MASTER = ascii("MASTER");
|
||||||
// KDF labels for confirmation code derivation
|
// KDF labels for bluetooth confirmation code derivation
|
||||||
private static final byte[] A_CONFIRM = ascii("ALICE_CONFIRMATION_CODE");
|
private static final byte[] BT_A_CONFIRM = ascii("ALICE_CONFIRMATION_CODE");
|
||||||
private static final byte[] B_CONFIRM = ascii("BOB_CONFIRMATION_CODE");
|
private static final byte[] BT_B_CONFIRM = ascii("BOB_CONFIRMATION_CODE");
|
||||||
// KDF labels for invitation stream header key derivation
|
// KDF labels for bluetooth invitation stream header key derivation
|
||||||
private static final byte[] A_INVITE = ascii("ALICE_INVITATION_KEY");
|
private static final byte[] BT_A_INVITE = ascii("ALICE_INVITATION_KEY");
|
||||||
private static final byte[] B_INVITE = ascii("BOB_INVITATION_KEY");
|
private static final byte[] BT_B_INVITE = ascii("BOB_INVITATION_KEY");
|
||||||
// KDF labels for signature nonce derivation
|
// KDF labels for bluetooth signature nonce derivation
|
||||||
private static final byte[] A_NONCE = ascii("ALICE_SIGNATURE_NONCE");
|
private static final byte[] BT_A_NONCE = ascii("ALICE_SIGNATURE_NONCE");
|
||||||
private static final byte[] B_NONCE = ascii("BOB_SIGNATURE_NONCE");
|
private static final byte[] BT_B_NONCE = ascii("BOB_SIGNATURE_NONCE");
|
||||||
// KDF labels for tag key derivation
|
// KDF labels for tag key derivation
|
||||||
private static final byte[] A_TAG = ascii("ALICE_TAG_KEY");
|
private static final byte[] A_TAG = ascii("ALICE_TAG_KEY");
|
||||||
private static final byte[] B_TAG = ascii("BOB_TAG_KEY");
|
private static final byte[] B_TAG = ascii("BOB_TAG_KEY");
|
||||||
@@ -128,6 +128,25 @@ class CryptoComponentImpl implements CryptoComponent {
|
|||||||
return secureRandom;
|
return secureRandom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Package access for testing
|
||||||
|
byte[] performRawKeyAgreement(PrivateKey priv, PublicKey pub)
|
||||||
|
throws GeneralSecurityException {
|
||||||
|
if (!(priv instanceof Sec1PrivateKey))
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
if (!(pub instanceof Sec1PublicKey))
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
ECPrivateKeyParameters ecPriv = ((Sec1PrivateKey) priv).getKey();
|
||||||
|
ECPublicKeyParameters ecPub = ((Sec1PublicKey) pub).getKey();
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
ECDHCBasicAgreement agreement = new ECDHCBasicAgreement();
|
||||||
|
agreement.init(ecPriv);
|
||||||
|
byte[] secret = agreement.calculateAgreement(ecPub).toByteArray();
|
||||||
|
long duration = System.currentTimeMillis() - now;
|
||||||
|
if (LOG.isLoggable(INFO))
|
||||||
|
LOG.info("Deriving shared secret took " + duration + " ms");
|
||||||
|
return secret;
|
||||||
|
}
|
||||||
|
|
||||||
public Signature getSignature() {
|
public Signature getSignature() {
|
||||||
return new SignatureImpl(secureRandom);
|
return new SignatureImpl(secureRandom);
|
||||||
}
|
}
|
||||||
@@ -170,14 +189,14 @@ class CryptoComponentImpl implements CryptoComponent {
|
|||||||
return signatureKeyParser;
|
return signatureKeyParser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int generateInvitationCode() {
|
public int generateBTInvitationCode() {
|
||||||
int codeBytes = (CODE_BITS + 7) / 8;
|
int codeBytes = (CODE_BITS + 7) / 8;
|
||||||
byte[] random = new byte[codeBytes];
|
byte[] random = new byte[codeBytes];
|
||||||
secureRandom.nextBytes(random);
|
secureRandom.nextBytes(random);
|
||||||
return ByteUtils.readUint(random, CODE_BITS);
|
return ByteUtils.readUint(random, CODE_BITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SecretKey deriveMasterSecret(byte[] theirPublicKey,
|
public SecretKey deriveBTMasterSecret(byte[] theirPublicKey,
|
||||||
KeyPair ourKeyPair, boolean alice) throws GeneralSecurityException {
|
KeyPair ourKeyPair, boolean alice) throws GeneralSecurityException {
|
||||||
MessageDigest messageDigest = getMessageDigest();
|
MessageDigest messageDigest = getMessageDigest();
|
||||||
byte[] ourPublicKey = ourKeyPair.getPublic().getEncoded();
|
byte[] ourPublicKey = ourKeyPair.getPublic().getEncoded();
|
||||||
@@ -194,41 +213,22 @@ class CryptoComponentImpl implements CryptoComponent {
|
|||||||
PrivateKey ourPriv = ourKeyPair.getPrivate();
|
PrivateKey ourPriv = ourKeyPair.getPrivate();
|
||||||
PublicKey theirPub = agreementKeyParser.parsePublicKey(theirPublicKey);
|
PublicKey theirPub = agreementKeyParser.parsePublicKey(theirPublicKey);
|
||||||
// The raw secret comes from the key agreement algorithm
|
// The raw secret comes from the key agreement algorithm
|
||||||
byte[] raw = deriveSharedSecret(ourPriv, theirPub);
|
byte[] raw = performRawKeyAgreement(ourPriv, theirPub);
|
||||||
// Derive the master secret from the raw secret using the hash KDF
|
// Derive the master secret from the raw secret using the hash KDF
|
||||||
return new SecretKey(hashKdf(raw, MASTER, aliceInfo, bobInfo));
|
return new SecretKey(hashKdf(raw, BT_MASTER, aliceInfo, bobInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Package access for testing
|
public int deriveBTConfirmationCode(SecretKey master, boolean alice) {
|
||||||
byte[] deriveSharedSecret(PrivateKey priv, PublicKey pub)
|
byte[] b = macKdf(master, alice ? BT_A_CONFIRM : BT_B_CONFIRM);
|
||||||
throws GeneralSecurityException {
|
|
||||||
if (!(priv instanceof Sec1PrivateKey))
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
if (!(pub instanceof Sec1PublicKey))
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
ECPrivateKeyParameters ecPriv = ((Sec1PrivateKey) priv).getKey();
|
|
||||||
ECPublicKeyParameters ecPub = ((Sec1PublicKey) pub).getKey();
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
ECDHCBasicAgreement agreement = new ECDHCBasicAgreement();
|
|
||||||
agreement.init(ecPriv);
|
|
||||||
byte[] secret = agreement.calculateAgreement(ecPub).toByteArray();
|
|
||||||
long duration = System.currentTimeMillis() - now;
|
|
||||||
if (LOG.isLoggable(INFO))
|
|
||||||
LOG.info("Deriving shared secret took " + duration + " ms");
|
|
||||||
return secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int deriveConfirmationCode(SecretKey master, boolean alice) {
|
|
||||||
byte[] b = macKdf(master, alice ? A_CONFIRM : B_CONFIRM);
|
|
||||||
return ByteUtils.readUint(b, CODE_BITS);
|
return ByteUtils.readUint(b, CODE_BITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SecretKey deriveInvitationKey(SecretKey master, boolean alice) {
|
public SecretKey deriveBTInvitationKey(SecretKey master, boolean alice) {
|
||||||
return new SecretKey(macKdf(master, alice ? A_INVITE : B_INVITE));
|
return new SecretKey(macKdf(master, alice ? BT_A_INVITE : BT_B_INVITE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] deriveSignatureNonce(SecretKey master, boolean alice) {
|
public byte[] deriveBTSignatureNonce(SecretKey master, boolean alice) {
|
||||||
return macKdf(master, alice ? A_NONCE : B_NONCE);
|
return macKdf(master, alice ? BT_A_NONCE : BT_B_NONCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportKeys deriveTransportKeys(TransportId t,
|
public TransportKeys deriveTransportKeys(TransportId t,
|
||||||
|
|||||||
@@ -93,8 +93,8 @@ class AliceConnector extends Connector {
|
|||||||
}
|
}
|
||||||
// The key agreement succeeded - derive the confirmation codes
|
// The key agreement succeeded - derive the confirmation codes
|
||||||
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " agreement succeeded");
|
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " agreement succeeded");
|
||||||
int aliceCode = crypto.deriveConfirmationCode(master, true);
|
int aliceCode = crypto.deriveBTConfirmationCode(master, true);
|
||||||
int bobCode = crypto.deriveConfirmationCode(master, false);
|
int bobCode = crypto.deriveBTConfirmationCode(master, false);
|
||||||
group.keyAgreementSucceeded(aliceCode, bobCode);
|
group.keyAgreementSucceeded(aliceCode, bobCode);
|
||||||
// Exchange confirmation results
|
// Exchange confirmation results
|
||||||
boolean localMatched, remoteMatched;
|
boolean localMatched, remoteMatched;
|
||||||
@@ -128,8 +128,8 @@ class AliceConnector extends Connector {
|
|||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info(pluginName + " confirmation succeeded");
|
LOG.info(pluginName + " confirmation succeeded");
|
||||||
// Derive the header keys
|
// Derive the header keys
|
||||||
SecretKey aliceHeaderKey = crypto.deriveInvitationKey(master, true);
|
SecretKey aliceHeaderKey = crypto.deriveBTInvitationKey(master, true);
|
||||||
SecretKey bobHeaderKey = crypto.deriveInvitationKey(master, false);
|
SecretKey bobHeaderKey = crypto.deriveBTInvitationKey(master, false);
|
||||||
// Create the readers
|
// Create the readers
|
||||||
InputStream streamReader =
|
InputStream streamReader =
|
||||||
streamReaderFactory.createInvitationStreamReader(in,
|
streamReaderFactory.createInvitationStreamReader(in,
|
||||||
@@ -141,8 +141,8 @@ class AliceConnector extends Connector {
|
|||||||
aliceHeaderKey);
|
aliceHeaderKey);
|
||||||
w = bdfWriterFactory.createWriter(streamWriter);
|
w = bdfWriterFactory.createWriter(streamWriter);
|
||||||
// Derive the invitation nonces
|
// Derive the invitation nonces
|
||||||
byte[] aliceNonce = crypto.deriveSignatureNonce(master, true);
|
byte[] aliceNonce = crypto.deriveBTSignatureNonce(master, true);
|
||||||
byte[] bobNonce = crypto.deriveSignatureNonce(master, false);
|
byte[] bobNonce = crypto.deriveBTSignatureNonce(master, false);
|
||||||
// Exchange pseudonyms, signed nonces, and timestamps
|
// Exchange pseudonyms, signed nonces, and timestamps
|
||||||
Author remoteAuthor;
|
Author remoteAuthor;
|
||||||
long remoteTimestamp;
|
long remoteTimestamp;
|
||||||
|
|||||||
@@ -93,8 +93,8 @@ class BobConnector extends Connector {
|
|||||||
}
|
}
|
||||||
// The key agreement succeeded - derive the confirmation codes
|
// The key agreement succeeded - derive the confirmation codes
|
||||||
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " agreement succeeded");
|
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " agreement succeeded");
|
||||||
int aliceCode = crypto.deriveConfirmationCode(master, true);
|
int aliceCode = crypto.deriveBTConfirmationCode(master, true);
|
||||||
int bobCode = crypto.deriveConfirmationCode(master, false);
|
int bobCode = crypto.deriveBTConfirmationCode(master, false);
|
||||||
group.keyAgreementSucceeded(bobCode, aliceCode);
|
group.keyAgreementSucceeded(bobCode, aliceCode);
|
||||||
// Exchange confirmation results
|
// Exchange confirmation results
|
||||||
boolean localMatched, remoteMatched;
|
boolean localMatched, remoteMatched;
|
||||||
@@ -128,8 +128,8 @@ class BobConnector extends Connector {
|
|||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info(pluginName + " confirmation succeeded");
|
LOG.info(pluginName + " confirmation succeeded");
|
||||||
// Derive the header keys
|
// Derive the header keys
|
||||||
SecretKey aliceHeaderKey = crypto.deriveInvitationKey(master, true);
|
SecretKey aliceHeaderKey = crypto.deriveBTInvitationKey(master, true);
|
||||||
SecretKey bobHeaderKey = crypto.deriveInvitationKey(master, false);
|
SecretKey bobHeaderKey = crypto.deriveBTInvitationKey(master, false);
|
||||||
// Create the readers
|
// Create the readers
|
||||||
InputStream streamReader =
|
InputStream streamReader =
|
||||||
streamReaderFactory.createInvitationStreamReader(in,
|
streamReaderFactory.createInvitationStreamReader(in,
|
||||||
@@ -141,8 +141,8 @@ class BobConnector extends Connector {
|
|||||||
bobHeaderKey);
|
bobHeaderKey);
|
||||||
w = bdfWriterFactory.createWriter(streamWriter);
|
w = bdfWriterFactory.createWriter(streamWriter);
|
||||||
// Derive the nonces
|
// Derive the nonces
|
||||||
byte[] aliceNonce = crypto.deriveSignatureNonce(master, true);
|
byte[] aliceNonce = crypto.deriveBTSignatureNonce(master, true);
|
||||||
byte[] bobNonce = crypto.deriveSignatureNonce(master, false);
|
byte[] bobNonce = crypto.deriveBTSignatureNonce(master, false);
|
||||||
// Exchange pseudonyms, signed nonces and timestamps
|
// Exchange pseudonyms, signed nonces and timestamps
|
||||||
Author remoteAuthor;
|
Author remoteAuthor;
|
||||||
long remoteTimestamp;
|
long remoteTimestamp;
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ abstract class Connector extends Thread {
|
|||||||
// Derive the master secret
|
// Derive the master secret
|
||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info(pluginName + " deriving master secret");
|
LOG.info(pluginName + " deriving master secret");
|
||||||
return crypto.deriveMasterSecret(key, keyPair, alice);
|
return crypto.deriveBTMasterSecret(key, keyPair, alice);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void sendConfirmation(BdfWriter w, boolean confirmed)
|
protected void sendConfirmation(BdfWriter w, boolean confirmed)
|
||||||
|
|||||||
@@ -13,15 +13,15 @@ import static org.junit.Assert.assertArrayEquals;
|
|||||||
public class KeyAgreementTest extends BriarTestCase {
|
public class KeyAgreementTest extends BriarTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testKeyAgreement() throws Exception {
|
public void testBTKeyAgreement() throws Exception {
|
||||||
SeedProvider seedProvider = new TestSeedProvider();
|
SeedProvider seedProvider = new TestSeedProvider();
|
||||||
CryptoComponent crypto = new CryptoComponentImpl(seedProvider);
|
CryptoComponent crypto = new CryptoComponentImpl(seedProvider);
|
||||||
KeyPair aPair = crypto.generateAgreementKeyPair();
|
KeyPair aPair = crypto.generateAgreementKeyPair();
|
||||||
byte[] aPub = aPair.getPublic().getEncoded();
|
byte[] aPub = aPair.getPublic().getEncoded();
|
||||||
KeyPair bPair = crypto.generateAgreementKeyPair();
|
KeyPair bPair = crypto.generateAgreementKeyPair();
|
||||||
byte[] bPub = bPair.getPublic().getEncoded();
|
byte[] bPub = bPair.getPublic().getEncoded();
|
||||||
SecretKey aMaster = crypto.deriveMasterSecret(aPub, bPair, true);
|
SecretKey aMaster = crypto.deriveBTMasterSecret(aPub, bPair, true);
|
||||||
SecretKey bMaster = crypto.deriveMasterSecret(bPub, aPair, false);
|
SecretKey bMaster = crypto.deriveBTMasterSecret(bPub, aPair, false);
|
||||||
assertArrayEquals(aMaster.getBytes(), bMaster.getBytes());
|
assertArrayEquals(aMaster.getBytes(), bMaster.getBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,12 +27,12 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
|
|||||||
KeyPair bPair = crypto.generateAgreementKeyPair();
|
KeyPair bPair = crypto.generateAgreementKeyPair();
|
||||||
// Derive the shared secret
|
// Derive the shared secret
|
||||||
PublicKey aPub = aPair.getPublic();
|
PublicKey aPub = aPair.getPublic();
|
||||||
byte[] secret = crypto.deriveSharedSecret(bPair.getPrivate(), aPub);
|
byte[] secret = crypto.performRawKeyAgreement(bPair.getPrivate(), aPub);
|
||||||
// Encode and parse the public key - no exceptions should be thrown
|
// Encode and parse the public key - no exceptions should be thrown
|
||||||
aPub = parser.parsePublicKey(aPub.getEncoded());
|
aPub = parser.parsePublicKey(aPub.getEncoded());
|
||||||
aPub = parser.parsePublicKey(aPub.getEncoded());
|
aPub = parser.parsePublicKey(aPub.getEncoded());
|
||||||
// Derive the shared secret again - it should be the same
|
// Derive the shared secret again - it should be the same
|
||||||
byte[] secret1 = crypto.deriveSharedSecret(bPair.getPrivate(), aPub);
|
byte[] secret1 = crypto.performRawKeyAgreement(bPair.getPrivate(), aPub);
|
||||||
assertArrayEquals(secret, secret1);
|
assertArrayEquals(secret, secret1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,12 +44,12 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
|
|||||||
KeyPair bPair = crypto.generateAgreementKeyPair();
|
KeyPair bPair = crypto.generateAgreementKeyPair();
|
||||||
// Derive the shared secret
|
// Derive the shared secret
|
||||||
PrivateKey bPriv = bPair.getPrivate();
|
PrivateKey bPriv = bPair.getPrivate();
|
||||||
byte[] secret = crypto.deriveSharedSecret(bPriv, aPair.getPublic());
|
byte[] secret = crypto.performRawKeyAgreement(bPriv, aPair.getPublic());
|
||||||
// Encode and parse the private key - no exceptions should be thrown
|
// Encode and parse the private key - no exceptions should be thrown
|
||||||
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
||||||
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
||||||
// Derive the shared secret again - it should be the same
|
// Derive the shared secret again - it should be the same
|
||||||
byte[] secret1 = crypto.deriveSharedSecret(bPriv, aPair.getPublic());
|
byte[] secret1 = crypto.performRawKeyAgreement(bPriv, aPair.getPublic());
|
||||||
assertArrayEquals(secret, secret1);
|
assertArrayEquals(secret, secret1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,12 +90,12 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
|
|||||||
KeyPair bPair = crypto.generateSignatureKeyPair();
|
KeyPair bPair = crypto.generateSignatureKeyPair();
|
||||||
// Derive the shared secret
|
// Derive the shared secret
|
||||||
PublicKey aPub = aPair.getPublic();
|
PublicKey aPub = aPair.getPublic();
|
||||||
byte[] secret = crypto.deriveSharedSecret(bPair.getPrivate(), aPub);
|
byte[] secret = crypto.performRawKeyAgreement(bPair.getPrivate(), aPub);
|
||||||
// Encode and parse the public key - no exceptions should be thrown
|
// Encode and parse the public key - no exceptions should be thrown
|
||||||
aPub = parser.parsePublicKey(aPub.getEncoded());
|
aPub = parser.parsePublicKey(aPub.getEncoded());
|
||||||
aPub = parser.parsePublicKey(aPub.getEncoded());
|
aPub = parser.parsePublicKey(aPub.getEncoded());
|
||||||
// Derive the shared secret again - it should be the same
|
// Derive the shared secret again - it should be the same
|
||||||
byte[] secret1 = crypto.deriveSharedSecret(bPair.getPrivate(), aPub);
|
byte[] secret1 = crypto.performRawKeyAgreement(bPair.getPrivate(), aPub);
|
||||||
assertArrayEquals(secret, secret1);
|
assertArrayEquals(secret, secret1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,12 +107,12 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
|
|||||||
KeyPair bPair = crypto.generateSignatureKeyPair();
|
KeyPair bPair = crypto.generateSignatureKeyPair();
|
||||||
// Derive the shared secret
|
// Derive the shared secret
|
||||||
PrivateKey bPriv = bPair.getPrivate();
|
PrivateKey bPriv = bPair.getPrivate();
|
||||||
byte[] secret = crypto.deriveSharedSecret(bPriv, aPair.getPublic());
|
byte[] secret = crypto.performRawKeyAgreement(bPriv, aPair.getPublic());
|
||||||
// Encode and parse the private key - no exceptions should be thrown
|
// Encode and parse the private key - no exceptions should be thrown
|
||||||
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
||||||
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
bPriv = parser.parsePrivateKey(bPriv.getEncoded());
|
||||||
// Derive the shared secret again - it should be the same
|
// Derive the shared secret again - it should be the same
|
||||||
byte[] secret1 = crypto.deriveSharedSecret(bPriv, aPair.getPublic());
|
byte[] secret1 = crypto.performRawKeyAgreement(bPriv, aPair.getPublic());
|
||||||
assertArrayEquals(secret, secret1);
|
assertArrayEquals(secret, secret1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user