我正在尝试使用 SpongyCastle 在 Android 上验证 ECDSA 数字签名。我有一个X509Certificate包含我需要用来验证它的公钥,但我无法弄清楚如何获得PublicKey(向下转换ECPublicKey)以用于ECDSASigner该类。
我已经使用 C# 版本的 BouncyCastle 完成了这个,它看起来像这样:
ECDsaSigner signer = new ECDsaSigner();
signer.Init(false, cert.GetPubliKey());
Run Code Online (Sandbox Code Playgroud)
在 API 的 Java 版本中,该X509Certificate.getPublicKey()方法返回一个PublicKey类而不是AsymmetricKeyParameter. 但是,该ECDSASigner.init()方法需要一个CipherParameters对象。我不知道如何为 ECDSA 做到这一点。
对于 RSA 签名,我只是手动重建了一个新RSAKeyParameters对象:
RSAEngine engine = new RSAEngine();
engine.init(
false,
new RSAKeyParameters(
false,
((RSAPublicKey) pubKey).getModulus(),
((RSAPublicKey) pubKey).getPublicExponent()
)
);
Run Code Online (Sandbox Code Playgroud)
这似乎并不理想,但我认为它应该有效。但我什至不知道如何为 ECDSA 做这个等价物。我认为有更好的方法可以做到这一点,但我无法找出要使用的正确 API。