diff options
Diffstat (limited to 'crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs')
-rw-r--r-- | crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs | 48 |
1 files changed, 10 insertions, 38 deletions
diff --git a/crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs b/crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs index a73e3f438..fb85da611 100644 --- a/crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs +++ b/crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs @@ -1,59 +1,31 @@ using System; using Org.BouncyCastle.Asn1; -using Org.BouncyCastle.Asn1.X9; using Org.BouncyCastle.Crypto.Agreement.Kdf; using Org.BouncyCastle.Math; using Org.BouncyCastle.Security; +using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Crypto.Agreement { - public class ECDHWithKdfBasicAgreement + // TODO[api] sealed + public class ECDHWithKdfBasicAgreement : ECDHBasicAgreement { - private readonly string algorithm; - private readonly IDerivationFunction kdf; + private readonly string m_algorithm; + private readonly IDerivationFunction m_kdf; - public ECDHWithKdfBasicAgreement( - string algorithm, - IDerivationFunction kdf) + public ECDHWithKdfBasicAgreement(string algorithm, IDerivationFunction kdf) { - if (algorithm == null) - throw new ArgumentNullException("algorithm"); - if (kdf == null) - throw new ArgumentNullException("kdf"); - - this.algorithm = algorithm; - this.kdf = kdf; + m_algorithm = algorithm ?? throw new ArgumentNullException(nameof(algorithm)); + m_kdf = kdf ?? throw new ArgumentNullException(nameof(kdf)); } - public override BigInteger CalculateAgreement( - ICipherParameters pubKey) + public override BigInteger CalculateAgreement(ICipherParameters pubKey) { - // Note that the ec.KeyAgreement class in JCE only uses kdf in one - // of the engineGenerateSecret methods. - BigInteger result = base.CalculateAgreement(pubKey); - int keySize = GeneratorUtilities.GetDefaultKeySize(algorithm); - - DHKdfParameters dhKdfParams = new DHKdfParameters( - new DerObjectIdentifier(algorithm), - keySize, - BigIntToBytes(result)); - - kdf.Init(dhKdfParams); - - byte[] keyBytes = new byte[keySize / 8]; - kdf.GenerateBytes(keyBytes, 0, keyBytes.Length); - - return new BigInteger(1, keyBytes); - } - - private byte[] BigIntToBytes(BigInteger r) - { - int byteLength = X9IntegerConverter.GetByteLength(privKey.Parameters.Curve); - return X9IntegerConverter.IntegerToBytes(r, byteLength); + return BasicAgreementWithKdf.CalculateAgreementWithKdf(m_algorithm, m_kdf, GetFieldSize(), result); } } } |