示例#1
0
        public void ParseRsaPrivateKeyPkcs1_parses_openssl_generated_key_pem_file()
        {
            var pem = GetFixture("openssl-rsa-private-key", "pem");
            var rsa = Pem.ParseRsaPrivateKeyPkcs1(pem);

            VerifyRsaKey(rsa);
        }
示例#2
0
        public static ICryptographicKey Load(string pubKeyContent)
        {
            CryptographicPublicKeyBlobType blobType;

            var block = new Pem(pubKeyContent);

            if (block.Type == null) //not pem encoded
            {
                //trying to guess blob type
                blobType = pubKeyContent.StartsWith("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A")
                    ? CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo
                    : CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey;
            }
            else if ("PUBLIC KEY".Equals(block.Type))
            {
                blobType = CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo;
            }
            else if ("RSA PUBLIC KEY".Equals(block.Type))
            {
                blobType = CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey;
            }
            else
            {
                throw new Exception(string.Format("PublicKey.Load(): Unsupported type in PEM block '{0}'", block.Type));
            }

            return(WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1)
                   .ImportPublicKey(block.Decoded, blobType));
        }
示例#3
0
        public bool TryReadNext(out byte[] der)
        {
            if (isEof)
            {
                der = null;

                return(false);
            }

            var sb = new StringBuilder();

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line == string.Empty)
                {
                    der = Pem.Decode(sb.ToString());

                    return(true);
                }
                else
                {
                    sb.AppendLine(line);
                }
            }

            isEof = true;

            der = Pem.Decode(sb.ToString());

            return(true);
        }
        public static ICryptographicKey Load(string privKeyContent)
        {
            CryptographicPrivateKeyBlobType blobType;

            var block = new Pem(privKeyContent);

            if (block.Type == null) //not pem encoded
            {
                throw new Exception("PrivateKey.Load(): Only PEM encoded blocks are supported, but was given not PEM encoded.");
            }
            if ("PRIVATE KEY".Equals(block.Type))
            {
                blobType = CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo;
            }
            else if ("RSA PRIVATE KEY".Equals(block.Type))
            {
                blobType = CryptographicPrivateKeyBlobType.Pkcs1RsaPrivateKey;
            }
            else
            {
                throw new Exception(string.Format("PrivateKey.Load(): Unsupported type in PEM block '{0}'", block.Type));
            }

            return(WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1)
                   .ImportKeyPair(block.Decoded, blobType));
        }
        /// <summary>
        /// Load the <see cref="JudgeAuthenticationOptions.JudgePublicKey"/> from the specified PEM file containing a
        /// RSA public key.
        /// </summary>
        /// <param name="options">The <see cref="JudgeAuthenticationOptions"/> object.</param>
        /// <param name="file">Path to the PEM file containing public key.</param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="options"/> is null
        ///     or
        ///     <paramref name="file"/> is null.
        /// </exception>
        public static void LoadJudgePublicKeyFromCertificate(this JudgeAuthenticationOptions options, string file)
        {
            Contract.NotNull(options, nameof(options));
            Contract.NotNull(file, nameof(file));

            options.JudgePublicKey?.Dispose();
            options.JudgePublicKey = Pem.ReadRsaKey(file);
        }
示例#6
0
        private SecurityKey GetJwtIssuerSigningKey()
        {
            var configSection = GetJudgeConfig();
            var keyFileName   = configSection.GetValue <string>("JwtSigningKey");
            var key           = Pem.ReadRsaKey(keyFileName);

            return(new RsaSecurityKey(key));
        }
