From 3a97c9a4535a52c9f7bc469a548423c7be257f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20=C3=96hrstr=C3=B6m?= Date: Wed, 22 Mar 2023 11:03:57 +0100 Subject: [PATCH] Fix bugs in kem-import script. --- utils/kem-extract.sh | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/utils/kem-extract.sh b/utils/kem-extract.sh index fdcbc74..a07ab69 100755 --- a/utils/kem-extract.sh +++ b/utils/kem-extract.sh @@ -12,11 +12,9 @@ if unzip -v "$file" > /dev/null 2>&1 then rm -rf temp_extracting_kem mkdir temp_extracting_kem - unzip -d temp_extracting_kem "$file" + unzip -q -d temp_extracting_kem "$file" file=$(echo temp_extracting_kem/*.kem) if [ ! -f "$file" ]; then file=$(echo temp_extracting_kem/*.kem2) ; fi - echo "Extracting from $file" - echo fi # The key is the supplied password as raw bytes padded with zero bytes. @@ -24,19 +22,38 @@ fi key=$(echo -n "$password" | xxd -p) key=$(printf "%-32s" "$key" | tr ' ' '0') -echo "KEY=>$key<" xml=$(cat "$file") # Extract the Base64-encoded ciphertext from the XML -b64=$(echo "$xml" | sed -n 's/.*\(.*\)<\/CipherValue>.*/\1/p' > gurka) +b64=$(echo "$xml" | sed -n 's/.*\(.*\)<\/CipherValue>.*/\1/p') -echo BASE64="$b64" # Decrypt the ciphertext using the key and IV plain=$(echo "$b64" | base64 -d | openssl enc -aes-128-cbc -d -K "$key" -iv "$key" -nopad) -# Extract the id and key from the decrypted XML -meter_key=$(echo "$plain" | sed -n 's/.*\(.*\)<\/DEK>.*/\1/p') -meter_id=$(echo "$plain" | sed -n 's/.*\(.*\)<\/SerialNo>.*/\1/p') +good=false -echo "id=$meter_id" -echo "key=$meter_key" +if echo "$plain" | grep -q "DEK" +then + # kem2 + meter_key=$(echo "$plain" | sed -n 's/.*DEK<\/Name>\(.*\)<\/Value>.*/\1/p') + meter_id=$(echo "$plain" | sed -n 's/.*\(.*\)<\/SerialNumber>.*/\1/p') + good=true +fi + +if echo "$plain" | grep -q "" +then + # kem + meter_key=$(echo "$plain" | sed -n 's/.*\(.*\)<\/DEK>.*/\1/p') + meter_id=$(echo "$plain" | sed -n 's/.*\(.*\)<\/SerialNo>.*/\1/p') + good=true +fi + +if [ "$good" = true ] +then + echo "meter id: $meter_id" + echo "meter key: $meter_key" + rm -rf temp_extracting_kem +else + echo "Error when extracting. To debug run: bash -x kem-extract $*" + echo "Collect the output and create an issue at https://github.com/wmbusmeters/wmbusmeters" +fi