Logging and improvements to BackupPayloadDecoderImpl

This commit is contained in:
ameba23
2021-04-20 12:46:22 +02:00
parent ae35354e82
commit b835064b5e
2 changed files with 51 additions and 14 deletions

View File

@@ -10,6 +10,7 @@ import org.briarproject.bramble.api.crypto.AuthenticatedCipher;
import org.briarproject.bramble.api.crypto.PrivateKey;
import org.briarproject.bramble.api.crypto.PublicKey;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.crypto.SignaturePrivateKey;
import org.briarproject.bramble.api.data.BdfList;
import org.briarproject.bramble.api.identity.Author;
import org.briarproject.bramble.api.identity.Identity;
@@ -25,18 +26,22 @@ import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.inject.Provider;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.socialbackup.SocialBackupConstants.AUTH_TAG_BYTES;
import static org.briarproject.briar.socialbackup.SocialBackupConstants.NONCE_BYTES;
public class BackupPayloadDecoderImpl {
public class BackupPayloadDecoderImpl implements BackupPayloadDecoder {
private final ClientHelper clientHelper;
private final Provider<AuthenticatedCipher> cipherProvider;
private final SecureRandom secureRandom;
private final MessageParser messageParser;
private static final Logger LOG =
getLogger(BackupPayloadDecoderImpl.class.getName());
@Inject
BackupPayloadDecoderImpl(ClientHelper clientHelper,
@@ -59,7 +64,8 @@ public class BackupPayloadDecoderImpl {
System.arraycopy(ciphertextWithNonce, 0, nonce, 0, NONCE_BYTES);
byte[] ciphertext = new byte[ciphertextWithNonce.length - NONCE_BYTES];
System.arraycopy(ciphertextWithNonce, nonce.length, ciphertext, 0, ciphertext.length);
System.arraycopy(ciphertextWithNonce, nonce.length, ciphertext, 0,
ciphertext.length);
AuthenticatedCipher cipher = cipherProvider.get();
cipher.init(false, secret, nonce);
@@ -68,17 +74,23 @@ public class BackupPayloadDecoderImpl {
int decrypted = cipher.process(ciphertext, 0,
ciphertext.length, plaintext, 0);
if (decrypted != plaintext.length) throw new AssertionError();
LOG.info("Backup payload decrypted");
BdfList backup = clientHelper.toList(plaintext);
int version = backup.getLong(0).intValue();
LOG.info("Backup payload has version number " + version);
BdfList bdfIdentity = backup.getList(1);
BdfList bdfContactData = backup.getList(2);
Author a = clientHelper
.parseAndValidateAuthor(bdfIdentity.getList(0));
PrivateKey signaturePrivateKey =
new SignaturePrivateKey(bdfIdentity.getRaw(1));
LocalAuthor localAuthor =
(LocalAuthor) clientHelper
.parseAndValidateAuthor(bdfIdentity.getList(0));
//TODO
byte[] authorPrivateKeyBytes = bdfIdentity.getRaw(1);
new LocalAuthor(a.getId(), a.getFormatVersion(), a.getName(),
a.getPublicKey(), signaturePrivateKey);
LOG.info("LocalAuthor parsed successfully. Name is " + a.getName());
PublicKey handshakePublicKey =
new AgreementPublicKey(bdfIdentity.getRaw(2));
@@ -89,6 +101,7 @@ public class BackupPayloadDecoderImpl {
Identity identity = new Identity(localAuthor, handshakePublicKey,
handShakePrivateKey, created);
LOG.info("New identity created");
List<ContactData> contactDataList = new ArrayList();
@@ -97,26 +110,41 @@ public class BackupPayloadDecoderImpl {
Author author =
clientHelper.parseAndValidateAuthor(bdfData.getList(0));
String alias = bdfData.getString(1);
LOG.info("Contact author parsed");
String alias = bdfData.getOptionalString(1);
LOG.info("Contact alias is: " + alias);
// 2 - public key or null
byte[] publicKeyBytes = bdfData.getRaw(2);
byte[] handshakePublicKeyBytes = bdfData.getOptionalRaw(2);
PublicKey contactHandshakePublicKey = (handshakePublicKeyBytes == null)
? null
: new AgreementPublicKey(handshakePublicKeyBytes);
LOG.info("Contact handshake pk parsed");
// 3 - properties dictionary
Map<TransportId, TransportProperties> properties = clientHelper
.parseAndValidateTransportPropertiesMap(
bdfData.getDictionary(3));
LOG.info("Contact transport properties parsed");
// 4 shard or null
BdfList shardList = bdfData.getList(4);
Shard shard = shardList == null ? null :
BdfList shardList = bdfData.getOptionalList(4);
Shard shard = (shardList == null) ? null :
messageParser.parseShardMessage(shardList);
// TODO validate shard
LOG.info("Contact shard parsed");
ContactId contactId = new ContactId(i);
Contact contact =
new Contact(contactId, author, author.getId(), alias,
handshakePublicKey, false);
contactHandshakePublicKey, false);
ContactData contactData =
new ContactData(contact, properties, shard);
contactDataList.add(contactData);
LOG.info("Contact added");
}
LOG.info("All contacts added");
return new SocialBackup(identity, contactDataList, version);
}
}

View File

@@ -87,17 +87,26 @@ public class SocialBackupModule {
}
@Provides
org.briarproject.briar.api.socialbackup.MessageEncoder messageEncoder(MessageEncoderImpl messageEncoder) {
BackupPayloadDecoder backupPayloadDecoder(
BackupPayloadDecoderImpl backupPayloadDecoder) {
return backupPayloadDecoder;
}
@Provides
org.briarproject.briar.api.socialbackup.MessageEncoder messageEncoder(
MessageEncoderImpl messageEncoder) {
return messageEncoder;
}
@Provides
org.briarproject.briar.api.socialbackup.MessageParser messageParser(MessageParserImpl messageParser) {
org.briarproject.briar.api.socialbackup.MessageParser messageParser(
MessageParserImpl messageParser) {
return messageParser;
}
@Provides
SocialBackupExchangeManager socialBackupExchangeManager(SocialBackupExchangeManagerImpl socialBackupExchangeManager) {
SocialBackupExchangeManager socialBackupExchangeManager(
SocialBackupExchangeManagerImpl socialBackupExchangeManager) {
return socialBackupExchangeManager;
}