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), поэтому мне интересно, является ли преобразование ключа правильным способом. Любая помощь будет принята!