fips-check.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. # fips-check.sh
  3. # This script checks the current revision of the code against the
  4. # previous release of the FIPS code. While wolfSSL and wolfCrypt
  5. # may be advancing, they must work correctly with the last tested
  6. # copy of our FIPS approved code.
  7. #
  8. # This should check out all the approved versions. The command line
  9. # option selects the version.
  10. #
  11. # $ ./fips-check [version]
  12. #
  13. # - version: linux (default), ios, android, windows, freertos
  14. #
  15. function Usage() {
  16. echo "Usage: $0 [platform]"
  17. echo "Where \"platform\" is one of linux (default), ios, android, windows, freertos"
  18. }
  19. LINUX_FIPS_VERSION=v3.2.6
  20. LINUX_FIPS_REPO=git@github.com:wolfSSL/fips.git
  21. LINUX_CTAO_VERSION=v3.2.6
  22. LINUX_CTAO_REPO=git@github.com:cyassl/cyassl.git
  23. IOS_FIPS_VERSION=v3.4.8a
  24. IOS_FIPS_REPO=git@github.com:wolfSSL/fips.git
  25. IOS_CTAO_VERSION=v3.4.8.fips
  26. IOS_CTAO_REPO=git@github.com:cyassl/cyassl.git
  27. ANDROID_FIPS_VERSION=v3.5.0
  28. ANDROID_FIPS_REPO=git@github.com:wolfSSL/fips.git
  29. ANDROID_CTAO_VERSION=v3.5.0
  30. ANDROID_CTAO_REPO=git@github.com:cyassl/cyassl.git
  31. WINDOWS_FIPS_VERSION=v3.6.6
  32. WINDOWS_FIPS_REPO=git@github.com:wolfSSL/fips.git
  33. WINDOWS_CTAO_VERSION=v3.6.6
  34. WINDOWS_CTAO_REPO=git@github.com:cyassl/cyassl.git
  35. FREERTOS_FIPS_VERSION=v3.6.1-FreeRTOS
  36. FREERTOS_FIPS_REPO=git@github.com:wolfSSL/fips.git
  37. FREERTOS_CTAO_VERSION=v3.6.1
  38. FREERTOS_CTAO_REPO=git@github.com:cyassl/cyassl.git
  39. FIPS_SRCS=( fips.c fips_test.c )
  40. WC_MODS=( aes des3 sha sha256 sha512 rsa hmac random )
  41. TEST_DIR=XXX-fips-test
  42. WC_INC_PATH=cyassl/ctaocrypt
  43. WC_SRC_PATH=ctaocrypt/src
  44. if [ "x$1" == "x" ]; then PLATFORM="linux"; else PLATFORM=$1; fi
  45. case $PLATFORM in
  46. ios)
  47. FIPS_VERSION=$IOS_FIPS_VERSION
  48. FIPS_REPO=$IOS_FIPS_REPO
  49. CTAO_VERSION=$IOS_CTAO_VERSION
  50. CTAO_REPO=$IOS_CTAO_REPO
  51. ;;
  52. android)
  53. FIPS_VERSION=$ANDROID_FIPS_VERSION
  54. FIPS_REPO=$ANDROID_FIPS_REPO
  55. CTAO_VERSION=$ANDROID_CTAO_VERSION
  56. CTAO_REPO=$ANDROID_CTAO_REPO
  57. ;;
  58. windows)
  59. FIPS_VERSION=$WINDOWS_FIPS_VERSION
  60. FIPS_REPO=$WINDOWS_FIPS_REPO
  61. CTAO_VERSION=$WINDOWS_CTAO_VERSION
  62. CTAO_REPO=$WINDOWS_CTAO_REPO
  63. ;;
  64. freertos)
  65. FIPS_VERSION=$FREERTOS_FIPS_VERSION
  66. FIPS_REPO=$FREERTOS_FIPS_REPO
  67. CTAO_VERSION=$FREERTOS_CTAO_VERSION
  68. CTAO_REPO=$FREERTOS_CTAO_REPO
  69. ;;
  70. linux)
  71. FIPS_VERSION=$LINUX_FIPS_VERSION
  72. FIPS_REPO=$LINUX_FIPS_REPO
  73. CTAO_VERSION=$LINUX_CTAO_VERSION
  74. CTAO_REPO=$LINUX_CTAO_REPO
  75. ;;
  76. *)
  77. Usage
  78. exit 1
  79. esac
  80. git clone . $TEST_DIR
  81. [ $? -ne 0 ] && echo "\n\nCouldn't duplicate current working directory.\n\n" && exit 1
  82. pushd $TEST_DIR
  83. # make a clone of the last FIPS release tag
  84. git clone -b $CTAO_VERSION $CTAO_REPO old-tree
  85. [ $? -ne 0 ] && echo "\n\nCouldn't checkout the FIPS release.\n\n" && exit 1
  86. for MOD in ${WC_MODS[@]}
  87. do
  88. cp old-tree/$WC_SRC_PATH/${MOD}.c $WC_SRC_PATH
  89. cp old-tree/$WC_INC_PATH/${MOD}.h $WC_INC_PATH
  90. done
  91. # The following is temporary. We are using random.c from a separate release
  92. pushd old-tree
  93. git checkout v3.6.0
  94. popd
  95. cp old-tree/$WC_SRC_PATH/random.c $WC_SRC_PATH
  96. cp old-tree/$WC_INC_PATH/random.h $WC_INC_PATH
  97. # clone the FIPS repository
  98. git clone -b $FIPS_VERSION $FIPS_REPO fips
  99. [ $? -ne 0 ] && echo "\n\nCouldn't checkout the FIPS repository.\n\n" && exit 1
  100. for SRC in ${FIPS_SRCS[@]}
  101. do
  102. cp fips/$SRC $WC_SRC_PATH
  103. done
  104. # run the make test
  105. ./autogen.sh
  106. ./configure --enable-fips
  107. make
  108. [ $? -ne 0 ] && echo "\n\nMake failed. Debris left for analysis." && exit 1
  109. NEWHASH=`./wolfcrypt/test/testwolfcrypt | sed -n 's/hash = \(.*\)/\1/p'`
  110. if [ -n "$NEWHASH" ]; then
  111. sed -i.bak "s/^\".*\";/\"${NEWHASH}\";/" $WC_SRC_PATH/fips_test.c
  112. make clean
  113. fi
  114. make test
  115. [ $? -ne 0 ] && echo "\n\nTest failed. Debris left for analysis." && exit 1
  116. # Clean up
  117. popd
  118. rm -rf $TEST_DIR