Beispiel #1
0
        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));
        }
Beispiel #3
0
        /// <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));
        }
Beispiel #4
0
        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);
        }