Skip to content

Commit ad76a7e

Browse files
cjen1-msftCopilot
andauthored
[release/6.x] Cherry pick: Allow carriage returns in PEM (#7507) (#7509)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 17cd588 commit ad76a7e

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1717

1818
- CheckQuorum now requires a quorum in every configuration (#7375)
1919
- `read_ledger.py` validates the offsets table in committed ledger files, reporting an error if this is truncated (#7501).
20+
- Allow carriage returns in PEM certificatees (#7507)
2021

2122
### Changed
2223

include/ccf/crypto/openssl/openssl_wrappers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ namespace ccf::crypto
251251
{}
252252
};
253253

254-
static const char pem_prefix[] = "-----BEGIN CERTIFICATE-----\n";
254+
static const char pem_prefix[] = "-----BEGIN CERTIFICATE-----";
255255
// -1 for the null terminator
256256
static constexpr size_t pem_prefix_len = sizeof(pem_prefix) - 1;
257257

src/crypto/test/crypto.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the Apache 2.0 License.
33

4+
#include "ccf/crypto/openssl/openssl_wrappers.h"
45
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
56
#include "ccf/crypto/base64.h"
67
#include "ccf/crypto/eddsa_key_pair.h"
@@ -1349,4 +1350,49 @@ TEST_CASE("Decrypt should validate integrity")
13491350
~broken_ciphertext[ciphertext.size() / 2];
13501351

13511352
CHECK_THROWS(ccf::crypto::aes_gcm_decrypt(key, broken_ciphertext));
1353+
}
1354+
1355+
TEST_CASE("Carriage returns in PEM certificates")
1356+
{
1357+
const std::string single_cert =
1358+
"-----BEGIN "
1359+
"CERTIFICATE-----"
1360+
"\nMIIByDCCAU6gAwIBAgIQOBe5SrcwReWmSzTjzj2HDjAKBggqhkjOPQQDAzATMREw\nDwYDVQ"
1361+
"QDDAhDQ0YgTm9kZTAeFw0yMzA1MTcxMzUwMzFaFw0yMzA1MTgxMzUwMzBa\nMBMxETAPBgNVBA"
1362+
"MMCENDRiBOb2RlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE74qL\nAc/"
1363+
"45tiriN5MuquYhHVdMGQRvYSm08HBfYcODtET88qC0A39o6Y2TmfbIn6BdjMG\nkD58o377ZMT"
1364+
"aApQu/oJcwt7qZ9/LE8j8WU2qHn0cPTlpwH/"
1365+
"2tiud2w+U3voSo2cw\nZTASBgNVHRMBAf8ECDAGAQH/"
1366+
"AgEAMB0GA1UdDgQWBBS9FJNwWSXtUpHaBV57EwTW\noM8vHjAfBgNVHSMEGDAWgBS9FJNwWSXt"
1367+
"UpHaBV57EwTWoM8vHjAPBgNVHREECDAG\nhwR/"
1368+
"xF96MAoGCCqGSM49BAMDA2gAMGUCMQDKxpjPToJ7VSqKqQSeMuW9tr4iL+"
1369+
"9I\n7gTGdGwiIYV1qTSS35Sk9XQZ0VpSa58c/"
1370+
"5UCMEgmH71k7XlTGVUypm4jAgjpC46H\ns+hJpGMvyD9dKzEpZgmZYtghbyakUkwBiqmFQA=="
1371+
"\n-----END CERTIFICATE-----";
1372+
Pem cert_pem(single_cert);
1373+
auto cert_vec = cert_pem.raw();
1374+
OpenSSL::Unique_BIO certbio(cert_vec);
1375+
OpenSSL::Unique_X509 cert(certbio, true);
1376+
REQUIRE_NE(cert, nullptr);
1377+
1378+
const std::string single_cert_cr =
1379+
"-----BEGIN "
1380+
"CERTIFICATE-----"
1381+
"\r\nMIIByDCCAU6gAwIBAgIQOBe5SrcwReWmSzTjzj2HDjAKBggqhkjOPQQDAzATMREw\r\nDw"
1382+
"YDVQQDDAhDQ0YgTm9kZTAeFw0yMzA1MTcxMzUwMzFaFw0yMzA1MTgxMzUwMzBa\r\nMBMxETAP"
1383+
"BgNVBAMMCENDRiBOb2RlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE74qL\r\nAc/"
1384+
"45tiriN5MuquYhHVdMGQRvYSm08HBfYcODtET88qC0A39o6Y2TmfbIn6BdjMG\r\nkD58o377Z"
1385+
"MTaApQu/oJcwt7qZ9/LE8j8WU2qHn0cPTlpwH/"
1386+
"2tiud2w+U3voSo2cw\r\nZTASBgNVHRMBAf8ECDAGAQH/"
1387+
"AgEAMB0GA1UdDgQWBBS9FJNwWSXtUpHaBV57EwTW\r\noM8vHjAfBgNVHSMEGDAWgBS9FJNwWS"
1388+
"XtUpHaBV57EwTWoM8vHjAPBgNVHREECDAG\r\nhwR/"
1389+
"xF96MAoGCCqGSM49BAMDA2gAMGUCMQDKxpjPToJ7VSqKqQSeMuW9tr4iL+"
1390+
"9I\r\n7gTGdGwiIYV1qTSS35Sk9XQZ0VpSa58c/"
1391+
"5UCMEgmH71k7XlTGVUypm4jAgjpC46H\r\ns+hJpGMvyD9dKzEpZgmZYtghbyakUkwBiqmFQA="
1392+
"=\r\n-----END CERTIFICATE-----";
1393+
Pem cert_pem_cr(single_cert_cr);
1394+
auto cert_vec_cr = cert_pem_cr.raw();
1395+
OpenSSL::Unique_BIO certbio_cr(cert_vec_cr);
1396+
OpenSSL::Unique_X509 cert_cr(certbio_cr, true);
1397+
REQUIRE_NE(cert_cr, nullptr);
13521398
}

0 commit comments

Comments
 (0)