我正在尝试使用 SpongyCastle 在 Android 上验证 ECDSA 数字签名。我有一个X509Certificate
包含我需要用来验证它的公钥,但我不太清楚如何获取PublicKey
(向下转换ECPublicKey
)以用于ECDSASigner
该类。
我使用 C# 版本的 BouncyCastle 完成了这项工作,如下所示:
ECDsaSigner signer = new ECDsaSigner();
signer.Init(false, cert.GetPubliKey());
在 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()
)
);
这似乎并不理想,但我认为它应该工作。但我什至不知道如何为 ECDSA 做这个等价物。我认为有更好的方法可以做到这一点,但我无法确定要使用的正确 API。