Пытаюсь провалидировать подпись следущими строчками кода на Java:
public boolean verifyXml(String xmlString) {
boolean result = false;try { Provider kalkanProvider = new KalkanProvider(); Security.addProvider(kalkanProvider); KncaXS.loadXMLSecurity(); Document doc = getDocument(xmlString); Element sigElement = null; Element rootEl = (Element) doc.getFirstChild(); NodeList list = rootEl.getElementsByTagName("ds:Signature"); if (list.getLength() == 0) { throw new IllegalStateException("ds:Signature not found"); } Node sigNode = list.item(0); sigElement = (Element) sigNode; XMLSignature signature = new XMLSignature(sigElement, ""); KeyInfo ki = signature.getKeyInfo(); X509Certificate cert = ki.getX509Certificate(); if (cert == null) { throw new IllegalStateException("Certificate not found"); } result = signature.checkSignatureValue(cert); } catch (Exception e) { e.printStackTrace(); } return result; }
Подписанные XML-ки имеют такое поле ds:SignatureMethod Algorithm=“urn:ietf:params:xml:ns:pkigovkz:xmlsec:algorithms:gostr34102015-gostr34112015-512”
Provider kalkanProvider = new KalkanProvider();
Security.addProvider(kalkanProvider);
KncaXS.loadXMLSecurity();
Добавление KalkanProvider должно добавлять этот алгоритм в XMLSignature, чтобы она могла провалидировать подпись. В чем может быть ошибка? Правильно ли я понимаю процесс валидации?