packages feed

pkcs10 0.1.0.3 → 0.1.0.4

raw patch · 12 files changed

+202/−8 lines, 12 filesdep +QuickCheckdep +tasty-quickcheckPVP ok

version bump matches the API change (PVP)

Dependencies added: QuickCheck, tasty-quickcheck

API changes (from Hackage documentation)

Files

README.md view
@@ -20,5 +20,5 @@   let extAttrs = PKCS9Attributes [PKCS9Attribute $ ExtBasicConstraints False Nothing, PKCS9Attribute $ ExtKeyUsage [KeyUsage_digitalSignature,KeyUsage_nonRepudiation,KeyUsage_keyEncipherment]]   Right req <- generateCSR subjectAttrs extAttrs (KeyPairRSA pubKey privKey) SHA512   putStrLn . show . toPEM $ req -- export in PEM format-  putStrLn . show $ verify (csrToSigned req) $ PubKeyRSA pubKey -- sign CSR before verify+  putStrLn . show $ verify (csrToSigned req) $ PubKeyRSA pubKey -- sign CSR before verifying ```
pkcs10.cabal view
@@ -1,5 +1,5 @@ name:                pkcs10-version:             0.1.0.3+version:             0.1.0.4 synopsis:            PKCS#10 library description:         Please see README.md homepage:            https://github.com/fcomb/pkcs10-hs#readme@@ -13,6 +13,15 @@ cabal-version:       >=1.10 stability:           experimental extra-doc-files:     README.md+extra-source-files:  test/fixtures/dsaparams+                   , test/fixtures/dsa.pem+                   , test/fixtures/dsa1.csr+                   , test/fixtures/dsa2.csr+                   , test/fixtures/dsa3.csr+                   , test/fixtures/rsa.pem+                   , test/fixtures/rsa1.csr+                   , test/fixtures/rsa2.csr+                   , test/fixtures/rsa3.csr  library   ghc-options:         -W@@ -39,6 +48,8 @@                      , pkcs10                      , tasty                      , tasty-hunit+                     , tasty-quickcheck+                     , QuickCheck                      , bytestring                      , cryptonite                      , pem
test/Spec.hs view
@@ -1,6 +1,7 @@ module Main where  import           Control.Applicative      ((<$>), (<*>))+import           Control.Monad import           Crypto.Hash import qualified Crypto.PubKey.DSA        as DSA import qualified Crypto.PubKey.RSA        as RSA@@ -13,16 +14,21 @@ import           Data.X509 import           Data.X509.PKCS10 import           Keys+import           Test.QuickCheck.Monadic  (monadicIO, run) import           Test.Tasty import           Test.Tasty.HUnit+import           Test.Tasty.QuickCheck  main :: IO () main = do   defaultMain tests  tests :: TestTree-tests = testGroup "Tests" [unitTests]+tests = testGroup "Tests" [properties, unitTests] +properties :: TestTree+properties = testGroup "Properties" [qcProps]+ unitTests = testGroup "Unit tests"   [ testCase "CSR with subject and extension (RSA)" $ do      req <- defaultRsaCSR subjectAttrs extAttrs@@ -46,6 +52,9 @@       checkRsaFixtureCSR "dsa" "dsa3" emptySubjectAttrs emptyExtAttrs readDSA   ] +qcProps = testGroup "(checked by QuickCheck)"+  [ testProperty "CSR" (property_csr) ]+ subjectAttrs = makeX520Attributes [(X520CommonName, "node.fcomb.io"), (X520OrganizationName, "fcomb")]  pemSubjectAttrs = X520Attributes [(X520CommonName, asn1CharacterString Printable "api"), (X520CommonName, asn1CharacterString Printable "fcomb"), (X520CommonName, asn1CharacterString Printable "com"), (X520StateOrProvinceName, asn1CharacterString Printable "Moscow"), (X520LocalityName, asn1CharacterString Printable "Moscow"), (X520OrganizationName, asn1CharacterString Printable "End Point"), (X520OrganizationalUnitName, asn1CharacterString Printable "fcomb"), (EmailAddress, asn1CharacterString IA5 "in@fcomb.io"), (X509SubjectAltName, asn1CharacterString Printable "DNS.1=fcomb.com")]@@ -58,13 +67,39 @@  emptyExtAttrs = PKCS9Attributes [] +instance Arbitrary PubKey where+  arbitrary = elements [PubKeyRSA rsaPublicKey, PubKeyDSA dsaPublicKey]++instance Arbitrary ASN1StringEncoding where+  arbitrary = elements [IA5,UTF8,Printable,Visible]++instance Arbitrary X520Attribute where+  arbitrary = elements [X520CommonName,X520SerialNumber,X520Name,X520Surname,X520GivenName,X520Initials,X520GenerationQualifier,X520CountryName,X520LocalityName,X520StateOrProvinceName,X520StreetAddress,X520OrganizationName,X520OrganizationalUnitName,X520Title,X520DNQualifier,X520Pseudonym,X509SubjectAltName,EmailAddress,IPAddress,DomainComponent,UserId,RawAttribute [12,3,4,5]]++arbitraryX520Attrs r1 r2 =+  choose (r1,r2) >>= \l -> replicateM l arbitraryAttr+  where+    arbitraryAttr = (,) <$> arbitrary <*> arbitrary++instance Arbitrary X520Attributes where+  arbitrary = X520Attributes <$> arbitraryX520Attrs 0 15++arbitraryBS r1 r2 = choose (r1,r2) >>= \l -> (B.pack <$> replicateM l arbitrary)++instance Arbitrary ASN1CharacterString where+  arbitrary = ASN1CharacterString <$> arbitrary <*> arbitraryBS 1 36++property_csr subjectAttrs pubKey = monadicIO $ do+  req <- run $ defaultRsaCSR subjectAttrs pemExtAttrs+  return $ checkCSR (csrToSigned req) subjectAttrs pemExtAttrs pubKey+ readRSA pem = PubKeyRSA $ readRsaPubKey pem 256  readDSA pem = PubKeyDSA $ readDsaPubKey pem  checkRsaFixtureCSR keyName csrName subjectAttrs extAttrs pkf = do-  keyPem <- readPEMFile $ "./test/fixtures/" ++ keyName ++ ".pem"-  csrPem <- readPEMFile $ "./test/fixtures/" ++ csrName ++ ".csr"+  keyPem <- readPEMFile $ "test/fixtures/" ++ keyName ++ ".pem"+  csrPem <- readPEMFile $ "test/fixtures/" ++ csrName ++ ".csr"   checkCSR (readCSR csrPem) subjectAttrs extAttrs $ pkf keyPem  defaultRsaCSR subjectAttrs extAttrs = do@@ -95,13 +130,13 @@  checkDER csr = do   let (Right csr') = (fromDER . toDER) csr-  assertBool "csr' == csr" $ (certificationRequest csr') == csr+  assertBool "DER: csr' == csr" $ (certificationRequest csr') == csr  checkPEM csr = do   let (Right csr') = (fromPEM . toPEM) csr-  assertBool "csr' == csr" $ (certificationRequest csr') == csr+  assertBool "PEM: csr' == csr" $ (certificationRequest csr') == csr   let (Right csr'') = (fromPEM . toNewFormatPEM) csr-  assertBool "csr'' == csr" $+  assertBool "PEM: csr'' == csr" $     (certificationRequest csr'') == csr   assertBool "pemName == CERTIFICATE REQUEST" $     (pemName . toPEM $ csr) == "CERTIFICATE REQUEST"
+ test/fixtures/dsa.pem view
@@ -0,0 +1,12 @@+-----BEGIN DSA PRIVATE KEY-----+MIIBuwIBAAKBgQCwn7E7CJSxcVw4ywBxTAQzJB8k5z0rVT/SbjuPDCnJCAy68IPU+7EJekWii8HTFvWSh0HKQalCLS+vzg76VY/9wn8oDDtHT7QSptBn9Xc9Ms3OHFRnf+kG/SGRggfJ7CvcZ4FSI870ijSy3NYFJWwfSSFVYttxkZ0GW357iin6uiewIVAKRt+6yDH5JTnplHkAzL4Jhw0LnklAoGAfTz+x2GrElIqHZKle80LVTO0P1fBdhBCHa1h+8ktPTCVLL6XrraDnqk9jgpLVKXu499IMRwTgElf1bK+TWvwXEeanYIQKU63PdkYf+BgZoszrnJyGDY0LTLO4e5GpPhLQNHSvVckmYOXIaNb60TkYRWEoLFoWep1/3iNQ/+EpYmNFsCgYBVZlbcoBHRdjf+VPlx7kZhYt6Y+7GVS8LBc142uuzFW2FIyZQaIYul+/i45y/GUugDEfDbudY5GGr1My7mLFp6ysxmCwrKhzs/W4yTkfDbdbSiDsZ5tGK/t+JmITQmBTaAhaLo4rW5rNW2SI+GgGjpJHZnbaV1NDH2RXtUppE7PvoQIVAIRuQNGz+cdbHbJYTwUj+T+y7t8Xo+-----END DSA PRIVATE KEY-----
+ test/fixtures/dsa1.csr view
@@ -0,0 +1,18 @@+-----BEGIN CERTIFICATE REQUEST-----+MIIC0zCCApMCAQAwgagxDDAKBgNVBAMTA2FwaTEOMAwGA1UEAxMFZmNvbWIxDDAK+BgNVBAMTA2NvbTEPMA0GA1UECBMGTW9zY293MQ8wDQYDVQQHEwZNb3Njb3cxEjAQ+BgNVBAoTCUVuZCBQb2ludDEOMAwGA1UECxMFZmNvbWIxGjAYBgkqhkiG9w0BCQEW+C2luQGZjb21iLmlvMRgwFgYDVR0REw9ETlMuMT1mY29tYi5jb20wggG2MIIBKwYH+KoZIzjgEATCCAR4CgYEAsJ+xOwiUsXFcOMsAcUwEMyQfJOc9K1U/0m47jwwpyQgM+uvCD1OxCXpFoovB0xb1kodBykGpQi0vr84O+lWP/cJ/KAw7R0+0EqbQZ/V3PTLNz+hxUZ35Bv0hkYIHyewr3GeBUiPO9Io0stzWBSVsH0khVWLbcZGdBlt+e4op+ronsC+FQCkbesgx+SU56ZR5AMy+CYcNC55JQKBgH08/sdhqxJSKh2SpXvNC1UztD9XwXYQ+Qh2tYfJLT0wlSy+l662g56pPY4KS1Sl7uPfSDEcE4BJX9Wyvk1r8FxHmp2CEClOt+z3ZGHwYGaLM65ychg2NC0yzuHuRqT4S0DR0r1XJJmDlyGjW+tE5GEVhKCxaFnqdf+94jUPxKWJjRbA4GEAAKBgFVmVtygEdF2N/5U+XHuRmFi3pj7sZVLwsFzXja67MVb+YUjJlBohi6X+LjnL8ZS6AMR8Nu51jkYavUzLuYsWnrKzGYLCsqHOz9bjJOR8Nt1t+KIOxnm0Yr+0mYhNCYFNoCFoujitbms1bZIj4aAaOkkdmdtpXU0MfZFe1SmkTs++h+oCkwJwYJKoZIhvcNAQkOMRowGDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAJBgcq+hkjOOAQDAy8AMCwCFHE4OUdP8t/FBPo+JU3HOTHog61nAhQD9z9bT36Y7cJ5vBoM+mQnC6ti5aA==+-----END CERTIFICATE REQUEST-----
+ test/fixtures/dsa2.csr view
@@ -0,0 +1,17 @@+-----BEGIN CERTIFICATE REQUEST-----+MIICqjCCAmoCAQAwgagxDDAKBgNVBAMTA2FwaTEOMAwGA1UEAxMFZmNvbWIxDDAK+BgNVBAMTA2NvbTEPMA0GA1UECBMGTW9zY293MQ8wDQYDVQQHEwZNb3Njb3cxEjAQ+BgNVBAoTCUVuZCBQb2ludDEOMAwGA1UECxMFZmNvbWIxGjAYBgkqhkiG9w0BCQEW+C2luQGZjb21iLmlvMRgwFgYDVR0REw9ETlMuMT1mY29tYi5jb20wggG2MIIBKwYH+KoZIzjgEATCCAR4CgYEAsJ+xOwiUsXFcOMsAcUwEMyQfJOc9K1U/0m47jwwpyQgM+uvCD1OxCXpFoovB0xb1kodBykGpQi0vr84O+lWP/cJ/KAw7R0+0EqbQZ/V3PTLNz+hxUZ35Bv0hkYIHyewr3GeBUiPO9Io0stzWBSVsH0khVWLbcZGdBlt+e4op+ronsC+FQCkbesgx+SU56ZR5AMy+CYcNC55JQKBgH08/sdhqxJSKh2SpXvNC1UztD9XwXYQ+Qh2tYfJLT0wlSy+l662g56pPY4KS1Sl7uPfSDEcE4BJX9Wyvk1r8FxHmp2CEClOt+z3ZGHwYGaLM65ychg2NC0yzuHuRqT4S0DR0r1XJJmDlyGjW+tE5GEVhKCxaFnqdf+94jUPxKWJjRbA4GEAAKBgFVmVtygEdF2N/5U+XHuRmFi3pj7sZVLwsFzXja67MVb+YUjJlBohi6X+LjnL8ZS6AMR8Nu51jkYavUzLuYsWnrKzGYLCsqHOz9bjJOR8Nt1t+KIOxnm0Yr+0mYhNCYFNoCFoujitbms1bZIj4aAaOkkdmdtpXU0MfZFe1SmkTs++h+oAAwCQYHKoZIzjgEAwMvADAsAhQ7lDYNBXH4iO4iygdTD9+pKT6VDwIUPFaTXWs6+q9OZq9+YWUXiQILceks=+-----END CERTIFICATE REQUEST-----
+ test/fixtures/dsa3.csr view
@@ -0,0 +1,13 @@+-----BEGIN CERTIFICATE REQUEST-----+MIICATCCAcECAQAwADCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCwn7E7CJSxcVw4+ywBxTAQzJB8k5z0rVT/SbjuPDCnJCAy68IPU7EJekWii8HTFvWSh0HKQalCLS+vz+g76VY/9wn8oDDtHT7QSptBn9Xc9Ms3OHFRnfkG/SGRggfJ7CvcZ4FSI870ijSy3N+YFJWwfSSFVYttxkZ0GW357iin6uiewIVAKRt6yDH5JTnplHkAzL4Jhw0LnklAoGA+fTz+x2GrElIqHZKle80LVTO0P1fBdhBCHa1h8ktPTCVLL6XrraDnqk9jgpLVKXu4+99IMRwTgElf1bK+TWvwXEeanYIQKU63PdkYfBgZoszrnJyGDY0LTLO4e5GpPhLQN+HSvVckmYOXIaNb60TkYRWEoLFoWep1/3iNQ/EpYmNFsDgYQAAoGAVWZW3KAR0XY3+/lT5ce5GYWLemPuxlUvCwXNeNrrsxVthSMmUGiGLpf4uOcvxlLoAxHw27nWORhq9+TMu5ixaesrMZgsKyoc7P1uMk5Hw23W0og7GebRiv7SZiE0JgU2gIWi6OK1uazVtk+iPhoBo6SR2Z22ldTQx9kV7VKaROz76GgADAJBgcqhkjOOAQDAy8AMCwCFGZWWa0n+rsXpsxy7R3vhfpCGIhP3AhRqaLPrraO3Pggf3UTZLMsYhUA+aA==+-----END CERTIFICATE REQUEST-----
+ test/fixtures/dsaparams view
@@ -0,0 +1,9 @@+-----BEGIN DSA PARAMETERS-----+MIIBHgKBgQCwn7E7CJSxcVw4ywBxTAQzJB8k5z0rVT/SbjuPDCnJCAy68IPU7EJe+kWii8HTFvWSh0HKQalCLS+vzg76VY/9wn8oDDtHT7QSptBn9Xc9Ms3OHFRnfkG/S+GRggfJ7CvcZ4FSI870ijSy3NYFJWwfSSFVYttxkZ0GW357iin6uiewIVAKRt6yDH+5JTnplHkAzL4Jhw0LnklAoGAfTz+x2GrElIqHZKle80LVTO0P1fBdhBCHa1h8ktP+TCVLL6XrraDnqk9jgpLVKXu499IMRwTgElf1bK+TWvwXEeanYIQKU63PdkYfBgZo+szrnJyGDY0LTLO4e5GpPhLQNHSvVckmYOXIaNb60TkYRWEoLFoWep1/3iNQ/EpYm+NFs=+-----END DSA PARAMETERS-----
+ test/fixtures/rsa.pem view
@@ -0,0 +1,27 @@+-----BEGIN RSA PRIVATE KEY-----+MIIEogIBAAKCAQEAn1lF/OiYgXK9EK8qK+amvExWH+zOYfYzonoPgt7MBHymNEt9+/ceBWhlEuNLSTDeQQFLrxjIrXOuKveNoa1cHXVqejmWAVs3SqBtJovB0eGa0HNum+mJ9IKTreiGqzXRTXuV/O4J3ZaBoHQuh2OnsJF06MTwZRTBK8hmMHs1RuoZRxomad+cEaVveoqgi6tLE+3Px+WjmAZmOmJ9Uhn0Ae9Zm+GrYGTVnrbMntNS4YA49twDuUv+1EjpKiejr6c6qfH7qrAoqKq83AazAWo8GoclRXnwwlwNwQLRPOU9XxK2g8fwjDCw+Vj0JJDh+dn2FdQ3aQTO31G8XgYj7MMvGMRotVQIDAQABAoIBAAZDbAzU16m+6M+P+EwlGt6cPGROIK1SOaNkqExIBz+MdQysrDHi9Lshr1det8bYtOO5OVBYmQq4UVA/C+sIgHk7KHrVPLiY/f5zfUWsCc0vcokkvQFmxJVnzIY5bZGtO9zfzrVyZdDf6Zh0+J+85u42lKgM8Ona+qhked2XQcfenm/XBOW0LVgysdcNimTvhCnmXrWpxJGXU5lVflI+DxtxCib/y9E813tiECHj9riHhaQHTeGbEdOxgDLVOK33SLFM7XXO1UEyscfkrb+2+TaOsVCvlKmXALwk0pa5NDCJxZU1eE7zII5PT4bogjo10BMkpBHyYMq6rXNxPJVvE+ArLttMECgYEA0uAkSB+HcrYKSoFOVhtR6QOsjwHp7Eoqs7zmQKOT25TOXWCfhFu9+g6a+eBKXOHaIb1jb1oZzj3lUlyUJNq7edKabr14fuektLn/Fm/7JMlIARrzljUd5+aCIqBtZWb4/AbU/CbG40DWuk8P6bg63MQRjPq2niMx9L2ke20XEe1HMCgYEAwXJ3+9+FLC/Wwa1qGiYLpt7qkIbFJsmZVdV0mfLBpyStGP3VdN4DyQntuEGc4G41t2BL1+7U2AsLalYhaL3PdWbuSlqP1uGChFFMQF4eZHgT1HvzKF7UGEwEPNQbcXuyaTVAuM+cNQ2iwZDL9o2Dsd5e/qbxcVg0IpjH9N632O3zRcCgYArktEsbgdo9qCtwIZVWJPW+WEIB0t1pS/IC7deOJ77XsqnptZuAmAxS9dOJsB27NxL+Hxhd/a5HSUTnbmm2+O9S+n1KwK/zWR45ke1Zz43Pjh/oyo7mzNb+qetTAUO3PY57Zd4+vJB5xX3rXqWStEu6P+zPasbtakxaTA1+y43m0GbQKBgCts/vFuaeJtbQUsdTc5ZC4Sf/XwTpL11glat+EV+2SmHxWVJe3uSPtAd1T9pbHcC8L2ow/xZgaIp3kZ+uTcJbyXFvkqJWcWihJ98wbVM+dJDWqNyLAvWX160xi0pNR86Dgl9DmGtbuELNTRfY7Hm03divEXj8LheieU4Ts2mi+gQhRAoGAYNfF2Z7XBktidG6TLt3jMJV15syWgEdxy5ut8irw/8lgAN7dwXsiLu9V+q+43PMARnm9dknlvVgTh7HgCQsZ5j/u36yq5y1I1WG+DCZVpfoInwZFncqsjR1QI+WJvRmhmLeNoqZjDCdXX5Yuc9Vj5gPW7lQda6AzTcyd43KjBVAak=+-----END RSA PRIVATE KEY-----
+ test/fixtures/rsa1.csr view
@@ -0,0 +1,19 @@+-----BEGIN CERTIFICATE REQUEST-----+MIIDFzCCAf8CAQAwgagxDDAKBgNVBAMTA2FwaTEOMAwGA1UEAxMFZmNvbWIxDDAK+BgNVBAMTA2NvbTEPMA0GA1UECBMGTW9zY293MQ8wDQYDVQQHEwZNb3Njb3cxEjAQ+BgNVBAoTCUVuZCBQb2ludDEOMAwGA1UECxMFZmNvbWIxGjAYBgkqhkiG9w0BCQEW+C2luQGZjb21iLmlvMRgwFgYDVR0REw9ETlMuMT1mY29tYi5jb20wggEiMA0GCSqG+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfWUX86JiBcr0Qryor5qa8TFYf7M5h9jOi+eg+C3swEfKY0S339x4FaGUS40tJMN5BAUuvGMitc64q942hrVwddWp6OZYBWzdKo+G0mi8HR4ZrQc26aYn0gpOt6IarNdFNe5X87gndloGgdC6HY6ewkXToxPBlFMEryG+YwezVG6hlHGiZp1wRpW96iqCLq0sT7c/H5aOYBmY6Yn1SGfQB71mb4atgZNWetsy+e01LhgDj23AO5S/USOkqJ6Ovpzqp8fuqsCioqrzcBrMBajwahyVFefDCXA3BAtE8+5T1fEraDx/CMMLBWPQkkOH52fYV1DdpBM7fUbxeBiPswy8YxGi1VAgMBAAGgKTAn+BgkqhkiG9w0BCQ4xGjAYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMA0GCSqGSIb3+DQEBBQUAA4IBAQBlD7dYBBcBAXL8Yv9+PtpBoiwREP6tj9EA1SG1e8MzdlHcSiHE+RhMY/sPm2aWEOotzqfpCp32AE4OxhgMrSXrjZCiKvaspb0pXWRZVzen9MnsDFICq+rrp7JQWbH53gIPBx90WE8Rzhs9rVYPGbRqldbXtpUf6zWIwFXr4KYSyJgBkPQMPB+UCxli+PJjCDWRFjW9M9LOLPCQ614LcKckwDA8t+Mvgeki7qT7fVoDRbgb4s6bXCe+5r/66Fp3jIBxyJwIjAV58ayxqjL/CAbAooMQwbRXp64fz7EYmFWnIdvZ9J03doNd+jUI5TrkOpUn5egxWLJDCgoIo9HuDZGFTLDyd+-----END CERTIFICATE REQUEST-----
+ test/fixtures/rsa2.csr view
@@ -0,0 +1,18 @@+-----BEGIN CERTIFICATE REQUEST-----+MIIC7jCCAdYCAQAwgagxDDAKBgNVBAMTA2FwaTEOMAwGA1UEAxMFZmNvbWIxDDAK+BgNVBAMTA2NvbTEPMA0GA1UECBMGTW9zY293MQ8wDQYDVQQHEwZNb3Njb3cxEjAQ+BgNVBAoTCUVuZCBQb2ludDEOMAwGA1UECxMFZmNvbWIxGjAYBgkqhkiG9w0BCQEW+C2luQGZjb21iLmlvMRgwFgYDVR0REw9ETlMuMT1mY29tYi5jb20wggEiMA0GCSqG+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfWUX86JiBcr0Qryor5qa8TFYf7M5h9jOi+eg+C3swEfKY0S339x4FaGUS40tJMN5BAUuvGMitc64q942hrVwddWp6OZYBWzdKo+G0mi8HR4ZrQc26aYn0gpOt6IarNdFNe5X87gndloGgdC6HY6ewkXToxPBlFMEryG+YwezVG6hlHGiZp1wRpW96iqCLq0sT7c/H5aOYBmY6Yn1SGfQB71mb4atgZNWetsy+e01LhgDj23AO5S/USOkqJ6Ovpzqp8fuqsCioqrzcBrMBajwahyVFefDCXA3BAtE8+5T1fEraDx/CMMLBWPQkkOH52fYV1DdpBM7fUbxeBiPswy8YxGi1VAgMBAAGgADAN+BgkqhkiG9w0BAQUFAAOCAQEANRMh7oNCTUmvq7YMimu7SAK0Rgefc96o7PXZ1btL+xfqyvM/iNB3gZfYKcwa0X5o75x0QOzK3D3E2vx4vPY5/8vGnpBQfu4PtGTK1uR0s+k7VPG77yCyixY+iukiLX+K5gLpeNiCwIMiz2AkS6YzEbk/GXQc0yCQ0FAEQsD1KK+uroNQG9eqsRkGvFyTY/gfEVuyoquAduHc0gC/XzKIbvnrsqnbsu2bxTo+4Rohr5P+l9G/fR1HmqA4UCcCM15K3u/KH68sFhjUDFH+nj/nP8gB2/3uNqcQaxANvB9kFUoT+1YVD/3z1xSBRAJi/p27Rl4/xz51VldOrQymP/ysw+TImTw==+-----END CERTIFICATE REQUEST-----
+ test/fixtures/rsa3.csr view
@@ -0,0 +1,15 @@+-----BEGIN CERTIFICATE REQUEST-----+MIICRTCCAS0CAQAwADCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ9Z+RfzomIFyvRCvKivmprxMVh/szmH2M6J6D4LezAR8pjRLff3HgVoZRLjS0kw3kEBS+68YyK1zrir3jaGtXB11ano5lgFbN0qgbSaLwdHhmtBzbppifSCk63ohqs10U17lf+zuCd2WgaB0Lodjp7CRdOjE8GUUwSvIZjB7NUbqGUcaJmnXBGlb3qKoIurSxPtz8f+lo5gGZjpifVIZ9AHvWZvhq2Bk1Z62zJ7TUuGAOPbcA7lL9RI6Sono6+nOqnx+6qw+KKiqvNwGswFqPBqHJUV58MJcDcEC0TzlPV8StoPH8IwwsFY9CSQ4fnZ9hXUN2kEz+t9RvF4GI+zDLxjEaLVUCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQATv3egVLAc+PB5fbwXLvE4l88qF2ygMyg8XSsumE8nPxLKWxXfAzsRhV6qSPlXYJFMKkGP8R1ap+AfrdTEFD/8d1sBrSCW+T2S0xcqDZpBehnunmgB3ud0++zr7A6iiOpbOchf+ZEbPB+IEHjuF5zLXn9Nv8CKFag9uFdJkprqkaDkouPIXiQXYZmn5tevNO3Q5woh7H2mizM+WnNH0Zf+EY/2Lazl4GW4c0J+JzZm01PYuXgSUsWiKGYlCej0pVG/RrBQbSHZqhEi+eeU3kgd+Zf7xRNT2pexwktkklvDE3kGCEye9zwTRjMV/nL/62ConBkzJOVq2kfNc+xKOQMecLdpJ6+-----END CERTIFICATE REQUEST-----