summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2022-07-22 19:54:46 +0000
committerjsing <>2022-07-22 19:54:46 +0000
commit62ec4b94c9b1942d04a7969d9eb9b49418c53b28 (patch)
tree2334189bf40e4de830827fcec28cafccf24f4c04 /src
parent3890176708c6f990b2e0bc4a469efc1eab093c1e (diff)
downloadopenbsd-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.h4
-rw-r--r--src/lib/libssl/ssl_transcript.c41
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
22int 23int
23tls1_transcript_hash_init(SSL *s) 24tls1_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)
129void 130void
130tls1_transcript_free(SSL *s) 131tls1_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
136void 137void
137tls1_transcript_reset(SSL *s) 138tls1_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)
151int 145int
152tls1_transcript_append(SSL *s, const unsigned char *buf, size_t len) 146tls1_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
176int 157int
177tls1_transcript_data(SSL *s, const unsigned char **data, size_t *len) 158tls1_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}