示例#7
0
 private void GenerateCertificate(string name, string ip)
 {
     Pem.WriteCertificate(_option.DataDir, name, ip);
     Console.WriteLine(
         $"New generated certificate file with \n" +
         $"Name : {name} \n" +
         $"IP : {ip} \n" +
         $"Stored in {_option.CertificateDir}");
 }
        public void NewNonPemEncoded()
        {
            //when
            var test = new Pem(RAW);

            Debug.WriteLine(test.Decoded);
            Debug.WriteLine(test.Type);

            Debug.WriteLine(Arrays.Dump(test.Decoded));

            //then
            Assert.IsNull(test.Type);
            CollectionAssert.AreEqual(new byte[] { 48, 130, 1, 34, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 130, 1, 15, 0, 48, 130, 1, 10, 2, 130, 1, 1, 0, 168, 86, 111, 210, 151, 154, 254, 57, 249, 50, 142, 42, 17, 73, 146, 182, 232, 101, 186, 91, 40, 242, 125, 98, 157, 118, 196, 162, 215, 127, 205, 58, 208, 167, 210, 180, 68, 173, 33, 127, 187, 116, 43, 128, 99, 41, 88, 90, 138, 162, 26, 155, 139, 85, 85, 11, 228, 153, 135, 129, 121, 138, 245, 50, 105, 206, 255, 67, 125, 237, 211, 1, 207, 254, 223, 154, 252, 175, 210, 24, 7, 104, 23, 80, 230, 100, 121, 187, 114, 211, 148, 122, 60, 182, 52, 68, 239, 225, 179, 102, 97, 172, 234, 51, 28, 202, 62, 199, 109, 122, 27, 12, 244, 9, 102, 154, 141, 203, 162, 99, 150, 32, 213, 95, 21, 188, 157, 98, 67, 122, 220, 70, 6, 90, 166, 78, 61, 68, 213, 250, 246, 68, 43, 25, 46, 183, 131, 56, 244, 131, 33, 231, 70, 214, 234, 115, 245, 26, 218, 74, 27, 8, 15, 55, 158, 124, 231, 10, 137, 183, 0, 104, 167, 158, 84, 141, 235, 144, 5, 60, 254, 99, 154, 184, 180, 151, 191, 126, 225, 150, 77, 33, 234, 196, 173, 37, 189, 234, 101, 5, 242, 57, 73, 21, 146, 53, 200, 146, 27, 205, 187, 251, 222, 210, 254, 203, 136, 180, 248, 27, 243, 177, 96, 108, 233, 57, 7, 2, 158, 41, 138, 118, 136, 243, 52, 254, 134, 181, 80, 218, 48, 248, 126, 66, 68, 137, 19, 125, 148, 10, 139, 61, 71, 124, 8, 217, 2, 3, 1, 0, 1 }, test.Decoded);
        }
        public void NewPem()
        {
            //when
            var test = new Pem(PEM_ENCODED);

            Debug.WriteLine(test.Decoded);
            Debug.WriteLine(test.Type);

            Debug.WriteLine(Arrays.Dump(test.Decoded));

            //then
            Assert.AreEqual("CERTIFICATE", test.Type);
            CollectionAssert.AreEqual(new byte[] { 48, 130, 1, 141, 48, 129, 247, 2, 4, 114, 25, 55, 182, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 5, 5, 0, 48, 14, 49, 12, 48, 10, 6, 3, 85, 4, 3, 19, 3, 106, 119, 116, 48, 30, 23, 13, 49, 52, 48, 49, 48, 56, 49, 51, 52, 52, 53, 49, 90, 23, 13, 49, 53, 48, 50, 48, 55, 50, 48, 48, 48, 48, 48, 90, 48, 14, 49, 12, 48, 10, 6, 3, 85, 4, 3, 19, 3, 106, 119, 116, 48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 188, 125, 236, 100, 135, 8, 105, 30, 190, 245, 18, 177, 115, 44, 112, 215, 126, 211, 195, 35, 59, 192, 91, 146, 188, 243, 148, 59, 168, 144, 156, 213, 189, 4, 41, 173, 33, 5, 96, 35, 181, 162, 58, 117, 82, 23, 128, 34, 103, 144, 188, 199, 181, 192, 5, 171, 24, 215, 219, 23, 13, 248, 141, 0, 146, 146, 255, 37, 137, 98, 225, 229, 161, 234, 28, 250, 212, 240, 52, 224, 42, 194, 254, 94, 49, 198, 104, 204, 44, 131, 204, 186, 242, 145, 38, 102, 186, 114, 87, 243, 120, 247, 37, 202, 150, 29, 194, 212, 242, 231, 20, 154, 211, 153, 154, 180, 60, 114, 234, 57, 114, 13, 54, 243, 22, 22, 254, 227, 2, 3, 1, 0, 1, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 5, 5, 0, 3, 129, 129, 0, 37, 192, 9, 227, 50, 180, 101, 146, 212, 29, 23, 113, 133, 7, 99, 123, 69, 239, 237, 243, 216, 162, 193, 59, 129, 93, 26, 165, 179, 201, 94, 123, 161, 83, 85, 199, 225, 114, 133, 65, 3, 88, 91, 44, 99, 193, 241, 82, 142, 8, 64, 203, 38, 106, 149, 247, 22, 130, 93, 18, 76, 229, 241, 38, 113, 95, 17, 180, 144, 47, 81, 1, 231, 18, 163, 245, 237, 109, 104, 199, 126, 243, 137, 133, 94, 69, 77, 190, 19, 119, 194, 152, 94, 220, 70, 207, 175, 211, 61, 244, 20, 75, 137, 207, 204, 72, 96, 42, 156, 148, 82, 56, 242, 29, 134, 168, 53, 233, 214, 102, 60, 158, 36, 8, 111, 37, 46, 103 }, test.Decoded);
        }
