security/nss/tests/cert/cert.sh

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/nss/tests/cert/cert.sh	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,1728 @@
     1.4 +#! /bin/bash
     1.5 +#
     1.6 +# This Source Code Form is subject to the terms of the Mozilla Public
     1.7 +# License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
     1.9 +
    1.10 +########################################################################
    1.11 +#
    1.12 +# mozilla/security/nss/tests/cert/rcert.sh
    1.13 +#
    1.14 +# Certificate generating and handeling for NSS QA, can be included 
    1.15 +# multiple times from all.sh and the individual scripts
    1.16 +#
    1.17 +# needs to work on all Unix and Windows platforms
    1.18 +#
    1.19 +# included from (don't expect this to be up to date)
    1.20 +# --------------------------------------------------
    1.21 +#   all.sh
    1.22 +#   ssl.sh
    1.23 +#   smime.sh
    1.24 +#   tools.sh
    1.25 +#
    1.26 +# special strings
    1.27 +# ---------------
    1.28 +#   FIXME ... known problems, search for this string
    1.29 +#   NOTE .... unexpected behavior
    1.30 +#
    1.31 +# FIXME - Netscape - NSS
    1.32 +########################################################################
    1.33 +
    1.34 +############################## cert_init ###############################
    1.35 +# local shell function to initialize this script
    1.36 +########################################################################
    1.37 +cert_init()
    1.38 +{
    1.39 +  SCRIPTNAME="cert.sh"
    1.40 +  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
    1.41 +      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
    1.42 +  fi
    1.43 +  if [ -z "${INIT_SOURCED}" ] ; then
    1.44 +      cd ../common
    1.45 +      . ./init.sh
    1.46 +  fi
    1.47 +  if [ -z "${IOPR_CERT_SOURCED}" ]; then
    1.48 +       . ../iopr/cert_iopr.sh
    1.49 +  fi
    1.50 +  SCRIPTNAME="cert.sh"
    1.51 +  CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
    1.52 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
    1.53 +      html_head "Certutil and Crlutil Tests with ECC"
    1.54 +  else
    1.55 +      html_head "Certutil and Crlutil Tests"
    1.56 +  fi
    1.57 +
    1.58 +  LIBDIR="${DIST}/${OBJDIR}/lib"
    1.59 +
    1.60 +  ROOTCERTSFILE=`ls -1 ${LIBDIR}/*nssckbi* | head -1`
    1.61 +  if [ ! "${ROOTCERTSFILE}" ] ; then
    1.62 +      html_failed "Looking for root certs module." 
    1.63 +      cert_log "ERROR: Root certs module not found."
    1.64 +      Exit 5 "Fatal - Root certs module not found."
    1.65 +  else
    1.66 +      html_passed "Looking for root certs module."
    1.67 +  fi
    1.68 +
    1.69 +  if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
    1.70 +	ROOTCERTSFILE=`cygpath -m ${ROOTCERTSFILE}`
    1.71 +  fi
    1.72 +}
    1.73 +
    1.74 +cert_log() ######################    write the cert_status file
    1.75 +{
    1.76 +    echo "$SCRIPTNAME $*"
    1.77 +    echo $* >>${CERT_LOG_FILE}
    1.78 +}
    1.79 +
    1.80 +########################################################################
    1.81 +# function wraps calls to pk12util, also: writes action and options
    1.82 +# to stdout.
    1.83 +# Params are the same as to pk12util.
    1.84 +# Returns pk12util status
    1.85 +#
    1.86 +pk12u()
    1.87 +{
    1.88 +    echo "${CU_ACTION} --------------------------"
    1.89 +
    1.90 +    echo "pk12util $@"
    1.91 +    ${BINDIR}/pk12util $@
    1.92 +    RET=$?
    1.93 +
    1.94 +    return $RET
    1.95 +}
    1.96 +
    1.97 +################################ certu #################################
    1.98 +# local shell function to call certutil, also: writes action and options to
    1.99 +# stdout, sets variable RET and writes results to the html file results
   1.100 +########################################################################
   1.101 +certu()
   1.102 +{
   1.103 +    echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
   1.104 +    EXPECTED=${RETEXPECTED-0}
   1.105 +
   1.106 +    if [ -n "${CU_SUBJECT}" ]; then
   1.107 +        #the subject of the cert contains blanks, and the shell 
   1.108 +        #will strip the quotes off the string, if called otherwise...
   1.109 +        echo "certutil -s \"${CU_SUBJECT}\" $*"
   1.110 +        ${PROFTOOL} ${BINDIR}/certutil -s "${CU_SUBJECT}" $*
   1.111 +        RET=$?
   1.112 +        CU_SUBJECT=""
   1.113 +    else
   1.114 +        echo "certutil $*"
   1.115 +        ${PROFTOOL} ${BINDIR}/certutil $*
   1.116 +        RET=$?
   1.117 +    fi
   1.118 +    if [ "$RET" -ne "$EXPECTED" ]; then
   1.119 +        CERTFAILED=$RET
   1.120 +        html_failed "${CU_ACTION} ($RET=$EXPECTED) " 
   1.121 +        cert_log "ERROR: ${CU_ACTION} failed $RET"
   1.122 +    else
   1.123 +        html_passed "${CU_ACTION}"
   1.124 +    fi
   1.125 +
   1.126 +    return $RET
   1.127 +}
   1.128 +
   1.129 +################################ crlu #################################
   1.130 +# local shell function to call crlutil, also: writes action and options to
   1.131 +# stdout, sets variable RET and writes results to the html file results
   1.132 +########################################################################
   1.133 +crlu()
   1.134 +{
   1.135 +    echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
   1.136 +    
   1.137 +    CRLUTIL="crlutil -q"
   1.138 +    echo "$CRLUTIL $*"
   1.139 +    ${PROFTOOL} ${BINDIR}/$CRLUTIL $*
   1.140 +    RET=$?
   1.141 +    if [ "$RET" -ne 0 ]; then
   1.142 +        CRLFAILED=$RET
   1.143 +        html_failed "${CU_ACTION} ($RET) " 
   1.144 +        cert_log "ERROR: ${CU_ACTION} failed $RET"
   1.145 +    else
   1.146 +        html_passed "${CU_ACTION}"
   1.147 +    fi
   1.148 +
   1.149 +    return $RET
   1.150 +}
   1.151 +
   1.152 +################################ ocspr ##################################
   1.153 +# local shell function to call ocsresp, also: writes action and options to
   1.154 +# stdout, sets variable RET and writes results to the html file results
   1.155 +#########################################################################
   1.156 +ocspr()
   1.157 +{
   1.158 +    echo "$SCRIPTNAME: ${OR_ACTION} --------------------------"
   1.159 +
   1.160 +    OCSPRESP="ocspresp"
   1.161 +    echo "$OCSPRESP $*"
   1.162 +    ${PROFTOOL} ${BINDIR}/$OCSPRESP $*
   1.163 +    RET=$?
   1.164 +    if [ "$RET" -ne 0 ]; then
   1.165 +        OCSPFAILED=$RET
   1.166 +        html_failed "${OR_ACTION} ($RET) "
   1.167 +        cert_log "ERROR: ${OR_ACTION} failed $RET"
   1.168 +    else
   1.169 +        html_passed "${OR_ACTION}"
   1.170 +    fi
   1.171 +
   1.172 +    return $RET
   1.173 +}
   1.174 +
   1.175 +modu()
   1.176 +{
   1.177 +    echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
   1.178 +
   1.179 +    MODUTIL="modutil"
   1.180 +    echo "$MODUTIL $*"
   1.181 +    # echo is used to press Enter expected by modutil
   1.182 +    echo | ${BINDIR}/$MODUTIL $*
   1.183 +    RET=$?
   1.184 +    if [ "$RET" -ne 0 ]; then
   1.185 +        MODFAILED=$RET
   1.186 +        html_failed "${CU_ACTION} ($RET) " 
   1.187 +        cert_log "ERROR: ${CU_ACTION} failed $RET"
   1.188 +    else
   1.189 +        html_passed "${CU_ACTION}"
   1.190 +    fi
   1.191 +
   1.192 +    return $RET
   1.193 +}
   1.194 +
   1.195 +############################# cert_init_cert ##########################
   1.196 +# local shell function to initialize creation of client and server certs
   1.197 +########################################################################
   1.198 +cert_init_cert()
   1.199 +{
   1.200 +    CERTDIR="$1"
   1.201 +    CERTNAME="$2"
   1.202 +    CERTSERIAL="$3"
   1.203 +    DOMAIN="$4"
   1.204 +
   1.205 +    if [ ! -d "${CERTDIR}" ]; then
   1.206 +        mkdir -p "${CERTDIR}"
   1.207 +    else
   1.208 +        echo "$SCRIPTNAME: WARNING - ${CERTDIR} exists"
   1.209 +    fi
   1.210 +    cd "${CERTDIR}"
   1.211 +    CERTDIR="."
   1.212 +
   1.213 +    PROFILEDIR=`cd ${CERTDIR}; pwd`
   1.214 +    if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
   1.215 +        PROFILEDIR=`cygpath -m ${PROFILEDIR}`
   1.216 +    fi
   1.217 +    if [ -n "${MULTIACCESS_DBM}" ]; then
   1.218 +	PROFILEDIR="multiaccess:${DOMAIN}"
   1.219 +    fi
   1.220 +
   1.221 +    noise
   1.222 +}
   1.223 +
   1.224 +############################# hw_acc #################################
   1.225 +# local shell function to add hw accelerator modules to the db
   1.226 +########################################################################
   1.227 +hw_acc()
   1.228 +{
   1.229 +    HW_ACC_RET=0
   1.230 +    HW_ACC_ERR=""
   1.231 +    if [ -n "$O_HWACC" -a "$O_HWACC" = ON -a -z "$USE_64" ] ; then
   1.232 +        echo "creating $CERTNAME s cert with hwaccelerator..."
   1.233 +        #case $ACCELERATOR in
   1.234 +        #rainbow)
   1.235 +
   1.236 +        echo "modutil -add rainbow -libfile /usr/lib/libcryptoki22.so "
   1.237 +        echo "         -dbdir ${PROFILEDIR} 2>&1 "
   1.238 +        echo | ${BINDIR}/modutil -add rainbow -libfile /usr/lib/libcryptoki22.so \
   1.239 +            -dbdir ${PROFILEDIR} 2>&1 
   1.240 +        if [ "$?" -ne 0 ]; then
   1.241 +            echo "modutil -add rainbow failed in `pwd`"
   1.242 +            HW_ACC_RET=1
   1.243 +            HW_ACC_ERR="modutil -add rainbow"
   1.244 +        fi
   1.245 +    
   1.246 +        echo "modutil -add ncipher "
   1.247 +        echo "         -libfile /opt/nfast/toolkits/pkcs11/libcknfast.so "
   1.248 +        echo "         -dbdir ${PROFILEDIR} 2>&1 "
   1.249 +        echo | ${BINDIR}/modutil -add ncipher \
   1.250 +            -libfile /opt/nfast/toolkits/pkcs11/libcknfast.so \
   1.251 +            -dbdir ${PROFILEDIR} 2>&1 
   1.252 +        if [ "$?" -ne 0 ]; then
   1.253 +            echo "modutil -add ncipher failed in `pwd`"
   1.254 +            HW_ACC_RET=`expr $HW_ACC_RET + 2`
   1.255 +            HW_ACC_ERR="$HW_ACC_ERR,modutil -add ncipher"
   1.256 +        fi
   1.257 +        if [ "$HW_ACC_RET" -ne 0 ]; then
   1.258 +            html_failed "Adding HW accelerators to certDB for ${CERTNAME} ($HW_ACC_RET) " 
   1.259 +        else
   1.260 +            html_passed "Adding HW accelerators to certDB for ${CERTNAME}"
   1.261 +        fi
   1.262 +
   1.263 +    fi
   1.264 +    return $HW_ACC_RET
   1.265 +}
   1.266 +
   1.267 +############################# cert_create_cert #########################
   1.268 +# local shell function to create client certs 
   1.269 +#     initialize DB, import
   1.270 +#     root cert
   1.271 +#     add cert to DB
   1.272 +########################################################################
   1.273 +cert_create_cert()
   1.274 +{
   1.275 +    cert_init_cert "$1" "$2" "$3" "$4"
   1.276 +
   1.277 +    CU_ACTION="Initializing ${CERTNAME}'s Cert DB"
   1.278 +    certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
   1.279 +    if [ "$RET" -ne 0 ]; then
   1.280 +        return $RET
   1.281 +    fi
   1.282 +
   1.283 +    CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB"
   1.284 +    modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1   
   1.285 +    if [ "$RET" -ne 0 ]; then
   1.286 +        return $RET
   1.287 +    fi
   1.288 +
   1.289 +    hw_acc
   1.290 +
   1.291 +    CU_ACTION="Import Root CA for $CERTNAME"
   1.292 +    certu -A -n "TestCA" -t "TC,TC,TC" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.293 +          -i "${R_CADIR}/TestCA.ca.cert" 2>&1
   1.294 +    if [ "$RET" -ne 0 ]; then
   1.295 +        return $RET
   1.296 +    fi
   1.297 +
   1.298 +    if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.299 +	CU_ACTION="Import EC Root CA for $CERTNAME"
   1.300 +	certu -A -n "TestCA-ec" -t "TC,TC,TC" -f "${R_PWFILE}" \
   1.301 +	    -d "${PROFILEDIR}" -i "${R_CADIR}/TestCA-ec.ca.cert" 2>&1
   1.302 +	if [ "$RET" -ne 0 ]; then
   1.303 +            return $RET
   1.304 +	fi
   1.305 +    fi
   1.306 +
   1.307 +    cert_add_cert "$5"
   1.308 +    return $?
   1.309 +}
   1.310 +
   1.311 +############################# cert_add_cert ############################
   1.312 +# local shell function to add client certs to an existing CERT DB
   1.313 +#     generate request
   1.314 +#     sign request
   1.315 +#     import Cert
   1.316 +#
   1.317 +########################################################################
   1.318 +cert_add_cert()
   1.319 +{
   1.320 +    CU_ACTION="Generate Cert Request for $CERTNAME"
   1.321 +    CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.322 +    certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req  2>&1
   1.323 +    if [ "$RET" -ne 0 ]; then
   1.324 +        return $RET
   1.325 +    fi
   1.326 +
   1.327 +    CU_ACTION="Sign ${CERTNAME}'s Request"
   1.328 +    certu -C -c "TestCA" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
   1.329 +          -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1
   1.330 +    if [ "$RET" -ne 0 ]; then
   1.331 +        return $RET
   1.332 +    fi
   1.333 +
   1.334 +    CU_ACTION="Import $CERTNAME's Cert"
   1.335 +    certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
   1.336 +          -i "${CERTNAME}.cert" 2>&1
   1.337 +    if [ "$RET" -ne 0 ]; then
   1.338 +        return $RET
   1.339 +    fi
   1.340 +
   1.341 +    cert_log "SUCCESS: $CERTNAME's Cert Created"
   1.342 +
   1.343 +#
   1.344 +#   Generate and add EC cert
   1.345 +#
   1.346 +    if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.347 +	CURVE="secp384r1"
   1.348 +	CU_ACTION="Generate EC Cert Request for $CERTNAME"
   1.349 +	CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.350 +	certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
   1.351 +	    -z "${R_NOISE_FILE}" -o req  2>&1
   1.352 +	if [ "$RET" -ne 0 ]; then
   1.353 +            return $RET
   1.354 +	fi
   1.355 +
   1.356 +	CU_ACTION="Sign ${CERTNAME}'s EC Request"
   1.357 +	certu -C -c "TestCA-ec" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
   1.358 +            -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" "$1" 2>&1
   1.359 +	if [ "$RET" -ne 0 ]; then
   1.360 +            return $RET
   1.361 +	fi
   1.362 +
   1.363 +	CU_ACTION="Import $CERTNAME's EC Cert"
   1.364 +	certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
   1.365 +	    -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
   1.366 +	if [ "$RET" -ne 0 ]; then
   1.367 +            return $RET
   1.368 +	fi
   1.369 +	cert_log "SUCCESS: $CERTNAME's EC Cert Created"
   1.370 +
   1.371 +#    Generate EC certificate signed with RSA
   1.372 +	CU_ACTION="Generate mixed EC Cert Request for $CERTNAME"
   1.373 +	CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.374 +	certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
   1.375 +	    -z "${R_NOISE_FILE}" -o req  2>&1
   1.376 +	if [ "$RET" -ne 0 ]; then
   1.377 +            return $RET
   1.378 +	fi
   1.379 +
   1.380 +	CU_ACTION="Sign ${CERTNAME}'s EC Request with RSA"
   1.381 +# Avoid conflicting serial numbers with TestCA issuer by keeping
   1.382 +# this set far away. A smaller number risks colliding with the
   1.383 +# extended ssl user certificates.
   1.384 +	NEWSERIAL=`expr ${CERTSERIAL} + 10000`
   1.385 +        certu -C -c "TestCA" -m "$NEWSERIAL" -v 60 -d "${P_R_CADIR}" \
   1.386 +            -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" "$1" 2>&1
   1.387 +	if [ "$RET" -ne 0 ]; then
   1.388 +            return $RET
   1.389 +	fi
   1.390 +
   1.391 +	CU_ACTION="Import $CERTNAME's mixed EC Cert"
   1.392 +	certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
   1.393 +	    -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
   1.394 +	if [ "$RET" -ne 0 ]; then
   1.395 +            return $RET
   1.396 +	fi
   1.397 +	cert_log "SUCCESS: $CERTNAME's mixed EC Cert Created"
   1.398 +    fi
   1.399 +
   1.400 +    return 0
   1.401 +}
   1.402 +
   1.403 +################################# cert_all_CA ################################
   1.404 +# local shell function to build the additional Temp. Certificate Authority (CA)
   1.405 +# used for the "real life" ssl test with 2 different CA's in the
   1.406 +# client and in the server's dir
   1.407 +##########################################################################
   1.408 +cert_all_CA()
   1.409 +{
   1.410 +    echo nss > ${PWFILE}
   1.411 +
   1.412 +    ALL_CU_SUBJECT="CN=NSS Test CA, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.413 +    cert_CA $CADIR TestCA -x "CTu,CTu,CTu" ${D_CA} "1"
   1.414 +
   1.415 +    ALL_CU_SUBJECT="CN=NSS Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.416 +    cert_CA $SERVER_CADIR serverCA -x "Cu,Cu,Cu" ${D_SERVER_CA} "2"
   1.417 +    ALL_CU_SUBJECT="CN=NSS Chain1 Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.418 +    cert_CA $SERVER_CADIR chain-1-serverCA "-c serverCA" "u,u,u" ${D_SERVER_CA} "3"
   1.419 +    ALL_CU_SUBJECT="CN=NSS Chain2 Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US" 
   1.420 +    cert_CA $SERVER_CADIR chain-2-serverCA "-c chain-1-serverCA" "u,u,u" ${D_SERVER_CA} "4"
   1.421 +
   1.422 +
   1.423 +
   1.424 +    ALL_CU_SUBJECT="CN=NSS Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.425 +    cert_CA $CLIENT_CADIR clientCA -x "Tu,Cu,Cu" ${D_CLIENT_CA} "5"
   1.426 +    ALL_CU_SUBJECT="CN=NSS Chain1 Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.427 +    cert_CA $CLIENT_CADIR chain-1-clientCA "-c clientCA" "u,u,u" ${D_CLIENT_CA} "6"
   1.428 +    ALL_CU_SUBJECT="CN=NSS Chain2 Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.429 +    cert_CA $CLIENT_CADIR chain-2-clientCA "-c chain-1-clientCA" "u,u,u" ${D_CLIENT_CA} "7"
   1.430 +
   1.431 +    rm $CLIENT_CADIR/root.cert $SERVER_CADIR/root.cert
   1.432 +
   1.433 +    # root.cert in $CLIENT_CADIR and in $SERVER_CADIR is one of the last 
   1.434 +    # in the chain
   1.435 +
   1.436 +    if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.437 +#
   1.438 +#       Create EC version of TestCA
   1.439 +	CA_CURVE="secp521r1"
   1.440 +	ALL_CU_SUBJECT="CN=NSS Test CA (ECC), O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.441 +	cert_ec_CA $CADIR TestCA-ec -x "CTu,CTu,CTu" ${D_CA} "1" ${CA_CURVE}
   1.442 +#
   1.443 +#       Create EC versions of the intermediate CA certs
   1.444 +	ALL_CU_SUBJECT="CN=NSS Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.445 +	cert_ec_CA $SERVER_CADIR serverCA-ec -x "Cu,Cu,Cu" ${D_SERVER_CA} "2" ${CA_CURVE}
   1.446 +	ALL_CU_SUBJECT="CN=NSS Chain1 Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.447 +	cert_ec_CA $SERVER_CADIR chain-1-serverCA-ec "-c serverCA-ec" "u,u,u" ${D_SERVER_CA} "3" ${CA_CURVE}
   1.448 +	ALL_CU_SUBJECT="CN=NSS Chain2 Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US" 
   1.449 +	cert_ec_CA $SERVER_CADIR chain-2-serverCA-ec "-c chain-1-serverCA-ec" "u,u,u" ${D_SERVER_CA} "4" ${CA_CURVE}
   1.450 +
   1.451 +	ALL_CU_SUBJECT="CN=NSS Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.452 +	cert_ec_CA $CLIENT_CADIR clientCA-ec -x "Tu,Cu,Cu" ${D_CLIENT_CA} "5" ${CA_CURVE}
   1.453 +	ALL_CU_SUBJECT="CN=NSS Chain1 Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.454 +	cert_ec_CA $CLIENT_CADIR chain-1-clientCA-ec "-c clientCA-ec" "u,u,u" ${D_CLIENT_CA} "6" ${CA_CURVE}
   1.455 +	ALL_CU_SUBJECT="CN=NSS Chain2 Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
   1.456 +	cert_ec_CA $CLIENT_CADIR chain-2-clientCA-ec "-c chain-1-clientCA-ec" "u,u,u" ${D_CLIENT_CA} "7" ${CA_CURVE}
   1.457 +
   1.458 +	rm $CLIENT_CADIR/ecroot.cert $SERVER_CADIR/ecroot.cert
   1.459 +#	ecroot.cert in $CLIENT_CADIR and in $SERVER_CADIR is one of the last 
   1.460 +#	in the chain
   1.461 +
   1.462 +    fi
   1.463 +}
   1.464 +
   1.465 +################################# cert_CA ################################
   1.466 +# local shell function to build the Temp. Certificate Authority (CA)
   1.467 +# used for testing purposes, creating  a CA Certificate and a root cert
   1.468 +##########################################################################
   1.469 +cert_CA()
   1.470 +{
   1.471 +  CUR_CADIR=$1
   1.472 +  NICKNAME=$2
   1.473 +  SIGNER=$3
   1.474 +  TRUSTARG=$4
   1.475 +  DOMAIN=$5
   1.476 +  CERTSERIAL=$6
   1.477 +
   1.478 +  echo "$SCRIPTNAME: Creating a CA Certificate $NICKNAME =========================="
   1.479 +
   1.480 +  if [ ! -d "${CUR_CADIR}" ]; then
   1.481 +      mkdir -p "${CUR_CADIR}"
   1.482 +  fi
   1.483 +  cd ${CUR_CADIR}
   1.484 +  pwd
   1.485 +
   1.486 +  LPROFILE=`pwd`
   1.487 +  if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
   1.488 +     LPROFILE=`cygpath -m ${LPROFILE}`
   1.489 +  fi
   1.490 +  if [ -n "${MULTIACCESS_DBM}" ]; then
   1.491 +	LPROFILE="multiaccess:${DOMAIN}"
   1.492 +  fi
   1.493 +
   1.494 +  if [ "$SIGNER" = "-x" ] ; then # self signed -> create DB
   1.495 +      CU_ACTION="Creating CA Cert DB"
   1.496 +      certu -N -d "${LPROFILE}" -f ${R_PWFILE} 2>&1
   1.497 +      if [ "$RET" -ne 0 ]; then
   1.498 +          Exit 5 "Fatal - failed to create CA $NICKNAME "
   1.499 +      fi
   1.500 +
   1.501 +      CU_ACTION="Loading root cert module to CA Cert DB"
   1.502 +      modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${LPROFILE}" 2>&1   
   1.503 +      if [ "$RET" -ne 0 ]; then
   1.504 +          return $RET
   1.505 +      fi
   1.506 +
   1.507 +      echo "$SCRIPTNAME: Certificate initialized ----------"
   1.508 +  fi
   1.509 +
   1.510 +
   1.511 +  ################# Creating CA Cert ######################################
   1.512 +  #
   1.513 +  CU_ACTION="Creating CA Cert $NICKNAME "
   1.514 +  CU_SUBJECT=$ALL_CU_SUBJECT
   1.515 +  certu -S -n $NICKNAME -t $TRUSTARG -v 600 $SIGNER -d ${LPROFILE} -1 -2 -5 \
   1.516 +        -f ${R_PWFILE} -z ${R_NOISE_FILE} -m $CERTSERIAL 2>&1 <<CERTSCRIPT
   1.517 +5
   1.518 +6
   1.519 +9
   1.520 +n
   1.521 +y
   1.522 +-1
   1.523 +n
   1.524 +5
   1.525 +6
   1.526 +7
   1.527 +9
   1.528 +n
   1.529 +CERTSCRIPT
   1.530 +
   1.531 +  if [ "$RET" -ne 0 ]; then
   1.532 +      echo "return value is $RET"
   1.533 +      Exit 6 "Fatal - failed to create CA cert"
   1.534 +  fi
   1.535 +
   1.536 +  ################# Exporting Root Cert ###################################
   1.537 +  #
   1.538 +  CU_ACTION="Exporting Root Cert"
   1.539 +  certu -L -n  $NICKNAME -r -d ${LPROFILE} -o root.cert 
   1.540 +  if [ "$RET" -ne 0 ]; then
   1.541 +      Exit 7 "Fatal - failed to export root cert"
   1.542 +  fi
   1.543 +  cp root.cert ${NICKNAME}.ca.cert
   1.544 +}
   1.545 +
   1.546 +################################ cert_ec_CA ##############################
   1.547 +# local shell function to build the Temp. Certificate Authority (CA)
   1.548 +# used for testing purposes, creating  a CA Certificate and a root cert
   1.549 +# This is the ECC version of cert_CA.
   1.550 +##########################################################################
   1.551 +cert_ec_CA()
   1.552 +{
   1.553 +  CUR_CADIR=$1
   1.554 +  NICKNAME=$2
   1.555 +  SIGNER=$3
   1.556 +  TRUSTARG=$4
   1.557 +  DOMAIN=$5
   1.558 +  CERTSERIAL=$6
   1.559 +  CURVE=$7
   1.560 +
   1.561 +  echo "$SCRIPTNAME: Creating an EC CA Certificate $NICKNAME =========================="
   1.562 +
   1.563 +  if [ ! -d "${CUR_CADIR}" ]; then
   1.564 +      mkdir -p "${CUR_CADIR}"
   1.565 +  fi
   1.566 +  cd ${CUR_CADIR}
   1.567 +  pwd
   1.568 +
   1.569 +  LPROFILE=.
   1.570 +  if [ -n "${MULTIACCESS_DBM}" ]; then
   1.571 +	LPROFILE="multiaccess:${DOMAIN}"
   1.572 +  fi
   1.573 +
   1.574 +  ################# Creating an EC CA Cert ################################
   1.575 +  #
   1.576 +  CU_ACTION="Creating EC CA Cert $NICKNAME "
   1.577 +  CU_SUBJECT=$ALL_CU_SUBJECT
   1.578 +  certu -S -n $NICKNAME -k ec -q $CURVE -t $TRUSTARG -v 600 $SIGNER \
   1.579 +    -d ${LPROFILE} -1 -2 -5 -f ${R_PWFILE} -z ${R_NOISE_FILE} \
   1.580 +    -m $CERTSERIAL 2>&1 <<CERTSCRIPT
   1.581 +5
   1.582 +6
   1.583 +9
   1.584 +n
   1.585 +y
   1.586 +-1
   1.587 +n
   1.588 +5
   1.589 +6
   1.590 +7
   1.591 +9
   1.592 +n
   1.593 +CERTSCRIPT
   1.594 +
   1.595 +  if [ "$RET" -ne 0 ]; then
   1.596 +      echo "return value is $RET"
   1.597 +      Exit 6 "Fatal - failed to create EC CA cert"
   1.598 +  fi
   1.599 +
   1.600 +  ################# Exporting EC Root Cert ################################
   1.601 +  #
   1.602 +  CU_ACTION="Exporting EC Root Cert"
   1.603 +  certu -L -n  $NICKNAME -r -d ${LPROFILE} -o ecroot.cert 
   1.604 +  if [ "$RET" -ne 0 ]; then
   1.605 +      Exit 7 "Fatal - failed to export ec root cert"
   1.606 +  fi
   1.607 +  cp ecroot.cert ${NICKNAME}.ca.cert
   1.608 +}
   1.609 +
   1.610 +############################## cert_smime_client #############################
   1.611 +# local shell function to create client Certificates for S/MIME tests 
   1.612 +##############################################################################
   1.613 +cert_smime_client()
   1.614 +{
   1.615 +  CERTFAILED=0
   1.616 +  echo "$SCRIPTNAME: Creating Client CA Issued Certificates =============="
   1.617 +
   1.618 +  cert_create_cert ${ALICEDIR} "Alice" 30 ${D_ALICE}
   1.619 +  cert_create_cert ${BOBDIR} "Bob" 40  ${D_BOB}
   1.620 +
   1.621 +  echo "$SCRIPTNAME: Creating Dave's Certificate -------------------------"
   1.622 +  cert_create_cert "${DAVEDIR}" Dave 50 ${D_DAVE}
   1.623 +
   1.624 +## XXX With this new script merging ECC and non-ECC tests, the
   1.625 +## call to cert_create_cert ends up creating two separate certs
   1.626 +## one for Eve and another for Eve-ec but they both end up with
   1.627 +## the same Subject Alt Name Extension, i.e., both the cert for
   1.628 +## Eve@bogus.com and the cert for Eve-ec@bogus.com end up 
   1.629 +## listing eve@bogus.net in the Certificate Subject Alt Name extension. 
   1.630 +## This can cause a problem later when cmsutil attempts to create
   1.631 +## enveloped data and accidently picks up the ECC cert (NSS currently
   1.632 +## does not support ECC for enveloped data creation). This script
   1.633 +## avoids the problem by ensuring that these conflicting certs are
   1.634 +## never added to the same cert database (see comment marked XXXX).
   1.635 +  echo "$SCRIPTNAME: Creating multiEmail's Certificate --------------------"
   1.636 +  cert_create_cert "${EVEDIR}" "Eve" 60 ${D_EVE} "-7 eve@bogus.net,eve@bogus.cc,beve@bogus.com"
   1.637 +
   1.638 +  #echo "************* Copying CA files to ${SERVERDIR}"
   1.639 +  #cp ${CADIR}/*.db .
   1.640 +  #hw_acc
   1.641 +
   1.642 +  #########################################################################
   1.643 +  #
   1.644 +  #cd ${CERTDIR}
   1.645 +  #CU_ACTION="Creating ${CERTNAME}'s Server Cert"
   1.646 +  #CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS Netscape, L=Mountain View, ST=California, C=US"
   1.647 +  #certu -S -n "${CERTNAME}" -c "TestCA" -t "u,u,u" -m "$CERTSERIAL" \
   1.648 +  #	-d ${PROFILEDIR} -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -v 60 2>&1
   1.649 +
   1.650 +  #CU_ACTION="Export Dave's Cert"
   1.651 +  #cd ${DAVEDIR}
   1.652 +  #certu -L -n "Dave" -r -d ${P_R_DAVE} -o Dave.cert
   1.653 +
   1.654 +  ################# Importing Certificates for S/MIME tests ###############
   1.655 +  #
   1.656 +  echo "$SCRIPTNAME: Importing Certificates =============================="
   1.657 +  CU_ACTION="Import Bob's cert into Alice's db"
   1.658 +  certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.659 +        -i ${R_BOBDIR}/Bob.cert 2>&1
   1.660 +
   1.661 +  CU_ACTION="Import Dave's cert into Alice's DB"
   1.662 +  certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.663 +        -i ${R_DAVEDIR}/Dave.cert 2>&1
   1.664 +
   1.665 +  CU_ACTION="Import Dave's cert into Bob's DB"
   1.666 +  certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
   1.667 +        -i ${R_DAVEDIR}/Dave.cert 2>&1
   1.668 +
   1.669 +  CU_ACTION="Import Eve's cert into Alice's DB"
   1.670 +  certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.671 +        -i ${R_EVEDIR}/Eve.cert 2>&1
   1.672 +
   1.673 +  CU_ACTION="Import Eve's cert into Bob's DB"
   1.674 +  certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
   1.675 +        -i ${R_EVEDIR}/Eve.cert 2>&1
   1.676 +
   1.677 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.678 +      echo "$SCRIPTNAME: Importing EC Certificates =============================="
   1.679 +      CU_ACTION="Import Bob's EC cert into Alice's db"
   1.680 +      certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.681 +          -i ${R_BOBDIR}/Bob-ec.cert 2>&1
   1.682 +
   1.683 +      CU_ACTION="Import Dave's EC cert into Alice's DB"
   1.684 +      certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.685 +          -i ${R_DAVEDIR}/Dave-ec.cert 2>&1
   1.686 +
   1.687 +      CU_ACTION="Import Dave's EC cert into Bob's DB"
   1.688 +      certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
   1.689 +          -i ${R_DAVEDIR}/Dave-ec.cert 2>&1
   1.690 +
   1.691 +## XXXX Do not import Eve's EC cert until we can make sure that
   1.692 +## the email addresses listed in the Subject Alt Name Extension 
   1.693 +## inside Eve's ECC and non-ECC certs are different.
   1.694 +#     CU_ACTION="Import Eve's EC cert into Alice's DB"
   1.695 +#     certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
   1.696 +#         -i ${R_EVEDIR}/Eve-ec.cert 2>&1
   1.697 +
   1.698 +#     CU_ACTION="Import Eve's EC cert into Bob's DB"
   1.699 +#     certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
   1.700 +#         -i ${R_EVEDIR}/Eve-ec.cert 2>&1
   1.701 +  fi
   1.702 +
   1.703 +  if [ "$CERTFAILED" != 0 ] ; then
   1.704 +      cert_log "ERROR: SMIME failed $RET"
   1.705 +  else
   1.706 +      cert_log "SUCCESS: SMIME passed"
   1.707 +  fi
   1.708 +}
   1.709 +
   1.710 +############################## cert_extended_ssl #######################
   1.711 +# local shell function to create client + server certs for extended SSL test
   1.712 +########################################################################
   1.713 +cert_extended_ssl()
   1.714 +{
   1.715 +
   1.716 +  ################# Creating Certs for extended SSL test ####################
   1.717 +  #
   1.718 +  CERTFAILED=0
   1.719 +  echo "$SCRIPTNAME: Creating Certificates, issued by the last ==============="
   1.720 +  echo "     of a chain of CA's which are not in the same database============"
   1.721 +
   1.722 +  echo "Server Cert"
   1.723 +  cert_init_cert ${EXT_SERVERDIR} "${HOSTADDR}" 1 ${D_EXT_SERVER}
   1.724 +
   1.725 +  CU_ACTION="Initializing ${CERTNAME}'s Cert DB (ext.)"
   1.726 +  certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
   1.727 +
   1.728 +  CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
   1.729 +  modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
   1.730 +
   1.731 +  CU_ACTION="Generate Cert Request for $CERTNAME (ext)"
   1.732 +  CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.733 +  certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1
   1.734 +
   1.735 +  CU_ACTION="Sign ${CERTNAME}'s Request (ext)"
   1.736 +  cp ${CERTDIR}/req ${SERVER_CADIR}
   1.737 +  certu -C -c "chain-2-serverCA" -m 200 -v 60 -d "${P_SERVER_CADIR}" \
   1.738 +        -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
   1.739 +
   1.740 +  CU_ACTION="Import $CERTNAME's Cert  -t u,u,u (ext)"
   1.741 +  certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
   1.742 +        -i "${CERTNAME}.cert" 2>&1
   1.743 +
   1.744 +  CU_ACTION="Import Client Root CA -t T,, for $CERTNAME (ext.)"
   1.745 +  certu -A -n "clientCA" -t "T,," -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.746 +          -i "${CLIENT_CADIR}/clientCA.ca.cert" 2>&1
   1.747 +
   1.748 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.749 +#
   1.750 +#     Repeat the above for EC certs
   1.751 +#
   1.752 +      EC_CURVE="secp256r1"
   1.753 +      CU_ACTION="Generate EC Cert Request for $CERTNAME (ext)"
   1.754 +      CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.755 +      certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
   1.756 +	  -z "${R_NOISE_FILE}" -o req 2>&1
   1.757 +
   1.758 +      CU_ACTION="Sign ${CERTNAME}'s EC Request (ext)"
   1.759 +      cp ${CERTDIR}/req ${SERVER_CADIR}
   1.760 +      certu -C -c "chain-2-serverCA-ec" -m 200 -v 60 -d "${P_SERVER_CADIR}" \
   1.761 +          -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" 2>&1
   1.762 +
   1.763 +      CU_ACTION="Import $CERTNAME's EC Cert  -t u,u,u (ext)"
   1.764 +      certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
   1.765 +	  -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
   1.766 +
   1.767 +      CU_ACTION="Import Client EC Root CA -t T,, for $CERTNAME (ext.)"
   1.768 +      certu -A -n "clientCA-ec" -t "T,," -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.769 +          -i "${CLIENT_CADIR}/clientCA-ec.ca.cert" 2>&1
   1.770 +#
   1.771 +#     done with EC certs
   1.772 +#
   1.773 +#     Repeat again for mixed EC certs
   1.774 +#
   1.775 +      EC_CURVE="secp256r1"
   1.776 +      CU_ACTION="Generate mixed EC Cert Request for $CERTNAME (ext)"
   1.777 +      CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.778 +      certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
   1.779 +	  -z "${R_NOISE_FILE}" -o req 2>&1
   1.780 +
   1.781 +      CU_ACTION="Sign ${CERTNAME}'s mixed EC Request (ext)"
   1.782 +      cp ${CERTDIR}/req ${SERVER_CADIR}
   1.783 +      certu -C -c "chain-2-serverCA" -m 201 -v 60 -d "${P_SERVER_CADIR}" \
   1.784 +          -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" 2>&1
   1.785 +
   1.786 +      CU_ACTION="Import $CERTNAME's mixed EC Cert  -t u,u,u (ext)"
   1.787 +      certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
   1.788 +	  -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
   1.789 +
   1.790 +#      CU_ACTION="Import Client mixed EC Root CA -t T,, for $CERTNAME (ext.)"
   1.791 +#      certu -A -n "clientCA-ecmixed" -t "T,," -f "${R_PWFILE}" \
   1.792 +#	  -d "${PROFILEDIR}" -i "${CLIENT_CADIR}/clientCA-ecmixed.ca.cert" \
   1.793 +#	  2>&1
   1.794 +  fi
   1.795 +
   1.796 +  echo "Importing all the server's own CA chain into the servers DB"
   1.797 +  for CA in `find ${SERVER_CADIR} -name "?*.ca.cert"` ;
   1.798 +  do
   1.799 +      N=`basename $CA | sed -e "s/.ca.cert//"`
   1.800 +      if [ $N = "serverCA" -o $N = "serverCA-ec" ] ; then
   1.801 +          T="-t C,C,C"
   1.802 +      else
   1.803 +          T="-t u,u,u"
   1.804 +      fi
   1.805 +      CU_ACTION="Import $N CA $T for $CERTNAME (ext.) "
   1.806 +      certu -A -n $N  $T -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.807 +          -i "${CA}" 2>&1
   1.808 +  done
   1.809 +#============
   1.810 +  echo "Client Cert"
   1.811 +  cert_init_cert ${EXT_CLIENTDIR} ExtendedSSLUser 1 ${D_EXT_CLIENT}
   1.812 +
   1.813 +  CU_ACTION="Initializing ${CERTNAME}'s Cert DB (ext.)"
   1.814 +  certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
   1.815 +
   1.816 +  CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
   1.817 +  modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
   1.818 +
   1.819 +  CU_ACTION="Generate Cert Request for $CERTNAME (ext)"
   1.820 +  CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.821 +  certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" \
   1.822 +      -o req 2>&1
   1.823 +
   1.824 +  CU_ACTION="Sign ${CERTNAME}'s Request (ext)"
   1.825 +  cp ${CERTDIR}/req ${CLIENT_CADIR}
   1.826 +  certu -C -c "chain-2-clientCA" -m 300 -v 60 -d "${P_CLIENT_CADIR}" \
   1.827 +        -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
   1.828 +
   1.829 +  CU_ACTION="Import $CERTNAME's Cert -t u,u,u (ext)"
   1.830 +  certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
   1.831 +        -i "${CERTNAME}.cert" 2>&1
   1.832 +  CU_ACTION="Import Server Root CA -t C,C,C for $CERTNAME (ext.)"
   1.833 +  certu -A -n "serverCA" -t "C,C,C" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.834 +          -i "${SERVER_CADIR}/serverCA.ca.cert" 2>&1
   1.835 +
   1.836 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.837 +#
   1.838 +#     Repeat the above for EC certs
   1.839 +#
   1.840 +      CU_ACTION="Generate EC Cert Request for $CERTNAME (ext)"
   1.841 +      CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.842 +      certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
   1.843 +	  -z "${R_NOISE_FILE}" -o req 2>&1
   1.844 +
   1.845 +      CU_ACTION="Sign ${CERTNAME}'s EC Request (ext)"
   1.846 +      cp ${CERTDIR}/req ${CLIENT_CADIR}
   1.847 +      certu -C -c "chain-2-clientCA-ec" -m 300 -v 60 -d "${P_CLIENT_CADIR}" \
   1.848 +          -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" 2>&1
   1.849 +
   1.850 +      CU_ACTION="Import $CERTNAME's EC Cert -t u,u,u (ext)"
   1.851 +      certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
   1.852 +	  -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
   1.853 +
   1.854 +      CU_ACTION="Import Server EC Root CA -t C,C,C for $CERTNAME (ext.)"
   1.855 +      certu -A -n "serverCA-ec" -t "C,C,C" -f "${R_PWFILE}" \
   1.856 +	  -d "${PROFILEDIR}" -i "${SERVER_CADIR}/serverCA-ec.ca.cert" 2>&1
   1.857 +#
   1.858 +# done with EC certs
   1.859 +#
   1.860 +#
   1.861 +#     Repeat the above for mixed EC certs
   1.862 +#
   1.863 +      CU_ACTION="Generate mixed EC Cert Request for $CERTNAME (ext)"
   1.864 +      CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
   1.865 +      certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
   1.866 +	  -z "${R_NOISE_FILE}" -o req 2>&1
   1.867 +
   1.868 +      CU_ACTION="Sign ${CERTNAME}'s mixed EC Request (ext)"
   1.869 +      cp ${CERTDIR}/req ${CLIENT_CADIR}
   1.870 +      certu -C -c "chain-2-clientCA" -m 301 -v 60 -d "${P_CLIENT_CADIR}" \
   1.871 +          -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" 2>&1
   1.872 +
   1.873 +      CU_ACTION="Import $CERTNAME's mixed EC Cert -t u,u,u (ext)"
   1.874 +      certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
   1.875 +	  -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
   1.876 +
   1.877 +#      CU_ACTION="Import Server EC Root CA -t C,C,C for $CERTNAME (ext.)"
   1.878 +#      certu -A -n "serverCA-ec" -t "C,C,C" -f "${R_PWFILE}" \
   1.879 +#	  -d "${PROFILEDIR}" -i "${SERVER_CADIR}/serverCA-ec.ca.cert" 2>&1
   1.880 +#
   1.881 +# done with mixed EC certs
   1.882 +#
   1.883 +  fi
   1.884 +
   1.885 +  echo "Importing all the client's own CA chain into the servers DB"
   1.886 +  for CA in `find ${CLIENT_CADIR} -name "?*.ca.cert"` ;
   1.887 +  do
   1.888 +      N=`basename $CA | sed -e "s/.ca.cert//"`
   1.889 +      if [ $N = "clientCA" -o $N = "clientCA-ec" ] ; then
   1.890 +          T="-t T,C,C"
   1.891 +      else
   1.892 +          T="-t u,u,u"
   1.893 +      fi
   1.894 +      CU_ACTION="Import $N CA $T for $CERTNAME (ext.)"
   1.895 +      certu -A -n $N  $T -f "${R_PWFILE}" -d "${PROFILEDIR}" \
   1.896 +          -i "${CA}" 2>&1
   1.897 +  done
   1.898 +  if [ "$CERTFAILED" != 0 ] ; then
   1.899 +      cert_log "ERROR: EXT failed $RET"
   1.900 +  else
   1.901 +      cert_log "SUCCESS: EXT passed"
   1.902 +  fi
   1.903 +}
   1.904 +
   1.905 +############################## cert_ssl ################################
   1.906 +# local shell function to create client + server certs for SSL test
   1.907 +########################################################################
   1.908 +cert_ssl()
   1.909 +{
   1.910 +  ################# Creating Certs for SSL test ###########################
   1.911 +  #
   1.912 +  CERTFAILED=0
   1.913 +  echo "$SCRIPTNAME: Creating Client CA Issued Certificates ==============="
   1.914 +  cert_create_cert ${CLIENTDIR} "TestUser" 70 ${D_CLIENT}
   1.915 +
   1.916 +  echo "$SCRIPTNAME: Creating Server CA Issued Certificate for \\"
   1.917 +  echo "             ${HOSTADDR} ------------------------------------"
   1.918 +  cert_create_cert ${SERVERDIR} "${HOSTADDR}" 100 ${D_SERVER}
   1.919 +  echo "$SCRIPTNAME: Creating Server CA Issued Certificate for \\"
   1.920 +  echo "             ${HOSTADDR}-sni --------------------------------"
   1.921 +  CERTSERIAL=101
   1.922 +  CERTNAME="${HOST}-sni${sniCertCount}.${DOMSUF}"
   1.923 +  cert_add_cert 
   1.924 +  CU_ACTION="Modify trust attributes of Root CA -t TC,TC,TC"
   1.925 +  certu -M -n "TestCA" -t "TC,TC,TC" -d ${PROFILEDIR} -f "${R_PWFILE}"
   1.926 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
   1.927 +      CU_ACTION="Modify trust attributes of EC Root CA -t TC,TC,TC"
   1.928 +      certu -M -n "TestCA-ec" -t "TC,TC,TC" -d ${PROFILEDIR} -f "${R_PWFILE}"
   1.929 +  fi
   1.930 +#  cert_init_cert ${SERVERDIR} "${HOSTADDR}" 1 ${D_SERVER}
   1.931 +#  echo "************* Copying CA files to ${SERVERDIR}"
   1.932 +#  cp ${CADIR}/*.db .
   1.933 +#  hw_acc
   1.934 +#  CU_ACTION="Creating ${CERTNAME}'s Server Cert"
   1.935 +#  CU_SUBJECT="CN=${CERTNAME}, O=BOGUS Netscape, L=Mountain View, ST=California, C=US"
   1.936 +#  certu -S -n "${CERTNAME}" -c "TestCA" -t "Pu,Pu,Pu" -d ${PROFILEDIR} \
   1.937 +#	 -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -v 60 2>&1
   1.938 +
   1.939 +  if [ "$CERTFAILED" != 0 ] ; then
   1.940 +      cert_log "ERROR: SSL failed $RET"
   1.941 +  else
   1.942 +      cert_log "SUCCESS: SSL passed"
   1.943 +  fi
   1.944 +
   1.945 +  echo "$SCRIPTNAME: Creating database for OCSP stapling tests  ==============="
   1.946 +  echo "cp -r ${SERVERDIR} ${STAPLINGDIR}"
   1.947 +  cp -r ${R_SERVERDIR} ${R_STAPLINGDIR}
   1.948 +  pk12u -o ${R_STAPLINGDIR}/ca.p12 -n TestCA -k ${R_PWFILE} -w ${R_PWFILE} -d ${R_CADIR}
   1.949 +  pk12u -i ${R_STAPLINGDIR}/ca.p12 -k ${R_PWFILE} -w ${R_PWFILE} -d ${R_STAPLINGDIR}
   1.950 +}
   1.951 +############################## cert_stresscerts ################################
   1.952 +# local shell function to create client certs for SSL stresstest
   1.953 +########################################################################
   1.954 +cert_stresscerts()
   1.955 +{
   1.956 +
   1.957 +  ############### Creating Certs for SSL stress test #######################
   1.958 +  #
   1.959 +  CERTDIR="$CLIENTDIR"
   1.960 +  cd "${CERTDIR}"
   1.961 +
   1.962 +  PROFILEDIR=`cd ${CERTDIR}; pwd`
   1.963 +  if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
   1.964 +     PROFILEDIR=`cygpath -m ${PROFILEDIR}`
   1.965 +  fi  
   1.966 +  if [ -n "${MULTIACCESS_DBM}" ]; then
   1.967 +     PROFILEDIR="multiaccess:${D_CLIENT}"
   1.968 +  fi
   1.969 +  CERTFAILED=0
   1.970 +  echo "$SCRIPTNAME: Creating Client CA Issued Certificates ==============="
   1.971 +
   1.972 +  CONTINUE=$GLOB_MAX_CERT
   1.973 +  CERTSERIAL=10
   1.974 +
   1.975 +  while [ $CONTINUE -ge $GLOB_MIN_CERT ]
   1.976 +  do
   1.977 +      CERTNAME="TestUser$CONTINUE"
   1.978 +#      cert_add_cert ${CLIENTDIR} "TestUser$CONTINUE" $CERTSERIAL
   1.979 +      cert_add_cert 
   1.980 +      CERTSERIAL=`expr $CERTSERIAL + 1 `
   1.981 +      CONTINUE=`expr $CONTINUE - 1 `
   1.982 +  done
   1.983 +  if [ "$CERTFAILED" != 0 ] ; then
   1.984 +      cert_log "ERROR: StressCert failed $RET"
   1.985 +  else
   1.986 +      cert_log "SUCCESS: StressCert passed"
   1.987 +  fi
   1.988 +}
   1.989 +
   1.990 +############################## cert_fips #####################################
   1.991 +# local shell function to create certificates for FIPS tests 
   1.992 +##############################################################################
   1.993 +cert_fips()
   1.994 +{
   1.995 +  CERTFAILED=0
   1.996 +  echo "$SCRIPTNAME: Creating FIPS 140 DSA Certificates =============="
   1.997 +  cert_init_cert "${FIPSDIR}" "FIPS PUB 140 Test Certificate" 1000 "${D_FIPS}"
   1.998 +
   1.999 +  CU_ACTION="Initializing ${CERTNAME}'s Cert DB"
  1.1000 +  certu -N -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" 2>&1
  1.1001 +
  1.1002 +  CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
  1.1003 +  modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
  1.1004 +
  1.1005 +  echo "$SCRIPTNAME: Enable FIPS mode on database -----------------------"
  1.1006 +  CU_ACTION="Enable FIPS mode on database for ${CERTNAME}"
  1.1007 +  echo "modutil -dbdir ${PROFILEDIR} -fips true "
  1.1008 +  ${BINDIR}/modutil -dbdir ${PROFILEDIR} -fips true 2>&1 <<MODSCRIPT
  1.1009 +y
  1.1010 +MODSCRIPT
  1.1011 +  RET=$?
  1.1012 +  if [ "$RET" -ne 0 ]; then
  1.1013 +    html_failed "${CU_ACTION} ($RET) " 
  1.1014 +    cert_log "ERROR: ${CU_ACTION} failed $RET"
  1.1015 +  else
  1.1016 +    html_passed "${CU_ACTION}"
  1.1017 +  fi
  1.1018 +
  1.1019 +  CU_ACTION="Generate Certificate for ${CERTNAME}"
  1.1020 +  CU_SUBJECT="CN=${CERTNAME}, E=fips@bogus.com, O=BOGUS NSS, OU=FIPS PUB 140, L=Mountain View, ST=California, C=US"
  1.1021 +  certu -S -n ${FIPSCERTNICK} -x -t "Cu,Cu,Cu" -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" -k dsa -v 600 -m 500 -z "${R_NOISE_FILE}" 2>&1
  1.1022 +  if [ "$RET" -eq 0 ]; then
  1.1023 +    cert_log "SUCCESS: FIPS passed"
  1.1024 +  fi
  1.1025 +}
  1.1026 +
  1.1027 +############################## cert_eccurves ###########################
  1.1028 +# local shell function to create server certs for all EC curves
  1.1029 +########################################################################
  1.1030 +cert_eccurves()
  1.1031 +{
  1.1032 +  ################# Creating Certs for EC curves test ########################
  1.1033 +  #
  1.1034 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1035 +    echo "$SCRIPTNAME: Creating Server CA Issued Certificate for "
  1.1036 +    echo "             EC Curves Test Certificates ------------------------------------"
  1.1037 +
  1.1038 +    cert_init_cert "${ECCURVES_DIR}" "EC Curves Test Certificates" 1 ${D_ECCURVES}
  1.1039 +
  1.1040 +    CU_ACTION="Initializing EC Curve's Cert DB"
  1.1041 +    certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1042 +
  1.1043 +    CU_ACTION="Loading root cert module to EC Curve's Cert DB"
  1.1044 +    modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
  1.1045 +
  1.1046 +    CU_ACTION="Import EC Root CA for $CERTNAME"
  1.1047 +    certu -A -n "TestCA-ec" -t "TC,TC,TC" -f "${R_PWFILE}" \
  1.1048 +        -d "${PROFILEDIR}" -i "${R_CADIR}/TestCA-ec.ca.cert" 2>&1
  1.1049 +
  1.1050 +    if [ -n "${NSS_ECC_MORE_THAN_SUITE_B}" ] ; then
  1.1051 +      CURVE_LIST="c2pnb163v1 c2pnb163v2 c2pnb163v3 c2pnb176v1 \
  1.1052 +	c2pnb208w1 c2pnb272w1 c2pnb304w1 c2pnb368w1 \
  1.1053 +	c2tnb191v1 c2tnb191v2 c2tnb191v3 c2tnb239v1 \
  1.1054 +	c2tnb239v2 c2tnb239v3 c2tnb359v1 c2tnb431r1 \
  1.1055 +	nistb163 nistb233 nistb283 nistb409 nistb571 \
  1.1056 +	nistk163 nistk233 nistk283 nistk409 nistk571 \
  1.1057 +	nistp192 nistp224 nistp256 nistp384 nistp521 \
  1.1058 +	prime192v1 prime192v2 prime192v3 \
  1.1059 +	prime239v1 prime239v2 prime239v3 \
  1.1060 +	secp112r1 secp112r2 secp128r1 secp128r2 secp160k1 \
  1.1061 +	secp160r1 secp160r2 secp192k1 secp192r1 secp224k1 \
  1.1062 +	secp224r1 secp256k1 secp256r1 secp384r1 secp521r1 \
  1.1063 +	sect113r1 sect113r2 sect131r1 sect131r2 sect163k1 sect163r1 \
  1.1064 +	sect163r2 sect193r1 sect193r2 sect233k1 sect233r1 sect239k1 \
  1.1065 +	sect283k1 sect283r1 sect409k1 sect409r1 sect571k1 sect571r1"
  1.1066 +    else
  1.1067 +      CURVE_LIST="nistp256 nistp384 nistp521"
  1.1068 +    fi
  1.1069 +    CERTSERIAL=2000
  1.1070 +
  1.1071 +    for CURVE in ${CURVE_LIST}
  1.1072 +    do
  1.1073 +	CERTFAILED=0
  1.1074 +	CERTNAME="Curve-${CURVE}"
  1.1075 +	CERTSERIAL=`expr $CERTSERIAL + 1 `
  1.1076 +	CU_ACTION="Generate EC Cert Request for $CERTNAME"
  1.1077 +	CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1078 +	certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
  1.1079 +		-z "${R_NOISE_FILE}" -o req  2>&1
  1.1080 +	
  1.1081 +	if [ $RET -eq 0 ] ; then
  1.1082 +	  CU_ACTION="Sign ${CERTNAME}'s EC Request"
  1.1083 +	  certu -C -c "TestCA-ec" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
  1.1084 +		-i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" "$1" 2>&1
  1.1085 +	fi
  1.1086 +	
  1.1087 +	if [ $RET -eq 0 ] ; then
  1.1088 +	  CU_ACTION="Import $CERTNAME's EC Cert"
  1.1089 +	  certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
  1.1090 +		-f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
  1.1091 +	fi
  1.1092 +    done
  1.1093 +
  1.1094 +  fi # $NSS_DISABLE_ECC
  1.1095 +}
  1.1096 +
  1.1097 +########################### cert_extensions_test #############################
  1.1098 +# local shell function to test cert extensions generation
  1.1099 +##############################################################################
  1.1100 +cert_extensions_test()
  1.1101 +{
  1.1102 +    COUNT=`expr ${COUNT} + 1`
  1.1103 +    CERTNAME=TestExt${COUNT}
  1.1104 +    CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1105 +
  1.1106 +    echo
  1.1107 +    echo certutil -d ${CERT_EXTENSIONS_DIR} -S -n ${CERTNAME} \
  1.1108 +        -t "u,u,u" -o ${CERT_EXTENSIONS_DIR}/tempcert -s "${CU_SUBJECT}" -x -f ${R_PWFILE} \
  1.1109 +        -z "${R_NOISE_FILE}" -${OPT} \< ${TARG_FILE}
  1.1110 +    echo "certutil options:"
  1.1111 +    cat ${TARG_FILE}
  1.1112 +    ${BINDIR}/certutil -d ${CERT_EXTENSIONS_DIR} -S -n ${CERTNAME} \
  1.1113 +        -t "u,u,u" -o ${CERT_EXTENSIONS_DIR}/tempcert -s "${CU_SUBJECT}" -x -f ${R_PWFILE} \
  1.1114 +        -z "${R_NOISE_FILE}" -${OPT} < ${TARG_FILE}
  1.1115 +    RET=$?
  1.1116 +    if [ "${RET}" -ne 0 ]; then
  1.1117 +        CERTFAILED=1
  1.1118 +        html_failed "${TESTNAME} (${COUNT}) - Create and Add Certificate" 
  1.1119 +        cert_log "ERROR: ${TESTNAME} - Create and Add Certificate failed" 
  1.1120 +        return 1
  1.1121 +    fi
  1.1122 +
  1.1123 +    echo certutil -d ${CERT_EXTENSIONS_DIR} -L -n ${CERTNAME} 
  1.1124 +    EXTLIST=`${BINDIR}/certutil -d ${CERT_EXTENSIONS_DIR} -L -n ${CERTNAME}`
  1.1125 +    RET=$?
  1.1126 +    echo "${EXTLIST}"
  1.1127 +    if [ "${RET}" -ne 0 ]; then
  1.1128 +        CERTFAILED=1
  1.1129 +        html_failed "${TESTNAME} (${COUNT}) - List Certificate" 
  1.1130 +        cert_log "ERROR: ${TESTNAME} - List Certificate failed" 
  1.1131 +        return 1
  1.1132 +    fi
  1.1133 +
  1.1134 +    for FL in `echo ${FILTERLIST} | tr \| ' '`; do
  1.1135 +        FL="`echo ${FL} | tr _ ' '`"
  1.1136 +        EXPSTAT=0
  1.1137 +        if [ X`echo "${FL}" | cut -c 1` = 'X!' ]; then
  1.1138 +            EXPSTAT=1
  1.1139 +            FL=`echo ${FL} | tr -d '!'`
  1.1140 +        fi
  1.1141 +        echo "${EXTLIST}" | grep "${FL}" >/dev/null 2>&1
  1.1142 +        RET=$?
  1.1143 +        if [ "${RET}" -ne "${EXPSTAT}" ]; then
  1.1144 +            CERTFAILED=1
  1.1145 +            html_failed "${TESTNAME} (${COUNT}) - Looking for ${FL}" "returned ${RET}, expected is ${EXPSTAT}" 
  1.1146 +            cert_log "ERROR: ${TESTNAME} - Looking for ${FL} failed"
  1.1147 +            return 1
  1.1148 +        fi
  1.1149 +    done
  1.1150 +
  1.1151 +    html_passed "${TESTNAME} (${COUNT})"
  1.1152 +    return 0
  1.1153 +}
  1.1154 +
  1.1155 +############################## cert_extensions ###############################
  1.1156 +# local shell function to run cert extensions tests
  1.1157 +##############################################################################
  1.1158 +cert_extensions()
  1.1159 +{
  1.1160 +    CERTNAME=TestExt
  1.1161 +    cert_create_cert ${CERT_EXTENSIONS_DIR} ${CERTNAME} 90 ${D_CERT_EXTENSTIONS}
  1.1162 +    TARG_FILE=${CERT_EXTENSIONS_DIR}/test.args
  1.1163 +
  1.1164 +    COUNT=0
  1.1165 +    while read ARG OPT FILTERLIST; do
  1.1166 +        if [ X"`echo ${ARG} | cut -c 1`" = "X#" ]; then
  1.1167 +            continue
  1.1168 +        fi
  1.1169 +        if [ X"`echo ${ARG} | cut -c 1`" = "X!" ]; then
  1.1170 +            TESTNAME="${FILTERLIST}"
  1.1171 +            continue
  1.1172 +        fi
  1.1173 +        if [ X"${ARG}" = "X=" ]; then
  1.1174 +            cert_extensions_test
  1.1175 +            rm -f ${TARG_FILE}
  1.1176 +        else
  1.1177 +            echo ${ARG} >> ${TARG_FILE}
  1.1178 +        fi
  1.1179 +    done < ${QADIR}/cert/certext.txt
  1.1180 +}
  1.1181 +
  1.1182 +cert_make_with_param()
  1.1183 +{
  1.1184 +    DIRPASS="$1"
  1.1185 +    CERTNAME="$2"
  1.1186 +    MAKE="$3"
  1.1187 +    SUBJ="$4"
  1.1188 +    EXTRA="$5"
  1.1189 +    EXPECT="$6"
  1.1190 +    TESTNAME="$7"
  1.1191 +
  1.1192 +    echo certutil ${DIRPASS} -s "${SUBJ}" ${MAKE} ${CERTNAME} ${EXTRA}
  1.1193 +    ${BINDIR}/certutil ${DIRPASS} -s "${SUBJ}" ${MAKE} ${CERTNAME} ${EXTRA}
  1.1194 +        
  1.1195 +    RET=$?
  1.1196 +    if [ "${RET}" -ne "${EXPECT}" ]; then
  1.1197 +        # if we expected failure to create, then delete unexpected certificate
  1.1198 +        if [ "${EXPECT}" -ne 0 ]; then
  1.1199 +            ${BINDIR}/certutil ${DIRPASS} -D ${CERTNAME}
  1.1200 +        fi
  1.1201 +    
  1.1202 +        CERTFAILED=1
  1.1203 +        html_failed "${TESTNAME} (${COUNT}) - ${EXTRA}" 
  1.1204 +        cert_log "ERROR: ${TESTNAME} - ${EXTRA} failed"
  1.1205 +        return 1
  1.1206 +    fi
  1.1207 +
  1.1208 +    html_passed "${TESTNAME} (${COUNT})"
  1.1209 +    return 0
  1.1210 +}
  1.1211 +
  1.1212 +cert_list_and_count_dns()
  1.1213 +{
  1.1214 +    DIRPASS="$1"
  1.1215 +    CERTNAME="$2"
  1.1216 +    EXPECT="$3"
  1.1217 +    EXPECTCOUNT="$4"
  1.1218 +    TESTNAME="$5"
  1.1219 +
  1.1220 +    echo certutil ${DIRPASS} -L ${CERTNAME}
  1.1221 +    ${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME}
  1.1222 +
  1.1223 +    RET=$?
  1.1224 +    if [ "${RET}" -ne "${EXPECT}" ]; then
  1.1225 +        CERTFAILED=1
  1.1226 +        html_failed "${TESTNAME} (${COUNT}) - list and count" 
  1.1227 +        cert_log "ERROR: ${TESTNAME} - list and count failed"
  1.1228 +        return 1
  1.1229 +    fi
  1.1230 +
  1.1231 +    LISTCOUNT=`${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME} | grep -wc DNS`
  1.1232 +    if [ "${LISTCOUNT}" -ne "${EXPECTCOUNT}" ]; then
  1.1233 +        CERTFAILED=1
  1.1234 +        html_failed "${TESTNAME} (${COUNT}) - list and count" 
  1.1235 +        cert_log "ERROR: ${TESTNAME} - list and count failed"
  1.1236 +        return 1
  1.1237 +    fi
  1.1238 +
  1.1239 +    html_passed "${TESTNAME} (${COUNT})"
  1.1240 +    return 0
  1.1241 +}
  1.1242 +
  1.1243 +cert_dump_ext_to_file()
  1.1244 +{
  1.1245 +    DIRPASS="$1"
  1.1246 +    CERTNAME="$2"
  1.1247 +    OID="$3"
  1.1248 +    OUTFILE="$4"
  1.1249 +    EXPECT="$5"
  1.1250 +    TESTNAME="$6"
  1.1251 +
  1.1252 +    echo certutil ${DIRPASS} -L ${CERTNAME} --dump-ext-val ${OID}
  1.1253 +    echo "writing output to ${OUTFILE}"
  1.1254 +    ${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME} --dump-ext-val ${OID} > ${OUTFILE}
  1.1255 +        
  1.1256 +    RET=$?
  1.1257 +    if [ "${RET}" -ne "${EXPECT}" ]; then
  1.1258 +        CERTFAILED=1
  1.1259 +        html_failed "${TESTNAME} (${COUNT}) - dump to file"
  1.1260 +        cert_log "ERROR: ${TESTNAME} - dump to file failed"
  1.1261 +        return 1
  1.1262 +    fi
  1.1263 +
  1.1264 +    html_passed "${TESTNAME} (${COUNT})"
  1.1265 +    return 0
  1.1266 +}
  1.1267 +
  1.1268 +cert_delete()
  1.1269 +{
  1.1270 +    DIRPASS="$1"
  1.1271 +    CERTNAME="$2"
  1.1272 +    EXPECT="$3"
  1.1273 +    TESTNAME="$4"
  1.1274 +
  1.1275 +    echo certutil ${DIRPASS} -D ${CERTNAME}
  1.1276 +    ${BINDIR}/certutil ${DIRPASS} -D ${CERTNAME}
  1.1277 +        
  1.1278 +    RET=$?
  1.1279 +    if [ "${RET}" -ne "${EXPECT}" ]; then
  1.1280 +        CERTFAILED=1
  1.1281 +        html_failed "${TESTNAME} (${COUNT}) - delete cert" 
  1.1282 +        cert_log "ERROR: ${TESTNAME} - delete cert failed"
  1.1283 +        return 1
  1.1284 +    fi
  1.1285 +
  1.1286 +    html_passed "${TESTNAME} (${COUNT})"
  1.1287 +    return 0
  1.1288 +}
  1.1289 +
  1.1290 +cert_inc_count()
  1.1291 +{
  1.1292 +    COUNT=`expr ${COUNT} + 1`
  1.1293 +}
  1.1294 +
  1.1295 +############################## cert_crl_ssl ############################
  1.1296 +# test adding subject-alt-name, dumping, and adding generic extension
  1.1297 +########################################################################
  1.1298 +cert_san_and_generic_extensions()
  1.1299 +{
  1.1300 +    EXTDUMP=${CERT_EXTENSIONS_DIR}/sanext.der
  1.1301 +
  1.1302 +    DIR="-d ${CERT_EXTENSIONS_DIR} -f ${R_PWFILE}"
  1.1303 +    CERTNAME="-n WithSAN"
  1.1304 +    MAKE="-S -t ,, -x -z ${R_NOISE_FILE}"
  1.1305 +    SUBJ="CN=example.com"
  1.1306 +
  1.1307 +    TESTNAME="san-and-generic-extensions"
  1.1308 +
  1.1309 +    cert_inc_count
  1.1310 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1311 +        "--extSAN example.com" 255 \
  1.1312 +        "create cert with invalid SAN parameter"
  1.1313 +
  1.1314 +    cert_inc_count
  1.1315 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1316 +        "--extSAN example.com,dns:www.example.com" 255 \
  1.1317 +        "create cert with invalid SAN parameter"
  1.1318 +
  1.1319 +    TN="create cert with valid SAN parameter"
  1.1320 +
  1.1321 +    cert_inc_count
  1.1322 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1323 +        "--extSAN dns:example.com,dns:www.example.com" 0 \
  1.1324 +        "${TN}"
  1.1325 +
  1.1326 +    cert_inc_count
  1.1327 +    cert_list_and_count_dns "${DIR}" "${CERTNAME}" 0 2 \
  1.1328 +        "${TN}"
  1.1329 +
  1.1330 +    cert_inc_count
  1.1331 +    cert_dump_ext_to_file "${DIR}" "${CERTNAME}" "2.5.29.17" "${EXTDUMP}" 0 \
  1.1332 +        "dump extension 2.5.29.17 to file ${EXTDUMP}"
  1.1333 +
  1.1334 +    cert_inc_count
  1.1335 +    cert_delete "${DIR}" "${CERTNAME}" 0 \
  1.1336 +        "${TN}"
  1.1337 +
  1.1338 +    cert_inc_count
  1.1339 +    cert_list_and_count_dns "${DIR}" "${CERTNAME}" 255 0 \
  1.1340 +        "expect failure to list cert, because we deleted it"
  1.1341 +
  1.1342 +    cert_inc_count
  1.1343 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1344 +        "--extGeneric ${EXTDUMP}" 255 \
  1.1345 +        "create cert with invalid generic ext parameter"
  1.1346 +
  1.1347 +    cert_inc_count
  1.1348 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1349 +        "--extGeneric not-critical:${EXTDUMP}" 255 \
  1.1350 +        "create cert with invalid generic ext parameter"
  1.1351 +
  1.1352 +    cert_inc_count
  1.1353 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1354 +        "--extGeneric not-critical:${EXTDUMP},2.5.29.17:critical:${EXTDUMP}" 255 \
  1.1355 +        "create cert with invalid generic ext parameter"
  1.1356 +
  1.1357 +    TN="create cert with valid generic ext parameter"
  1.1358 +
  1.1359 +    cert_inc_count
  1.1360 +    cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
  1.1361 +        "--extGeneric 2.5.29.17:not-critical:${EXTDUMP}" 0 \
  1.1362 +        "${TN}"
  1.1363 +
  1.1364 +    cert_inc_count
  1.1365 +    cert_list_and_count_dns "${DIR}" "${CERTNAME}" 0 2 \
  1.1366 +        "${TN}"
  1.1367 +
  1.1368 +    cert_inc_count
  1.1369 +    cert_delete "${DIR}" "${CERTNAME}" 0 \
  1.1370 +        "${TN}"
  1.1371 +
  1.1372 +    cert_inc_count
  1.1373 +    cert_list_and_count_dns "${DIR}" "${CERTNAME}" 255 0 \
  1.1374 +        "expect failure to list cert, because we deleted it"
  1.1375 +}
  1.1376 +
  1.1377 +############################## cert_crl_ssl ############################
  1.1378 +# local shell function to generate certs and crls for SSL tests
  1.1379 +########################################################################
  1.1380 +cert_crl_ssl()
  1.1381 +{
  1.1382 +    
  1.1383 +  ################# Creating Certs ###################################
  1.1384 +  #
  1.1385 +  CERTFAILED=0
  1.1386 +  CERTSERIAL=${CRL_GRP_1_BEGIN}
  1.1387 +
  1.1388 +  cd $CADIR
  1.1389 +  
  1.1390 +  PROFILEDIR=`cd ${CLIENTDIR}; pwd`
  1.1391 +  if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
  1.1392 +     PROFILEDIR=`cygpath -m ${PROFILEDIR}`
  1.1393 +  fi
  1.1394 +  CRL_GRPS_END=`expr ${CRL_GRP_1_BEGIN} + ${TOTAL_CRL_RANGE} - 1`
  1.1395 +  echo "$SCRIPTNAME: Creating Client CA Issued Certificates Range $CRL_GRP_1_BEGIN - $CRL_GRPS_END ==="
  1.1396 +  CU_ACTION="Creating client test certs"
  1.1397 +
  1.1398 +  while [ $CERTSERIAL -le $CRL_GRPS_END ]
  1.1399 +  do
  1.1400 +      CERTNAME="TestUser$CERTSERIAL"
  1.1401 +      cert_add_cert 
  1.1402 +      CERTSERIAL=`expr $CERTSERIAL + 1 `
  1.1403 +  done
  1.1404 +
  1.1405 +  #################### CRL Creation ##############################
  1.1406 +  CRL_GEN_RES=0
  1.1407 +  echo "$SCRIPTNAME: Creating CA CRL ====================================="
  1.1408 +
  1.1409 +  CRL_GRP_END=`expr ${CRL_GRP_1_BEGIN} + ${CRL_GRP_1_RANGE} - 1`
  1.1410 +  CRL_FILE_GRP_1=${R_SERVERDIR}/root.crl_${CRL_GRP_1_BEGIN}-${CRL_GRP_END}
  1.1411 +  CRL_FILE=${CRL_FILE_GRP_1}
  1.1412 +  
  1.1413 +  CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1414 +  CU_ACTION="Generating CRL for range ${CRL_GRP_1_BEGIN}-${CRL_GRP_END} TestCA authority"
  1.1415 +  CRL_GRP_END_=`expr ${CRL_GRP_END} - 1`
  1.1416 +  crlu -d $CADIR -G -n "TestCA" -f ${R_PWFILE} \
  1.1417 +      -o ${CRL_FILE_GRP_1}_or <<EOF_CRLINI
  1.1418 +update=$CRLUPDATE
  1.1419 +addcert ${CRL_GRP_1_BEGIN}-${CRL_GRP_END_} $CRL_GRP_DATE
  1.1420 +addext reasonCode 0 4
  1.1421 +addext issuerAltNames 0 "rfc822Name:caemail@ca.com|dnsName:ca.com|directoryName:CN=NSS Test CA,O=BOGUS NSS,L=Mountain View,ST=California,C=US|URI:http://ca.com|ipAddress:192.168.0.1|registerID=reg CA"
  1.1422 +EOF_CRLINI
  1.1423 +# This extension should be added to the list, but currently nss has bug
  1.1424 +#addext authKeyId 0 "CN=NSS Test CA,O=BOGUS NSS,L=Mountain View,ST=California,C=US" 1
  1.1425 +  CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1426 +  chmod 600 ${CRL_FILE_GRP_1}_or
  1.1427 +
  1.1428 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1429 +      CU_ACTION="Generating CRL (ECC) for range ${CRL_GRP_1_BEGIN}-${CRL_GRP_END} TestCA-ec authority"
  1.1430 +
  1.1431 +#     Until Bug 292285 is resolved, do not encode x400 Addresses. After
  1.1432 +#     the bug is resolved, reintroduce "x400Address:x400Address" within
  1.1433 +#     addext issuerAltNames ...
  1.1434 +      crlu -q -d $CADIR -G -n "TestCA-ec" -f ${R_PWFILE} \
  1.1435 +	  -o ${CRL_FILE_GRP_1}_or-ec <<EOF_CRLINI
  1.1436 +update=$CRLUPDATE
  1.1437 +addcert ${CRL_GRP_1_BEGIN}-${CRL_GRP_END_} $CRL_GRP_DATE
  1.1438 +addext reasonCode 0 4
  1.1439 +addext issuerAltNames 0 "rfc822Name:ca-ecemail@ca.com|dnsName:ca-ec.com|directoryName:CN=NSS Test CA (ECC),O=BOGUS NSS,L=Mountain View,ST=California,C=US|URI:http://ca-ec.com|ipAddress:192.168.0.1|registerID=reg CA (ECC)"
  1.1440 +EOF_CRLINI
  1.1441 +      CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1442 +      chmod 600 ${CRL_FILE_GRP_1}_or-ec
  1.1443 +  fi
  1.1444 +
  1.1445 +  echo test > file
  1.1446 +  ############################# Modification ##################################
  1.1447 +
  1.1448 +  echo "$SCRIPTNAME: Modifying CA CRL by adding one more cert ============"
  1.1449 +  sleep 2
  1.1450 +  CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1451 +  CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1452 +  CU_ACTION="Modify CRL by adding one more cert"
  1.1453 +  crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1}_or1 \
  1.1454 +      -i ${CRL_FILE_GRP_1}_or <<EOF_CRLINI
  1.1455 +update=$CRLUPDATE
  1.1456 +addcert ${CRL_GRP_END} $CRL_GRP_DATE
  1.1457 +EOF_CRLINI
  1.1458 +  CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1459 +  chmod 600 ${CRL_FILE_GRP_1}_or1
  1.1460 +  TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or"
  1.1461 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1462 +      CU_ACTION="Modify CRL (ECC) by adding one more cert"
  1.1463 +      crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} \
  1.1464 +	  -o ${CRL_FILE_GRP_1}_or1-ec -i ${CRL_FILE_GRP_1}_or-ec <<EOF_CRLINI
  1.1465 +update=$CRLUPDATE
  1.1466 +addcert ${CRL_GRP_END} $CRL_GRP_DATE
  1.1467 +EOF_CRLINI
  1.1468 +      CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1469 +      chmod 600 ${CRL_FILE_GRP_1}_or1-ec
  1.1470 +      TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or-ec"
  1.1471 +  fi
  1.1472 +
  1.1473 +  ########### Removing one cert ${UNREVOKED_CERT_GRP_1} #######################
  1.1474 +  echo "$SCRIPTNAME: Modifying CA CRL by removing one cert ==============="
  1.1475 +  CU_ACTION="Modify CRL by removing one cert"
  1.1476 +  sleep 2
  1.1477 +  CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1478 +  crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1} \
  1.1479 +      -i ${CRL_FILE_GRP_1}_or1 <<EOF_CRLINI
  1.1480 +update=$CRLUPDATE
  1.1481 +rmcert  ${UNREVOKED_CERT_GRP_1}
  1.1482 +EOF_CRLINI
  1.1483 +  chmod 600 ${CRL_FILE_GRP_1}
  1.1484 +  TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or1"
  1.1485 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1486 +      CU_ACTION="Modify CRL (ECC) by removing one cert"
  1.1487 +      crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1}-ec \
  1.1488 +	  -i ${CRL_FILE_GRP_1}_or1-ec <<EOF_CRLINI
  1.1489 +update=$CRLUPDATE
  1.1490 +rmcert  ${UNREVOKED_CERT_GRP_1}
  1.1491 +EOF_CRLINI
  1.1492 +      chmod 600 ${CRL_FILE_GRP_1}-ec
  1.1493 +      TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or1-ec"
  1.1494 +  fi
  1.1495 +
  1.1496 +  ########### Creating second CRL which includes groups 1 and 2 ##############
  1.1497 +  CRL_GRP_END=`expr ${CRL_GRP_2_BEGIN} + ${CRL_GRP_2_RANGE} - 1`
  1.1498 +  CRL_FILE_GRP_2=${R_SERVERDIR}/root.crl_${CRL_GRP_2_BEGIN}-${CRL_GRP_END}
  1.1499 +
  1.1500 +  echo "$SCRIPTNAME: Creating CA CRL for groups 1 and 2  ==============="
  1.1501 +  sleep 2
  1.1502 +  CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1503 +  CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1504 +  CU_ACTION="Creating CRL for groups 1 and 2"
  1.1505 +  crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_2} \
  1.1506 +          -i ${CRL_FILE_GRP_1} <<EOF_CRLINI
  1.1507 +update=$CRLUPDATE
  1.1508 +addcert ${CRL_GRP_2_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
  1.1509 +addext invalidityDate 0 $CRLUPDATE
  1.1510 +rmcert  ${UNREVOKED_CERT_GRP_2}
  1.1511 +EOF_CRLINI
  1.1512 +  CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1513 +  chmod 600 ${CRL_FILE_GRP_2}
  1.1514 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1515 +      CU_ACTION="Creating CRL (ECC) for groups 1 and 2"
  1.1516 +      crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_2}-ec \
  1.1517 +          -i ${CRL_FILE_GRP_1}-ec <<EOF_CRLINI
  1.1518 +update=$CRLUPDATE
  1.1519 +addcert ${CRL_GRP_2_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
  1.1520 +addext invalidityDate 0 $CRLUPDATE
  1.1521 +rmcert  ${UNREVOKED_CERT_GRP_2}
  1.1522 +EOF_CRLINI
  1.1523 +      CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1524 +      chmod 600 ${CRL_FILE_GRP_2}-ec
  1.1525 +  fi
  1.1526 +
  1.1527 +  ########### Creating second CRL which includes groups 1, 2 and 3 ##############
  1.1528 +  CRL_GRP_END=`expr ${CRL_GRP_3_BEGIN} + ${CRL_GRP_3_RANGE} - 1`
  1.1529 +  CRL_FILE_GRP_3=${R_SERVERDIR}/root.crl_${CRL_GRP_3_BEGIN}-${CRL_GRP_END}
  1.1530 +
  1.1531 +
  1.1532 +
  1.1533 +  echo "$SCRIPTNAME: Creating CA CRL for groups 1, 2 and 3  ==============="
  1.1534 +  sleep 2
  1.1535 +  CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1536 +  CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
  1.1537 +  CU_ACTION="Creating CRL for groups 1, 2 and 3"
  1.1538 +  crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_3} \
  1.1539 +            -i ${CRL_FILE_GRP_2} <<EOF_CRLINI
  1.1540 +update=$CRLUPDATE
  1.1541 +addcert ${CRL_GRP_3_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
  1.1542 +rmcert  ${UNREVOKED_CERT_GRP_3}
  1.1543 +addext crlNumber 0 2
  1.1544 +EOF_CRLINI
  1.1545 +  CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1546 +  chmod 600 ${CRL_FILE_GRP_3}
  1.1547 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1548 +      CU_ACTION="Creating CRL (ECC) for groups 1, 2 and 3"
  1.1549 +      crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_3}-ec \
  1.1550 +          -i ${CRL_FILE_GRP_2}-ec <<EOF_CRLINI
  1.1551 +update=$CRLUPDATE
  1.1552 +addcert ${CRL_GRP_3_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
  1.1553 +rmcert  ${UNREVOKED_CERT_GRP_3}
  1.1554 +addext crlNumber 0 2
  1.1555 +EOF_CRLINI
  1.1556 +      CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1557 +      chmod 600 ${CRL_FILE_GRP_3}-ec
  1.1558 +  fi
  1.1559 +
  1.1560 +  ############ Importing Server CA Issued CRL for certs of first group #######
  1.1561 +
  1.1562 +  echo "$SCRIPTNAME: Importing Server CA Issued CRL for certs ${CRL_GRP_BEGIN} trough ${CRL_GRP_END}"
  1.1563 +  CU_ACTION="Importing CRL for groups 1"
  1.1564 +  crlu -D -n TestCA  -f "${R_PWFILE}" -d "${R_SERVERDIR}"
  1.1565 +  crlu -I -i ${CRL_FILE} -n "TestCA" -f "${R_PWFILE}" -d "${R_SERVERDIR}"
  1.1566 +  CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1567 +  if [ -z "$NSS_DISABLE_ECC" ] ; then
  1.1568 +      CU_ACTION="Importing CRL (ECC) for groups 1"
  1.1569 +      crlu -D -n TestCA-ec  -f "${R_PWFILE}" -d "${R_SERVERDIR}"
  1.1570 +      crlu -I -i ${CRL_FILE}-ec -n "TestCA-ec" -f "${R_PWFILE}" \
  1.1571 +	  -d "${R_SERVERDIR}"
  1.1572 +      CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
  1.1573 +  fi
  1.1574 +
  1.1575 +  if [ "$CERTFAILED" != 0 -o "$CRL_GEN_RES" != 0 ] ; then
  1.1576 +      cert_log "ERROR: SSL CRL prep failed $CERTFAILED : $CRL_GEN_RES"
  1.1577 +  else
  1.1578 +      cert_log "SUCCESS: SSL CRL prep passed"
  1.1579 +  fi
  1.1580 +}
  1.1581 +
  1.1582 +#################
  1.1583 +# Verify the we can successfully change the password on the database
  1.1584 +#
  1.1585 +cert_test_password()
  1.1586 +{
  1.1587 +  CERTFAILED=0
  1.1588 +  echo "$SCRIPTNAME: Create A Password Test Cert  =============="
  1.1589 +  cert_init_cert "${DBPASSDIR}" "Password Test Cert" 1000 "${D_DBPASSDIR}"
  1.1590 +
  1.1591 +  echo "$SCRIPTNAME: Create A Password Test Ca  --------"
  1.1592 +  ALL_CU_SUBJECT="CN=NSS Password Test CA, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1593 +  cert_CA ${DBPASSDIR} PasswordCA -x "CTu,CTu,CTu" ${D_DBPASS} "1"
  1.1594 +
  1.1595 +  # now change the password
  1.1596 +  CU_ACTION="Changing password on ${CERTNAME}'s Cert DB"
  1.1597 +  certu -W -d "${PROFILEDIR}" -f "${R_PWFILE}" -@ "${R_FIPSPWFILE}" 2>&1
  1.1598 +
  1.1599 +  # finally make sure we can use the old key with the new password
  1.1600 +  CU_ACTION="Generate Certificate for ${CERTNAME} with new password"
  1.1601 +  CU_SUBJECT="CN=${CERTNAME}, E=password@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1602 +  certu -S -n PasswordCert -c PasswordCA -t "u,u,u" -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" -z "${R_NOISE_FILE}" 2>&1
  1.1603 +  if [ "$RET" -eq 0 ]; then
  1.1604 +    cert_log "SUCCESS: PASSWORD passed"
  1.1605 +  fi
  1.1606 +  CU_ACTION="Verify Certificate for ${CERTNAME} with new password"
  1.1607 +  certu -V -n PasswordCert -u S -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" 2>&1
  1.1608 +}
  1.1609 +
  1.1610 +###############################
  1.1611 +# test if we can distrust a certificate.
  1.1612 +#
  1.1613 +# we create 3 new certs:
  1.1614 +#   1 leaf signed by the trusted root.
  1.1615 +#   1 intermediate signed by the trusted root.
  1.1616 +#   1 leaf signed by the intermediate.
  1.1617 +#
  1.1618 +#  we mark the first leaf and the intermediate as explicitly untrusted.
  1.1619 +#  we then try to verify the two leaf certs for our possible usages.
  1.1620 +#  All verification should fail.
  1.1621 +# 
  1.1622 +cert_test_distrust()
  1.1623 +{
  1.1624 +  echo "$SCRIPTNAME: Creating Distrusted Certificate"
  1.1625 +  cert_create_cert ${DISTRUSTDIR} "Distrusted" 2000 ${D_DISTRUST}
  1.1626 +  CU_ACTION="Mark CERT as unstrusted"
  1.1627 +  certu -M -n "Distrusted" -t p,p,p -d ${PROFILEDIR} -f "${R_PWFILE}" 2>&1
  1.1628 +  echo "$SCRIPTNAME: Creating Distrusted Intermediate"
  1.1629 +  CERTNAME="DistrustedCA"
  1.1630 +  ALL_CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1631 +  cert_CA ${CADIR} "${CERTNAME}" "-c TestCA" ",," ${D_CA} 2010 2>&1
  1.1632 +  CU_ACTION="Import Distrusted Intermediate"
  1.1633 +  certu -A -n "${CERTNAME}" -t "p,p,p" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
  1.1634 +          -i "${R_CADIR}/DistrustedCA.ca.cert" 2>&1
  1.1635 +
  1.1636 +  # now create the last leaf signed by our distrusted CA
  1.1637 +  # since it's not signed by TestCA it requires more steps.
  1.1638 +  CU_ACTION="Generate Cert Request for Leaf Chained to Distrusted CA"
  1.1639 +  CERTNAME="LeafChainedToDistrustedCA"
  1.1640 +  CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
  1.1641 +  certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1
  1.1642 +
  1.1643 +  CU_ACTION="Sign ${CERTNAME}'s Request"
  1.1644 +  cp ${CERTDIR}/req ${CADIR}
  1.1645 +  certu -C -c "DistrustedCA" -m 100 -v 60 -d "${P_R_CADIR}" \
  1.1646 +        -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
  1.1647 +
  1.1648 +  CU_ACTION="Import $CERTNAME's Cert  -t u,u,u"
  1.1649 +  certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
  1.1650 +        -i "${CERTNAME}.cert" 2>&1
  1.1651 +
  1.1652 +  RETEXPECTED=255
  1.1653 +  CU_ACTION="Verify ${CERTNAME} Cert for SSL Server"
  1.1654 +  certu -V -n ${CERTNAME} -u V -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1655 +  CU_ACTION="Verify ${CERTNAME} Cert for SSL Client"
  1.1656 +  certu -V -n ${CERTNAME} -u C -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1657 +  CU_ACTION="Verify ${CERTNAME} Cert for Email signer"
  1.1658 +  certu -V -n ${CERTNAME} -u S -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1659 +  CU_ACTION="Verify ${CERTNAME} Cert for Email recipient"
  1.1660 +  certu -V -n ${CERTNAME} -u R -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1661 +  CU_ACTION="Verify ${CERTNAME} Cert for OCSP responder"
  1.1662 +  certu -V -n ${CERTNAME} -u O -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1663 +  CU_ACTION="Verify ${CERTNAME} Cert for Object Signer"
  1.1664 +  certu -V -n ${CERTNAME} -u J -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1665 +
  1.1666 +  CERTNAME="Distrusted"
  1.1667 +  CU_ACTION="Verify ${CERTNAME} Cert for SSL Server"
  1.1668 +  certu -V -n ${CERTNAME} -u V -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1669 +  CU_ACTION="Verify ${CERTNAME} Cert for SSL Client"
  1.1670 +  certu -V -n ${CERTNAME} -u C -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1671 +  CU_ACTION="Verify ${CERTNAME} Cert for Email signer"
  1.1672 +  certu -V -n ${CERTNAME} -u S -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1673 +  CU_ACTION="Verify ${CERTNAME} Cert for Email recipient"
  1.1674 +  certu -V -n ${CERTNAME} -u R -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1675 +  CU_ACTION="Verify ${CERTNAME} Cert for OCSP responder"
  1.1676 +  certu -V -n ${CERTNAME} -u O -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1677 +  CU_ACTION="Verify ${CERTNAME} Cert for Object Signer"
  1.1678 +  certu -V -n ${CERTNAME} -u J -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
  1.1679 +  RETEXPECTED=0
  1.1680 +}
  1.1681 +
  1.1682 +cert_test_ocspresp()
  1.1683 +{
  1.1684 +  echo "$SCRIPTNAME: OCSP response creation selftest"
  1.1685 +  OR_ACTION="perform selftest"
  1.1686 +  RETEXPECTED=0
  1.1687 +  ocspr ${SERVER_CADIR} "serverCA" "chain-1-serverCA" -f "${R_PWFILE}" 2>&1
  1.1688 +}
  1.1689 +
  1.1690 +############################## cert_cleanup ############################
  1.1691 +# local shell function to finish this script (no exit since it might be
  1.1692 +# sourced)
  1.1693 +########################################################################
  1.1694 +cert_cleanup()
  1.1695 +{
  1.1696 +  cert_log "$SCRIPTNAME: finished $SCRIPTNAME"
  1.1697 +  html "</TABLE><BR>" 
  1.1698 +  cd ${QADIR}
  1.1699 +  . common/cleanup.sh
  1.1700 +}
  1.1701 +
  1.1702 +################## main #################################################
  1.1703 +
  1.1704 +cert_init 
  1.1705 +cert_all_CA
  1.1706 +cert_extended_ssl 
  1.1707 +cert_ssl 
  1.1708 +cert_smime_client        
  1.1709 +if [ -z "$NSS_TEST_DISABLE_FIPS" ]; then
  1.1710 +    cert_fips
  1.1711 +fi
  1.1712 +cert_eccurves
  1.1713 +cert_extensions
  1.1714 +cert_san_and_generic_extensions
  1.1715 +cert_test_password
  1.1716 +cert_test_distrust
  1.1717 +cert_test_ocspresp
  1.1718 +
  1.1719 +if [ -z "$NSS_TEST_DISABLE_CRL" ] ; then
  1.1720 +    cert_crl_ssl
  1.1721 +else
  1.1722 +    echo "$SCRIPTNAME: Skipping CRL Tests"
  1.1723 +fi
  1.1724 +
  1.1725 +if [ -n "$DO_DIST_ST" -a "$DO_DIST_ST" = "TRUE" ] ; then
  1.1726 +    cert_stresscerts 
  1.1727 +fi
  1.1728 +
  1.1729 +cert_iopr_setup
  1.1730 +
  1.1731 +cert_cleanup

mercurial