ここで達成しようとしているのは、PlatformIO + Arduino フレームワークを使用して構築された ESP32 アプリ内のメッセージを暗号化することです。
いくつか検索した後、このレポを見つけました: https://github.com/espressif/arduino-esp32
内部には、私が望むものを達成するのに役立つツールがあります https://github.com/espressif/arduino-esp32/blob/master/tools/sdk/include/mbedtls/mbedtls/rsa.h
https://platformio.org/lib/show/10874/mbedtlsにあるライブラリ「mbedtls」をPlatformIO プロジェクトにインポートし、そこから作業を開始しました。
質問: アプリに秘密鍵ファイルをロードし、RSA ツールを使用してメッセージを暗号化する方法を教えてください。
私が現在持っているものは次のとおりです。
int ret = 1;
char buf[1024];
mbedtls_pk_init(&pk);
memset(buf, 0, sizeof(buf));
mbedtls_mpi_init(&N);
mbedtls_mpi_init(&P);
mbedtls_mpi_init(&Q);
mbedtls_mpi_init(&D);
mbedtls_mpi_init(&E);
mbedtls_mpi_init(&DP);
mbedtls_mpi_init(&DQ);
mbedtls_mpi_init(&QP);
ret = mbedtls_pk_parse_key(&pk, vendorPrivateKey, sizeof(vendorPrivateKey), NULL, NULL);
if (ret != 0) {
Serial.print(" failed! mbedtls_pk_parse_key returned: ");
Serial.print(-ret);
Serial.println();
}
if (mbedtls_pk_get_type(&pk) == MBEDTLS_PK_RSA) {
mbedtls_rsa_context *rsa = mbedtls_pk_rsa(pk);
if ((ret = mbedtls_rsa_export(rsa, &N, &P, &Q, &D, &E)) != 0
|| (ret = mbedtls_rsa_export_crt(rsa, &DP, &DQ, &QP)) != 0) {
Serial.println(" failed! could not export RSA parameters.");
}
}
今のところ、秘密鍵の内容を char* 形式で直接インポートします (pem キー ファイルをアプリにインポートする方法がわかりません)。ヘッダー ファイルを使用します。
const unsigned char *vendorPrivateKey = reinterpret_cast<const unsigned char *>(VENDOR_PRIVATE_KEY);
値は secrets.h 内に格納されます。
次に、プログラムを実行すると、次のエラー メッセージが表示されます。
failed! mbedtls_pk_parse_key returned: 15616
pk.h ファイルの説明によると、このエラー コード 15616 (16 進数) は 3D00 であり、/**< Invalid key tag or value. */
フォーマット チェックを提供し、秘密鍵ファイルが mbedtls の要件に適合しているかどうかを確認できる Web サイトはありますか?