0

ここで達成しようとしているのは、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 サイトはありますか?

4

0 に答える 0