static void TestSSHKeyGen() { var rsa = new RSACryptoServiceProvider(256 * 8); var sshRsa = PemKeyUtils.ExportPublicKeySSH(rsa); Console.WriteLine(sshRsa); var privPem = RSAKeys.ExportPrivateKey(rsa); Console.WriteLine(privPem); }
// done id_rsa (pem) => RSACryptoServiceProvider // done id_rsa.pub (openssh) => RSACryptoServiceProvider // done priv RSACryptoServiceProvider => id_rsa (pem) // done priv RSACryptoServiceProvider => id_rsa.pem (pem) // done priv RSACryptoServiceProvider => id_rsa.pub (openssh) static void Main(string[] args) { // ssh-keygen -t rsa -C "*****@*****.**" var privPemFile = @"c:\temp\id_rsa_test"; var pubSSHFile = @"c:\temp\id_rsa_test.pub"; var pubPemFile = @"c:\temp\temp.pem"; // ssh-keygen -f c:\temp\id_rsa_test.pub -e -m pem > id_rsa_test1.pem // var pubPem1File = @"c:\temp\id_rsa_test1.pem"; // "c:\Program Files\Git\usr\bin\openssl.exe" rsa -in c:\temp\id_rsa_test -pubout > id_rsa_test2.pem var pubPem2File = @"c:\temp\id_rsa_test2.pem"; try { // id_rsa (pem) => RSACryptoServiceProvider var rsaPri = PemKeyUtils.GetRSAProviderFromPemFile(privPemFile); //Console.WriteLine(rsaPri); TestSSHKeyGen(); var cer = new X509Certificate2(Convert.FromBase64String("MIIDBTCCAe2gAwIBAgIQbiJkXaenk61AKixVocnLRTANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MB4XDTE5MTAwNTAwMDAwMFoXDTI0MTAwNDAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ2H9Y6Z+3BXUCtlbmXr6H5owYy15XTl3vdpOZLUkk4OV9LMsB1phjNp+wgl28eAgrNNfu4BTVlHdR9x6NTrSiIapsYjzzEz4mOmRh1Bw5tJxit0VEGn00/ZENniTjgeEFYgDHYwjrfZQ6dERBFiw1OQb2IG5f3KLtx92lUXeIZ7ZvTaPkUpc4Qd6wQZmWgzPqWFocRsJATGyZzXiiXQUrc9cVqm1bws3P0lFBcqNtv+AKDYKT5IRYLsyCkueQC9R6LUCsZVD7bVIkeQuA3iehJKIEAlk/e3j5E4VaCRs642ajb/z9kByTl2xL2k0AeZGc8/Rcy7SQn0LBcJNZGp/SMCAwEAAaMhMB8wHQYDVR0OBBYEFOLhl3BDPLNVYDe38Dp9JbUmd4kKMA0GCSqGSIb3DQEBCwUAA4IBAQAN4XwyqYfVdMl0xEbBMa/OzSfIbuI4pQWWpl3isKRAyhXezAX1t/0532LsIcYkwubLifnjHHqo4x1jnVqkvkFjcPZ12kjs/q5d1L0LxlQST/Uqwm/9/AeTzRZXtUKNBWBOWy9gmw9DEH593sNYytGAEerbWhCR3agUxsnQSYTTwg4K9cSqLWzHX5Kcz0NLCGwLx015/Jc7HwPJnp7q5Bo0O0VfhomDiEctIFfzqE5x9T9ZTUSWUDn3J7DYzs2L1pDrOQaNs/YEkXsKDP1j4tOFyxic6OvjQ10Yugjo5jg1uWoxeU8pI0BxY6sj2GZt3Ynzev2bZqmj68y0I9Z+NTZo")); var jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkJCOENlRlZxeWFHckdOdWVoSklpTDRkZmp6dyIsImtpZCI6IkJCOENlRlZxeWFHckdOdWVoSklpTDRkZmp6dyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaWF0IjoxNTc1Nzk1NjkzLCJuYmYiOjE1NzU3OTU2OTMsImV4cCI6MTU3NTc5OTU5MywiX2NsYWltX25hbWVzIjp7Imdyb3VwcyI6InNyYzEifSwiX2NsYWltX3NvdXJjZXMiOnsic3JjMSI6eyJlbmRwb2ludCI6Imh0dHBzOi8vZ3JhcGgud2luZG93cy5uZXQvNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3L3VzZXJzL2E2MjA2MGRhLTFhZTMtNDRlYi04OTg4LTExOTdhNjhmZjQxZS9nZXRNZW1iZXJPYmplY3RzIn19LCJhY3IiOiIxIiwiYWlvIjoiQVZRQXEvOE5BQUFBOG9wTC83SkV1aUc5U1ZNTGkvb0VLWktFY3JUS1VkUi9GUXlmTUl3NjhQN211QmtKeFV3Q1RnbHpxQWtETlEvaG1ZSmVoNk9RcUdQNDZZVlhJKzNZeFAySWt2QUhNNnFLQVNvNmdybWVMUzQ9IiwiYW1yIjpbIndpYSIsIm1mYSJdLCJhcHBpZCI6IjE5NTBhMjU4LTIyN2ItNGUzMS1hOWNmLTcxNzQ5NTk0NWZjMiIsImFwcGlkYWNyIjoiMCIsImRldmljZWlkIjoiZjE4MDEyZTQtOWQzZC00ZjBmLWFjNjMtM2RjMDMzMGEzNjQ2IiwiZmFtaWx5X25hbWUiOiJCb2RpbiIsImdpdmVuX25hbWUiOiJTdXdhdCIsImlwYWRkciI6IjEzMS4xMDcuMTQ3LjYzIiwibmFtZSI6IlN1d2F0IEJvZGluIiwib2lkIjoiYTYyMDYwZGEtMWFlMy00NGViLTg5ODgtMTE5N2E2OGZmNDFlIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTIxMjc1MjExODQtMTYwNDAxMjkyMC0xODg3OTI3NTI3LTY3NTU3IiwicHVpZCI6IjEwMDMwMDAwODAxQzIwRDQiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJVdHoxNlRBODE4bURtQ3dvNDhKLUdsZlFtdTN1T0VEcmgtMWFqQndlOEw0IiwidGlkIjoiNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3IiwidW5pcXVlX25hbWUiOiJzdXdhdGNoQG1pY3Jvc29mdC5jb20iLCJ1cG4iOiJzdXdhdGNoQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiIteVhESHl4UVQwMllNVWpLcXNjaEFBIiwidmVyIjoiMS4wIn0.Vw9lr708WLmJAVcyz9mhLjHpblBviwGKnqJJR-HbcMgGN-P37vFUrpzOSi254Zoy3jjHuZsRh5i2AXRxYqTrADyJMRjr7y4DB_waJQ9O49dN9W_qpKFZBkTkr3ZE6j_wIoUH-6D8xFMtMcbMTVVJn9JWq23sgWgr4DUw-qC1sU_1RfsqvwFlCsrjcZZdvN5PiM7TTXjlUEbThmUG1gmxTORjlCrsS6KG7t5Smj4ycZQMCy6Ds26cw-wL6Y2vXKdiON9nknlvUwrsK2kxhR5e4SI91A33PeqEmqXlxpxMp630nyk5RMBd_4tCnkEDlZet5L_MNPeZsasdAUssjdDh5A"; var validated = ValidateToken(jwt, new X509SecurityKey(cer)); Console.WriteLine(validated); validated = ValidateToken2(jwt, new X509SecurityKey(cer)); Console.WriteLine(validated); // not working BEGIN RSA PUBLIC KEY!! // var rsaPub_1 = PemKeyUtils.GetRSAProviderFromPemFile(pubPem1File); var rsaPub_2 = PemKeyUtils.GetRSAProviderFromPemFile(pubPem2File); jwt = GenerateJWT(rsaPri); validated = ValidateToken(jwt, new RsaSecurityKey(rsaPri)); Console.WriteLine(validated); validated = ValidateToken2(jwt, new RsaSecurityKey(rsaPub_2)); Console.WriteLine(validated); // "c:\Program Files\Git\usr\bin\openssl.exe" rsa -pubin -in c:\temp\temp.pem -text -noout // priv RSACryptoServiceProvider => id_rsa (pem) // TODO, suwatch: var privPem = RSAKeys.ExportPrivateKey(rsaPri); Console.WriteLine(privPem == File.ReadAllText(privPemFile)); //Console.WriteLine(File.ReadAllText(privPemFile)); //Console.WriteLine(privPem); var pubPem = PemKeyUtils.ExportPublicKey(rsaPri); Console.WriteLine(pubPem == File.ReadAllText(pubPemFile)); //Console.WriteLine(pub); //File.WriteAllText(pubPemFile, pubPem); var rsaPub = PemKeyUtils.GetRSAProviderFromPemFile(pubPemFile); //Console.WriteLine(rsaPub); // priv RSACryptoServiceProvider => id_rsa.pub (openssh) var id_rsa_pub = PemKeyUtils.ExportPublicKeySSH(rsaPub); Console.WriteLine(id_rsa_pub == File.ReadAllText(pubSSHFile)); //Console.WriteLine("'" + id_rsa_pub + "'"); //Console.WriteLine("'" + File.ReadAllText(pubSSHFile) + "'"); var privParams = rsaPri.ExportParameters(includePrivateParameters: false); var pubParams = rsaPub.ExportParameters(includePrivateParameters: false); // id_rsa.pub (openssh) => RSACryptoServiceProvider var rsaPub1 = PemKeyUtils.FromOpenSSHFile(pubSSHFile); var pub1Params = rsaPub1.ExportParameters(includePrivateParameters: false); // Modulus and exponent represent Public component //Console.WriteLine(Convert.ToBase64String(privParams.Exponent)); //Console.WriteLine(Convert.ToBase64String(privParams.Modulus)); Console.WriteLine(Convert.ToBase64String(privParams.Exponent) == Convert.ToBase64String(pubParams.Exponent)); Console.WriteLine(Convert.ToBase64String(privParams.Modulus) == Convert.ToBase64String(pubParams.Modulus)); Console.WriteLine(Convert.ToBase64String(privParams.Exponent) == Convert.ToBase64String(pub1Params.Exponent)); Console.WriteLine(Convert.ToBase64String(privParams.Modulus) == Convert.ToBase64String(pub1Params.Modulus)); var text = Guid.NewGuid().ToString(); var signature = SignRS256(text, rsaPri); var verified = VerifyRS256(text, signature, rsaPub); Console.WriteLine(verified); verified = VerifyRS256(text, signature, rsaPub1); Console.WriteLine(verified); } catch (Exception ex) { Console.WriteLine(ex); } }