I'm trying to write out a public key created using MbedTls in a c-programm. This works when using the function to write out DER-keys as it returns the number of bytes written (91) and the key in pubKeyBufferDer, but trying to write out the same key in PEM-format instead returns an error. The functions parameters are almost identical, so I don't understand what could be/cause the error?
the two functions:
int numBytesWritten = mbedtls_pk_write_pubkey_der(&keyContainerTest, pubKeyBufferDer, sizeof(pubKeyBufferDer)); //working //returns 91 as return-value and the key in pubKeyBufferDer
int writePubkeyPemRtn = mbedtls_pk_write_pubkey_pem(&keyContainerTest, pubKeyBufferPem, sizeof(pubKeyBufferPem)); //not working //returns -42 (int) or 4294967254/0xFFFFFFD6 (uint) and doesn't write anything to pubKeyBufferPem
full code:
int main() {
uint8_t inputKeyMaterialTest[32];
for (int i=0; i < sizeof(inputKeyMaterialTest); i++) {
inputKeyMaterialTest[i] = 0x7; //just as an example
}
uint8_t outputKeyMaterialTest[32];
for (int i=0; i < sizeof(outputKeyMaterialTest); i++) {
outputKeyMaterialTest[i] = 0;
}
int hkdfRtn = mbedtls_hkdf(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), NULL, 0, inputKeyMaterialTest, sizeof(inputKeyMaterialTest), NULL, 0, outputKeyMaterialTest, sizeof(inputKeyMaterialTest));
mbedtls_hmac_drbg_context hmacDrbgCtxTest;
mbedtls_hmac_drbg_init(&hmacDrbgCtxTest);
int hmacDrbgSeedBufRtn = mbedtls_hmac_drbg_seed_buf(&hmacDrbgCtxTest, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), outputKeyMaterialTest, sizeof(outputKeyMaterialTest));
mbedtls_pk_context keyContainerTest;
mbedtls_pk_init(&keyContainerTest);
int pkSetupRtn = mbedtls_pk_setup(&keyContainerTest, mbedtls_pk_info_from_type(MBEDTLS_PK_ECKEY));
mbedtls_ecp_keypair_init(mbedtls_pk_ec(* (mbedtls_pk_context*) &keyContainerTest));
int genKeyRtn = mbedtls_ecp_gen_key(MBEDTLS_ECP_DP_SECP256R1, mbedtls_pk_ec(* (mbedtls_pk_context*) &keyContainerTest), &mbedtls_hmac_drbg_random, &hmacDrbgCtxTest);
uint8_t pubKeyBufferDer[128];
for (int i = 0; i < sizeof(pubKeyBufferDer); i++){
pubKeyBufferDer[i] = 0;
}
int numBytesWritten = mbedtls_pk_write_pubkey_der(&keyContainerTest, pubKeyBufferDer, sizeof(pubKeyBufferDer)); //works //returns 91 as return-value and the key in pubKeyBufferDer
uint8_t pubKeyBufferPem[128];
for (int i = 0; i < sizeof(pubKeyBufferPem); i++){
pubKeyBufferPem[i] = 0;
}
int writePubkeyPemRtn = mbedtls_pk_write_pubkey_pem(&keyContainerTest, pubKeyBufferPem, sizeof(pubKeyBufferPem)); //not working //returns -42 (int) or 4294967254 (uint) and doesn't write anything to pubKeyBufferPem
return 0;
Thanks in advance for any help