예제 #1
0
        public static AsymmetricCipherKeyPair GenerateKeyPair(int keyStrength, SecureRandom random)
        {
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            AsymmetricCipherKeyPair subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            return(subjectKeyPair);
        }
예제 #2
0
        public static AsymmetricCipherKeyPair GenerateKeyPair(int publicKeyLength)
        {
            var random           = new SecureRandom();
            var keyPairGenerator = new RsaKeyPairGenerator();
            var parameters       = new KeyGenerationParameters(random, publicKeyLength);

            keyPairGenerator.Init(parameters);

            return(keyPairGenerator.GenerateKeyPair());
        }
        public static AsymmetricCipherKeyPair GetKeyPair()
        {
            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            SecureRandom             secureRandom    = new SecureRandom(randomGenerator);
            var keyGenerationParameters = new KeyGenerationParameters(secureRandom, RsaKeySize);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            return(keyPairGenerator.GenerateKeyPair());
        }
        private static AsymmetricCipherKeyPair GenerateKeyPair(int bits)
        {
            KeyGenerationParameters keyParameters = new KeyGenerationParameters(BouncyCastleRandomGenerator.CreateSecureRandom(), bits);
            RsaKeyPairGenerator     rsaGenerator  = new RsaKeyPairGenerator();

            rsaGenerator.Init(keyParameters);
            AsymmetricCipherKeyPair keyPair = rsaGenerator.GenerateKeyPair();

            return(keyPair);
        }
예제 #5
0
        // ReSharper disable once UnusedParameter.Local
        private static KeyPair CreateKeyPair(string _)
        {
            //TODO
            //Currently only EC supported
            var gen         = new ECKeyPairGenerator();
            var keyGenParam = new KeyGenerationParameters(new SecureRandom(), 256);

            gen.Init(keyGenParam);
            return(KeyPair.Create(gen.GenerateKeyPair()));
        }
예제 #6
0
        // TODO: We are not using key containers properly, this code is not secure.
        public static AsymmetricCipherKeyPair GenerateThaliAcceptablePublicPrivateKeyPair()
        {
            var keyGenerationParameters = new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), KeySizeInBits);
            var rsaKeyPairGenerator     = new RsaKeyPairGenerator();

            rsaKeyPairGenerator.Init(keyGenerationParameters);
            var keyPair = rsaKeyPairGenerator.GenerateKeyPair();

            return(keyPair);
        }
예제 #7
0
    public static AsymmetricCipherKeyPair GenerateRandomKeys(int keySize = 256)
    {
        ECKeyPairGenerator      gen          = new ECKeyPairGenerator();
        SecureRandom            secureRandom = new SecureRandom();
        KeyGenerationParameters keyGenParam  =
            new KeyGenerationParameters(secureRandom, keySize);

        gen.Init(keyGenParam);
        return(gen.GenerateKeyPair());
    }
예제 #8
0
        private AsymmetricCipherKeyPair GetKeyPair()
        {
            var randomGenerator         = new VmpcRandomGenerator();
            var secureRandom            = new SecureRandom(randomGenerator);
            var keyGenerationParameters = new KeyGenerationParameters(secureRandom, 2048);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            return(keyPairGenerator.GenerateKeyPair());
        }
        private static AsymmetricCipherKeyPair GenerateRsaKeyPair(SecureRandom random, int strength)
        {
            var keyGenerationParameters = new KeyGenerationParameters(random, strength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            var subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            return(subjectKeyPair);
        }
예제 #10
0
        public static X509Certificate2 CreateSelfSignedCertificate(string subjectName, string issuerName, AsymmetricKeyParameter issuerPrivKey)
        {
            const int keyStrength = 2048;

            // Generating Random Numbers
            CryptoApiRandomGenerator randomGenerator  = new CryptoApiRandomGenerator();
            SecureRandom             random           = new SecureRandom(randomGenerator);
            ISignatureFactory        signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", issuerPrivKey, random);

            // The Certificate Generator
            X509V3CertificateGenerator certificateGenerator = new X509V3CertificateGenerator();

            certificateGenerator.AddExtension(X509Extensions.ExtendedKeyUsage.Id, true, new ExtendedKeyUsage(KeyPurposeID.IdKPServerAuth));

            // Serial Number
            BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Issuer and Subject Name
            X509Name subjectDN = new X509Name("CN=" + subjectName);
            X509Name issuerDN  = new X509Name("CN=" + issuerName);

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            DateTime notBefore = DateTime.UtcNow.Date;
            DateTime notAfter  = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            AsymmetricCipherKeyPair subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // selfsign certificate
            Org.BouncyCastle.X509.X509Certificate certificate = certificateGenerator.Generate(signatureFactory);
            //var dotNetPrivateKey = ToDotNetKey((RsaPrivateCrtKeyParameters)subjectKeyPair.Private);

            // merge into X509Certificate2
            X509Certificate2 x509 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate))
            {
                PrivateKey   = DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)subjectKeyPair.Private),
                FriendlyName = subjectName
            };

            return(x509);
        }
