Jump to content
Sign in to follow this  
sigatron

Подпись XML по алгоритму ГОСТ Р 34.10-2012

Recommended Posts

Здравствуйте!

Пытаюсь подписать XML документ с использованием ЭЦП с "новым" алгоритмом ГОСТ Р 34.10-2012. Использую пример, указанный в руководстве программиста: "XmlDSig - Пример создания подписи в Java".

Получаю ошибку 
 

Caused by: javax.xml.crypto.dsig.XMLSignatureException: java.security.InvalidKeyException: No installed provider supports this key: ru.infotecs.crypto.gost3410.GostR341012v256PrivateKey
    at org.apache.jcp.xml.dsig.internal.dom.l.sign(Unknown Source) ~[jcrypto-xmldsig-2.7.2-R17.jar:1.5.6]
    ... 20 more
Caused by: java.security.InvalidKeyException: No installed provider supports this key: ru.infotecs.crypto.gost3410.GostR341012v256PrivateKey
    at java.security.Signature$Delegate.chooseProvider(Signature.java:1139) ~[?:1.8.0_152]
    at java.security.Signature$Delegate.engineInitSign(Signature.java:1180) ~[?:1.8.0_152]
    at java.security.Signature.initSign(Signature.java:531) ~[?:1.8.0_152]
    at org.apache.jcp.xml.dsig.internal.dom.h.sign(Unknown Source) ~[jcrypto-xmldsig-2.7.2-R17.jar:1.5.6]
    at org.apache.jcp.xml.dsig.internal.dom.l.sign(Unknown Source) ~[jcrypto-xmldsig-2.7.2-R17.jar:1.5.6]
    ... 20 more

Насколько понимаю, проблема в том, что в ViPNetXMLDSigProvider никак не реализован используемый алгоритм. Констант новых нет, внутри тоже все без изменений.
Версия JCrypto SDK: 2.7.2-R17

Вопрос: сейчас существует какой-либо способ подписания XML через XmlDsig с использованием нового алгоритма? Если нет - планируется ли обновить библиотеку jcrypto-xmldsig-* и, если да, то как скоро?

Share this post


Link to post
Share on other sites

Пытался сегодня подписать XML с помощью последнего JCrypo, ничего не выходило. заглянул в недра библиотек, оказалось, что умеет подписывать только по 34.10 2001, но не 34.10 2012

public KeyValue newKeyValue(PublicKey publicKey) throws KeyException {
        String var2 = publicKey.getAlgorithm();
        return (KeyValue)("GOST3410-2001".equals(var2) ? new f(publicKey) : this.a.newKeyValue(publicKey));
    }

Если не 34.10 2001 то перенаправляет на родительский стандартный явовский KeyInfoFactory, метод:
 

    public KeyValue newKeyValue(PublicKey key) throws KeyException {
        String algorithm = key.getAlgorithm();
        if (algorithm.equals("DSA")) {
            return new DSA(key);
        } else if (algorithm.equals("RSA")) {
            return new RSA(key);
        } else if (algorithm.equals("EC")) {
            return new EC(key);
        } else {
            throw new KeyException("unsupported key algorithm: " + algorithm);
        }
    }

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site, you agree to our Terms of Use.