diff options
author | jsing <> | 2021-01-19 18:51:08 +0000 |
---|---|---|
committer | jsing <> | 2021-01-19 18:51:08 +0000 |
commit | ac4995fa26f1a8ba3ff386c0caf843a423a4abc7 (patch) | |
tree | 5ff1746dcd8d564bdb0c60d5075f307fbaeac57d /src/lib/libssl/tls12_record_layer.c | |
parent | 0e9595ce9da2c27470d495fbfc1b189eb4a3df24 (diff) | |
download | openbsd-ac4995fa26f1a8ba3ff386c0caf843a423a4abc7.tar.gz openbsd-ac4995fa26f1a8ba3ff386c0caf843a423a4abc7.tar.bz2 openbsd-ac4995fa26f1a8ba3ff386c0caf843a423a4abc7.zip |
Provide record layer overhead for DTLS.
Rather than manually calculating the maximum record layer overhead in the
DTLS code, have the record layer provide this information. This also makes
it work correctly with AEAD ciphersuites.
ok inoguchi@ tb@
Diffstat (limited to 'src/lib/libssl/tls12_record_layer.c')
-rw-r--r-- | src/lib/libssl/tls12_record_layer.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/lib/libssl/tls12_record_layer.c b/src/lib/libssl/tls12_record_layer.c index 04699f9a83..7fa31707d3 100644 --- a/src/lib/libssl/tls12_record_layer.c +++ b/src/lib/libssl/tls12_record_layer.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls12_record_layer.c,v 1.10 2021/01/19 18:34:02 jsing Exp $ */ | 1 | /* $OpenBSD: tls12_record_layer.c,v 1.11 2021/01/19 18:51:08 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -168,6 +168,33 @@ tls12_record_layer_alert(struct tls12_record_layer *rl, uint8_t *alert_desc) | |||
168 | *alert_desc = rl->alert_desc; | 168 | *alert_desc = rl->alert_desc; |
169 | } | 169 | } |
170 | 170 | ||
171 | int | ||
172 | tls12_record_layer_write_overhead(struct tls12_record_layer *rl, | ||
173 | size_t *overhead) | ||
174 | { | ||
175 | size_t block_size, eiv_len, mac_len; | ||
176 | |||
177 | *overhead = 0; | ||
178 | |||
179 | if (rl->write->aead_ctx != NULL) { | ||
180 | *overhead = rl->write->aead_ctx->tag_len; | ||
181 | } else if (rl->write->cipher_ctx != NULL) { | ||
182 | eiv_len = 0; | ||
183 | if (rl->version != TLS1_VERSION) { | ||
184 | if (!tls12_record_protection_eiv_len(rl->write, &eiv_len)) | ||
185 | return 0; | ||
186 | } | ||
187 | if (!tls12_record_protection_block_size(rl->write, &block_size)) | ||
188 | return 0; | ||
189 | if (!tls12_record_protection_mac_len(rl->write, &mac_len)) | ||
190 | return 0; | ||
191 | |||
192 | *overhead = eiv_len + block_size + mac_len; | ||
193 | } | ||
194 | |||
195 | return 1; | ||
196 | } | ||
197 | |||
171 | void | 198 | void |
172 | tls12_record_layer_set_version(struct tls12_record_layer *rl, uint16_t version) | 199 | tls12_record_layer_set_version(struct tls12_record_layer *rl, uint16_t version) |
173 | { | 200 | { |