33inline size_t rsa_der_public_key(
const uint8_t *modulus_be,
const uint8_t *exponent_be,
size_t exponent_len,
34 uint8_t *out,
size_t out_len) {
37 while (exponent_len > 0 && exponent_be[0] == 0x00) {
41 if (exponent_len == 0) {
44 const bool pad = (exponent_be[0] & 0x80) != 0;
45 const size_t exponent_content_len = exponent_len + (
pad ? 1 : 0);
46 if (exponent_content_len > 0x7F) {
49 const size_t exponent_der_len = 2 + exponent_content_len;
51 const size_t total_len = 4 + body_len;
52 if (total_len > out_len) {
59 out[i++] =
static_cast<uint8_t
>(body_len >> 8);
60 out[i++] =
static_cast<uint8_t
>(body_len);
66 out[i++] =
static_cast<uint8_t
>(exponent_content_len);
70 memcpy(out + i, exponent_be, exponent_len);
size_t rsa_der_public_key(const uint8_t *modulus_be, const uint8_t *exponent_be, size_t exponent_len, uint8_t *out, size_t out_len)
Wrap a raw RSA-3072 modulus and exponent as a DER RSAPublicKey.