--- /dev/null
+#! /bin/csh -f
+#
+# Run import/export tests for PKCS12.
+#
+# 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
+
+# PKCS12 blob, we generate
+set GEN_PKCS12_PFX=${BUILD_DIR}/generated.p12
+
+# parsed PEM sequence generated by openssl (parsing $GEN_PKCS12_PFX)
+set PKCS12_PARSED_PEM=${BUILD_DIR}/parsed.p12.pem
+
+# PKCS12 blob, openssl generates
+set GEN_OPENSSL_PKCS12_PFX=${BUILD_DIR}/generatedOpenssl.p12
+
+# PKCS12 passphrase
+set PKCS12_PASSPHRASE=somePassphrase
+
+# user specified variables
+set QUIET=NO
+set QUIET_ARG=
+set KEYSIZE=512
+set NOACL=NO
+set NOACL_ARG=
+set SECURE_PASSPHR=
+set NOCLEAN=NO
+
+#
+# Verify existence of a few crucial things before we start.
+#
+if( ( ! -e $KCIMPORT ) || \
+ ( ! -e $KCEXPORT ) ) then
+ echo === You do not seem to have all of the required executables.
+ echo === Please build all of cspxutils and clxutils.
+ echo === See the README files in those directories for info.
+ exit(1)
+endif
+
+# 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_PASSPHR=-Z
+ shift
+ breaksw
+ case N:
+ set NOCLEAN=YES
+ shift
+ breaksw
+ default:
+ echo Usage: importExportPkcs12 \[q\(uiet\)\] \[n\(oACL\)\] \[s\(ecurePassphrase\)\] \[N\(oClean\)\]
+ exit(1)
+ endsw
+end
+
+# Create keypair and cert using certtool
+
+echo === Begin PKCS12 test ===
+if ($QUIET == NO) then
+ echo Creating keypair and cert with certtool...
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+set cmd="$CERTTOOL c k=$KEYCHAIN_PATH Z"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd > /dev/null || exit(1)
+
+# export as P12
+
+if ($QUIET == NO) then
+ echo ...Exporting private key and cert as PKCS12...
+endif
+# note we export Identities, not All, since pub keys can't go in a P12
+set cmd="$KCEXPORT $KEYCHAIN -t identities -f pkcs12 -o $GEN_PKCS12_PFX -z $PKCS12_PASSPHRASE $SECURE_PASSPHR -q"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+
+# import and verify
+
+if ($QUIET == NO) then
+ echo ...Importing PKCS12, explicit format...
+endif
+if ($QUIET == NO) then
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+set cmd="$KCIMPORT $GEN_PKCS12_PFX -k $KEYCHAIN -f pkcs12 -z $PKCS12_PASSPHRASE -C 0 -K 0 -I 1 -T agg -F pkcs12 -q $NOACL_ARG $SECURE_PASSPHR"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+
+if ($QUIET == NO) then
+ echo ...Importing PKCS12, format inferred from filename...
+endif
+if ($QUIET == NO) then
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+set cmd="$KCIMPORT $GEN_PKCS12_PFX -k $KEYCHAIN -z $PKCS12_PASSPHRASE -C 0 -K 0 -I 1 -T agg -F pkcs12 -q $NOACL_ARG $SECURE_PASSPHR"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+if ($QUIET == NO) then
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+
+#
+# Exchange with openssl.
+#
+if ($QUIET == NO) then
+ echo ...parsing our P12 PFX with openssl...
+endif
+set cmd="$RM -f $PKCS12_PARSED_PEM"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+set cmd="$OPENSSL pkcs12 -in $GEN_PKCS12_PFX -passin pass:$PKCS12_PASSPHRASE -nodes -out $PKCS12_PARSED_PEM"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd >& /dev/null|| exit(1)
+
+if ($QUIET == NO) then
+ echo ...parsing openssl PEM sequence
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+set cmd="$KCIMPORT $PKCS12_PARSED_PEM -k $KEYCHAIN -z $PKCS12_PASSPHRASE -q $NOACL_ARG $SECURE_PASSPHR"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+
+if ($QUIET == NO) then
+ echo ...creating PKCS12 with openssl, import to empty keychain
+endif
+set cmd="$OPENSSL pkcs12 -in $PKCS12_PARSED_PEM -out $GEN_OPENSSL_PKCS12_PFX -passout pass:$PKCS12_PASSPHRASE -export"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+if ($QUIET == NO) then
+ echo $CLEANKC
+endif
+$CLEANKC || exit(1)
+set cmd="$KCIMPORT $GEN_OPENSSL_PKCS12_PFX -z $PKCS12_PASSPHRASE -k $KEYCHAIN -K 0 -C 0 -I 1 -q $SECURE_PASSPHR"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+set cmd="$DBVERIFY $KEYCHAIN_PATH rsa priv $KEYSIZE $QUIET_ARG"
+if ($QUIET == NO) then
+ echo $cmd
+endif
+$cmd || exit(1)
+
+# cleanup
+if ($NOCLEAN == NO) then
+ set cmd="rm -f $GEN_PKCS12_PFX $PKCS12_PARSED_PEM $GEN_OPENSSL_PKCS12_PFX"
+ if ($QUIET == NO) then
+ echo $cmd
+ endif
+ $cmd || exit(1)
+endif
+
+if ($QUIET == NO) then
+ echo === PKCS12 test complete ===
+endif
+