tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

smime.sh (35535B)


      1 #! /bin/bash
      2 #
      3 # This Source Code Form is subject to the terms of the Mozilla Public
      4 # License, v. 2.0. If a copy of the MPL was not distributed with this
      5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      6 
      7 ########################################################################
      8 #
      9 # mozilla/security/nss/tests/smime/smime.sh
     10 #
     11 # Script to test NSS smime
     12 #
     13 # needs to work on all Unix and Windows platforms
     14 #
     15 # special strings
     16 # ---------------
     17 #   FIXME ... known problems, search for this string
     18 #   NOTE .... unexpected behavior
     19 #
     20 ########################################################################
     21 
     22 EMAILDATE=`date --rfc-email --utc`
     23 
     24 # parameter: MIME part boundary
     25 make_multipart()
     26 {
     27  mp_start="Content-Type: multipart/signed; protocol=\"application/pkcs7-signature\"; micalg=sha-HASHHASH; boundary=\"$1\"
     28 
     29 This is a cryptographically signed message in MIME format.
     30 
     31 --$1"
     32 
     33  mp_middle="
     34 --$1
     35 Content-Type: application/pkcs7-signature; name=smime.p7s
     36 Content-Transfer-Encoding: base64
     37 Content-Disposition: attachment; filename=smime.p7s
     38 Content-Description: S/MIME Cryptographic Signature
     39 "
     40 
     41  mp_end="--$1--
     42 "
     43 }
     44 
     45 ############################## smime_init ##############################
     46 # local shell function to initialize this script
     47 ########################################################################
     48 smime_init()
     49 {
     50  SCRIPTNAME=smime.sh      # sourced - $0 would point to all.sh
     51 
     52  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
     53      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
     54  fi
     55 
     56  if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ]; then
     57      cd ../common
     58      . ./init.sh
     59  fi
     60  if [ ! -r $CERT_LOG_FILE ]; then  # we need certificates here
     61      cd ../cert
     62      . ./cert.sh
     63  fi
     64  SCRIPTNAME=smime.sh
     65 
     66  html_head "S/MIME Tests"
     67 
     68  grep "SUCCESS: SMIME passed" $CERT_LOG_FILE >/dev/null || {
     69      Exit 11 "Fatal - S/MIME of cert.sh needs to pass first"
     70  }
     71 
     72  SMIMEDIR=${HOSTDIR}/smime
     73  R_SMIMEDIR=../smime
     74  mkdir -p ${SMIMEDIR}
     75  cd ${SMIMEDIR}
     76  cp ${QADIR}/smime/alice.txt ${SMIMEDIR}
     77  SMIMEPOLICY=${QADIR}/smime/smimepolicy.txt
     78 
     79  mkdir tb
     80  cp ${QADIR}/smime/interop-openssl/*.p12 ${SMIMEDIR}/tb
     81  cp ${QADIR}/smime/interop-openssl/*.env ${SMIMEDIR}
     82 
     83  make_multipart "------------ms030903020902020502030404"
     84  multipart_start="$mp_start"
     85  multipart_middle="$mp_middle"
     86  multipart_end="$mp_end"
     87 
     88  make_multipart "------------ms010205070902020502030809"
     89  multipart_start_b2="$mp_start"
     90  multipart_middle_b2="$mp_middle"
     91  multipart_end_b2="$mp_end"
     92 }
     93 
     94 cms_sign()
     95 {
     96  HASH_CMD="-H SHA${HASH}"
     97  SIG=sig.SHA${HASH}
     98 
     99  echo "$SCRIPTNAME: Signing Detached Message {$HASH} ------------------"
    100  echo "cmsutil -S -G -T -N Alice ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice.d${SIG}"
    101  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Alice ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice.d${SIG}
    102  html_msg $? 0 "Create Detached Signature Alice (${HASH})" "."
    103 
    104  echo "cmsutil -D -i alice.d${SIG} -c alice.txt -d ${P_R_BOBDIR} "
    105  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice.d${SIG} -c alice.txt -d ${P_R_BOBDIR}
    106  html_msg $? 0 "Verifying Alice's Detached Signature (${HASH})" "."
    107 
    108  echo "$SCRIPTNAME: Signing Attached Message (${HASH}) ------------------"
    109  echo "cmsutil -S -G -N Alice ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice.${SIG}"
    110  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Alice ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice.${SIG}
    111  html_msg $? 0 "Create Attached Signature Alice (${HASH})" "."
    112 
    113  echo "cmsutil -D -i alice.${SIG} -d ${P_R_BOBDIR} -o alice.data.${HASH}"
    114  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice.${SIG} -d ${P_R_BOBDIR} -o alice.data.${HASH}
    115  html_msg $? 0 "Decode Alice's Attached Signature (${HASH})" "."
    116 
    117  echo "diff alice.txt alice.data.${HASH}"
    118  diff alice.txt alice.data.${HASH}
    119  html_msg $? 0 "Compare Attached Signed Data and Original (${HASH})" "."
    120 
    121 # Test ECDSA signing for all hash algorithms.
    122  echo "$SCRIPTNAME: Signing Detached Message ECDSA w/ {$HASH} ------------------"
    123  echo "cmsutil -S -G -T -N Alice-ec ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice-ec.d${SIG}"
    124  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Alice-ec ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice-ec.d${SIG}
    125  html_msg $? 0 "Create Detached Signature Alice (ECDSA w/ ${HASH})" "."
    126 
    127  echo "cmsutil -D -i alice-ec.d${SIG} -c alice.txt -d ${P_R_BOBDIR} "
    128  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice-ec.d${SIG} -c alice.txt -d ${P_R_BOBDIR}
    129  html_msg $? 0 "Verifying Alice's Detached Signature (ECDSA w/ ${HASH})" "."
    130 
    131  echo "$SCRIPTNAME: Signing Attached Message (ECDSA w/ ${HASH}) ------------------"
    132  echo "cmsutil -S -G -N Alice-ec ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice-ec.${SIG}"
    133  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Alice-ec ${HASH_CMD} -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice-ec.${SIG}
    134  html_msg $? 0 "Create Attached Signature Alice (ECDSA w/ ${HASH})" "."
    135 
    136  echo "cmsutil -D -i alice-ec.${SIG} -d ${P_R_BOBDIR} -o alice-ec.data.${HASH}"
    137  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice-ec.${SIG} -d ${P_R_BOBDIR} -o alice-ec.data.${HASH}
    138  html_msg $? 0 "Decode Alice's Attached Signature (ECDSA w/ ${HASH})" "."
    139 
    140  echo "diff alice.txt alice-ec.data.${HASH}"
    141  diff alice.txt alice-ec.data.${HASH}
    142  html_msg $? 0 "Compare Attached Signed Data and Original (ECDSA w/ ${HASH})" "."
    143 }
    144 
    145 header_mime_from_to_subject="MIME-Version: 1.0
    146 Date: ${EMAILDATE}
    147 From: Alice@example.com
    148 To: Bob@example.com
    149 Subject: "
    150 
    151 header_dave_mime_from_to_subject="MIME-Version: 1.0
    152 Date: ${EMAILDATE}
    153 From: Dave@example.com
    154 To: Bob@example.com
    155 Subject: "
    156 
    157 header_opaque_signed="Content-Type: application/pkcs7-mime; name=smime.p7m;
    158    smime-type=signed-data
    159 Content-Transfer-Encoding: base64
    160 Content-Disposition: attachment; filename=smime.p7m
    161 Content-Description: S/MIME Cryptographic Signature
    162 "
    163 
    164 header_enveloped="Content-Type: application/pkcs7-mime; name=smime.p7m;
    165    smime-type=enveloped-data
    166 Content-Transfer-Encoding: base64
    167 Content-Disposition: attachment; filename=smime.p7m
    168 Content-Description: S/MIME Encrypted Message
    169 "
    170 
    171 header_clearsigned="Content-Type: text/plain; charset=utf-8; format=flowed
    172 Content-Transfer-Encoding: quoted-printable
    173 Content-Language: en-US
    174 "
    175 
    176 header_plaintext="Content-Type: text/plain
    177 "
    178 
    179 CR=$(printf '\r')
    180 
    181 mime_init()
    182 {
    183  OUT="tb/alice.mime"
    184  echo "${header_clearsigned}" >>${OUT}
    185  cat alice.txt >>${OUT}
    186  sed -i"" "s/\$/${CR}/" ${OUT}
    187 
    188  OUT="tb/alice.textplain"
    189  echo "${header_plaintext}" >>${OUT}
    190  cat alice.txt >>${OUT}
    191  sed -i"" "s/\$/${CR}/" ${OUT}
    192 }
    193 
    194 smime_enveloped()
    195 {
    196  ${PROFTOOL} ${BINDIR}/cmsutil -E -r bob@example.com -i tb/alice.mime -d ${P_R_ALICEDIR} -p nss -o tb/alice.mime.env
    197 
    198  OUT="tb/alice.env"
    199  echo "${header_enveloped}" >>${OUT}
    200  cat "tb/alice.mime.env" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    201  echo >>${OUT}
    202 
    203  OUT="tb/alice.env.eml"
    204  echo -n "${header_mime_from_to_subject}" >>${OUT}
    205  echo "enveloped ${SIG}" >>${OUT}
    206  cat "tb/alice.env" >>${OUT}
    207  sed -i"" "s/\$/${CR}/" ${OUT}
    208 }
    209 
    210 smime_signed_enveloped()
    211 {
    212  SIG=sig.SHA${HASH}
    213 
    214  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Alice ${HASH_CMD} -i tb/alice.mime -d ${P_R_ALICEDIR} -p nss -o tb/alice.mime.d${SIG}
    215 
    216  OUT="tb/alice.d${SIG}.multipart"
    217  echo "${multipart_start}" | sed "s/HASHHASH/${HASH}/" >>${OUT}
    218  cat tb/alice.mime | sed 's/\r$//' >>${OUT}
    219  echo "${multipart_middle}" >>${OUT}
    220  cat tb/alice.mime.d${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    221  echo "${multipart_end}" >>${OUT}
    222 
    223  ${PROFTOOL} ${BINDIR}/cmsutil -E -r bob@example.com -i ${OUT} -d ${P_R_ALICEDIR} -p nss -o ${OUT}.env
    224 
    225  OUT="tb/alice.d${SIG}.multipart.eml"
    226  echo -n "${header_mime_from_to_subject}" >>${OUT}
    227  echo "clear-signed ${SIG}" >>${OUT}
    228  cat "tb/alice.d${SIG}.multipart" >>${OUT}
    229  sed -i"" "s/\$/$CR/" ${OUT}
    230 
    231  OUT="tb/alice.d${SIG}.multipart.env.eml"
    232  echo -n "${header_mime_from_to_subject}" >>${OUT}
    233  echo "clear-signed then enveloped $SIG" >>${OUT}
    234  echo "$header_enveloped" >>${OUT}
    235  cat "tb/alice.d${SIG}.multipart.env" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    236  echo >>${OUT}
    237  sed -i"" "s/\$/$CR/" ${OUT}
    238 
    239  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Alice ${HASH_CMD} -i tb/alice.textplain -d ${P_R_ALICEDIR} -p nss -o tb/alice.textplain.${SIG}
    240 
    241  OUT="tb/alice.${SIG}.opaque"
    242  echo "$header_opaque_signed" >>${OUT}
    243  cat tb/alice.textplain.${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    244 
    245  ${PROFTOOL} ${BINDIR}/cmsutil -E -r bob@example.com -i ${OUT} -d ${P_R_ALICEDIR} -p nss -o ${OUT}.env
    246 
    247  OUT="tb/alice.${SIG}.opaque.eml"
    248  echo -n "${header_mime_from_to_subject}" >>${OUT}
    249  echo "opaque-signed $SIG" >>${OUT}
    250  cat "tb/alice.${SIG}.opaque" >>${OUT}
    251  echo >>${OUT}
    252  sed -i"" "s/\$/$CR/" ${OUT}
    253 
    254  OUT="tb/alice.${SIG}.opaque.env.eml"
    255  echo -n "${header_mime_from_to_subject}" >>${OUT}
    256  echo "opaque-signed then enveloped $SIG" >>${OUT}
    257  echo "$header_enveloped" >>$OUT
    258  cat "tb/alice.${SIG}.opaque.env" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    259  echo >>${OUT}
    260  sed -i"" "s/\$/$CR/" ${OUT}
    261 
    262  # bad messages below
    263 
    264  OUT="tb/alice.d${SIG}.multipart.bad.eml"
    265  echo -n "${header_mime_from_to_subject}" >>${OUT}
    266  echo "BAD clear-signed $SIG" >>${OUT}
    267  cat "tb/alice.d${SIG}.multipart" | sed 's/test message from Alice/FAKE message NOT from Alice/' >>${OUT}
    268  sed -i"" "s/\$/$CR/" ${OUT}
    269 
    270  OUT="tb/alice.d${SIG}.multipart.mismatch-econtent"
    271  echo "${multipart_start}" | sed "s/HASHHASH/$HASH/" >>${OUT}
    272  cat tb/alice.mime | sed 's/test message from Alice/FAKE message NOT from Alice/' | sed 's/\r$//' >>${OUT}
    273  echo "${multipart_middle}" >>${OUT}
    274  cat tb/alice.textplain.${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    275  echo "${multipart_end}" >>${OUT}
    276 
    277  OUT="tb/alice.d${SIG}.multipart.mismatch-econtent.eml"
    278  echo -n "${header_mime_from_to_subject}" >>${OUT}
    279  echo "BAD mismatch-econtent $SIG" >>${OUT}
    280  cat "tb/alice.d${SIG}.multipart.mismatch-econtent" >>${OUT}
    281  sed -i"" "s/\$/$CR/" ${OUT}
    282 }
    283 
    284 smime_plain_signed()
    285 {
    286  SIG=sig.SHA${HASH}
    287 
    288  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Alice ${HASH_CMD} -i tb/alice.textplain -d ${P_R_ALICEDIR} -p nss -o tb/alice.plain.d${SIG}
    289 
    290  OUT="tb/alice.plain.d${SIG}.multipart"
    291  echo "${multipart_start}" | sed "s/HASHHASH/${HASH}/" >>${OUT}
    292  cat tb/alice.textplain | sed 's/\r$//' >>${OUT}
    293  echo "${multipart_middle}" >>${OUT}
    294  cat tb/alice.plain.d${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    295  echo "${multipart_end}" >>${OUT}
    296 
    297  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Alice ${HASH_CMD} -i tb/alice.textplain -d ${P_R_ALICEDIR} -p nss -o tb/alice.plain.${SIG}
    298 
    299  OUT="tb/alice.plain.${SIG}.opaque"
    300  echo "$header_opaque_signed" >>${OUT}
    301  cat tb/alice.plain.${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    302 
    303  # Second outer, opaque signature layer.
    304 
    305  INPUT="tb/alice.plain.d${SIG}.multipart"
    306  OUT_SIG="${INPUT}.dave.${SIG}"
    307  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Dave ${HASH_CMD} -i "$INPUT" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    308 
    309  OUT_MIME="${OUT_SIG}.opaque"
    310  echo "$header_opaque_signed" >>${OUT_MIME}
    311  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    312 
    313  OUT_EML="${OUT_MIME}.eml"
    314  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    315  echo "clear-signed $SIG then opaque signed by dave" >>${OUT_EML}
    316  cat "${OUT_MIME}" >>${OUT_EML}
    317  echo >>${OUT_EML}
    318  sed -i"" "s/\$/$CR/" ${OUT_EML}
    319 
    320  INPUT="tb/alice.plain.${SIG}.opaque"
    321  OUT_SIG="${INPUT}.dave.${SIG}"
    322  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Dave ${HASH_CMD} -i "$INPUT" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    323 
    324  OUT_MIME="${OUT_SIG}.opaque"
    325  echo "$header_opaque_signed" >>${OUT_MIME}
    326  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    327 
    328  OUT_EML="${OUT_MIME}.eml"
    329  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    330  echo "opaque-signed $SIG then opaque signed by dave" >>${OUT_EML}
    331  cat "${OUT_MIME}" >>${OUT_EML}
    332  echo >>${OUT_EML}
    333  sed -i"" "s/\$/$CR/" ${OUT_EML}
    334 
    335  # Alternatively, second outer, multipart signature layer.
    336 
    337  INPUT="tb/alice.plain.d${SIG}.multipart"
    338  OUT_SIG="${INPUT}.dave.d${SIG}"
    339  cat "$INPUT" | sed "s/\$/$CR/" > "${INPUT}.cr"
    340  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Dave ${HASH_CMD} -i "${INPUT}.cr" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    341 
    342  OUT_MIME="${OUT_SIG}.multipart"
    343  echo "${multipart_start_b2}" | sed "s/HASHHASH/${HASH}/" >>${OUT_MIME}
    344  cat "${INPUT}.cr" | sed 's/\r$//' >>${OUT_MIME}
    345  rm "${INPUT}.cr"
    346  echo "${multipart_middle_b2}" >>${OUT_MIME}
    347  echo >>${OUT_MIME}
    348  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    349  echo "${multipart_end_b2}" >>${OUT_MIME}
    350 
    351  OUT_EML="${OUT_MIME}.eml"
    352  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    353  echo "clear-signed $SIG then clear-signed signed by dave" >>${OUT_EML}
    354  cat "${OUT_MIME}" >>${OUT_EML}
    355  echo >>${OUT_EML}
    356  sed -i"" "s/\$/$CR/" ${OUT_EML}
    357 
    358  INPUT="tb/alice.plain.${SIG}.opaque"
    359  OUT_SIG="${INPUT}.dave.d${SIG}"
    360  cat "$INPUT" | sed "s/\$/$CR/" > "${INPUT}.cr"
    361  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Dave ${HASH_CMD} -i "${INPUT}.cr" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    362 
    363  OUT_MIME="${OUT_SIG}.multipart"
    364  echo "${multipart_start_b2}" | sed "s/HASHHASH/${HASH}/" >>${OUT_MIME}
    365  cat "${INPUT}.cr" | sed 's/\r$//' >>${OUT_MIME}
    366  rm "${INPUT}.cr"
    367  echo "${multipart_middle_b2}" >>${OUT_MIME}
    368  echo >>${OUT_MIME}
    369  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    370  echo "${multipart_end_b2}" >>${OUT_MIME}
    371 
    372  OUT_EML="${OUT_MIME}.eml"
    373  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    374  echo "opaque-signed $SIG then clear-signed signed by dave" >>${OUT_EML}
    375  cat "${OUT_MIME}" >>${OUT_EML}
    376  echo >>${OUT_EML}
    377  sed -i"" "s/\$/$CR/" ${OUT_EML}
    378 }
    379 
    380 smime_enveloped_signed()
    381 {
    382  SIG=sig.SHA${HASH}
    383 
    384  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -T -N Alice ${HASH_CMD} -i tb/alice.env -d ${P_R_ALICEDIR} -p nss -o tb/alice.env.d${SIG}
    385 
    386  OUT="tb/alice.env.d${SIG}.multipart"
    387  echo "${multipart_start}" | sed "s/HASHHASH/${HASH}/" >>${OUT}
    388  cat tb/alice.env | sed 's/\r$//' >>${OUT}
    389  echo "${multipart_middle}" >>${OUT}
    390  cat tb/alice.env.d${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    391  echo "${multipart_end}" >>${OUT}
    392 
    393  OUT="tb/alice.env.d${SIG}.multipart.eml"
    394  echo -n "${header_mime_from_to_subject}" >>${OUT}
    395  echo "enveloped then clear-signed ${SIG}" >>${OUT}
    396  cat "tb/alice.env.d${SIG}.multipart" >>${OUT}
    397  sed -i"" "s/\$/$CR/" ${OUT}
    398 
    399  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Alice ${HASH_CMD} -i tb/alice.env -d ${P_R_ALICEDIR} -p nss -o tb/alice.env.${SIG}
    400 
    401  OUT="tb/alice.env.${SIG}.opaque"
    402  echo "$header_opaque_signed" >>${OUT}
    403  cat tb/alice.env.${SIG} | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT}
    404 
    405  OUT="tb/alice.env.${SIG}.opaque.eml"
    406  echo -n "${header_mime_from_to_subject}" >>${OUT}
    407  echo "enveloped then opaque-signed $SIG" >>${OUT}
    408  cat "tb/alice.env.${SIG}.opaque" >>${OUT}
    409  echo >>${OUT}
    410  sed -i"" "s/\$/$CR/" ${OUT}
    411 
    412  # Second outer, opaque signature layer.
    413 
    414  INPUT="tb/alice.env.d${SIG}.multipart"
    415  OUT_SIG="${INPUT}.dave.${SIG}"
    416  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Dave ${HASH_CMD} -i "$INPUT" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    417 
    418  OUT_MIME="${OUT_SIG}.opaque"
    419  echo "$header_opaque_signed" >>${OUT_MIME}
    420  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    421 
    422  OUT_EML="${OUT_MIME}.eml"
    423  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    424  echo "enveloped then clear-signed $SIG then opaque signed by dave" >>${OUT_EML}
    425  cat "${OUT_MIME}" >>${OUT_EML}
    426  echo >>${OUT_EML}
    427  sed -i"" "s/\$/$CR/" ${OUT_EML}
    428 
    429  INPUT="tb/alice.env.${SIG}.opaque"
    430  OUT_SIG="${INPUT}.dave.${SIG}"
    431  ${PROFTOOL} ${BINDIR}/cmsutil -S -G -N Dave ${HASH_CMD} -i "$INPUT" -d ${P_R_DAVEDIR} -p nss -o "$OUT_SIG"
    432 
    433  OUT_MIME="${OUT_SIG}.opaque"
    434  echo "$header_opaque_signed" >>${OUT_MIME}
    435  cat "$OUT_SIG" | ${BINDIR}/btoa | sed 's/\r$//' >>${OUT_MIME}
    436 
    437  OUT_EML="${OUT_MIME}.eml"
    438  echo -n "${header_dave_mime_from_to_subject}" >>${OUT_EML}
    439  echo "enveloped then opaque-signed $SIG then opaque signed by dave" >>${OUT_EML}
    440  cat "${OUT_MIME}" >>${OUT_EML}
    441  echo >>${OUT_EML}
    442  sed -i"" "s/\$/$CR/" ${OUT_EML}
    443 }
    444 
    445 smime_p7()
    446 {
    447  echo "$SCRIPTNAME: p7 util Data Tests ------------------------------"
    448  echo "p7env -d ${P_R_ALICEDIR} -r Alice -i alice.txt -o alice_p7.env"
    449  ${PROFTOOL} ${BINDIR}/p7env -d ${P_R_ALICEDIR} -r Alice -i alice.txt -o alice_p7.env
    450  html_msg $? 0 "Creating envelope for user Alice" "."
    451 
    452  echo "p7content -d ${P_R_ALICEDIR} -i alice_p7.env -o alice_p7.data"
    453  ${PROFTOOL} ${BINDIR}/p7content -d ${P_R_ALICEDIR} -i alice_p7.env -o alice_p7.data -p nss
    454  html_msg $? 0 "Verifying file delivered to user Alice" "."
    455 
    456  sed -e '3,3p' -n alice_p7.data > alice_p7.data.sed
    457 
    458  echo "diff alice.txt alice_p7.data.sed"
    459  diff alice.txt alice_p7.data.sed
    460  html_msg $? 0 "Compare Decoded Enveloped Data and Original" "."
    461 
    462  p7sig() {
    463    echo "p7sign -d ${P_R_ALICEDIR} -k Alice -i alice.txt -o alice.sig -p nss -e $alg $usage"
    464    ${PROFTOOL} ${BINDIR}/p7sign -d ${P_R_ALICEDIR} -k Alice -i alice.txt -o alice.sig -p nss -e $alg $usage
    465    html_msg $? $1 "Signing file for user Alice $alg $usage$2" "."
    466  }
    467  p7sigver() {
    468    p7sig 0 ''
    469 
    470    echo "p7verify -d ${P_R_ALICEDIR} -c alice.txt -s alice.sig $usage"
    471    ${PROFTOOL} ${BINDIR}/p7verify -d ${P_R_ALICEDIR} -c alice.txt -s alice.sig $usage
    472    html_msg $? 0 "Verifying file delivered to user Alice $alg $usage" "."
    473  }
    474  # no md2 or md5 (SEC_ERROR_SIGNATURE_ALGORITHM_DISABLED)
    475  for alg in "" "-a sha-1" "-a sha-256" "-a sha-384" "-a SHA-512" "-a SHA-224"; do
    476    usage=; p7sigver
    477    for usage in $(seq 0 12); do
    478      case $usage in
    479        2|3|6|10) usage="-u $usage"; p7sig 1 ' (inadequate)' ;; # SEC_ERROR_INADEQUATE_CERT_TYPE/SEC_ERROR_INADEQUATE_KEY_USAGE
    480        7|9)                                                 ;; # not well-liked by cert_VerifyCertWithFlags() on debug builds
    481        *)        usage="-u $usage"; p7sigver                ;;
    482      esac
    483    done
    484  done
    485 }
    486 
    487 smime_enveloped_openssl_interop() {
    488    echo "$SCRIPTNAME: OpenSSL interoperability --------------------------------"
    489 
    490    ${BINDIR}/pk12util -d ${P_R_ALICEDIR} -i tb/Fran.p12 -W nss -K nss
    491    ${BINDIR}/pk12util -d ${P_R_ALICEDIR} -i tb/Fran-ec.p12 -W nss -K nss
    492    
    493    echo "This is a test message to Fran." > fran.txt
    494 
    495    echo "cmsutil -D -i fran-oaep_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data1"
    496    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data1
    497    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    498 
    499    diff fran.txt fran-oaep.data1
    500    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    501 
    502    echo "cmsutil -D -i fran-oaep-sha256hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data2"
    503    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha256hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data2
    504    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    505 
    506    diff fran.txt fran-oaep.data2
    507    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    508 
    509    echo "cmsutil -D -i fran-oaep-sha384hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data3"
    510    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha384hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data3
    511    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    512 
    513    diff fran.txt fran-oaep.data3
    514    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    515 
    516    echo "cmsutil -D -i fran-oaep-sha512hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data4"
    517    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha512hash_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data4
    518    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    519 
    520    diff fran.txt fran-oaep.data4
    521    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    522 
    523    echo "cmsutil -D -i fran-oaep-sha256mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data5"
    524    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha256mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data5
    525    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    526 
    527    diff fran.txt fran-oaep.data5
    528    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    529 
    530    echo "cmsutil -D -i fran-oaep-sha384mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data6"
    531    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha384mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data6
    532    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    533 
    534    diff fran.txt fran-oaep.data6
    535    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    536 
    537    echo "cmsutil -D -i fran-oaep-sha512mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data7"
    538    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha512mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data7
    539    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    540 
    541    diff fran.txt fran-oaep.data7
    542    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    543 
    544    echo "cmsutil -D -i fran-oaep-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data8"
    545    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data8
    546    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    547 
    548    diff fran.txt fran-oaep.data8
    549    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    550 
    551    echo "cmsutil -D -i fran-oaep-sha256hash-sha256mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data9"
    552    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha256hash-sha256mgf_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data9
    553    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    554 
    555    diff fran.txt fran-oaep.data9
    556    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    557 
    558    echo "cmsutil -D -i fran-oaep-sha256hash-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data10"
    559    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha256hash-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data10
    560    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    561 
    562    diff fran.txt fran-oaep.data10
    563    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    564 
    565    echo "cmsutil -D -i fran-oaep-sha256mgf-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data11"
    566    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep-sha256mgf-label_ossl.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data11
    567    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    568 
    569    diff fran.txt fran-oaep.data11
    570    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    571 
    572    echo "cmsutil -D -i fran-oaep_ossl-sha256hash-sha256mgf-label.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data12"
    573    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-oaep_ossl-sha256hash-sha256mgf-label.env -d ${P_R_ALICEDIR} -p nss -o fran-oaep.data12
    574    html_msg $? 0 "Decode OpenSSL OAEP Enveloped Data Fran" "."
    575 
    576    diff fran.txt fran-oaep.data12
    577    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    578 
    579    echo "cmsutil -D -i fran-ec_ossl-aes128-sha1.env -d ${P_R_ALICEDIR} -p nss -o fran.data1"
    580    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-ec_ossl-aes128-sha1.env -d ${P_R_ALICEDIR} -p nss -o fran.data1
    581    html_msg $? 0 "Decode OpenSSL Enveloped Data Fran (ECDH, AES128 key wrap, SHA-1 KDF)" "."
    582    
    583    diff fran.txt fran.data1
    584    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    585    
    586    echo "cmsutil -D -i fran-ec_ossl-aes128-sha224.env -d ${P_R_ALICEDIR} -p nss -o fran.data2"
    587    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-ec_ossl-aes128-sha224.env -d ${P_R_ALICEDIR} -p nss -o fran.data2
    588    html_msg $? 0 "Decode OpenSSL Enveloped Data Fran (ECDH, AES128 key wrap, SHA-224 KDF)" "."
    589    
    590    diff fran.txt fran.data2
    591    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    592    
    593    echo "cmsutil -D -i fran-ec_ossl-aes128-sha256.env -d ${P_R_ALICEDIR} -p nss -o fran.data3"
    594    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-ec_ossl-aes128-sha256.env -d ${P_R_ALICEDIR} -p nss -o fran.data3
    595    html_msg $? 0 "Decode OpenSSL Enveloped Data Fran (ECDH, AES128 key wrap, SHA-256 KDF)" "."
    596    
    597    diff fran.txt fran.data3
    598    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    599    
    600    echo "cmsutil -D -i fran-ec_ossl-aes192-sha384.env -d ${P_R_ALICEDIR} -p nss -o fran.data4"
    601    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-ec_ossl-aes192-sha384.env -d ${P_R_ALICEDIR} -p nss -o fran.data4
    602    html_msg $? 0 "Decode OpenSSL Enveloped Data Fran (ECDH, AES192 key wrap, SHA-384 KDF)" "."
    603    
    604    diff fran.txt fran.data4
    605    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    606    
    607    echo "cmsutil -D -i fran-ec_ossl-aes256-sha512.env -d ${P_R_ALICEDIR} -p nss -o fran.data5"
    608    ${PROFTOOL} ${BINDIR}/cmsutil -D -i fran-ec_ossl-aes256-sha512.env -d ${P_R_ALICEDIR} -p nss -o fran.data5
    609    html_msg $? 0 "Decode OpenSSL Enveloped Data Fran (ECDH, AES256 key wrap, SHA-512 KDF)" "."
    610    
    611    diff fran.txt fran.data5
    612    html_msg $? 0 "Compare Decoded with OpenSSL enveloped" "."
    613 }
    614 
    615 ############################## smime_main ##############################
    616 # local shell function to test basic signed and enveloped messages
    617 # from 1 --> 2"
    618 ########################################################################
    619 smime_main()
    620 {
    621  mime_init
    622  smime_enveloped
    623 
    624  HASH="1"
    625  cms_sign
    626  smime_signed_enveloped
    627  smime_plain_signed
    628  smime_enveloped_signed
    629  HASH="256"
    630  cms_sign
    631  smime_signed_enveloped
    632  smime_plain_signed
    633  smime_enveloped_signed
    634  HASH="384"
    635  cms_sign
    636  smime_signed_enveloped
    637  smime_plain_signed
    638  smime_enveloped_signed
    639  HASH="512"
    640  cms_sign
    641  smime_signed_enveloped
    642  smime_plain_signed
    643  smime_enveloped_signed
    644 
    645  echo "$SCRIPTNAME: Enveloped Data Tests ------------------------------"
    646  echo "cmsutil -E -r bob@example.com -i alice.txt -d ${P_R_ALICEDIR} -p nss \\"
    647  echo "        -o alice.env"
    648  ${PROFTOOL} ${BINDIR}/cmsutil -E -r bob@example.com -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice.env
    649  html_msg $? 0 "Create Enveloped Data Alice" "."
    650 
    651  echo "cmsutil -D -i alice.env -d ${P_R_BOBDIR} -p nss -o alice.data1"
    652  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice.env -d ${P_R_BOBDIR} -p nss -o alice.data1
    653  html_msg $? 0 "Decode Enveloped Data Alice" "."
    654 
    655  echo "diff alice.txt alice.data1"
    656  diff alice.txt alice.data1
    657  html_msg $? 0 "Compare Decoded Enveloped Data and Original" "."
    658 
    659  echo "$SCRIPTNAME: Enveloped Data Tests (ECDH) ------------------------------"
    660  echo "cmsutil -E -r bob-ec@example.com -i alice.txt -d ${P_R_ALICEDIR} -p nss \\"
    661  echo "        -o alice-ec.env"
    662  ${PROFTOOL} ${BINDIR}/cmsutil -E -r bob-ec@example.com -i alice.txt -d ${P_R_ALICEDIR} -p nss -o alice-ec.env
    663  html_msg $? 0 "Create Enveloped Data with Alice (ECDH)" "."
    664 
    665  echo "cmsutil -D -i alice-ec.env -d ${P_R_BOBDIR} -p nss -o alice.data1"
    666  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice-ec.env -d ${P_R_BOBDIR} -p nss -o alice-ec.data1
    667  html_msg $? 0 "Decode Enveloped Data Alice (ECDH)" "."
    668 
    669  echo "diff alice.txt alice-ec.data1"
    670  diff alice.txt alice-ec.data1
    671  html_msg $? 0 "Compare Decoded Enveloped Data and Original (ECDH)" "."
    672 
    673  # multiple recip
    674  echo "$SCRIPTNAME: Testing multiple recipients ------------------------------"
    675  echo "cmsutil -E -i alice.txt -d ${P_R_ALICEDIR} -o alicecc.env \\"
    676  echo "        -r bob@example.com,dave@example.com"
    677  ${PROFTOOL} ${BINDIR}/cmsutil -E -i alice.txt -d ${P_R_ALICEDIR} -o alicecc.env \
    678          -r bob@example.com,dave-ec@example.com
    679  ret=$?
    680  html_msg $ret 0 "Create Multiple Recipients Enveloped Data Alice" "."
    681  if [ $ret != 0 ] ; then
    682 echo "certutil -L -d ${P_R_ALICEDIR}"
    683 ${BINDIR}/certutil -L -d ${P_R_ALICEDIR}
    684 echo "certutil -L -d ${P_R_ALICEDIR} -n dave@example.com"
    685 ${BINDIR}/certutil -L -d ${P_R_ALICEDIR} -n dave@example.com
    686  fi
    687 
    688  echo "$SCRIPTNAME: Testing multiple email addrs ------------------------------"
    689  echo "cmsutil -E -i alice.txt -d ${P_R_ALICEDIR} -o aliceve.env \\"
    690  echo "        -r eve@example.net"
    691  ${PROFTOOL} ${BINDIR}/cmsutil -E -i alice.txt -d ${P_R_ALICEDIR} -o aliceve.env \
    692          -r eve@example.net
    693  ret=$?
    694  html_msg $ret 0 "Encrypt to a Multiple Email cert" "."
    695 
    696  echo "cmsutil -D -i alicecc.env -d ${P_R_BOBDIR} -p nss -o alice.data2"
    697  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alicecc.env -d ${P_R_BOBDIR} -p nss -o alice.data2
    698  html_msg $? 0 "Decode Multiple Recipients Enveloped Data Alice by Bob" "."
    699 
    700  echo "cmsutil -D -i alicecc.env -d ${P_R_DAVEDIR} -p nss -o alice.data3"
    701  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alicecc.env -d ${P_R_DAVEDIR} -p nss -o alice.data3
    702  html_msg $? 0 "Decode Multiple Recipients Enveloped Data Alice by Dave (ECDH)" "."
    703 
    704  echo "cmsutil -D -i aliceve.env -d ${P_R_EVEDIR} -p nss -o alice.data4"
    705  ${PROFTOOL} ${BINDIR}/cmsutil -D -i aliceve.env -d ${P_R_EVEDIR} -p nss -o alice.data4
    706  html_msg $? 0 "Decrypt with a Multiple Email cert" "."
    707 
    708  diff alice.txt alice.data2
    709  html_msg $? 0 "Compare Decoded Mult. Recipients Enveloped Data Alice/Bob" "."
    710 
    711  diff alice.txt alice.data3
    712  html_msg $? 0 "Compare Decoded Mult. Recipients Enveloped Data Alice/Dave" "."
    713 
    714  diff alice.txt alice.data4
    715  html_msg $? 0 "Compare Decoded with Multiple Email cert" "."
    716 
    717  smime_enveloped_openssl_interop
    718 
    719  echo "$SCRIPTNAME: Sending CERTS-ONLY Message ------------------------------"
    720  echo "cmsutil -O -r \"Alice,bob@example.com,dave@example.com\" \\"
    721  echo "        -d ${P_R_ALICEDIR} > co.der"
    722  ${PROFTOOL} ${BINDIR}/cmsutil -O -r "Alice,bob@example.com,dave@example.com" -d ${P_R_ALICEDIR} > co.der
    723  html_msg $? 0 "Create Certs-Only Alice" "."
    724 
    725  echo "cmsutil -D -i co.der -d ${P_R_BOBDIR}"
    726  ${PROFTOOL} ${BINDIR}/cmsutil -D -i co.der -d ${P_R_BOBDIR}
    727  html_msg $? 0 "Verify Certs-Only by CA" "."
    728 
    729  echo "$SCRIPTNAME: Encrypted-Data Message ---------------------------------"
    730  echo "cmsutil -C -i alice.txt -e alicehello.env -d ${P_R_ALICEDIR} \\"
    731  echo "        -r \"bob@example.com\" > alice.enc"
    732  ${PROFTOOL} ${BINDIR}/cmsutil -C -i alice.txt -e alicehello.env -d ${P_R_ALICEDIR} \
    733          -r "bob@example.com" > alice.enc
    734  html_msg $? 0 "Create Encrypted-Data" "."
    735 
    736  echo "cmsutil -D -i alice.enc -d ${P_R_BOBDIR} -e alicehello.env -p nss \\"
    737  echo "        -o alice.data2"
    738  ${PROFTOOL} ${BINDIR}/cmsutil -D -i alice.enc -d ${P_R_BOBDIR} -e alicehello.env -p nss -o alice.data2
    739  html_msg $? 0 "Decode Encrypted-Data" "."
    740 
    741  diff alice.txt alice.data2
    742  html_msg $? 0 "Compare Decoded and Original Data" "."
    743 }
    744 
    745 smime_data_tb()
    746 {
    747  ${BINDIR}/pk12util -d ${P_R_ALICEDIR} -o tb/Alice.p12 -n Alice -K nss -W nss
    748  ${BINDIR}/pk12util -d ${P_R_ALICEDIR} -o tb/Alice-ec.p12 -n Alice-ec -K nss -W nss
    749  ${BINDIR}/pk12util -d ${P_R_BOBDIR} -o tb/Bob.p12 -n Bob -K nss -W nss
    750  ${BINDIR}/pk12util -d ${P_R_DAVEDIR} -o tb/Dave.p12 -n Dave -K nss -W nss
    751  ${BINDIR}/pk12util -d ${P_R_EVEDIR} -o tb/Eve.p12 -n Eve -K nss -W nss
    752  CAOUT=tb/TestCA.pem
    753  cat ${P_R_CADIR}/TestCA.ca.cert | sed 's/\r$//' | ${BINDIR}/btoa -w c >> ${CAOUT}
    754 }
    755 
    756 ################## smime_setup_policy_directory ########################
    757 # set up a clean directory for the policy test
    758 ########################################################################
    759 smime_setup_policy_directory()
    760 {
    761      dir=$1
    762      name=$2
    763      policy=$3
    764      policy=`echo ${policy} | sed -e 's;_; ;g'`
    765 
    766      rm -rf ${dir} ; mkdir ${dir}
    767      ${BINDIR}/certutil -N -d ${dir} -f ${R_PWFILE}
    768      ${BINDIR}/certutil -A -n "TestCA" -t "TC,TC,TC" -f ${R_PWFILE} -d ${dir} -i ${P_R_CADIR}/TestCA.ca.cert
    769      ${BINDIR}/pk12util -d ${dir} -i tb/${name}.p12 -K nss -W nss > /dev/null
    770      setup_policy "$policy" ${dir}
    771 }
    772 
    773 ############################## smime_policy ##############################
    774 # local shell function to perform SMIME Policy tests
    775 ########################################################################
    776 smime_policy()
    777 {
    778  testname=""
    779  recipient_dir=tb/recipient
    780  sender_dir=tb/sender
    781  source=alice.txt
    782  sign=${recipient_dir}/message.sig
    783  verify=${sender_dir}/message.vfy
    784  encrypt=${sender_dir}/message.enc
    785  envelope=${sender_dir}/message.env
    786  decrypt=${recipient_dir}/message.dec
    787 
    788  ignore_blank_lines ${SMIMEPOLICY} | \
    789  while read sign_ret verify_ret encrypt_ret decrypt_ret hash recipient_email recipient_name recipient_policy sender_name sender_policy algorithm testname
    790  do
    791      echo "$SCRIPTNAME: S/MIME Policy Test {${testname}} ---------------"
    792      smime_setup_policy_directory ${recipient_dir} ${recipient_name} ${recipient_policy}
    793      smime_setup_policy_directory ${sender_dir} ${sender_name} ${sender_policy}
    794 
    795      # first the recipient signs a message
    796      echo "$SCRIPTNAME: Signing policy message {${testname}} ---------------"
    797      echo "cmsutil -S -G -P -N ${recipient_name} -H ${hash} -i ${source} -d ${recipient_dir} -p nss -o ${sign}"
    798      ${PROFTOOL} ${BINDIR}/cmsutil -S -G -P -N ${recipient_name} -H ${hash} -i ${source} -d ${recipient_dir} -p nss -o ${sign}
    799      ret=$?
    800      html_msg $ret ${sign_ret} "Signing policy message (${testname})" "."
    801 
    802      if [ ${sign_ret} -ne 0 ]; then
    803          continue;
    804      fi
    805 
    806      # next the sender imports the certs in the signed message
    807      echo "$SCRIPTNAME: Verify policy message {${testname}} ---------------"
    808      echo "cmsutil -D -k -i ${sign} -d ${sender_dir} -o ${verify}"
    809      ${PROFTOOL} ${BINDIR}/cmsutil -D -k -i ${sign} -d ${sender_dir} -o ${verify}
    810      ret=$?
    811      html_msg $ret ${verify_ret} "Verify policy message (${testname})" "."
    812 
    813      if [ ${verify_ret} -ne 0 ]; then
    814          continue;
    815      fi
    816 
    817      echo "diff ${source} ${verify}"
    818      diff ${source} ${verify}
    819      html_msg $? 0 "Compare policy signed data (${testname})" "."
    820 
    821      # the sender encrypts a message
    822      echo "$SCRIPTNAME: Encrypt policy message (${testname}) --------"
    823      echo "cmsutil -C -i ${source} -d ${sender_dir} -e ${envelope} \\"
    824      echo "        -r \"${recipient_email}\" -o ${encrypt}"
    825      ${PROFTOOL} ${BINDIR}/cmsutil -C -i ${source} -d ${sender_dir} \
    826          -e ${envelope} -r "${recipient_email}" -o ${encrypt}
    827      ret=$?
    828      html_msg $ret ${encrypt_ret} "Encrypted policy message (${testname})" "."
    829 
    830      if [ ${encrypt_ret} -ne 0 ]; then
    831          continue;
    832      fi
    833 
    834      # verify the message was encrypted with the algorithm
    835      encryption=$(${BINDIR}/pp -t pkcs7 -i ${encrypt} | grep "Content Encryption Algorithm" | sed -e 's;^.*Content Encryption Algorithm: ;;')
    836      if [ "${encryption}" != "${algorithm}" ]; then
    837          html_failed "Encryption algorithm (${encryption}) doe not match expected algorithm (${algorithm}) in policy test ({$testname})"
    838      fi
    839 
    840      # the recipient decrypts the message
    841      echo "$SCRIPTNAME: Decrypt policy message (${testname}) --------"
    842      echo "cmsutil -D -i ${encrypt} -d ${recipient_dir} -e ${envelope} -p nss \\"
    843      echo "        -o ${decrypt}"
    844      ${PROFTOOL} ${BINDIR}/cmsutil -D -i ${encrypt} -d ${recipient_dir} -e ${envelope} -p nss -o ${decrypt}
    845 
    846      ret=$?
    847      html_msg $ret ${decrypt_ret} "Decrypted policy message (${testname})" "."
    848 
    849      if [ ${decrypt_ret} -eq 0 ]; then
    850          echo "diff ${source} ${decrypt}"
    851          diff ${source} ${decrypt}
    852          html_msg $? 0 "Compare policy encrypted data (${testname})" "."
    853      fi
    854 
    855  done
    856 }
    857 
    858 ############################## smime_cleanup ###########################
    859 # local shell function to finish this script (no exit since it might be
    860 # sourced)
    861 ########################################################################
    862 smime_cleanup()
    863 {
    864  html "</TABLE><BR>"
    865  cd ${QADIR}
    866  . common/cleanup.sh
    867 }
    868 
    869 ################## main #################################################
    870 
    871 smime_init
    872 smime_main
    873 smime_data_tb
    874 smime_p7
    875 if using_sql ; then
    876  smime_policy
    877 fi
    878 smime_cleanup