Closed siman302 closed 3 years ago
when FIRST TIME I send a message for encryption, its return a encrypted message. but SECOND TIME it throw an error "Invalid signature on device key!"
MyCode:
> InMemoryPreKeyStore preKeyStore; > InMemorySignedPreKeyStore signedPreKeyStore; > InMemoryIdentityKeyStore identityStore; > generateData(identityKeyPair, registerationId, preKeys) { > signedPreKeyStore = InMemorySignedPreKeyStore(); > preKeyStore = InMemoryPreKeyStore(); > SignedPreKeyRecord signedPreKey = > KeyHelper.generateSignedPreKey(identityKeyPair, 0); > identityStore = InMemoryIdentityKeyStore(identityKeyPair, registerationId); > for (var p in preKeys) { > preKeyStore.storePreKey(p.id, p); > } > signedPreKeyStore.storeSignedPreKey(signedPreKey.id, signedPreKey); > } > > Uint8List encryption(String text, UserModel conv, id) { > InMemorySessionStore sessionStore = InMemorySessionStore(); > SignalProtocolAddress bobAddress = SignalProtocolAddress(conv.name, 1); > UserModel me = Get.find<DataService>().user; > List list = reConversion( > me.identityKeyPair, > me.preKeys, > me.signedPreKeyRecord, > conv.identityPublicKeyPair, > conv.preKeysIdPublicKeyPair, > conv.signedPreKeyPublicPair, > ); > > generateData( > list[0], > me.registerationId, > list[1], > ); > SessionBuilder sessionBuilder = SessionBuilder(sessionStore, preKeyStore, > signedPreKeyStore, identityStore, bobAddress); > > PreKeyBundle retrievedPreKey = PreKeyBundle( > conv.registerationId, > 1, > conv.preKeysId, > list[4], > conv.signedPreKeyId, > list[5], > conv.signedPreKeySignature, > list[3], > ); > > sessionBuilder.processPreKeyBundle(retrievedPreKey); > > Get.find<DataService>() > .converstation > .firstWhere((CoversationModel element) => element.id == id) > .sessionCipher = > SessionCipher(sessionStore, preKeyStore, signedPreKeyStore, > identityStore, bobAddress); > > CiphertextMessage ciphertext = Get.find<DataService>() > .converstation > .firstWhere((CoversationModel element) => element.id == id) > .sessionCipher > .encrypt(Uint8List.fromList(utf8.encode(text))); > > sessionStore.deleteSession(bobAddress); > return ciphertext.serialize(); > } >
That chunk of code throw an exception in file 'SessionBuilder.dart'
> if (preKey.getSignedPreKey() != null && > !Curve.verifySignature( > preKey.getIdentityKey().publicKey, > preKey.getSignedPreKey().serialize(), > preKey.getSignedPreKeySignature())) { > throw InvalidKeyException('Invalid signature on device key!'); > }
Why you > sessionStore.deleteSession(bobAddress); ?
@siman302 can you please share your project code. I just want to have a look at how to implement this library.
when FIRST TIME I send a message for encryption, its return a encrypted message. but SECOND TIME it throw an error "Invalid signature on device key!"
MyCode:
That chunk of code throw an exception in file 'SessionBuilder.dart'