Hi everyone,
I am trying to decrypt a RSA-2048 message by using MbedTLS on an expressif esp32 board.
mbedtls_pk_parse_key works but when I invoke to mbedtls_pk_decrypt it returns an unknown error code
-17184 (0x4320)
Has anybody experience same problem?
A simplified version of the code is enclosed as follows:
std::string validateRSA (unsigned char * messageEncripted)
{
int status;
mbedtls_pk_context pk;
mbedtls_ctr_drbg_context ctr_drbg;
unsigned char decrypted[MAX_LENGTH_MESSAGE];
size_t decriptedMessageSizeOlen = 0;
const unsigned char mbedtls_private_key = “-----BEGIN RSA PRIVATE KEY-----\n”
“MIIEoQIBAAKCAQBjl+RyR7ujndXhkJTJOL2b3xk3oZ6KZC/LZJgdxDqHp548EuUB\n”
“ILHySlGRawmgPDxJyrtLj0Emv1ffy9J+I+xTRMtMNsDi8tN428mB3pOGLhwbcMoC\n”
“sSRwLsNbcz2g79PoXIgS1T3VfPIl56fihdXPqMGhj4aNBfehiAu7YrV24wcsBq2L\n”
“bXAuTnZJizHOUoA+UBv1y9IxjOFW4+5x1YOVQF+wDEvZ2BHmnIC3p79GCj+coOto\n”
“GCKMNOendMh4XujmOxpsPKIZr/Gm1KhacNYJhm4BhQHTiJ5T7srDd5wBBpQM6oMT\n”
“NLSiUyDhtoOb1YVOnltBmv2qLeXWrr0mS8FXAgMBAAECggEALhNnrTdiqB+tg93P\n”
“+Ag4MJTWpdYv8vbG5eJ0PdE7AueZXVGggRUPPnkDo7NRkMBNZBZW8G4mRjbgALnb\n”
“eGBGRX/eTjRGqLiO/asxXtQKjFlox4k27Gfn476+wuBd8scB0s58ZboiEVLs9Hxo\n”
“P3SLprb8XjJ4nWXVWvYF93uDWKy5nYt4mkFTDU9URBVyjhsnyX58+uS27TM5NfaS\n”
“iwAbyT/anFbr/27mO3SRONoGRmhnacLU0x0ZIWFJZILwpeCTrCeUjZNzkCUZMyOo\n”
“6UOdplRtJ7DGrM9Z4GH6LbH2VVZkbdDRFngza2EJ226mZubE6y2M46gkwUk44mpm\n”
“XUHIgQKBgQDAiVLmyus+Vz26o22wBaY2W4n8eX1gwzutEMV25zosqbiZqcZLa00w\n”
“tfD7LNlDxDebMBuaH8Reu8tPjkjtNl6YkUkA4+cj4X7iJ8naS1AZGVir6YiAbLvP\n”
“941BbNJmoTDaWk+HdTAD+8BLkMMDonryO+70h7Y0qMKZlx740jzVHQKBgQCEa8/S\n”
“3Ki3/5KttJ+LewOkw4O87I3JOYulIi+v3JXg58ja/vcsJefpErkxq/G/uaCKml2c\n”
“v7uMKz3eTCHQ6pYM8sYNvGl6Iui1DMfVHCBGPj6dhDZ5UP/QhkttYIon8Ea3GGu1\n”
“tobV5+uuCL1yjZLxfHEOOv/eIqs+6TW4pVCqAwKBgDDAFJ+fbaUhTd3+F33kUEuf\n”
“Lfchg9+GT4vonTcYISDB8J3n4O+jwa29w8C1gGWqPzIqIjMKLByYjEgejNSTWaxj\n”
“zQpOqm3pYMk+rdt6ClPwmQUeYpOx9HQaCEgyl6uo0MfY6h4wS/IWQoBfrSE0eNDw\n”
“3/ZGjpoSyQM+wnbaNND5AoGAKObwO46C4sqjcNowybGGj5cAkxNyPCx1MN2dYzG8\n”
“bcrKZLKKgG1486of3/LfajwZFZbWwXsLoCEfLBHSBCjhjkBS4p1G6z3rKTk4ZGAa\n”
“q/e/+YGEHfbh/XPtymweYHW8MgPuCSPHBD1ts8TpV3/ZWpP4i8+3htKomHcKa+1M\n”
“PCcCgYBOIDHBeHI8VItDkkX9wzm8pClA6V+c6T/uf/GXXWIbRi+p5omtdNxzQBt1\n”
“5nTlmkX6TW3Q08/fZv6LTmGfpeWytezq5ER51i5d0ReJg32I6Y3EmqLoqdwij+7V\n”
“UGw7O/wD1lDKuiRrMCogvUTg0Q4Z6w6ax3jfZH3UtWASg2Z5QA==\n”
“-----END RSA PRIVATE KEY-----\n”;
mbedtls_pk_init(&pk);
mbedtls_ctr_drbg_init(&ctr_drbg);
// Parse private key
status = mbedtls_pk_parse_key( &pk, mbedtls_private_key, strlen((const char *)mbedtls_private_key) + 1, NULL, 0);
if (status != 0)
{
return “error”;
}
// validateRSA mbedtls_pk_decrypt returns error:-17184 ( 0x4320 )
status = mbedtls_pk_decrypt( &pk, (const unsigned char *) messageEncripted, strlen((char *) messageEncripted), (unsigned char *) decrypted, &decriptedMessageSizeOlen, sizeof(decrypted),
mbedtls_ctr_drbg_random, &ctr_drbg );
if (status != 0)
{
return “error”;
}
Serial.println(F(“validateRSA3 OK!”));
Serial.println((char *)decrypted);
mbedtls_pk_free(&pk);
mbedtls_ctr_drbg_free(&ctr_drbg);
std::string *dev = new std::string((char *)decrypted);
return *dev;
}
Thanks in advance