public ECDiffieHellmanManaged(int keySize) { var curve = ECCurve.secp256r1; switch (keySize) { case 256: curve = ECCurve.secp256r1; break; case 384: curve = ECCurve.secp384r1; break; case 521: curve = ECCurve.secp521r1; break; default: throw new CryptographicException("ECDiffieHellmanManaged only supports 256, 384 and 521 bit key sizes."); } privateKey = new ECDiffieHellmanManagedPrivateKey(curve); }
public override byte[] SignHash(byte[] hash) { var ephemeral = new ECDiffieHellmanManagedPrivateKey(curve); var n = curve.n; var k = ephemeral.D; var R = ECPoint.FromBlob(ephemeral.PublicKey.ToByteArray()); var r = R.X % n; var e = CalculateE(hash); var d = D; var val = k.ModInverse(n); var s = (val * (e + (r * d))) % n; using (var pw = new PacketWriter()) { pw.WriteString(r.ToByteArray().Reverse().ToArray()); pw.WriteString(s.ToByteArray().Reverse().ToArray()); return(((MemoryStream)pw.BaseStream).ToArray()); } }
public void ImportParameters(ECDiffieHellmanManagedPrivateKey privateKey) { D = privateKey.D; q = ECPoint.FromBlob(privateKey.PublicKey.ToByteArray()); }
public ECDiffieHellmanManaged(ECCurve curve) { privateKey = new ECDiffieHellmanManagedPrivateKey(curve); }
public ECDiffieHellmanManaged(ECDiffieHellmanManagedPrivateKey key) { privateKey = key; }