mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 12:28:42 +00:00
gnutls_pubkey_export reports the size of the exported PEM including its terminating null byte, and PublicKey::toString hands that size straight back to the caller. The returned string therefore ends with a null byte that is not part of the PEM text. Certificate::toString does not have the problem because gnutls_x509_crt_export excludes the terminator, so the two exports disagree on what a PEM string is. The stray byte travels: Value::toJson stores owner->toString() in the "owner" field, so a value published through the proxy carries a null byte inside a JSON string, which is valid JSON but a surprise for any consumer that treats the field as text. Resize to the reported size and drop the terminator when it is there. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
87 lines
2.4 KiB
C++
87 lines
2.4 KiB
C++
// Copyright (c) 2014-2026 Savoir-faire Linux Inc.
|
|
// SPDX-License-Identifier: MIT
|
|
#pragma once
|
|
|
|
// cppunit
|
|
#include <cppunit/TestFixture.h>
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
namespace test {
|
|
|
|
class CryptoTester : public CppUnit::TestFixture
|
|
{
|
|
CPPUNIT_TEST_SUITE(CryptoTester);
|
|
CPPUNIT_TEST(testSignatureEncryption);
|
|
CPPUNIT_TEST(testPublicKeyPemIsPlainText);
|
|
CPPUNIT_TEST(testCertificateRevocation);
|
|
CPPUNIT_TEST(testRevocationListNumber);
|
|
CPPUNIT_TEST(testRevocationListExplicitNumber);
|
|
CPPUNIT_TEST(testRevocationListPartitionedNumber);
|
|
CPPUNIT_TEST(testCertificateRequest);
|
|
CPPUNIT_TEST(testCertificateSerialNumber);
|
|
CPPUNIT_TEST(testOcsp);
|
|
CPPUNIT_TEST(testAesEncryption);
|
|
CPPUNIT_TEST(testAesEncryptionWithMultipleKeySizes);
|
|
CPPUNIT_TEST(testOaep);
|
|
CPPUNIT_TEST(testWebPushEncryption);
|
|
CPPUNIT_TEST(testWebPushRFC8291);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
public:
|
|
/**
|
|
* Method automatically called before each test by CppUnit
|
|
*/
|
|
void setUp();
|
|
/**
|
|
* Method automatically called after each test CppUnit
|
|
*/
|
|
void tearDown();
|
|
/**
|
|
* Test data signature, encryption and decryption
|
|
*/
|
|
void testSignatureEncryption();
|
|
/**
|
|
* Test that an exported public key is text only, with no embedded null byte
|
|
*/
|
|
void testPublicKeyPemIsPlainText();
|
|
/**
|
|
* Test certificate generation, validation and revocation
|
|
*/
|
|
void testCertificateRevocation();
|
|
/**
|
|
* Test the default CRL Number behavior: random on first signature, incremented after
|
|
*/
|
|
void testRevocationListNumber();
|
|
/**
|
|
* Test signing a revocation list with a caller-provided CRL Number
|
|
*/
|
|
void testRevocationListExplicitNumber();
|
|
/**
|
|
* Test that issuers sharing an authority can partition the CRL Number space
|
|
*/
|
|
void testRevocationListPartitionedNumber();
|
|
/**
|
|
* Test certificate requests
|
|
*/
|
|
void testCertificateRequest();
|
|
/**
|
|
* Test certificate serial number extraction
|
|
*/
|
|
void testCertificateSerialNumber();
|
|
/**
|
|
* Test OCSP
|
|
*/
|
|
void testOcsp();
|
|
/**
|
|
* Test key streching and aes encryption/decryption
|
|
*/
|
|
void testAesEncryption();
|
|
void testAesEncryptionWithMultipleKeySizes();
|
|
|
|
void testOaep();
|
|
void testWebPushEncryption();
|
|
void testWebPushRFC8291();
|
|
};
|
|
|
|
} // namespace test
|