示例#10
0
        public static RSAParameters ParseEncryptedPrivateKey(string encryptedPrivateKey, byte[] encryptionKey)
        {
            var decrypted = Util.DecryptAes256(encryptedPrivateKey.DecodeHex(),
                                               encryptionKey,
                                               CipherMode.CBC,
                                               encryptionKey.Take(16).ToArray());

            const string header = "LastPassPrivateKey<";
            const string footer = ">LastPassPrivateKey";

            if (!decrypted.StartsWith(header) || !decrypted.EndsWith(footer))
            {
                throw new InternalErrorException("Failed to decrypt private key");
            }

            var pkcs8 = decrypted.Substring(header.Length,
                                            decrypted.Length - header.Length - footer.Length).DecodeHex();

            return(Pem.ParsePrivateKeyPkcs8(pkcs8));
        }
示例#11
0
        private static void Main(string[] args)
        {
#pragma warning disable 162
            Server server;
            var    logger = new ConsoleLoggerProvider((s, level) => true, true);
            if (IsSslTest)
            {
                server = new Server(Http.Create(HttpMode.Dual),
                                    new SslListener(new TcpConnectionListener(IPAddress.Loopback, 11112),
                                                    new SslServerAuthenticationOptions
                {
                    EnabledSslProtocols = SslProtocols.Tls12,
                    ServerCertificate   =
                        Pem.GetCertificate(
                            "-----BEGIN CERTIFICATE-----MIID8zCCAtugAwIBAgIgdsp/a6adzYJ9SXdO19c9NX+xgW5VufVWrFK/Ddi5d7kwDQYJKoZIhvcNAQEFBQAwgYoxEjAQBgNVBAYTCVdvcmNlc3RlcjEVMBMGA1UECgwMVWx0eiBMaW1pdGVkMRQwEgYDVQQLDAtEZXZlbG9wbWVudDESMBAGA1UEAwwJbG9jYWxob3N0MR8wHQYJKoZIhvcNAQkBFhBsZWdhbEB1bHR6LmNvLnVrMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTgwODE0MTY1OTM4WhcNMjgwODE0MTY1OTM4WjB2MRIwEAYDVQQGEwlXb3JjZXN0ZXIxFTATBgNVBAoMDFVsdHogTGltaXRlZDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDEfMB0GCSqGSIb3DQEJARYQbGVnYWxAdWx0ei5jby51azCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI7zzCylJ4oSXuj1y4MmhRHBS0t5K8kwOQbrzRLFsbRU6vuMU/ZjiDZfNbTgfDvl/USaTxxRERnd+4SpNEOp5lMzjHDHCDtl54F00+7NJiGmA6KTcxS8u0oOnxBmr+cB7gNm/VdFTopq1xaXZ/W+066zllRPtGdPCpBO2irr4mHeCCyoCBwixj+Yrz03V8Ilr0g4gBlz1FqD/2B5bZ6pGiAVivecfT1wJKCBxjZSxLd2xmRtHeFxTUBbpkFiRcTE1PYz34g0EvhdWYRQmmjfy2DQomK3sHPLZj7OOLoyEaLzO+IVv2eN9SIx+JLPyOtuMF1AwVuswDJHODdrPGlqlcMCAwEAAaNYMFYwHQYDVR0OBBYEFJaAdm+WoLHxQBO1GEr5i4jhQ0R3MB8GA1UdIwQYMBaAFJaAdm+WoLHxQBO1GEr5i4jhQ0R3MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQUFAAOCAQEAGdmBS9KmR1iJSRa2lp7ZzWYawnuuMbxG+vsW9VOEpRFzP9697hQWdC3oyf+L8rxAD8dMO87kmZq46A7qxelt2cbdTtQj2ElYZzWr2SA0TrvG7F1SBBNGkAKwdbhXSa17bni1HbYi74EqLg4VHGE+vBl0ZSxe6QGcxsBasQty6K1Fks8Uul4eXcLFn5+dbspLdgfE8HFApXlsGeZ2AgAToztoDWuX90WdJpRmpEHUWnwpuXkrXVbSd4aMwdJ+AZeUPLkanqi/HpZkTFKcZdz5zDxQV8CRqh+dpGTnkF3rA6lWrQWGsOaNAS0DHNYlF6MeSG7x6/kK4aapHSf6dTKtJA==-----END CERTIFICATE-----",
                            "-----BEGIN RSA PRIVATE KEY-----MIIEowIBAAKCAQEAjvPMLKUnihJe6PXLgyaFEcFLS3kryTA5BuvNEsWxtFTq+4xT9mOINl81tOB8O+X9RJpPHFERGd37hKk0Q6nmUzOMcMcIO2XngXTT7s0mIaYDopNzFLy7Sg6fEGav5wHuA2b9V0VOimrXFpdn9b7TrrOWVE+0Z08KkE7aKuviYd4ILKgIHCLGP5ivPTdXwiWvSDiAGXPUWoP/YHltnqkaIBWK95x9PXAkoIHGNlLEt3bGZG0d4XFNQFumQWJFxMTU9jPfiDQS+F1ZhFCaaN/LYNCiYrewc8tmPs44ujIRovM74hW/Z431IjH4ks/I624wXUDBW6zAMkc4N2s8aWqVwwIDAQABAoIBAAh4K55w3IJYK0pcbFslWENLM0r8mgUDTTr6k9MAZn0Q05PlZlYV4zdBddJKbeHd8vRHu4HUexG6w/uXS3LqKSzAbu+BmJxtoa/a/EbM3cJRmSvegODM0RXb/ug/BT3yWyfVcr4NwPpUxns0AONKPoq+YMeMVLES5EUqKXqF24rrwNss81VjKusHCu6ghhNLK8+WOlljqMaWeFJ+rtILaajPEjwtCQhoMU+Z8+pdXwfU2BMvSTx/srEzYDgr8w/1pk9Id08zDje7Dn6gZBN/4NNF66dtMt6/87acRKEFRE0bbLDpY0nX9Pm++EfGZmLApH84XypREnRMddTQgTMTVpkCgYEAxt1rwigGWSdjY6gzJ9b6c0iwTPOvIk/u1F37dTrnfZoyKGlcxAy+tZmt+CvxG0W/J/Y2sYvrXt8ldIrVeAJul+KbtXVmJseZpeIAZ4XCHmb8zJxCffGNtZHqrTKmKwJQKbbzczQImi/WdinVzjIMyQgnipOaKP1B6LmxpQ1W+wsCgYEAuAX80yfu01dOlSDQwiqI1r5mgI3XGfRkQMIkkZZ/Oik05/ODMLSS3DYdmk67uEmP+nf39WLminIV6kYBWAA+SayA81FQ7CZOqK1og5gfRQOrAabMbT7yqa65pBSwriea9rgLuZlQRUOQ/Shq/GU01vO6Ce+VLryR7BqH/8GpwykCgYEAtJnWCSfMTB9HVfQlMSM9pID5C4mrHaA2J8uKWHa8UQc+UhEN3EYu1EHTCrTtbHU1GxexqCCIC0rgeyyynSCoS2vTOUJ7GPDgixPqhhmlp3KkVzX59OLwbVstI0oCOsEJCDlMcu1oeo7DV+C6eV5e2ht7vZA6ysrllnM978Vjnu0CgYAiun6MGu0nVUKvQhIjkoNgg240tI/zhfulfP4Ju60m/L/PRlVry6grhsrvZAxpKvjQ+/L/jDqVxhH8tFlskh8vKC7tvFrZNiGCE7e1ne/IxnhvR1stAsQo4aCHJqBxPWgxR2pvDE/pwmaKYCZQm4jtR/HEDkLJHy0qsZcY3SN8gQKBgEz04YAwWA529u232rEyoI3xOd/VuQbEiXlXrYTldMZVE4cyATP8aNjtJT5s8J2gCRsr9yrFNhk92AX0LWtnESoQg7RPIDHEB90Y+S+mPmV+Il92u8iim3y3kz1QnJ221TgzghaikYCiI1iv16muH4UgjRiq6O5h9iW8zgJwspMU-----END RSA PRIVATE KEY-----"),
                    ApplicationProtocols = new List <SslApplicationProtocol> {
                        SslApplicationProtocol.Http2
                    },
                    ClientCertificateRequired = false
                }), logger
                                    );
            }
            else
            {
                server = new Server(Http.Create(HttpMode.Dual),
                                    new TcpConnectionListener(IPAddress.Any, 11111),
                                    new ConsoleLoggerProvider((s, level) => true, true));
            }
            //        null);

            server.RequestReceived += ServerOnRequestReceived;
            var exceptionLogger = logger.CreateLogger("AppDomain-EX");
            AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
                                                          exceptionLogger.LogError((Exception)eventArgs.ExceptionObject, "Unhandled Exception");
            server.Start();
            Console.ReadLine();
            server.Stop();
#pragma warning restore 162
        }
