From a9657246e277dac8e3766998208acdba0b4e5442 Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Wed, 1 Sep 2021 15:42:55 +0000 Subject: [PATCH] tpm2: Extend asym key test case data generation script with sm4 Extend the test case data generation script with sm4. Since several distros' openssl do not support sm4, we need to test for whether sm4 is supported by the installed openssl. Signed-off-by: Stefan Berger --- src/tpm2/gensymtestsdata.sh | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/tpm2/gensymtestsdata.sh b/src/tpm2/gensymtestsdata.sh index dec45c0f..1c51c2f5 100755 --- a/src/tpm2/gensymtestsdata.sh +++ b/src/tpm2/gensymtestsdata.sh @@ -114,6 +114,45 @@ function do_tdes() { done } +function do_sm4() { + local data="$1" + local osslflag="$2" + + for keysize in 128; do + tmp=SM4_KEY_${keysize} + key=$(eval echo \$$tmp) + for mode in ecb cbc cfb ofb ctr; do + cipher="sm4-${mode}" + bs=$((128 / 8)) + iv="" + ivparm="" + case $mode in + ecb) + ;; + ctr) + v=255 + for ((c=0; c < bs; c++)); do + iv="$(printf "%02x" $v)${iv}" + v=$((v - 1)) + done + ivparm="-iv ${iv}" + ;; + *) + for ((c=0; c < bs; c++)); do + iv="${iv}$(printf "%02x" $c)" + done + ivparm="-iv ${iv}" + ;; + esac + echo -n "$cipher: " + openssl enc -e -K "${key}" ${ivparm} -${cipher} -in <(echo -en "$data") ${osslflag} | \ + od -t x1 -w128 -An | \ + sed -n 's/ \([a-f0-9]\{2\}\)/ 0x\1/pg' + done + done +} + + AES_KEY_128='2b7e151628aed2a6abf7158809cf4f3c' AES_KEY_192='8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' AES_KEY_256='603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4' @@ -145,3 +184,12 @@ CAMELLIA_DATA_IN=${AES_DATA_IN} echo "----- CAMELLIA -----" do_camellia "${CAMELLIA_DATA_IN}" "" echo "--------------------" + +if [ -n "$(openssl enc -ciphers | grep sm4)" ]; then + SM4_KEY_128='0123456789abcdeffedcba9876543210' + SM4_DATA_IN='\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb' + + echo "-------- SM4 -------" + do_sm4 "${SM4_DATA_IN}" "" + echo "--------------------" +fi