4#include <winpr/wtypes.h>
6#include <winpr/stream.h>
7#include <freerdp/crypto/certificate.h>
9#include "../certificate.h"
13WINPR_ATTR_MALLOC(free, 1)
14static
void* test_write_cert(const rdpCertificate* cert, UINT32 version,
size_t capacity,
18 wStream* s = Stream_New(
nullptr, capacity);
22 const SSIZE_T len = freerdp_certificate_write_server_cert(cert, version, s);
26 *plen = Stream_GetPosition(s);
30 memcpy(data, Stream_Buffer(s), *plen);
38static BOOL test_version(
const rdpCertificate* cert, UINT32 version)
44 void* smallBuf = test_write_cert(cert, version, 16u, &smallLen);
45 void* largeBuf = test_write_cert(cert, version, 0x10000u, &largeLen);
47 if (!smallBuf || !largeBuf)
49 (void)fprintf(stderr,
"failed to write server certificate version 0x%08" PRIx32
"\n",
52 else if ((smallLen != largeLen) || (memcmp(smallBuf, largeBuf, smallLen) != 0))
55 "server certificate version 0x%08" PRIx32
56 " depends on the initial stream capacity\n",
67int TestServerCertificateWrite(
int argc,
char* argv[])
73 rdpCertificate* cert =
74 freerdp_certificate_new_from_file(TEST_SOURCE_DIR
"/rsa_pkcs1_sha256_cert.pem");
77 (void)fprintf(stderr,
"failed to load test certificate\n");
81 if (!test_version(cert, CERT_TEMPORARILY_ISSUED | CERT_CHAIN_VERSION_1))
83 if (!test_version(cert, CERT_CHAIN_VERSION_2))
88 freerdp_certificate_free(cert);