fix up the pem-handling code, and test it
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 29 Oct 2010 04:54:01 +0000 (00:54 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 29 Oct 2010 04:54:01 +0000 (00:54 -0400)
Changelog
Crypt/Monkeysphere/MSVA.pm
tests/basic

index 25dde749818a56cc357d9c86323f8596b071e104..4f5e0ae982abb73edb66a70595a6fa130653478b 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -12,8 +12,9 @@ msva-perl (0.6~pre) upstream;
     (closes MS #2567)
   * report server implementation name and version with every query (closes
     MS # 2564)
+  * support x509pem PKC format in addition to x509der (addresses MS #2566)
 
- -- Daniel Kahn Gillmor <dkg@fifthhorseman.net>  Thu, 28 Oct 2010 17:14:35 -0400
+ -- Daniel Kahn Gillmor <dkg@fifthhorseman.net>  Fri, 29 Oct 2010 00:53:37 -0400
 
 msva-perl (0.5) upstream;
 
index 55dc5bca56ba2e713a2547c1a58843d56596f822..624ff86a385c6605c118af1a7e930a7a965b600c 100755 (executable)
     my $ready = 0;
     use MIME::Base64;
     foreach my $line (@lines) {
-      if ($ready) {
+      if ($line eq '-----END CERTIFICATE-----') {
+        last;
+      } elsif ($ready) {
         push @goodlines, $line;
       } elsif ($line eq '-----BEGIN CERTIFICATE-----') {
         $ready = 1;
-      } elsif ($line eq '-----END CERTIFICATE-----') {
-        last;
       }
     }
+    msvalog('debug', "%d lines of base64:\n%s\n", $#goodlines + 1, join("\n", @goodlines));
     return decode_base64(join('', @goodlines));
   }
 
index 266d8a2e9ccf341c042e095a1dbd7beffd4481e8..14cbf2eb6253fb0f838f7cc28116c2d2e59a5207 100755 (executable)
@@ -51,6 +51,7 @@ printf "Key-Type: RSA\nKey-Length: 1024\nKey-Usage: sign\nName-Real: MSVA Test C
 # make 3 websites (X, Y, and Z) with self-signed certs:
 for name in x y z ; do 
     openssl req -x509 -subj "/CN=${name}.example.net/" -nodes -sha256 -newkey rsa:1024 -keyout "${WORKDIR}/sec/${name}.key" -outform DER -out "${WORKDIR}/x509/${name}.der"
+    openssl x509 -inform DER -outform PEM < "${WORKDIR}/x509/${name}.der" > "${WORKDIR}/x509/${name}.pem"
 done
 
 # translate X and Y's keys into OpenPGP cert
@@ -62,23 +63,30 @@ runtests() {
     # X should not validate as X or Y or Z:
     for name in x y z; do
         ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${name}.example.net" x509der < "${WORKDIR}/x509/x.der"
+        ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${name}.example.net" x509pem < "${WORKDIR}/x509/x.pem"
     done
     
     # certify X's OpenPGP cert with CA
     gpg --batch --yes --sign-key https://x.example.net
-    
-    # X should now validate as X
-    "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https x.example.net x509der < "${WORKDIR}/x509/x.der"
 
+    # it should fail if we pass it the wrong kind of data:
+    ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https x.example.net "x509der" < "${WORKDIR}/x509/x.pem"
+    ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https x.example.net "x509pem" < "${WORKDIR}/x509/x.der"
+        
+    for ctype in pem der; do 
+    # X should now validate as X
+        "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https x.example.net "x509${ctype}" < "${WORKDIR}/x509/x.${ctype}"
+        
     # but X should not validate as Y or Z:
-    for name in x y z; do
-        ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${name}.example.net" x509der < "${WORKDIR}/x509/x.der"
-    done
+        for name in x y z; do
+            ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${name}.example.net" "x509${ctype}" < "${WORKDIR}/x509/x.${ctype}"
+        done
 
     # neither Y nor Z should validate as any of them:
-    for src in y z; do
-        for targ in x y z; do
-            ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${targ}.example.net" x509der < "${WORKDIR}/x509/${src}.der"
+        for src in y z; do
+            for targ in x y z; do
+                ! "${srcdir}"/test-msva msva-perl "${srcdir}"/test-msva msva-query-agent https "${targ}.example.net" "x509${ctype}" < "${WORKDIR}/x509/${src}.${ctype}"
+            done
         done
     done
 }