Skip to content

Commit a4419fa

Browse files
authored
Merge pull request #2264 from dcooper16/padding
Clean up adding padding
2 parents dda579c + e59d6ab commit a4419fa

1 file changed

Lines changed: 13 additions & 31 deletions

File tree

testssl.sh

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12687,6 +12687,7 @@ poly1305_mac() {
1268712687
local -i d0 d1 d2 d3 d4
1268812688
local -i g0 g1 g2 g3 g4
1268912689
local -i i c f blocksize hibit
12690+
local padding="00000000000000000000000000000000"
1269012691

1269112692
# poly1305_key_gen - RFC 8439, Section 2.6
1269212693
# The MAC key is actually just the first 64 characters (32 bytes) of the
@@ -12699,19 +12700,11 @@ poly1305_mac() {
1269912700
msg="$aad"
1270012701
aad_len=$((${#aad}/2))
1270112702
bytes=$(( aad_len % 16 ))
12702-
if [[ $bytes -ne 0 ]]; then
12703-
for (( i=bytes; i < 16; i++ )); do
12704-
msg+="00"
12705-
done
12706-
fi
12703+
[[ $bytes -ne 0 ]] && msg+="${padding:0:$((2*(16-bytes)))}"
1270712704
msg+="$ciphertext"
1270812705
ciphertext_len=$((${#ciphertext}/2))
1270912706
bytes=$(( ciphertext_len % 16 ))
12710-
if [[ $bytes -ne 0 ]]; then
12711-
for (( i=bytes; i < 16; i++ )); do
12712-
msg+="00"
12713-
done
12714-
fi
12707+
[[ $bytes -ne 0 ]] && msg+="${padding:0:$((2*(16-bytes)))}"
1271512708
msg+="$(u64to8 $aad_len)$(u64to8 $ciphertext_len)"
1271612709
bytes="${#msg}"
1271712710

@@ -12740,10 +12733,7 @@ poly1305_mac() {
1274012733
else
1274112734
blocksize=$bytes
1274212735
hibit=0
12743-
msg+="01"
12744-
for (( i=bytes+2; i < 32; i+=2 )); do
12745-
msg+="00"
12746-
done
12736+
msg+="01${padding:0:$((30-bytes))}"
1274712737
fi
1274812738
h0+=$(( $(u8to32 "${msg:0:8}") & 0x3ffffff ))
1274912739
h1+=$(( ($(u8to32 "${msg:6:8}") >> 2) & 0x3ffffff ))
@@ -12874,6 +12864,7 @@ ccm-compute-tag() {
1287412864
local -i tag_len="$6"
1287512865
local b tag
1287612866
local -i i aad_len plaintext_len final_block_len nr_blocks
12867+
local padding_bytes="00000000000000000000000000000000"
1287712868

1287812869
aad_len=$((${#aad}/2))
1287912870
plaintext_len=$((${#plaintext}/2))
@@ -12909,21 +12900,13 @@ ccm-compute-tag() {
1290912900
return 7
1291012901
fi
1291112902
# Add padding to complete block
12912-
if [[ $final_block_len -ne 0 ]]; then
12913-
for (( i=final_block_len; i < 16; i++ )); do
12914-
b+="00"
12915-
done
12916-
fi
12903+
[[ $final_block_len -ne 0 ]] && b+="${padding_bytes:0:$((2*(16-final_block_len)))}"
1291712904
fi
1291812905

1291912906
# Finally add the plaintext and any padding needed to complete block
1292012907
b+="$plaintext"
1292112908
final_block_len=$((plaintext_len % 16))
12922-
if [[ $final_block_len -ne 0 ]]; then
12923-
for (( i=final_block_len; i < 16; i++ )); do
12924-
b+="00"
12925-
done
12926-
fi
12909+
[[ $final_block_len -ne 0 ]] && b+="${padding_bytes:0:$((2*(16-final_block_len)))}"
1292712910

1292812911
# Compute the authentication tag as described in
1292912912
# Sections 6.1 and 6.2 of NIST SP 800-38C.
@@ -15156,6 +15139,7 @@ prepare_tls_clienthello() {
1515615139
local extensions_key_share="" extn_type supported_groups_c2n="" extn_psk_mode=""
1515715140
local extra_extensions extra_extensions_list="" extension_supported_versions=""
1515815141
local offer_compression=false compression_methods
15142+
local padding_bytes="\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00"
1515915143

1516015144
# TLSv1.3 ClientHello messages MUST specify only the NULL compression method.
1516115145
[[ "$5" == true ]] && [[ "0x$tls_low_byte" -le "0x03" ]] && offer_compression=true
@@ -15466,17 +15450,14 @@ prepare_tls_clienthello() {
1546615450
fi
1546715451
len_padding_extension_hex=$(printf "%02x\n" $len_padding_extension)
1546815452
len2twobytes "$len_padding_extension_hex"
15469-
all_extensions="$all_extensions\\x00\\x15\\x${LEN_STR:0:2}\\x${LEN_STR:4:2}"
15470-
for (( i=0; i<len_padding_extension; i++ )); do
15471-
all_extensions="$all_extensions\\x00"
15472-
done
15453+
all_extensions+="\\x00\\x15\\x${LEN_STR:0:2}\\x${LEN_STR:4:2}${padding_bytes:0:$((4*len_padding_extension))}"
1547315454
len_extension=$len_extension+$len_padding_extension+0x4
1547415455
len_extension_hex=$(printf "%02x\n" $len_extension)
1547515456
elif [[ ! "$extra_extensions_list" =~ \ 0015\ ]] && [[ $((len_all%256)) -eq 10 || $((len_all%256)) -eq 14 ]]; then
1547615457
# Some servers fail if the length of the ClientHello is 522, 778, 1034, 1290, ... bytes.
1547715458
# A few servers also fail if the length is 526, 782, 1038, 1294, ... bytes.
1547815459
# So, if the ClientHello would be one of these length, add a 5-byte padding extension.
15479-
all_extensions="$all_extensions\\x00\\x15\\x00\\x01\\x00"
15460+
all_extensions+="\\x00\\x15\\x00\\x01\\x00"
1548015461
len_extension+=5
1548115462
len_extension_hex=$(printf "%02x\n" $len_extension)
1548215463
fi
@@ -19393,6 +19374,7 @@ run_robot() {
1939319374
local aes_gcm_cbc_cipherlist="00,9d, 00,9c, 00,3d, 00,35, 00,3c, 00,2f"
1939419375
local padded_pms encrypted_pms cke_prefix client_key_exchange rnd_pad
1939519376
local rnd_pms="aa112233445566778899112233445566778899112233445566778899112233445566778899112233445566778899"
19377+
local rnd_padding_bytes="abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
1939619378
local change_cipher_spec finished resp
1939719379
local -a response
1939819380
local -i i subret len iteration testnum pubkeybytes
@@ -19498,8 +19480,8 @@ run_robot() {
1949819480
pubkeybits="${pubkeybits%%bit*}"
1949919481
pubkeybytes=$pubkeybits/8
1950019482
[[ $((pubkeybits%8)) -ne 0 ]] && pubkeybytes+=1
19501-
rnd_pad=""
19502-
for (( len=0; len < pubkeybytes-52; len+=2 )); do
19483+
rnd_pad="${rnd_padding_bytes:0:$((2*(pubkeybytes-51)))}"
19484+
for (( len=$((${#rnd_pad}/2)); len < pubkeybytes-52; len+=2 )); do
1950319485
rnd_pad+="abcd"
1950419486
done
1950519487
[[ $len -eq $pubkeybytes-52 ]] && rnd_pad+="ab"

0 commit comments

Comments
 (0)