diff options
author | jsing <> | 2016-12-26 15:34:01 +0000 |
---|---|---|
committer | jsing <> | 2016-12-26 15:34:01 +0000 |
commit | 184bac77338d562f8106b14d90eeebe2a0d55850 (patch) | |
tree | 8d4c994b773b032fa825882f2b6480cda81be7d1 | |
parent | 31656117a6540817602e4715e29bda545baa6151 (diff) | |
download | openbsd-184bac77338d562f8106b14d90eeebe2a0d55850.tar.gz openbsd-184bac77338d562f8106b14d90eeebe2a0d55850.tar.bz2 openbsd-184bac77338d562f8106b14d90eeebe2a0d55850.zip |
Restore previous ASN.1 encoding for the peer certificate - this was
unintentionally changed during the CBS/CBB rewrite.
Issue reported by jeremy@ due to failing ruby tests.
Analysis and near identical diff from Kazuki Yamaguchi <k at rhe.jp>.
-rw-r--r-- | src/lib/libssl/ssl_asn1.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index 36fbbbed98..707dc24d08 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_asn1.c,v 1.46 2016/12/26 15:28:42 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_asn1.c,v 1.47 2016/12/26 15:34:01 jsing Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2016 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2016 Joel Sing <jsing@openbsd.org> |
@@ -122,13 +122,11 @@ i2d_SSL_SESSION(SSL_SESSION *s, unsigned char **pp) | |||
122 | 122 | ||
123 | /* Peer certificate [3]. */ | 123 | /* Peer certificate [3]. */ |
124 | if (s->peer != NULL) { | 124 | if (s->peer != NULL) { |
125 | if (!CBB_add_asn1(&session, &peer_cert, SSLASN1_PEER_CERT_TAG)) | ||
126 | goto err; | ||
127 | if (!CBB_add_asn1(&peer_cert, &value, CBS_ASN1_OCTETSTRING)) | ||
128 | goto err; | ||
129 | if ((len = i2d_X509(s->peer, &peer_cert_bytes)) <= 0) | 125 | if ((len = i2d_X509(s->peer, &peer_cert_bytes)) <= 0) |
130 | goto err; | 126 | goto err; |
131 | if (!CBB_add_bytes(&value, peer_cert_bytes, len)) | 127 | if (!CBB_add_asn1(&session, &peer_cert, SSLASN1_PEER_CERT_TAG)) |
128 | goto err; | ||
129 | if (!CBB_add_bytes(&peer_cert, peer_cert_bytes, len)) | ||
132 | goto err; | 130 | goto err; |
133 | } | 131 | } |
134 | 132 | ||
@@ -312,7 +310,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
312 | /* Peer certificate [3]. */ | 310 | /* Peer certificate [3]. */ |
313 | X509_free(s->peer); | 311 | X509_free(s->peer); |
314 | s->peer = NULL; | 312 | s->peer = NULL; |
315 | if (!CBS_get_optional_asn1_octet_string(&session, &peer_cert, &present, | 313 | if (!CBS_get_optional_asn1(&session, &peer_cert, &present, |
316 | SSLASN1_PEER_CERT_TAG)) | 314 | SSLASN1_PEER_CERT_TAG)) |
317 | goto err; | 315 | goto err; |
318 | if (present) { | 316 | if (present) { |