예제 #11
0
        /// <summary>
        /// gen ca cert
        /// </summary>
        /// <param name="subjectName"></param>
        /// <param name="keyStrength"></param>
        /// <returns>bouncy private, dotnet public</returns>
        /// <remarks>
        /// Many thanks to this stackoverflow post:
        /// https://stackoverflow.com/a/22237794
        /// </remarks>
        private (AsymmetricKeyParameter, X509Certificate2) GenerateCACertificate(string subjectName, int keyStrength, TimeSpan lifespan)
        {
            // Generating Random Numbers
            var random = _rand;

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            certificateGenerator.SetSerialNumber(GenerateSerial());

            // Issuer and Subject Name
            var subjectDN = new X509Name(subjectName);
            var issuerDN  = subjectDN;

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            //for good measure let's include key usage
            certificateGenerator.AddExtension("2.5.29.15",
                                              false,
                                              new X509KeyUsage(X509KeyUsage.KeyCertSign | X509KeyUsage.DigitalSignature | X509KeyUsage.CrlSign));

            //set validity
            AssignLife(certificateGenerator, lifespan);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            var issuerKeyPair = subjectKeyPair;

            // selfsign certificate
            var signatureFactory = new Asn1SignatureFactory(SignatureAlg, issuerKeyPair.Private, random);
            var certificate      = certificateGenerator.Generate(signatureFactory);
            //var x509 = new X509Certificate2(certificate.GetEncoded(), (string)null);

            var cerr    = DotNetUtilities.ToX509Certificate(certificate);
            var buf     = cerr.Export(X509ContentType.Cert); //<-- .Cert is the magic option for Public Only export
            var pubonly = new X509Certificate2(buf);

            if (pubonly.HasPrivateKey)
            {
                throw new InvalidOperationException("wasn't expecting a privkey");  //never happens.
            }

            return(issuerKeyPair.Private, pubonly);
        }
예제 #12
0
        public static byte[] toto(string subjectName, string issuerName, AsymmetricKeyParameter issuerPrivKey, int keyStrength = 2048)
        {
            // Generating Random Numbers
            var randomGenerator = new CryptoApiRandomGenerator();
            var random          = new SecureRandom(randomGenerator);

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            const string signatureAlgorithm = "SHA1WithRSA";

            certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            var subjectDN = new X509Name(subjectName);
            var issuerDN  = new X509Name(issuerName);

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            var notBefore = DateTime.UtcNow.Date;
            var notAfter  = notBefore.AddDays(5);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            var issuerKeyPair = subjectKeyPair;

            // selfsign certificate
            var certificate = certificateGenerator.Generate(subjectKeyPair.Private, random);

            // correcponding private key
            PrivateKeyInfo info = PrivateKeyInfoFactory.CreatePrivateKeyInfo(subjectKeyPair.Private);


            return(certificate.GetEncoded());
        }
