-
Notifications
You must be signed in to change notification settings - Fork 49
Open
Description
Hi @crossle @Tougee @abhay-s-rawat, Currently I have a problem when loading the cipherText and decrypting it to display in UI.
//TODO: how can I decrypt the ciphertext to plain text again using Bob session or any way without remoteSessionCipher?
test('testBasicEncryptDecrypt', () async {
final identityKeyPair = generateIdentityKeyPair();
final registrationId = generateRegistrationId(false);
final preKeys = generatePreKeys(0, 110);
final signedPreKey = generateSignedPreKey(identityKeyPair, 0);
final sessionStore = InMemorySessionStore();
final preKeyStore = InMemoryPreKeyStore();
final signedPreKeyStore = InMemorySignedPreKeyStore();
final identityStore =
InMemoryIdentityKeyStore(identityKeyPair, registrationId);
for (final p in preKeys) {
await preKeyStore.storePreKey(p.id, p);
}
await signedPreKeyStore.storeSignedPreKey(signedPreKey.id, signedPreKey);
const bobAddress = SignalProtocolAddress('bob', 1);
final sessionBuilder = SessionBuilder(
sessionStore, preKeyStore, signedPreKeyStore, identityStore, bobAddress);
// Should get remote from the server
final remoteRegId = generateRegistrationId(false);
final remoteIdentityKeyPair = generateIdentityKeyPair();
final remotePreKeys = generatePreKeys(0, 110);
final remoteSignedPreKey = generateSignedPreKey(remoteIdentityKeyPair, 0);
final retrievedPreKey = PreKeyBundle(
remoteRegId,
1,
remotePreKeys[0].id,
remotePreKeys[0].getKeyPair().publicKey,
remoteSignedPreKey.id,
remoteSignedPreKey.getKeyPair().publicKey,
remoteSignedPreKey.signature,
remoteIdentityKeyPair.getPublicKey());
await sessionBuilder.processPreKeyBundle(retrievedPreKey);
final sessionCipher = SessionCipher(
sessionStore, preKeyStore, signedPreKeyStore, identityStore, bobAddress);
final ciphertext = await sessionCipher
.encrypt(Uint8List.fromList(utf8.encode('Hello Mixin🤣')));
print(ciphertext);
// Store the ciphertext to the local database.
//TODO: how can I decrypt the ciphertext to plain text again using Bob session or any way without remoteSessionCipher?
final signalProtocolStore =
InMemorySignalProtocolStore(remoteIdentityKeyPair, 1);
const aliceAddress = SignalProtocolAddress('alice', 1);
final remoteSessionCipher =
SessionCipher.fromStore(signalProtocolStore, aliceAddress);
for (final p in remotePreKeys) {
await signalProtocolStore.storePreKey(p.id, p);
}
await signalProtocolStore.storeSignedPreKey(
remoteSignedPreKey.id, remoteSignedPreKey);
if (ciphertext.getType() == CiphertextMessage.prekeyType) {
await remoteSessionCipher
.decryptWithCallback(ciphertext as PreKeySignalMessage, (plaintext) {
// ignore: avoid_print
print(utf8.decode(plaintext));
});
}
});
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels