summary refs log tree commit diff
path: root/crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs')
-rw-r--r--crypto/src/crypto/agreement/ECDHWithKdfBasicAgreement.cs48
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);
 		}
 	}
 }