diff options
author | Ingela Anderton Andin <[email protected]> | 2018-10-01 10:52:25 +0200 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2018-10-01 10:52:25 +0200 |
commit | 0f0a8cb58182b9c2b31b4b7f5c257eeab2c9c40b (patch) | |
tree | 9e7d6411f49751682e393154a1402756ba69adf0 /lib/ssl/src/tls_handshake_1_3.erl | |
parent | cf78a63a6e6ff96824ccede870612b286bbdacb7 (diff) | |
parent | 66ed2fa10f8adeffd62b10fcb99a8e52de391519 (diff) | |
download | otp-0f0a8cb58182b9c2b31b4b7f5c257eeab2c9c40b.tar.gz otp-0f0a8cb58182b9c2b31b4b7f5c257eeab2c9c40b.tar.bz2 otp-0f0a8cb58182b9c2b31b4b7f5c257eeab2c9c40b.zip |
Merge branch 'ingela/ssl/extensions-and-TLS-1.3-handshaking'
* ingela/ssl/extensions-and-TLS-1.3-handshaking:
ssl: Correct extension decoding and dialyzer spec
ssl: Generalize extensions handling
Diffstat (limited to 'lib/ssl/src/tls_handshake_1_3.erl')
-rw-r--r-- | lib/ssl/src/tls_handshake_1_3.erl | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/ssl/src/tls_handshake_1_3.erl b/lib/ssl/src/tls_handshake_1_3.erl index 2957e3a5b4..199054b43b 100644 --- a/lib/ssl/src/tls_handshake_1_3.erl +++ b/lib/ssl/src/tls_handshake_1_3.erl @@ -89,7 +89,7 @@ decode_handshake(?CERTIFICATE, <<?BYTE(CSize), Context:CSize/binary, certificate_request_context = Context, entries = CertList }; -decode_handshake(?ENCRYPTED_EXTENSIONS, EncExts) -> +decode_handshake(?ENCRYPTED_EXTENSIONS, <<?UINT16(Size), EncExts:Size/binary>>) -> #encrypted_extensions{ extensions = decode_extensions(EncExts) }; @@ -127,23 +127,27 @@ encode_cert_entries([], Acc) -> iolist_to_binary(lists:reverse(Acc)); encode_cert_entries([#certificate_entry{data = Data, extensions = Exts} | Rest], Acc) -> + DSize = byte_size(Data), BinExts = encode_extensions(Exts), - Size = byte_size(Data), + ExtSize = byte_size(BinExts), encode_cert_entries(Rest, - [<<?UINT24(Size), Data/binary, BinExts/binary>> | Acc]). + [<<?UINT24(DSize), Data/binary, ?UINT16(ExtSize), BinExts/binary>> | Acc]). decode_cert_entries(Entries) -> decode_cert_entries(Entries, []). decode_cert_entries(<<>>, Acc) -> lists:reverse(Acc); -decode_cert_entries(<<?UINT24(DSize), Data:DSize/binary, ?UINT24(Esize), BinExts:Esize/binary, +decode_cert_entries(<<?UINT24(DSize), Data:DSize/binary, ?UINT16(Esize), BinExts:Esize/binary, Rest/binary>>, Acc) -> Exts = decode_extensions(BinExts), decode_cert_entries(Rest, [#certificate_entry{data = Data, extensions = Exts} | Acc]). encode_extensions(Exts)-> - ssl_handshake:encode_hello_extensions(Exts). + ssl_handshake:encode_extensions(extensions_list(Exts)). decode_extensions(Exts) -> - ssl_handshake:decode_hello_extensions(Exts). + ssl_handshake:decode_extensions(Exts). + +extensions_list(HelloExtensions) -> + [Ext || {_, Ext} <- maps:to_list(HelloExtensions)]. |