#! /bin/bash  
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

########################################################################
#
# mozilla/security/nss/tests/crmf/crmf.sh
#
# Script to test NSS crmf library (a static library) 
#
# needs to work on all Unix and Windows platforms
#
# special strings
# ---------------
#   FIXME ... known problems, search for this string
#   NOTE .... unexpected behavior
#
########################################################################

############################## smime_init ##############################
# local shell function to initialize this script
########################################################################
crmf_init()
{
  SCRIPTNAME=crmf.sh      # sourced - $0 would point to all.sh

  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
  fi

  if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ]; then
      cd ../common
      . ./init.sh
  fi
  if [ ! -r $CERT_LOG_FILE ]; then  # we need certificates here
      cd ../cert
      . ./cert.sh
  fi
  html_head "CRMF/CMMF Tests"

  # cmrf uses the S/MIME certs to test with
  grep "SUCCESS: SMIME passed" $CERT_LOG_FILE >/dev/null || {
      Exit 11 "Fatal - S/MIME of cert.sh needs to pass first"
  }

  CRMFDIR=${HOSTDIR}/crmf
  R_CRMFDIR=../crmf
  mkdir -p ${CRMFDIR}
  cd ${CRMFDIR}
}

############################## crmf_main ##############################
# local shell function to test basic CRMF request and CMMF responses
# from 1 --> 2"
########################################################################
crmf_main()
{
  echo "$SCRIPTNAME: CRMF/CMMF Tests ------------------------------"
  echo "crmftest -d ${P_R_BOBDIR} -p Bob -e dave@example.com -s TestCA -P nss crmf decode"
  ${BINDIR}/crmftest -d ${P_R_BOBDIR} -p Bob -e dave@example.com -s TestCA -P nss crmf decode
  html_msg $? 0 "CRMF test" "."

  echo "crmftest -d ${P_R_BOBDIR} -p Bob -e dave@example.com -s TestCA -P nss cmmf"
  ${BINDIR}/crmftest -d ${P_R_BOBDIR} -p Bob -e dave@example.com -s TestCA -P nss cmmf 
  html_msg $? 0 "CMMF test" "."

# Add tests for key recovery and challange as crmftest's capabilities increase

}
  
############################## crmf_cleanup ###########################
# local shell function to finish this script (no exit since it might be
# sourced)
########################################################################
crmf_cleanup()
{
  html "</TABLE><BR>"
  cd ${QADIR}
  . common/cleanup.sh
}

################## main #################################################

crmf_init
crmf_main
crmf_cleanup

