Esempio n. 1
0
        public static AsymmetricCipherKeyPair RsaKeyPair(this RsaKeyLength size)
        {
            RsaKeyPairGenerator        gen        = new RsaKeyPairGenerator();
            RsaKeyGenerationParameters parameters = new RsaKeyGenerationParameters(new BigInteger("10001", 16), SecureRandom.GetInstance("SHA1PRNG"), (int)size, 80);

            gen.Init(parameters);
            return(gen.GenerateKeyPair());
        }
Esempio n. 2
0
        /// <summary>
        /// Create a Vault in the specified database by the specified
        /// name using the specified password to create it if it
        /// doesn't exist
        /// </summary>
        /// <param name="database"></param>
        /// <param name="name"></param>
        /// <param name="password"></param>
        /// <param name="rsaKeyLength"></param>
        /// <returns></returns>
        public static Vault Create(Database database, string name, string password, RsaKeyLength rsaKeyLength = RsaKeyLength._1024)
        {
            Vault result = Vault.OneWhere(c => c.Name == name, database);

            if (result == null)
            {
                result      = new Vault();
                result.Name = name;
                result.Save(database);
                VaultKey key = result.VaultKeysByVaultId.JustOne(database, false);
                AsymmetricCipherKeyPair keys = RsaKeyGen.GenerateKeyPair(rsaKeyLength);
                key.RsaKey   = keys.ToPem();
                key.Password = password.EncryptWithPublicKey(keys);
                key.Save(database);
            }

            return(result);
        }
Esempio n. 3
0
        public static Generator GenPki(string cn, string org, string orgun, string city, string state, string country,
                                       SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.SHA256,
                                       RsaKeyLength rsaKeyLength             = RsaKeyLength.Length2048Bits)
        {
            Generator generator = new Generator();


            // Determines Signature Algorithm
            string signatureAlgorithmStr;

            switch (signatureAlgorithm)
            {
            case SignatureAlgorithm.SHA1:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id;
                break;

            case SignatureAlgorithm.SHA256:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id;
                break;

            case SignatureAlgorithm.SHA512:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha512WithRsaEncryption.Id;
                break;

            default:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id;
                break;
            }

            // Cert Info


            IDictionary attrs = new Hashtable();

            attrs.Add(X509Name.CN, cn);
            attrs.Add(X509Name.O, org);
            attrs.Add(X509Name.OU, orgun);
            attrs.Add(X509Name.L, city);
            attrs.Add(X509Name.ST, state);
            attrs.Add(X509Name.C, country);

            X509Name subject = new X509Name(new ArrayList(attrs.Keys), attrs);


            //Key Generator
            //ECKeyPairGenerator ecKeyPairGenerator = new ECKeyPairGenerator();
            //ecKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), (int)rsaKeyLength));
            //AsymmetricCipherKeyPair pair = ecKeyPairGenerator.GenerateKeyPair();

            X9ECParameters     curve              = ECNamedCurveTable.GetByName("secp256k1");
            ECDomainParameters ecParam            = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());
            ECKeyPairGenerator ecKeyPairGenerator = new ECKeyPairGenerator();

            ecKeyPairGenerator.Init(new ECKeyGenerationParameters(ecParam, new SecureRandom()));
            AsymmetricCipherKeyPair pair = ecKeyPairGenerator.GenerateKeyPair();

            //RsaKeyPairGenerator rsaKeyPairGenerator = new RsaKeyPairGenerator();
            //rsaKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), (int)rsaKeyLength));
            //AsymmetricCipherKeyPair pair = rsaKeyPairGenerator.GenerateKeyPair();

            //CSR Generator

            //Asn1SignatureFactory signatureFactory = new Asn1SignatureFactory(signatureAlgorithmStr, pair.Private);
            Asn1SignatureFactory signatureFactory = new Asn1SignatureFactory("SHA256WITHECDSA", pair.Private);

            Pkcs10CertificationRequest csr = new Pkcs10CertificationRequest(signatureFactory, subject, pair.Public, null, pair.Private);



            /***************************
            ****************************
            **Convert to PEM and Output*
            ****************************
            ***************************/

            //Private Key

            StringBuilder privateKeyStrBuilder = new StringBuilder();
            PemWriter     privateKeyPemWriter  = new PemWriter(new StringWriter(privateKeyStrBuilder));

            privateKeyPemWriter.WriteObject(pair.Private);
            privateKeyPemWriter.Writer.Flush();

            pkey = privateKeyStrBuilder.ToString();

            //Public Key

            StringBuilder publicKeyStrBuilder = new StringBuilder();
            PemWriter     publicKeyPemWriter  = new PemWriter(new StringWriter(publicKeyStrBuilder));

            publicKeyPemWriter.WriteObject(pair.Private);
            publicKeyPemWriter.Writer.Flush();

            generator.PublicKey = publicKeyStrBuilder.ToString();


            //CSR

            StringBuilder csrStrBuilder = new StringBuilder();
            PemWriter     csrPemWriter  = new PemWriter(new StringWriter(csrStrBuilder));

            csrPemWriter.WriteObject(csr);
            csrPemWriter.Writer.Flush();

            csR = csrStrBuilder.ToString();

            return(generator);
        }