示例#12
0
        public override void Execute()
        {
            var     obj      = _engine.Evaluate("Aelf.wallet.createNewWallet()");
            string  mnemonic = obj.ReadProperty <string>("mnemonic");
            string  privKey  = obj.ReadProperty <string>("privateKey");
            string  address  = obj.ReadProperty <string>("address");
            JSValue keyPair  = obj.ReadProperty <JSValue>("keyPair");
            string  pubKey   = keyPair.CallFunction <string, string>("getPublic", "hex");

            PrintAccount(address, mnemonic, privKey, pubKey);

            if (!ReadLine.Read("Saving account info to file? (Y/N): ").Equals("y", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            var password = PromptPassword();

            var accountFile = _option.GetPathForAccount(address);

            Pem.WriteKeyPair(accountFile, privKey, pubKey, password);
        }
示例#13
0
        public static (List <Account> Accounts, RSAParameters?PrivateKey) Parse(JObject json, string parentPath = "")
        {
            // The top-level item must be a folder
            var topLevel = GetFolderContent(json);

            if (topLevel == null)
            {
                throw new InternalErrorException("Invalid format: top level folder not found");
            }

            // There's a root folder somewhere at the second level
            var root = FindNamedItem(topLevel, "root");

            if (root == null || !IsFolder(root))
            {
                throw new InternalErrorException("Invalid format: root folder not found");
            }

            // Traverse the root folder recursively and parse all the accounts
            var accounts = new List <Account>();

            if (root["c"] is JArray c)
            {
                TraverseParse(c, parentPath, accounts);
            }

            // Parse the private key
            RSAParameters?rsa        = null;
            var           privateKey = FindNamedItem(topLevel, "private-key.pem").StringAt("b", "");

            if (!privateKey.IsNullOrEmpty())
            {
                rsa = Pem.ParseRsaPrivateKeyPkcs1(privateKey);
            }

            return(accounts, rsa);
        }
示例#14
0
        public void InitChain()
        {
            var accountFile = _baseOption.GetPathForAccount(_baseOption.Account);

            if (!File.Exists(accountFile))
            {
                Colors.WriteLine($@"Account file ""{accountFile}"" doesn't exist.".DarkRed());
                return;
            }

            Console.WriteLine("Unlocking account ...");
            if (string.IsNullOrEmpty(_baseOption.Password))
            {
                _baseOption.Password = ReadLine.ReadPassword("Enter the password: "******"_account = Aelf.wallet.getWalletByMnemonic(""{acc.Mnemonic}"")");
            }

            if (!string.IsNullOrEmpty(acc.PrivateKey))
            {
                _engine.RunScript($@"_account = Aelf.wallet.getWalletByPrivateKey(""{acc.PrivateKey}"")");
            }

            Console.WriteLine("Your public key is ");
            _engine.RunScript(@"console.log(_account.keyPair.pub.encode('hex'))");

            _engine.RunScript(File.ReadAllText(Path.Combine(_engine.DefaultScriptsPath, "init-chain.js")));
        }
示例#15
0
 public static byte[] DecryptRsaSha256(byte[] ciphertext, byte[] privateKey)
 {
     return(Crypto.DecryptRsaSha256(ciphertext, Pem.ParsePrivateKeyPkcs8(privateKey)));
 }
示例#16
0
 private void ExposeAccountSaver()
 {
     _context.GlobalObject.Binding.SetMethod <string, string, string, string>("__saveAccount__",
                                                                              (address, privKey, pubKey, password) => { Pem.WriteKeyPair(_option.GetPathForAccount(address), privKey, pubKey, password); });
 }
示例#17
0
        public void ParsePrivateKeyPkcs1_parses_openssl_generated_key()
        {
            var rsa = Pem.ParseRsaPrivateKeyPkcs1(PrivateKeyPkcs1);

            VerifyRsaKey(rsa);
        }