예제 #13
0
        public static AsymmetricKeyParameter GenerateCACertificate(string subjectName, int keyStrength = 2048)
        {
            // Generating Random Numbers
            var randomGenerator = new CryptoApiRandomGenerator();
            var random          = new SecureRandom(randomGenerator);

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            const string signatureAlgorithm = "SHA256WithRSA";

            certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            var subjectDN = new X509Name(subjectName);
            var issuerDN  = subjectDN;

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            var notBefore = DateTime.UtcNow.Date;
            var notAfter  = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            var issuerKeyPair = subjectKeyPair;

            // selfsign certificate
            var certificate = certificateGenerator.Generate(issuerKeyPair.Private, random);
            var x509        = new System.Security.Cryptography.X509Certificates.X509Certificate2(certificate.GetEncoded());

            // Add CA certificate to Root store
            addCertToStore(cert, StoreName.Root, StoreLocation.CurrentUser);

            return(issuerKeyPair.Private);
        }
예제 #14
0
        private static X509Certificate2 GenerateCACertificate(string subjectName, ref AsymmetricKeyParameter asymmetricKeyParameter)
        {
            const int keyStrength = 2048;

            // Generating Random Numbers
            var randomGenerator = new CryptoApiRandomGenerator();
            var random          = new SecureRandom(randomGenerator);

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(int.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            const string signatureAlgorithm = "SHA256WithRSA";

            certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            var subjectDN = new X509Name(subjectName);
            var issuerDN  = subjectDN;

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            var notBefore = DateTime.UtcNow.Date;
            var notAfter  = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            var asymmetricCipherKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(asymmetricCipherKeyPair.Public);

            // Generating the Certificate
            var issuerKeyPair = asymmetricCipherKeyPair;

            // self-sign certificate
            var certificate = certificateGenerator.Generate(issuerKeyPair.Private, random);
            var x509        = new X509Certificate2(certificate.GetEncoded());

            asymmetricKeyParameter = issuerKeyPair.Private;

            return(x509);
        }
예제 #15
0
        public X509Certificate GenerateCACertificate(string subjectName, ref AsymmetricKeyParameter CaPrivateKey)
        {
            const int keyStrength = 2048;

            // Generating Random Numbers
            SecureRandom random = new SecureRandom();

            // The Certificate Generator
            X509V3CertificateGenerator certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            const string signatureAlgorithm = "SHA256WithRSA";

            certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            X509Name subjectDN = new X509Name(subjectName);
            X509Name issuerDN  = subjectDN;

            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            DateTime notBefore = DateTime.UtcNow.Date;
            DateTime notAfter  = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            KeyGenerationParameters keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            RsaKeyPairGenerator     keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            AsymmetricCipherKeyPair issuerKeyPair = subjectKeyPair;

            // Selfsign certificate
            Org.BouncyCastle.X509.X509Certificate certificate = certificateGenerator.Generate(issuerKeyPair.Private, random);
            X509Certificate2 x509 = new X509Certificate2(certificate.GetEncoded());

            CaPrivateKey = issuerKeyPair.Private;

            return(certificate);
        }
예제 #16
0
        public static AsymmetricCipherKeyPair GenerateKeyPair()
        {
            var keypairgen = new RsaKeyPairGenerator();
            var parameters = new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024);

            keypairgen.Init(parameters);

            var keypair = keypairgen.GenerateKeyPair();

            return(keypair);
        }
예제 #17
0
 public virtual void Init(KeyGenerationParameters parameters)
 {
     if (parameters is RsaKeyGenerationParameters)
     {
         this.parameters = (RsaKeyGenerationParameters)parameters;
     }
     else
     {
         this.parameters = new RsaKeyGenerationParameters(DefaultPublicExponent, parameters.Random, parameters.Strength, 100);
     }
 }
예제 #18
0
        public static AsymmetricCipherKeyPair GenerateKeyPair()
        {
            SecureRandom secureRandom = new SecureRandom(new CryptoApiRandomGenerator());

            KeyGenerationParameters keyGenerationParameters = new KeyGenerationParameters(secureRandom, 2048);
            RsaKeyPairGenerator     rsaKeyPairGenerator     = new RsaKeyPairGenerator();

            rsaKeyPairGenerator.Init(keyGenerationParameters);

            return(rsaKeyPairGenerator.GenerateKeyPair());
        }
