【发布时间】:2020-03-24 06:48:40
【问题描述】:
如何使用 FIPS BouncyCastle 将 ECPrivateKey 转换为 ECPublicKey?
我使用以下代码(略微简化)将 ECPrivateKey 转换为 ECPublicKey:
public static ECPublicKey getPublicKeyFromPrivateKey(ECPrivateKey privateKey) throws GeneralSecurityException {
final KeyFactory keyFactory = KeyFactory.getInstance("ECDSA", new BouncyCastleProvider());
final BCECPrivateKey bcecPrivateKey = (BCECPrivateKey) privateKey;
final ECParameterSpec ecSpec = bcecPrivateKey.getParameters();
final ECPoint q = ecSpec.getG().multiply(bcecPrivateKey.getD());
final byte[] qBytes = q.getEncoded(false);
final ECPoint point = ecSpec.getCurve().decodePoint(qBytes);
final ECPublicKeySpec pubSpec = new ECPublicKeySpec(point, ecSpec);
return (ECPublicKey) keyFactory.generatePublic(pubSpec);
}
这适用于非 FIPS BouncyCastle。现在,我们需要以符合 FIPS 的方式做同样的事情。这里的问题是像 ECParameterSpec 这样的类在 FIPS BouncyCastle 1.0.1 中似乎不存在。我们如何使用 FIPS BouncyCastle 做同样的事情?
【问题讨论】:
-
FIPS 版本的 BC 还支持 EC 吗?
-
@JimGarrison 根据downloads.bouncycastle.org/fips-java/BC-FJA-UserGuide-1.0.1.pdf 的回答是肯定的——它支持用于数字签名的 ECDSA 和用于密钥协议的 ECDH
标签: java bouncycastle elliptic-curve fips