The following example shows ...
IKeyPairGenerator kpg = KeyPairGeneratorFactory.getInstance(Registry.DH_KPG); kpg.setup(new HashMap()); // use default values KeyPair kpA = kpg.generate(); KeyPair kpB = kpg.generate(); IKeyAgreementParty A = new DiffieHellmanSender(); IKeyAgreementParty B = new DiffieHellmanReceiver(); Map mapA = new HashMap(); mapA.put(DiffieHellmanKeyAgreement.KA_DIFFIE_HELLMAN_OWNER_PRIVATE_KEY, kpA.getPrivate()); Map mapB = new HashMap(); mapB.put(DiffieHellmanKeyAgreement.KA_DIFFIE_HELLMAN_OWNER_PRIVATE_KEY, kpB.getPrivate()); A.init(mapA); B.init(mapB); // (1) A -> B: g**x mod p OutgoingMessage out = A.processMessage(null); // (2) B -> A: g^^y mod p out = B.processMessage(new IncomingMessage(out.toByteArray())); byte[] k2 = B.getSharedSecret(); // A computes the shared secret out = A.processMessage(new IncomingMessage(out.toByteArray())); byte[] k1 = A.getSharedSecret();