예제 #19
0
        public X509Certificate2 BuildX509()
        {
            // Generating Random Numbers
            var randomGenerator = new CryptoApiRandomGenerator();
            var random          = new SecureRandom(randomGenerator);

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(long.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            certificateGenerator.SetSignatureAlgorithm("SHA512WithRSA");

            // Issuer and Subject Name
            certificateGenerator.SetIssuerDN(new X509Name(_issuerName ?? _subjectName));
            certificateGenerator.SetSubjectDN(new X509Name(_subjectName));

            // Authority Key Identifier
            if (_issuer != null)
            {
                var authorityKeyIdentifier = new AuthorityKeyIdentifierStructure(DotNetUtilities.FromX509Certificate(_issuer));
                certificateGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier.Id, false, authorityKeyIdentifier);
            }

            // Basic Constraints - certificate is allowed to be used as intermediate.
            certificateGenerator.AddExtension(X509Extensions.BasicConstraints.Id, true, new BasicConstraints(_intermediate));

            // Valid For
            certificateGenerator.SetNotBefore(_notBefore ?? DateTime.UtcNow.Date);
            certificateGenerator.SetNotAfter(_notAfter ?? DateTime.UtcNow.Date.AddYears(2));

            // Subject Public Key
            var keyGenerationParameters = new KeyGenerationParameters(random, _keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);

            var subjectKeyPair = keyPairGenerator.GenerateKeyPair();
            var issuerKeyPair  = _issuerPrivateKey == null
                ? subjectKeyPair
                : DotNetUtilities.GetKeyPair(_issuerPrivateKey);

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // selfsign certificate
            var certificate = certificateGenerator.Generate(issuerKeyPair.Private, random);

            //return new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
            return(ConvertBouncyCert(certificate, subjectKeyPair));
        }
예제 #20
0
        /// <summary>
        /// Used a deterministic key generation algorithm to create an ECC key from the seed provided
        /// </summary>
        /// <param name="seed">The seed</param>
        /// <returns>The ECC key pair</returns>
        private static AsymmetricCipherKeyPair DeriveEccKey(byte[] seed)
        {
            SecureRandom            random = GetDrbg(seed, SeedUsage.KeyGeneration);
            KeyGenerationParameters keyGenerationParameters = new KeyGenerationParameters(random, rKeyStrength);
            var keyPairGenerator = new ECKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            var keyPair = keyPairGenerator.GenerateKeyPair();

            return(keyPair);
        }
예제 #21
0
        public static void GenerateEcdsaKeyPair(int bits, out PrivKey privateKey, out PubKey publicKey)
        {
            KeyGenerationParameters param = new KeyGenerationParameters(NewSecureRandom(), bits);
            ECKeyPairGenerator      gen   = new ECKeyPairGenerator("ECDSA");

            gen.Init(param);
            AsymmetricCipherKeyPair pair = gen.GenerateKeyPair();

            privateKey = new PrivKey(pair);
            publicKey  = new PubKey(pair.Public);
        }
예제 #22
0
        public static void GenerateSymKey(int keyLength)
        {
            var sec = new SecureRandom();

            sec.SetSeed(DateTime.Now.ToBinary());
            var keyParam     = new KeyGenerationParameters(sec, keyLength);
            var keyGenerator = new CipherKeyGenerator();

            keyGenerator.Init(keyParam);
            symKey = keyGenerator.GenerateKey();
        }
예제 #23
0
        public static AsymmetricCipherKeyPair GenerateRandomKeys()
        {
            int sizeOfKey = 256;
            ECKeyPairGenerator      keyPairGenerator = new ECKeyPairGenerator();
            SecureRandom            secureRandom     = new SecureRandom();
            KeyGenerationParameters keyGenParam      =
                new KeyGenerationParameters(secureRandom, sizeOfKey);

            keyPairGenerator.Init(keyGenParam);
            return(keyPairGenerator.GenerateKeyPair());
        }
