mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 12:19:54 +01:00
Derive separate keys for each direction.
This commit is contained in:
@@ -68,9 +68,13 @@ class CryptoComponentImpl implements CryptoComponent {
|
||||
}
|
||||
}
|
||||
|
||||
public SecretKey deriveMacKey(byte[] secret) {
|
||||
public SecretKey deriveIncomingMacKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
if(s.getAlice()) return deriveKey("MACA", s.getIv(), s.getCiphertext());
|
||||
return deriveMacKey(s, !s.getAlice());
|
||||
}
|
||||
|
||||
private SecretKey deriveMacKey(SharedSecret s, boolean alice) {
|
||||
if(alice) return deriveKey("MACA", s.getIv(), s.getCiphertext());
|
||||
else return deriveKey("MACB", s.getIv(), s.getCiphertext());
|
||||
}
|
||||
|
||||
@@ -110,18 +114,41 @@ class CryptoComponentImpl implements CryptoComponent {
|
||||
}
|
||||
}
|
||||
|
||||
public SecretKey derivePacketKey(byte[] secret) {
|
||||
public SecretKey deriveIncomingPacketKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
if(s.getAlice()) return deriveKey("PKTA", s.getIv(), s.getCiphertext());
|
||||
return derivePacketKey(s, !s.getAlice());
|
||||
}
|
||||
|
||||
private SecretKey derivePacketKey(SharedSecret s, boolean alice) {
|
||||
if(alice) return deriveKey("PKTA", s.getIv(), s.getCiphertext());
|
||||
else return deriveKey("PKTB", s.getIv(), s.getCiphertext());
|
||||
}
|
||||
|
||||
public SecretKey deriveTagKey(byte[] secret) {
|
||||
public SecretKey deriveIncomingTagKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
if(s.getAlice()) return deriveKey("TAGA", s.getIv(), s.getCiphertext());
|
||||
return deriveTagKey(s, !s.getAlice());
|
||||
}
|
||||
|
||||
private SecretKey deriveTagKey(SharedSecret s, boolean alice) {
|
||||
if(alice) return deriveKey("TAGA", s.getIv(), s.getCiphertext());
|
||||
else return deriveKey("TAGB", s.getIv(), s.getCiphertext());
|
||||
}
|
||||
|
||||
public SecretKey deriveOutgoingMacKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
return deriveMacKey(s, s.getAlice());
|
||||
}
|
||||
|
||||
public SecretKey deriveOutgoingPacketKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
return derivePacketKey(s, s.getAlice());
|
||||
}
|
||||
|
||||
public SecretKey deriveOutgoingTagKey(byte[] secret) {
|
||||
SharedSecret s = new SharedSecret(secret);
|
||||
return deriveTagKey(s, s.getAlice());
|
||||
}
|
||||
|
||||
public KeyPair generateKeyPair() {
|
||||
return keyPairGenerator.generateKeyPair();
|
||||
}
|
||||
|
||||
@@ -50,7 +50,8 @@ DatabaseListener {
|
||||
for(ContactId c : db.getContacts()) {
|
||||
try {
|
||||
// Initialise and store the contact's tag cipher
|
||||
SecretKey tagKey = crypto.deriveTagKey(db.getSharedSecret(c));
|
||||
byte[] secret = db.getSharedSecret(c);
|
||||
SecretKey tagKey = crypto.deriveIncomingTagKey(secret);
|
||||
Cipher cipher = crypto.getTagCipher();
|
||||
try {
|
||||
cipher.init(Cipher.ENCRYPT_MODE, tagKey);
|
||||
|
||||
@@ -24,9 +24,9 @@ class PacketReaderFactoryImpl implements PacketReaderFactory {
|
||||
|
||||
public PacketReader createPacketReader(byte[] firstTag, InputStream in,
|
||||
int transportId, long connection, byte[] secret) {
|
||||
SecretKey macKey = crypto.deriveMacKey(secret);
|
||||
SecretKey tagKey = crypto.deriveTagKey(secret);
|
||||
SecretKey packetKey = crypto.derivePacketKey(secret);
|
||||
SecretKey macKey = crypto.deriveIncomingMacKey(secret);
|
||||
SecretKey tagKey = crypto.deriveIncomingTagKey(secret);
|
||||
SecretKey packetKey = crypto.deriveIncomingPacketKey(secret);
|
||||
Cipher tagCipher = crypto.getTagCipher();
|
||||
Cipher packetCipher = crypto.getPacketCipher();
|
||||
Mac mac = crypto.getMac();
|
||||
|
||||
@@ -24,9 +24,9 @@ class PacketWriterFactoryImpl implements PacketWriterFactory {
|
||||
|
||||
public PacketWriter createPacketWriter(OutputStream out, int transportId,
|
||||
long connection, byte[] secret) {
|
||||
SecretKey macKey = crypto.deriveMacKey(secret);
|
||||
SecretKey tagKey = crypto.deriveTagKey(secret);
|
||||
SecretKey packetKey = crypto.derivePacketKey(secret);
|
||||
SecretKey macKey = crypto.deriveOutgoingMacKey(secret);
|
||||
SecretKey tagKey = crypto.deriveOutgoingTagKey(secret);
|
||||
SecretKey packetKey = crypto.deriveOutgoingPacketKey(secret);
|
||||
Cipher tagCipher = crypto.getTagCipher();
|
||||
Cipher packetCipher = crypto.getPacketCipher();
|
||||
Mac mac = crypto.getMac();
|
||||
|
||||
Reference in New Issue
Block a user