diff options
author | jsing <> | 2022-07-22 19:54:46 +0000 |
---|---|---|
committer | jsing <> | 2022-07-22 19:54:46 +0000 |
commit | 62ec4b94c9b1942d04a7969d9eb9b49418c53b28 (patch) | |
tree | 2334189bf40e4de830827fcec28cafccf24f4c04 /src | |
parent | 3890176708c6f990b2e0bc4a469efc1eab093c1e (diff) | |
download | openbsd-62ec4b94c9b1942d04a7969d9eb9b49418c53b28.tar.gz openbsd-62ec4b94c9b1942d04a7969d9eb9b49418c53b28.tar.bz2 openbsd-62ec4b94c9b1942d04a7969d9eb9b49418c53b28.zip |
Convert TLS transcript from BUF_MEM to tls_buffer.
ok beck@ tb@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/ssl_transcript.c | 41 |
2 files changed, 16 insertions, 29 deletions
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 34fb5815a9..7623daccf1 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.415 2022/07/20 13:43:33 tb Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.416 2022/07/22 19:54:46 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1181,7 +1181,7 @@ typedef struct ssl3_state_st { | |||
1181 | const unsigned char *wpend_buf; | 1181 | const unsigned char *wpend_buf; |
1182 | 1182 | ||
1183 | /* Transcript of handshake messages that have been sent and received. */ | 1183 | /* Transcript of handshake messages that have been sent and received. */ |
1184 | BUF_MEM *handshake_transcript; | 1184 | struct tls_buffer *handshake_transcript; |
1185 | 1185 | ||
1186 | /* Rolling hash of handshake messages. */ | 1186 | /* Rolling hash of handshake messages. */ |
1187 | EVP_MD_CTX *handshake_hash; | 1187 | EVP_MD_CTX *handshake_hash; |
diff --git a/src/lib/libssl/ssl_transcript.c b/src/lib/libssl/ssl_transcript.c index d0af8e6942..e4a041f67d 100644 --- a/src/lib/libssl/ssl_transcript.c +++ b/src/lib/libssl/ssl_transcript.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_transcript.c,v 1.7 2022/03/17 17:22:16 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_transcript.c,v 1.8 2022/07/22 19:54:46 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2017 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -18,6 +18,7 @@ | |||
18 | #include <openssl/ssl.h> | 18 | #include <openssl/ssl.h> |
19 | 19 | ||
20 | #include "ssl_locl.h" | 20 | #include "ssl_locl.h" |
21 | #include "tls_internal.h" | ||
21 | 22 | ||
22 | int | 23 | int |
23 | tls1_transcript_hash_init(SSL *s) | 24 | tls1_transcript_hash_init(SSL *s) |
@@ -118,7 +119,7 @@ tls1_transcript_init(SSL *s) | |||
118 | if (s->s3->handshake_transcript != NULL) | 119 | if (s->s3->handshake_transcript != NULL) |
119 | return 0; | 120 | return 0; |
120 | 121 | ||
121 | if ((s->s3->handshake_transcript = BUF_MEM_new()) == NULL) | 122 | if ((s->s3->handshake_transcript = tls_buffer_new(0)) == NULL) |
122 | return 0; | 123 | return 0; |
123 | 124 | ||
124 | tls1_transcript_reset(s); | 125 | tls1_transcript_reset(s); |
@@ -129,21 +130,14 @@ tls1_transcript_init(SSL *s) | |||
129 | void | 130 | void |
130 | tls1_transcript_free(SSL *s) | 131 | tls1_transcript_free(SSL *s) |
131 | { | 132 | { |
132 | BUF_MEM_free(s->s3->handshake_transcript); | 133 | tls_buffer_free(s->s3->handshake_transcript); |
133 | s->s3->handshake_transcript = NULL; | 134 | s->s3->handshake_transcript = NULL; |
134 | } | 135 | } |
135 | 136 | ||
136 | void | 137 | void |
137 | tls1_transcript_reset(SSL *s) | 138 | tls1_transcript_reset(SSL *s) |
138 | { | 139 | { |
139 | /* | 140 | tls_buffer_clear(s->s3->handshake_transcript); |
140 | * We should check the return value of BUF_MEM_grow_clean(), however | ||
141 | * due to yet another bad API design, when called with a length of zero | ||
142 | * it is impossible to tell if it succeeded (returning a length of zero) | ||
143 | * or if it failed (and returned zero)... our implementation never | ||
144 | * fails with a length of zero, so we trust all is okay... | ||
145 | */ | ||
146 | (void)BUF_MEM_grow_clean(s->s3->handshake_transcript, 0); | ||
147 | 141 | ||
148 | tls1_transcript_unfreeze(s); | 142 | tls1_transcript_unfreeze(s); |
149 | } | 143 | } |
@@ -151,36 +145,29 @@ tls1_transcript_reset(SSL *s) | |||
151 | int | 145 | int |
152 | tls1_transcript_append(SSL *s, const unsigned char *buf, size_t len) | 146 | tls1_transcript_append(SSL *s, const unsigned char *buf, size_t len) |
153 | { | 147 | { |
154 | size_t olen, nlen; | ||
155 | |||
156 | if (s->s3->handshake_transcript == NULL) | 148 | if (s->s3->handshake_transcript == NULL) |
157 | return 1; | 149 | return 1; |
158 | 150 | ||
159 | if (s->s3->flags & TLS1_FLAGS_FREEZE_TRANSCRIPT) | 151 | if (s->s3->flags & TLS1_FLAGS_FREEZE_TRANSCRIPT) |
160 | return 1; | 152 | return 1; |
161 | 153 | ||
162 | olen = s->s3->handshake_transcript->length; | 154 | return tls_buffer_append(s->s3->handshake_transcript, buf, len); |
163 | nlen = olen + len; | ||
164 | |||
165 | if (nlen < olen) | ||
166 | return 0; | ||
167 | |||
168 | if (BUF_MEM_grow(s->s3->handshake_transcript, nlen) == 0) | ||
169 | return 0; | ||
170 | |||
171 | memcpy(s->s3->handshake_transcript->data + olen, buf, len); | ||
172 | |||
173 | return 1; | ||
174 | } | 155 | } |
175 | 156 | ||
176 | int | 157 | int |
177 | tls1_transcript_data(SSL *s, const unsigned char **data, size_t *len) | 158 | tls1_transcript_data(SSL *s, const unsigned char **data, size_t *len) |
178 | { | 159 | { |
160 | CBS cbs; | ||
161 | |||
179 | if (s->s3->handshake_transcript == NULL) | 162 | if (s->s3->handshake_transcript == NULL) |
180 | return 0; | 163 | return 0; |
181 | 164 | ||
182 | *data = s->s3->handshake_transcript->data; | 165 | if (!tls_buffer_data(s->s3->handshake_transcript, &cbs)) |
183 | *len = s->s3->handshake_transcript->length; | 166 | return 0; |
167 | |||
168 | /* XXX - change to caller providing a CBS argument. */ | ||
169 | *data = CBS_data(&cbs); | ||
170 | *len = CBS_len(&cbs); | ||
184 | 171 | ||
185 | return 1; | 172 | return 1; |
186 | } | 173 | } |