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

0

There are 0 best solutions below