/// <summary>constructor</summary> /// <param name="func">キー派生関数(Bob側と合わせる)。</param> /// <param name="hash">秘密協定の処理に使用するハッシュ アルゴリズム(Bob側と合わせる)</param> /// <param name="hmacKey">HMACキー</param> /// <param name="secretPrependOrLabel">SecretPrepend or Label</param> /// <param name="secretAppendOrSeed">SecretAppend or Seed</param> public EcdhCngBob(ECDiffieHellmanKeyDerivationFunction func, CngAlgorithm hash, byte[] hmacKey, byte[] secretPrependOrLabel, byte[] secretAppendOrSeed) { ECDiffieHellmanCng ecdh = new ECDiffieHellmanCng(); this._asa = ecdh; // 保持 // Alice側と合わせる。 ecdh.KeyDerivationFunction = func; if (func == ECDiffieHellmanKeyDerivationFunction.Hash) { ecdh.HashAlgorithm = hash; ecdh.SecretPrepend = secretPrependOrLabel; ecdh.SecretAppend = secretAppendOrSeed; } else if (func == ECDiffieHellmanKeyDerivationFunction.Hmac) { ecdh.HashAlgorithm = hash; ecdh.HmacKey = hmacKey; ecdh.SecretPrepend = secretPrependOrLabel; ecdh.SecretAppend = secretAppendOrSeed; } else if (func == ECDiffieHellmanKeyDerivationFunction.Tls) { ecdh.Label = secretPrependOrLabel; ecdh.Seed = secretAppendOrSeed; } // Aliceと鍵交換する交換鍵 this._exchangeKey = ecdh.PublicKey.ToByteArray(); }
public ECDiffieHellmanBc(Int32 keySize) { Org.BouncyCastle.Asn1.X9.X9ECParameters ecParams; switch (keySize) { case 256: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256r1"); break; case 384: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp384r1"); break; case 521: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp521r1"); break; default: throw new ArgumentException("ECDiffieHellman key size " + keySize + " not supported"); } _keySize = keySize; _domainParameters = new ECDomainParameters(ecParams.Curve, ecParams.G, ecParams.N, ecParams.H, ecParams.GetSeed()); // Initialize key generation parameters with new SecureRandom Org.BouncyCastle.Security.SecureRandom secureRandom = new Org.BouncyCastle.Security.SecureRandom(); ECKeyGenerationParameters keyGenParams = new ECKeyGenerationParameters(_domainParameters, secureRandom); // Generate key pair from domain parameters Org.BouncyCastle.Crypto.Generators.ECKeyPairGenerator generator = new Org.BouncyCastle.Crypto.Generators.ECKeyPairGenerator(); generator.Init(keyGenParams); Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair(); // Save the private and public key parameters _privateKeyParameters = (ECPrivateKeyParameters) keyPair.Private; _publicKeyParameters = (ECPublicKeyParameters) keyPair.Public; _kdf = ECDiffieHellmanKeyDerivationFunction.Hash; _hashAlgorithm = CngAlgorithm.Sha256; }
public ECDiffieHellmanBc(Int32 keySize) { Org.BouncyCastle.Asn1.X9.X9ECParameters ecParams; switch (keySize) { case 256: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256r1"); break; case 384: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp384r1"); break; case 521: ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp521r1"); break; default: throw new ArgumentException("ECDiffieHellman key size " + keySize + " not supported"); } _keySize = keySize; _domainParameters = new ECDomainParameters(ecParams.Curve, ecParams.G, ecParams.N, ecParams.H, ecParams.GetSeed()); // Initialize key generation parameters with new SecureRandom Org.BouncyCastle.Security.SecureRandom secureRandom = new Org.BouncyCastle.Security.SecureRandom(); ECKeyGenerationParameters keyGenParams = new ECKeyGenerationParameters(_domainParameters, secureRandom); // Generate key pair from domain parameters Org.BouncyCastle.Crypto.Generators.ECKeyPairGenerator generator = new Org.BouncyCastle.Crypto.Generators.ECKeyPairGenerator(); generator.Init(keyGenParams); Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair(); // Save the private and public key parameters _privateKeyParameters = (ECPrivateKeyParameters)keyPair.Private; _publicKeyParameters = (ECPublicKeyParameters)keyPair.Public; _kdf = ECDiffieHellmanKeyDerivationFunction.Hash; _hashAlgorithm = CngAlgorithm.Sha256; }
/// <summary>constructor</summary> /// <param name="func">キー派生関数(Bob側と合わせる)。</param> /// <param name="hash">秘密協定の処理に使用するハッシュ アルゴリズム(Bob側と合わせる)</param> /// <param name="hmacKey">HMACキー</param> public EcdhCngBob(ECDiffieHellmanKeyDerivationFunction func, CngAlgorithm hash, byte[] hmacKey) : this(func, hash, hmacKey, null, null) { }
public ECDiffieHellmanAgreement(ECDiffieHellmanKeyDerivationFunction function, CngAlgorithm algorithm, CngKeyBlobFormat format) { this.keyDerivationFunction = function; this.algorithm = algorithm; this.keyBlobFormat = format; }
/// <summary>constructor</summary> /// <param name="func">キー派生関数(Bob側と合わせる)。</param> /// <param name="hash">秘密協定の処理に使用するハッシュ アルゴリズム(Bob側と合わせる)</param> public EcdhCngAlice(ECDiffieHellmanKeyDerivationFunction func, CngAlgorithm hash) : this(func, hash, null, null, null) { }