]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/importExport/importExportPkcs8
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / clxutils / importExport / importExportPkcs8
diff --git a/SecurityTests/clxutils/importExport/importExportPkcs8 b/SecurityTests/clxutils/importExport/importExportPkcs8
new file mode 100755 (executable)
index 0000000..71f01eb
--- /dev/null
@@ -0,0 +1,210 @@
+#! /bin/csh -f
+#
+# Run PKCS8 import/export tests.
+#
+# Run this from SecurityTests/clxutils/importExport. The 
+# kcImport and kcExport programs must exist in the location
+# specified by the LOCAL_BUILD_DIR env var.
+#
+
+source setupCommon
+
+set PKCS8SUBTOOL=./importExportPkcs8Tool
+set PKCS8EXPORTTOOL=./exportPkcs8Tool
+
+set P8_PASSWORD=foobar
+
+# RSA private key, PEM, generated by openssl
+set RSA_PRIV_KEY=${BUILD_DIR}/rsapriv.clear.pem
+
+# DSA private key, PEM, generated by openssl
+set DSA_PRIV_KEY=${BUILD_DIR}/dsapriv.clear.pem
+
+# DSA parameters
+set DSA_PARAMS=dsaParamOpenssl.pem
+
+# PKCS8 blob, generated by openssl
+set PKCS8_KEY_OS=${BUILD_DIR}/pkcs8.p8
+
+# PKCS8 blob, generated by kcExport
+set PKCS8_KEY_EXP=${BUILD_DIR}/pkcs8_exp.p8
+
+# raw key, generated by openssl after parsing our p8
+set PKCS8_KEY_PARSE_OS=${BUILD_DIR}/pkcs8_parse
+
+# DSA parameters
+set DSA_PARAMS_512_DER=dsaParams_512.der
+set DSA_PARAMS_512_PEM=dsaParamOpenssl.pem
+
+# user specified variables
+set QUIET=NO
+set QUIET_ARG=
+set KEYSIZE=512
+set NOACL=NO
+set NOACL_ARG=
+set SECURE_PHRASE=NO
+set SECURE_PHRASE_ARG=
+set NOCLEAN=NO
+
+# user options
+
+while ( $#argv > 0 )
+    switch ( "$argv[1]" )
+        case q:
+            set QUIET=YES
+                       set QUIET_ARG=-q
+            shift
+            breaksw
+        case n:
+            set NOACL=YES
+                       set NOACL_ARG=-n
+            shift
+            breaksw
+        case s:
+            set SECURE_PHRASE=YES
+                       set SECURE_PHRASE_ARG=-Z
+            shift
+            breaksw
+               case N:
+                       set NOCLEAN=YES
+            shift
+            breaksw
+        default:
+            echo Usage: importExportPkcs8 \[q\(uiet\)\] \[n\(oACL\)\] \[s\(ecurePassphrase\)\]  \[N\(oClean\)\]
+            exit(1)
+    endsw
+end
+
+echo === Begin PKCS8 test ===
+if ($QUIET == NO) then
+       echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+
+###
+### RSA testing
+###
+
+# Create RSA key pair using openssl
+# private keys are only generated in PEM format
+if ($QUIET == NO) then
+       echo ...RSA key testing, openssl generated 
+       echo Creating RSA private key using openssl...
+endif
+set cmd="$RM -f $RSA_PRIV_KEY"
+if ($QUIET == NO) then
+       echo $cmd
+endif
+$cmd || exit(1)
+set cmd="$OPENSSL genrsa -out $RSA_PRIV_KEY $KEYSIZE"
+if ($QUIET == NO) then
+       echo $cmd
+endif
+$cmd >& /dev/null|| exit(1)
+
+#############
+#
+# PKCS5 v1.5 algorithms:
+#
+if ($QUIET == NO) then
+       echo ...testing PKCS5 v1.5 PBE with RSA keys
+endif
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-MD5-DES rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-MD2-DES rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC2-64 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-MD2-RC2-64 rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-MD5-RC2-64 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-DES rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+
+#
+# PKCS5 v2.0 PBE algorithms
+#
+if ($QUIET == NO) then
+       echo ...testing PKCS5 v2.0 PBE with RSA keys
+endif
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v2 des3 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v2 des rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v2 rc2 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+
+#
+# PKCS12 PBE algorithms
+# NOTE we do not support PBE-SHA1-2DES (no double DES in the CSP)
+#
+if ($QUIET == NO) then
+       echo ...testing PKCS12 PBE with RSA keys
+endif
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC4-128 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC4-40 rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-3DES rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC2-128 rsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $RSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC2-40 rsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+
+#
+# PKCS8 import, DSA form.
+# The PKCS8 logic is (mostly) algorithm independent so we'll just do a few of these
+# to make sure the CSP can import and export correctly.
+#
+if ($QUIET == NO) then
+       echo ...testing PKCS8 import with DSA keys
+endif
+set cmd="$RM -f $DSA_PRIV_KEY"
+if ($QUIET == NO) then
+       echo $cmd
+endif
+$cmd || exit(1)
+set cmd="$OPENSSL gendsa -out $DSA_PRIV_KEY $DSA_PARAMS"
+if ($QUIET == NO) then
+       echo $cmd
+endif
+$cmd >& /dev/null || exit(1)
+set cmd="$PKCS8SUBTOOL $DSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v1 PBE-SHA1-RC2-40 dsa 512 $QUIET $NOACL DER $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8SUBTOOL $DSA_PRIV_KEY $PKCS8_KEY_OS $KEYCHAIN -v2 des3 dsa 512 $QUIET $NOACL PEM $SECURE_PHRASE"
+$cmd || exit(1)
+
+#
+# PKCS8 Export
+#
+if ($QUIET == NO) then
+       echo ...testing PKCS8 Export of RSA private key
+endif
+set cmd="$PKCS8EXPORTTOOL $RSA_PRIV_KEY $PKCS8_KEY_EXP $PKCS8_KEY_PARSE_OS $KEYCHAIN PEM rsa 512 $QUIET $NOACL $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8EXPORTTOOL $RSA_PRIV_KEY $PKCS8_KEY_EXP $PKCS8_KEY_PARSE_OS $KEYCHAIN DER rsa 512 $QUIET $NOACL $SECURE_PHRASE"
+$cmd || exit(1)
+
+if ($QUIET == NO) then
+       echo ...testing PKCS8 Export of DSA private key
+endif
+set cmd="$PKCS8EXPORTTOOL $DSA_PRIV_KEY $PKCS8_KEY_EXP $PKCS8_KEY_PARSE_OS $KEYCHAIN PEM dsa 512 $QUIET $NOACL $SECURE_PHRASE"
+$cmd || exit(1)
+set cmd="$PKCS8EXPORTTOOL $DSA_PRIV_KEY $PKCS8_KEY_EXP $PKCS8_KEY_PARSE_OS $KEYCHAIN DER dsa 512 $QUIET $NOACL $SECURE_PHRASE"
+$cmd || exit(1)
+
+# cleanup
+if($NOCLEAN == NO) then
+       set cmd="rm -f $RSA_PRIV_KEY $DSA_PRIV_KEY $PKCS8_KEY_OS $PKCS8_KEY_EXP $PKCS8_KEY_PARSE_OS"
+       if ($QUIET == NO) then
+               echo $cmd
+       endif
+       $cmd || exit(1)
+endif
+
+if ($QUIET == NO) then
+       echo === PKCS8 test complete ===
+endif
+