Skip to content

Instantly share code, notes, and snippets.

@shankerwangmiao
Last active November 27, 2018 12:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shankerwangmiao/ecd127a54e44bb8029ba8674c912a93b to your computer and use it in GitHub Desktop.
Save shankerwangmiao/ecd127a54e44bb8029ba8674c912a93b to your computer and use it in GitHub Desktop.
#!/bin/bash
negative(){
tr '0123456789ABCDEFabcdef' 'FEDCBA9876543210543210'
}
key_derive(){
local mpk="$1"
local asn="$2"
echo "$(echo "$asn" | tdes_enc "$mpk")$(echo "$asn" | negative | tdes_enc "$mpk")"
}
tdes_enc(){
local key="$1"
xxd -r -p | openssl enc -des-ede -nosalt -nopad -K "$key" | xxd -u -p
}
tdes_dec(){
local key="$2"
xxd -r -p | openssl enc -d -des-ede -nosalt -nopad -K "$key" | xxd -u -p
}
int_challenge(){
local key="$1"
local rand="$2"
echo "$(echo "00000000$rand" | tdes_enc "$key")"
}
calc_sess_key(){
local key="$1"
local seslk="$2"
echo $seslk | tdes_enc "$key"
}
xor(){
local res=(`echo "$1" | sed "s/../0x& /g"`)
shift 1
while [[ "$1" ]]; do
local one=(`echo "$1" | sed "s/../0x& /g"`)
local count1=${#res[@]}
if [ $count1 -lt ${#one[@]} ]
then
count1=${#one[@]}
fi
for (( i = 0; i < $count1; i++ ))
do
res[$i]=$((${one[$i]:-0} ^ ${res[$i]:-0}))
done
shift 1
done
printf "%02x" "${res[@]}"
}
pad_msg(){
local target_len="$1"
local msg="$(cat)"
local len="$(echo -n "$msg" | wc -m)"
local pad_len="$(($target_len - $len % $target_len))"
echo -n "$msg"
for i in $(seq 1 "$pad_len"); do
if [ "$i" -eq 1 ]; then
echo -n "8"
else
echo -n "0"
fi
done
echo ""
}
calc_mac_1(){
local key="$1"
pad_msg 16 | xxd -r -p | openssl enc -des-cbc -K "$key" -nosalt -iv 0000000000000000 -nopad | tail -c 8 | head -c 4 | xxd -u -p
}
calc_mac_2(){
local key="$1"
pad_msg 16 | xxd -r -p | openssl enc -des-cbc -K "${key:0:16}" -nosalt -iv 0000000000000000 -nopad | tail -c 8 | openssl enc -d -des-ecb -K "${key:16:16}" -nopad -nosalt | openssl enc -des-ecb -K "${key:0:16}" -nopad -nosalt | head -c 4 | xxd -u -p
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment