import 'package:cryptography/cryptography.dart'; import 'package:test/test.dart'; import 'package:omemo_dart/src/x3dh/x3dh.dart'; Future> publicKeyBytes(SimpleKeyPair kp) async { final pk = await kp.extractPublicKey(); return pk.bytes; } void main() { test("X3DH", () async { final ed = Ed25519(); final x = Cryptography.instance.x25519(); // Generate IKs for Alice and Bob final ikAlice = await ed.newKeyPair(); final ikBob = await ed.newKeyPair(); // Generate SPKs for Alice and Bob final spkAlice = await x.newKeyPair(); final spkSigAlice = await sig(ikAlice, await publicKeyBytes(spkAlice)); final spkBob = await x.newKeyPair(); final spkSigBob = await sig(ikBob, await publicKeyBytes(spkBob)); // Generate an OPK for Alice and Bob final opkAlice = await x.newKeyPair(); final opkBob = await x.newKeyPair(); // Perform X3DH final aliceMessage = await x3dhFromPrekeyBundle( await ikBob.extractPublicKey(), await spkBob.extractPublicKey(), await opkBob.extractPublicKey(), ikAlice, ); final bobDh = await x3dhFromInitialMessage( await ikAlice.extractPublicKey(), await aliceMessage.epk.extractPublicKey(), opkBob, spkBob, ikBob, ); expect(aliceMessage.sharedSecret, bobDh); }); }