Esempio n. 4
0
 public static AsymmetricCipherKeyPair GenerateKeyPair(RsaKeyLength size)
 {
     return(RsaKeyGen.GenerateKeyPair(size));
 }
Esempio n. 5
0
        void IPKIEncordeService.GenerateGemFileForKPI(
            string commonName,
            string organization,
            string organizationalUnit,
            string locality,
            string state,
            string countryIso2Characters,
            string emailAddress,
            SignatureAlgorithm signatureAlgorithm,
            RsaKeyLength rsaKeyLength)
        {
            countryIso2Characters = "US";
            emailAddress          = "";
            signatureAlgorithm    = SignatureAlgorithm.SHA256;
            rsaKeyLength          = RsaKeyLength.Length2048Bits;

            #region Determine Signature Algorithm

            string signatureAlgorithmStr;
            switch (signatureAlgorithm)
            {
            case SignatureAlgorithm.SHA1:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id;
                break;

            case SignatureAlgorithm.SHA256:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id;
                break;

            case SignatureAlgorithm.SHA512:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha512WithRsaEncryption.Id;
                break;

            default:
                signatureAlgorithmStr = PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id;
                break;
            }

            #endregion

            #region Cert Info

            IDictionary attrs = new Hashtable();

            attrs.Add(X509Name.CN, commonName);
            attrs.Add(X509Name.O, organization);
            attrs.Add(X509Name.OU, organizationalUnit);
            attrs.Add(X509Name.L, locality);
            attrs.Add(X509Name.ST, state);
            attrs.Add(X509Name.C, countryIso2Characters);
            attrs.Add(X509Name.EmailAddress, emailAddress);

            X509Name subject = new X509Name(new ArrayList(attrs.Keys), attrs);

            #endregion

            #region Key Generator

            RsaKeyPairGenerator rsaKeyPairGenerator = new RsaKeyPairGenerator();
            rsaKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), (int)rsaKeyLength));
            AsymmetricCipherKeyPair pair = rsaKeyPairGenerator.GenerateKeyPair();

            #endregion

            #region CSR Generator

            string path_project_bin = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location.Substring(0, Assembly.GetEntryAssembly().Location.IndexOf("bin\\")));

            Asn1SignatureFactory signatureFactory = new Asn1SignatureFactory(signatureAlgorithmStr, pair.Private);

            Pkcs10CertificationRequest csr = new Pkcs10CertificationRequest(signatureFactory, subject, pair.Public, null, pair.Private);

            #endregion

            #region Convert to PEM and Output

            #region Private Key

            StringBuilder privateKeyStrBuilder = new StringBuilder();
            PemWriter     privateKeyPemWriter  = new PemWriter(new StringWriter(privateKeyStrBuilder));
            privateKeyPemWriter.WriteObject(pair.Private);
            privateKeyPemWriter.Writer.Flush();
            string        pathToNewFolder = System.IO.Path.Combine(path_project_bin + "/bin/keys/users/", "2");
            DirectoryInfo directory       = Directory.CreateDirectory(pathToNewFolder);
            File.WriteAllText(path_project_bin + "/bin/keys/users/2/private.pem", privateKeyStrBuilder.ToString());

            PrivateKey = privateKeyStrBuilder.ToString();

            #endregion Private Key

            #region Public Key

            StringBuilder publicKeyStrBuilder = new StringBuilder();
            PemWriter     publicKeyPemWriter  = new PemWriter(new StringWriter(publicKeyStrBuilder));
            publicKeyPemWriter.WriteObject(pair.Public);
            publicKeyPemWriter.Writer.Flush();

            File.WriteAllText(path_project_bin + "/bin/keys/users/2/public.pem", publicKeyStrBuilder.ToString());

            PublicKey = publicKeyStrBuilder.ToString();

            #endregion Public Key

            #region CSR


            StringBuilder csrStrBuilder = new StringBuilder();
            PemWriter     csrPemWriter  = new PemWriter(new StringWriter(csrStrBuilder));
            csrPemWriter.WriteObject(csr);
            csrPemWriter.Writer.Flush();
            File.WriteAllText(path_project_bin + "/bin/keys/users/2/publicCert.pem", csrStrBuilder.ToString());

            Csr = csrStrBuilder.ToString();

            #endregion CSR

            #endregion
        }