java.security.KeyPairGenerator: 无法设置 .setDigests() 和无效的私钥

java.security.KeyPairGenerator: Can't set .setDigests() and invalid private key

我目前正在使用 Nativescript-Vue 开发一个 Android 应用程序,我想在其中生成一个私钥来签署有效负载。

  const KPGen = java.security.KeyPairGenerator;
  const keyP = android.security.keystore.KeyProperties;

  const kpg = KPGen.getInstance(keyP.KEY_ALGORITHM_EC, "AndroidKeyStore");
  const builder = new android.security.keystore.KeyGenParameterSpec.Builder(
      "key1", keyP.PURPOSE_SIGN)
      .setAlgorithmParameterSpec(new java.security.spec.ECGenParameterSpec("secp256r1"))
      .setDigests(keyP.DIGEST_SHA256)
  kpg.initialize(builder.build());
  const kp = kpg.generateKeyPair();

如果我保留 .setDigests(keyP.DIGEST_SHA256) 应用程序将抛出错误: Error: java.lang.Exception: Failed resolving method setDigests on class android.security.keystore.KeyGenParameterSpec$Builder.

但是,如果我注释掉 .setDigests(keyP.DIGEST_SHA256) 行,那么当我尝试在签名

上初始化签名时,我会得到一个 Error: java.security.InvalidKeyException: Keystore operation failed
  const sig = java.security.Signature.getInstance('SHA256withECDSA');
  sig.initSign(kp.getPrivate());

我不确定这两个问题是否相关,但有谁知道目前出了什么问题吗?

我正在关注以下示例:https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec

如果您查看 Java 安全文档,它说函数 setDigests() 采用摘要类型数组,而不是逗号分隔参数。您发布的指南中给出的示例有错误。