25#ifndef OPENVPN_OPENSSL_UTIL_PEM_H
26#define OPENVPN_OPENSSL_UTIL_PEM_H
31#include <openssl/pem.h>
38 const unsigned char *src,
40 const std::string &key_name)
43 if (!is_safe_conversion<int>(src_len))
45 BIO *bio = BIO_new(BIO_s_mem());
49 if (!PEM_write_bio(bio, key_name.c_str(),
"", src,
static_cast<int>(src_len)))
53 BIO_get_mem_ptr(bio, &bptr);
54 dst.
write((
unsigned char *)bptr->data, bptr->length);
68 const std::string &key_name)
73 if (!(bio = BIO_new_mem_buf(src, numeric_cast<int>(src_len))))
76 char *name_read = NULL;
77 char *header_read = NULL;
78 uint8_t *data_read = NULL;
79 long data_read_len = 0;
80 if (!PEM_read_bio(bio,
90 if (key_name.compare(std::string(name_read)))
92 OPENVPN_LOG(
"unexpected PEM name (got '" << name_read <<
"', expected '" << key_name <<
"')");
96 dst.
write(data_read, data_read_len);
100 OPENSSL_free(name_read);
101 OPENSSL_free(header_read);
102 OPENSSL_free(data_read);
void write(const T *data, const size_t size)
Write data to the buffer.
static bool pem_encode(BufferAllocated &dst, const unsigned char *src, size_t src_len, const std::string &key_name)
static bool pem_decode(BufferAllocated &dst, const char *src, size_t src_len, const std::string &key_name)
#define OPENVPN_LOG(args)
static std::stringstream out