使用Dart中的PointyCastle验证SHA-384/PSS签名

使用Dart中的PointyCastle验证SHA-384/PSS签名,dart,rsa,bouncycastle,sha,pointycastle,Dart,Rsa,Bouncycastle,Sha,Pointycastle,我有一个公钥,一条信息和一个签名。我想使用PointyCastle中的SHA-384/PSS签名者验证签名是否正确 我设法构建了一些东西,但签名验证失败,我想这是因为salt参数,我不知道如何构建/创建它 var rsaPublicKey = RSAPublicKey.fromPEM(publicKey); final signer = Signer('SHA-384/PSS'); AsymmetricKeyParameter<RSAAsymmetricKey> key

我有一个公钥,一条信息和一个签名。我想使用
PointyCastle
中的
SHA-384/PSS
签名者验证签名是否正确

我设法构建了一些东西,但签名验证失败,我想这是因为
salt
参数,我不知道如何构建/创建它

  var rsaPublicKey = RSAPublicKey.fromPEM(publicKey);

  final signer = Signer('SHA-384/PSS');
  AsymmetricKeyParameter<RSAAsymmetricKey> keyParams =
      PublicKeyParameter<RSAPublicKey>(rsaPublicKey.asPointyCastle);
  signer.init(
    false,
    ParametersWithSalt(keyParams, Uint8List()), // THIS is the salt 
  );
  final sig = PSSSignature(base64Decode(signature));

  final verified = signer.verifySignature(
    Uint8List.fromList(message.codeUnits),
    sig,
  );
var rsaPublicKey=rsaPublicKey.fromPEM(公钥);
最终签字人=签字人(“SHA-384/PSS”);
不对称键参数键参数=
PublicKeyParameter(rsaPublicKey.asPointyCastle);
signer.init(
假,,
参数swithsalt(keyParams,Uint8List()),//这是salt
);
最终sig=PSSSignature(base64解码(签名));
最终验证=签名者。验证签名(
Uint8List.fromList(message.codeUnits),
西格,
);
我不确定如何传递给初始化签名者所需的
参数swithsalt(keyParams,Uint8List()
的第二个参数


任何提示都非常感谢。

在我看来,它有更多的属性可供使用,例如,您可以在构造函数中设置mgf1哈希。如果我没有记错,则不需要为验证器指定salt,因此直接使用
keyParams
更有意义。在PSS中,不是salt,而是salt length是一个PSS参数。然而,
Signer
PSSSigner
都需要通过
init()
init()
只接受PSS
参数swithsalt()
参数swithsaltconfiguration())
。后者不需要salt,只需要salt长度,但不接受验证。不幸的是,我在文档(和web上)中没有找到Pointycastle/PSS示例没有salt规范。也许有一种方法可以验证没有salt规范的PSS签名,这很难找到,但可能只是设计错误。salt包含在签名中,所以如果你必须明确地将其交给验证者,那么就有很大的问题。@Topaco,Maarten,谢谢你的输入。实际上,有流感执行此操作的tter插件:。它不需要任何salt进行验证。我想替换它,以便编写实际执行验证的单元测试。我无法使用fast_rsa执行此操作,因为它只有Android和iOS实现。