public HKeyExchange(int exponent, string modulus, string privateExponent) : this() { var keys = new RSAParameters(); Exponent = new BigInteger(exponent); keys.Exponent = Exponent.ToByteArray(); Modulus = BigInteger.Parse("0" + modulus, NumberStyles.HexNumber); keys.Modulus = Modulus.ToByteArray(); Array.Reverse(keys.Modulus); if (!string.IsNullOrWhiteSpace(privateExponent)) { PrivateExponent = BigInteger.Parse("0" + privateExponent, NumberStyles.HexNumber); keys.D = PrivateExponent.ToByteArray(); Array.Reverse(keys.D); GenerateDHPrimes(256); GenerateDHKeys(DHPrime, DHGenerator); } RSA = new RSACryptoServiceProvider(); RSA.ImportParameters(keys); _blockSize = (RSA.KeySize - RSA.LegalKeySizes[0].SkipSize) / 8; }
/// <summary> /// Gets the signing stream. /// </summary> /// <returns></returns> public HashingStream GetSigningStream(Keyczar keyczar) { var signer = PublicKey.GetSigner(); signer.Init(forSigning: true, parameters: new RsaPrivateCrtKeyParameters( Utility.ToBouncyBigInteger(PublicKey.Modulus), Utility.ToBouncyBigInteger(PublicKey.PublicExponent), PrivateExponent.ToBouncyBigInteger(), PrimeP.ToBouncyBigInteger(), PrimeQ.ToBouncyBigInteger(), PrimeExponentP.ToBouncyBigInteger(), PrimeExponentQ.ToBouncyBigInteger(), CrtCoefficient.ToBouncyBigInteger())); return(new DigestStream(signer, Size / 8)); }
/// <summary> /// Gets the decrypting stream. /// </summary> /// <param name="output">The output.</param> /// <returns></returns> public FinishingStream GetDecryptingStream(Stream output, Keyczar keyczar) { var rsa = new RsaEngine(); var oaep = PublicKey.UpdatePadding(rsa); return(new AsymmetricStream(oaep, output, (cipher, encrypt) => cipher.Init(encrypt, new RsaPrivateCrtKeyParameters( PublicKey.Modulus .ToBouncyBigInteger(), PublicKey.PublicExponent .ToBouncyBigInteger(), PrivateExponent.ToBouncyBigInteger (), PrimeP.ToBouncyBigInteger(), PrimeQ.ToBouncyBigInteger(), PrimeExponentP.ToBouncyBigInteger(), PrimeExponentQ.ToBouncyBigInteger(), CrtCoefficient.ToBouncyBigInteger())), encrypt: false)); }
public HKeyExchange(int exponent, string modulus, string privateExponent) { Exponent = new BigInteger(exponent); Modulus = BigInteger.Parse("0" + modulus, NumberStyles.HexNumber); var keys = new RSAParameters { Exponent = Exponent.ToByteArray(isBigEndian: true), Modulus = Modulus.ToByteArray(isBigEndian: true) }; if (!string.IsNullOrWhiteSpace(privateExponent)) { PrivateExponent = BigInteger.Parse("0" + privateExponent, NumberStyles.HexNumber); keys.D = PrivateExponent.ToByteArray(isBigEndian: true); GenerateDHPrimes(256); GenerateDHKeys(DHPrime, DHGenerator); } RSA = RSA.Create(keys); }