Java 11 Curve25519 найти подпись

Я хотел бы вычислить подпись с использованием алгоритма curve25519(X25519), который был представлен в Java 11. Класс Signature не предоставляет никакой реализации для X25519, но он поддерживает Ed25519. Учитывая это, я попытался реализовать это с помощью надувного замка следующим образом:

          @SneakyThrows
    public byte[] calculateSignature(XECPrivateKey key, byte[] data) {
        var rawPrivateKey = key.getScalar().orElseThrow();
        
        var keyFactory = KeyFactory.getInstance("Ed25519");
        var privateKeyInfo = new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed25519), new DEROctetString(rawPrivateKey));
        var privateKeySpec = new PKCS8EncodedKeySpec(privateKeyInfo.getEncoded());
        var privateKey = keyFactory.generatePrivate(privateKeySpec);

        var signer = Signature.getInstance("Ed25519");
        signer.initSign(privateKey);
        signer.update(data);
        return signer.sign();
    }

Короче говоря, необработанный закрытый ключ извлекается из XECPrivateKey, преобразуется в sun.security.ec.ed.EdDSAPrivateKeyImpl и, наконец, вычисляется подпись. Однако этот метод не работает (выходное значение неверно, его можно дважды проверить с помощью любой работающей библиотеки Java Curve25519), поэтому мне интересно, является ли преобразование ключа правильным способом. Любая помощь будет принята!

0 ответов

Другие вопросы по тегам