ed25519 签名 java 曲线不支持

发布于 2025-01-14 20:05:48 字数 1615 浏览 3 评论 0原文

我正在尝试使用 Java 中的 ed25519 曲线,使用 Bouncy Castle 库来制作 ECDSA 签名。 我已成功生成密钥并能够根据私钥获取公钥。但是,我正在努力用它签署一些数据。 当我尝试这样做时,它显示java.security.SignatureException:不支持曲线:java.security.spec.ECParameterSpec@223191a6。我想这是因为我使用 CustomNamedCurves 初始化了曲线参数。有人知道如何进行这项工作吗?

        // Bouncy Castle Provider
        Security.addProvider(new BouncyCastleProvider());
        
        // Secure random
        SecureRandom secureRandom = new SecureRandom();

        // Key generator
        X9ECParameters curveParams = CustomNamedCurves.getByName("Curve25519");
        ECParameterSpec ecSpec = new ECParameterSpec(curveParams.getCurve(), curveParams.getG(), curveParams.getN(), curveParams.getH(), curveParams.getSeed());
        KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC", "BC");
        ecKeyGen.initialize(ecSpec);
        ecKeyGen.initialize(ecSpec, secureRandom);
        ecKeyGen.initialize(ecSpec);

        // Signer
        Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");

        // Generate Key pair
        var keypair = ecKeyGen.generateKeyPair();
        var pub = keypair.getPublic();
        var priv = keypair.getPrivate();

        // Signature
        byte[] data = "Some data".getBytes();
        ecdsaSign.initSign(priv);
        ecdsaSign.update(data);
        // java.security.SignatureException: Curve not supported: java.security.spec.ECParameterSpec@6069db5
        byte[] sig = ecdsaSign.sign();

我正在使用 java 17.0.1org.bouncycastle:bcprov-jdk15on:1.70

I'm trying to make a ECDSA signature using the ed25519 curve in Java, using the Bouncy Castle library.
I have managed to generate the keys and to be able to obtain the public key given the private key. However, I'm struggling to sign some data with it.
When I try to do so it says java.security.SignatureException: Curve not supported: java.security.spec.ECParameterSpec@223191a6. I suppose that's because I initialized the curve parameters using CustomNamedCurves. Does somebody know how to make this work?

        // Bouncy Castle Provider
        Security.addProvider(new BouncyCastleProvider());
        
        // Secure random
        SecureRandom secureRandom = new SecureRandom();

        // Key generator
        X9ECParameters curveParams = CustomNamedCurves.getByName("Curve25519");
        ECParameterSpec ecSpec = new ECParameterSpec(curveParams.getCurve(), curveParams.getG(), curveParams.getN(), curveParams.getH(), curveParams.getSeed());
        KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC", "BC");
        ecKeyGen.initialize(ecSpec);
        ecKeyGen.initialize(ecSpec, secureRandom);
        ecKeyGen.initialize(ecSpec);

        // Signer
        Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");

        // Generate Key pair
        var keypair = ecKeyGen.generateKeyPair();
        var pub = keypair.getPublic();
        var priv = keypair.getPrivate();

        // Signature
        byte[] data = "Some data".getBytes();
        ecdsaSign.initSign(priv);
        ecdsaSign.update(data);
        // java.security.SignatureException: Curve not supported: java.security.spec.ECParameterSpec@6069db5
        byte[] sig = ecdsaSign.sign();

I'm using java 17.0.1 and org.bouncycastle:bcprov-jdk15on:1.70

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文