| package org.bouncycastle.crypto.params; |
| |
| import org.bouncycastle.crypto.CipherParameters; |
| |
| public class MQVPrivateParameters |
| implements CipherParameters |
| { |
| private ECPrivateKeyParameters staticPrivateKey; |
| private ECPrivateKeyParameters ephemeralPrivateKey; |
| private ECPublicKeyParameters ephemeralPublicKey; |
| |
| public MQVPrivateParameters( |
| ECPrivateKeyParameters staticPrivateKey, |
| ECPrivateKeyParameters ephemeralPrivateKey) |
| { |
| this(staticPrivateKey, ephemeralPrivateKey, null); |
| } |
| |
| public MQVPrivateParameters( |
| ECPrivateKeyParameters staticPrivateKey, |
| ECPrivateKeyParameters ephemeralPrivateKey, |
| ECPublicKeyParameters ephemeralPublicKey) |
| { |
| if (staticPrivateKey == null) |
| { |
| throw new NullPointerException("staticPrivateKey cannot be null"); |
| } |
| if (ephemeralPrivateKey == null) |
| { |
| throw new NullPointerException("ephemeralPrivateKey cannot be null"); |
| } |
| |
| ECDomainParameters parameters = staticPrivateKey.getParameters(); |
| if (!parameters.equals(ephemeralPrivateKey.getParameters())) |
| { |
| throw new IllegalArgumentException("Static and ephemeral private keys have different domain parameters"); |
| } |
| |
| if (ephemeralPublicKey == null) |
| { |
| ephemeralPublicKey = new ECPublicKeyParameters( |
| parameters.getG().multiply(ephemeralPrivateKey.getD()), |
| parameters); |
| } |
| else if (!parameters.equals(ephemeralPublicKey.getParameters())) |
| { |
| throw new IllegalArgumentException("Ephemeral public key has different domain parameters"); |
| } |
| |
| this.staticPrivateKey = staticPrivateKey; |
| this.ephemeralPrivateKey = ephemeralPrivateKey; |
| this.ephemeralPublicKey = ephemeralPublicKey; |
| } |
| |
| public ECPrivateKeyParameters getStaticPrivateKey() |
| { |
| return staticPrivateKey; |
| } |
| |
| public ECPrivateKeyParameters getEphemeralPrivateKey() |
| { |
| return ephemeralPrivateKey; |
| } |
| |
| public ECPublicKeyParameters getEphemeralPublicKey() |
| { |
| return ephemeralPublicKey; |
| } |
| } |