예제 #24
0
 public static EthECKey GenerateKey()
 {
   var gen = new ECKeyPairGenerator("EC");
   var keyGenParam = new KeyGenerationParameters(SecureRandom, 256);
   gen.Init(keyGenParam);
   var keyPair = gen.GenerateKeyPair();
   var privateBytes = ((ECPrivateKeyParameters)keyPair.Private).D.ToByteArray();
   if (privateBytes.Length != 32)
     return GenerateKey();
   return new EthECKey(privateBytes, true);
 }
예제 #25
0
        /// <summary>
        /// Generates an RSA key pair.
        /// Source: https://stackoverflow.com/questions/23056347/creating-rsa-public-private-key-pair-with-bouncy-castle-or-net-rsacryptoservice
        /// </summary>
        private static AsymmetricCipherKeyPair GenerateRSAKeyPair(int keySize)
        {
            CryptoApiRandomGenerator randomGenerator         = new CryptoApiRandomGenerator();
            SecureRandom             secureRandom            = new SecureRandom(randomGenerator);
            KeyGenerationParameters  keyGenerationParameters = new KeyGenerationParameters(secureRandom, keySize);

            RsaKeyPairGenerator keyPairGenerator = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            return(keyPairGenerator.GenerateKeyPair());
        }
예제 #26
0
        private AsymmetricCipherKeyPair setPublicKey(X509V3CertificateGenerator generator, SecureRandom random)
        {
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            var keyPair = keyPairGenerator.GenerateKeyPair();

            generator.SetPublicKey(keyPair.Public);
            return(keyPair);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="KeyGenerator"/> class
        /// with the specified key size and seed.
        /// </summary>
        /// <remarks>Following key sizes are supported:
        /// - 192
        /// - 224
        /// - 239
        /// - 256 (default)
        /// - 384
        /// - 521</remarks>
        /// <param name="keySize">The key size.</param>
        /// <param name="seed">The seed.</param>
        public KeyGenerator(int keySize, byte[] seed)
        {
            var secureRandom = SecureRandom.GetInstance("SHA256PRNG");

            secureRandom.SetSeed(seed);

            var keyParams = new KeyGenerationParameters(secureRandom, keySize);

            keyGenerator = new ECKeyPairGenerator();
            keyGenerator.Init(keyParams);
        }
예제 #28
0
        /// <summary>
        /// Generates an asymmetric key pair.
        /// </summary>
        /// <param name="strength">Key size</param>
        /// <returns></returns>
        public static AsymmetricCipherKeyPair GenerateAsymmetricKeyPair(int strength = 256)
        {
            ECKeyPairGenerator      keyPairGenerator = new ECKeyPairGenerator();
            SecureRandom            randomGenerator  = new SecureRandom();
            KeyGenerationParameters parameters       = new KeyGenerationParameters(
                randomGenerator, strength);

            keyPairGenerator.Init(parameters);

            return(keyPairGenerator.GenerateKeyPair());
        }
예제 #29
0
        /// <summary>	Generates a ca certificate. </summary>
        /// <param name="subjectName">  Name of the subject. </param>
        /// <param name="caPrivateKey">	[in,out] The ca private key. </param>
        /// <param name="validTill">    The valid till Date/Time. </param>
        /// <param name="keyStrength">  (Optional) The key strength. </param>
        /// <returns>	The ca certificate. </returns>
        public static X509Certificate2 GenerateCaCertificate(string subjectName,
                                                             out AsymmetricKeyParameter caPrivateKey,
                                                             DateTime validTill, int keyStrength = 2048)
        {
            // Generating Random Numbers
            var randomGenerator = new CryptoApiRandomGenerator();
            var random          = new SecureRandom(randomGenerator);

            // The Certificate Generator
            var certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            var serialNumber =
                BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(long.MaxValue), random);

            certificateGenerator.SetSerialNumber(serialNumber);

            // Issuer and Subject Name
            var subjectDn = new X509Name(subjectName);
            var issuerDn  = subjectDn;

            certificateGenerator.SetIssuerDN(issuerDn);
            certificateGenerator.SetSubjectDN(subjectDn);

            // Valid For
            var notBefore = DateTime.UtcNow.Date;
            var notAfter  = validTill;

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            var subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            var issuerKeyPair = subjectKeyPair;

            // Signature Algorithm
            ISignatureFactory signatureFactory = new Asn1SignatureFactory(SignatureAlgorithm, issuerKeyPair.Private);

            // selfsign certificate
            var certificate = certificateGenerator.Generate(signatureFactory);
            var x509        = new X509Certificate2(certificate.GetEncoded());

            caPrivateKey = issuerKeyPair.Private;

            return(x509);
        }
