12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using System.Collections;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.Kdf;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement
- {
- public class ECMqvWithKdfBasicAgreement
- : ECMqvBasicAgreement
- {
- private readonly string algorithm;
- private readonly IDerivationFunction kdf;
- public ECMqvWithKdfBasicAgreement(
- string algorithm,
- IDerivationFunction kdf)
- {
- if (algorithm == null)
- throw new ArgumentNullException("algorithm");
- if (kdf == null)
- throw new ArgumentNullException("kdf");
- this.algorithm = algorithm;
- this.kdf = kdf;
- }
- 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(privParams.StaticPrivateKey.Parameters.Curve);
- return X9IntegerConverter.IntegerToBytes(r, byteLength);
- }
- }
- }
- #pragma warning restore
- #endif
|