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的hexa是3D00,表示/**< Invalid key tag or value. */

是否有任何网站提供格式检查并查看我的私钥文件是否符合 mbedtls 的要求?

4

0 回答 0