예제 #30
0
        public AsymmetricCipherKeyPair GenerateKeyPair(int keyStrength = 2048)
        {
            var randomGenerator = new CryptoApiRandomGenerator();
            var secureRandom    = new SecureRandom(randomGenerator);

            var keyGenerationParameters = new KeyGenerationParameters(secureRandom, keyStrength);
            var keyPairGenerator        = new RsaKeyPairGenerator();

            keyPairGenerator.Init(keyGenerationParameters);
            return(keyPairGenerator.GenerateKeyPair());
        }
예제 #31
0
		/**
		* initialise the key generator - if strength is set to zero
		* the key generated will be 64 bits in size, otherwise
		* strength can be 64 or 56 bits (if you don't count the parity bits).
		*
		* @param param the parameters to be used for key generation
		*/
		protected override void engineInit(
			KeyGenerationParameters parameters)
		{
			base.engineInit(parameters);

			if (strength == 0 || strength == (56 / 8))
			{
				strength = DesParameters.DesKeyLength;
			}
			else if (strength != DesParameters.DesKeyLength)
			{
				throw new ArgumentException(
					"DES key must be " + (DesParameters.DesKeyLength * 8) + " bits long.");
			}
		}
        public void Init(
            KeyGenerationParameters parameters)
        {
            if (parameters is Gost3410KeyGenerationParameters)
            {
                this.param = (Gost3410KeyGenerationParameters) parameters;
            }
            else
            {
                Gost3410KeyGenerationParameters kgp = new Gost3410KeyGenerationParameters(
                    parameters.Random,
                    CryptoProObjectIdentifiers.GostR3410x94CryptoProA);

                if (parameters.Strength != kgp.Parameters.P.BitLength - 1)
                {
                    // TODO Should we complain?
                }

                this.param = kgp;
            }
        }
예제 #33
0
        /**
        * initialise the key generator - if strength is set to zero
        * the key Generated will be 192 bits in size, otherwise
        * strength can be 128 or 192 (or 112 or 168 if you don't count
        * parity bits), depending on whether you wish to do 2-key or 3-key
        * triple DES.
        *
        * @param param the parameters to be used for key generation
        */
        protected override void engineInit(
			KeyGenerationParameters parameters)
        {
            base.engineInit(parameters);

            if (strength == 0 || strength == (168 / 8))
            {
                strength = DesEdeParameters.DesEdeKeyLength;
            }
            else if (strength == (112 / 8))
            {
                strength = 2 * DesEdeParameters.DesKeyLength;
            }
            else if (strength != DesEdeParameters.DesEdeKeyLength
                && strength != (2 * DesEdeParameters.DesKeyLength))
            {
                throw new ArgumentException("DESede key must be "
                    + (DesEdeParameters.DesEdeKeyLength * 8) + " or "
                    + (2 * 8 * DesEdeParameters.DesKeyLength)
                    + " bits long.");
            }
        }
		public virtual void Init(
			KeyGenerationParameters parameters)
        {
            this.param = (DHKeyGenerationParameters)parameters;
        }
 public void Init(
     KeyGenerationParameters parameters)
 {
     this.param = (ElGamalKeyGenerationParameters) parameters;
 }