private static BigInteger calculateAgreement( AsymmetricCipherKeyPair U1, AsymmetricCipherKeyPair U2, AsymmetricCipherKeyPair V1, AsymmetricCipherKeyPair V2) { ECMQVBasicAgreement u = new ECMQVBasicAgreement(); u.init(new MQVPrivateParameters( (ECPrivateKeyParameters)U1.getPrivate(), (ECPrivateKeyParameters)U2.getPrivate(), (ECPublicKeyParameters)U2.getPublic())); BigInteger ux = u.calculateAgreement(new MQVPublicParameters( (ECPublicKeyParameters)V1.getPublic(), (ECPublicKeyParameters)V2.getPublic())); ECMQVBasicAgreement v = new ECMQVBasicAgreement(); v.init(new MQVPrivateParameters( (ECPrivateKeyParameters)V1.getPrivate(), (ECPrivateKeyParameters)V2.getPrivate(), (ECPublicKeyParameters)V2.getPublic())); BigInteger vx = v.calculateAgreement(new MQVPublicParameters( (ECPublicKeyParameters)U1.getPublic(), (ECPublicKeyParameters)U2.getPublic())); if (ux.equals(vx)) { return ux; } return null; }
public void init( CipherParameters key) { this.privParams = (MQVPrivateParameters)key; }
private void initFromKey(Key key) throws InvalidKeyException { if (agreement instanceof ECMQVBasicAgreement) { if (!(key instanceof MQVPrivateKey)) { throw new InvalidKeyException(kaAlgorithm + " key agreement requires " + getSimpleName(MQVPrivateKey.class) + " for initialisation"); } MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); ECPublicKeyParameters ephemPubKey = null; if (mqvPrivKey.getEphemeralPublicKey() != null) { ephemPubKey = (ECPublicKeyParameters) ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); } MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); this.parameters = staticPrivKey.getParameters(); // TODO Validate that all the keys are using the same parameters? agreement.init(localParams); } else { if (!(key instanceof PrivateKey)) { throw new InvalidKeyException(kaAlgorithm + " key agreement requires " + getSimpleName(ECPrivateKey.class) + " for initialisation"); } ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)ECUtil.generatePrivateKeyParameter((PrivateKey)key); this.parameters = privKey.getParameters(); agreement.init(privKey); } }
private void initFromKey(Key key) throws InvalidKeyException { if (agreement instanceof ECMQVBasicAgreement) { if (!(key instanceof MQVPrivateKey)) { throw new InvalidKeyException(kaAlgorithm + " key agreement requires " + getSimpleName(MQVPrivateKey.class) + " for initialisation"); } MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); ECPublicKeyParameters ephemPubKey = null; if (mqvPrivKey.getEphemeralPublicKey() != null) { ephemPubKey = (ECPublicKeyParameters) ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); } MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); this.parameters = staticPrivKey.getParameters(); // TODO Validate that all the keys are using the same parameters? agreement.init(localParams); } else { if (!(key instanceof ECPrivateKey)) { throw new InvalidKeyException(kaAlgorithm + " key agreement requires " + getSimpleName(ECPrivateKey.class) + " for initialisation"); } ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)ECUtil.generatePrivateKeyParameter((PrivateKey)key); this.parameters = privKey.getParameters(); agreement.init(privKey); } }