/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws.api; import javax.xml.namespace.QName; import javax.xml.soap.SOAPMessage; import java.io.InputStream; import java.io.OutputStream; import java.security.cert.X509Certificate; import java.util.List; /** * Поставщик средств криптографии. */ public interface CryptoProvider { /** * Установка технологической подписи ЭП-ОВ. */ void sign(SOAPMessage soapMessage); /** * Локальная проверка сертификатов ЭП-ОВ и ЭП-СМЭВ. */ VerifyResult verify(SOAPMessage soapMessage); /** * Нормализация/Каноникализация перед формированием подписи по * Exclusive XML Canonicalization от 18 июля 2002 "http://www.w3.org/2001/10/xml-exc-c14n#". * <p/> * Xеширование выполняется по ГОСТ Р 34.11-94 "http://www.w3.org/2001/04/xmldsig-more#gostr3411". * * @param namespaces пространства имён в котором определена AppData. * @param appData данные для подписи. * @return нормализованный блок AppData. */ @Deprecated AppData normalize(List<QName> namespaces, String appData); /** * Вставить подпись. * * @param namespaces пространства имён в котором определена AppData. * @param appData нормализованный блок AppData. * @param certificate сертификат * @param signature подпись. * @return Обновленный блок AppData. */ @Deprecated String inject(List<QName> namespaces, AppData appData, X509Certificate certificate, byte[] signature); /** * Упаковка подписи в контейнер PKCS7(detached). * * @param signature подпись. * @return контейнер PKCS7(detached) */ byte[] toPkcs7(Signature signature); /** * Распаковка контейнера PKCS7(detached). * * @param pkcs7 данные крипто-контейнера. * @return частичная подпись без данных. */ Signature fromPkcs7(byte[] pkcs7); /** * Проверка целостности подписи. * * @param signature подпись * @param content содержимое * @param digest дайджест/хеш по ГОСТ Р 34.11-94 * @return true если подптсь прошла проверку, иначе false. */ boolean validate(Signature signature, byte[] digest, byte[] content); /** * Проверка цифровой подписи по сертификату и свёртки по ГОСТ. * * @param certificate сертификат для проверки. * @param data входной поток с данными. * @param signature свёртка которыую необходимо проверить. * @return true если свертка верна и false иначе. */ boolean verifySignature(X509Certificate certificate, InputStream data, byte[] signature); /** * Подпись элемента в документе и внедрение результатов подписи в документ * * @param sourceXML документ XML содержащий подписанные данные * @param elementName название тега элемента, который нужно подписать * @param namespace ns тега, который нужно подписать. Для подписи будет первый попавшийся элемент с namespace:elementName * @param removeIdAttribute нужно ли удалить id attribute * @param signatureAfterElement место куда вставлять ds:Signature * @param inclusive влияет на алгоритм подписи и каноникализацию * @return документ с подписанным элементом * @throws Exception в случае проблем с работы криптоалгоритмов и в случае ошибок разбора sourceXML */ String signElement(String sourceXML, String elementName, String namespace, boolean removeIdAttribute, boolean signatureAfterElement, boolean inclusive) throws Exception; /** * Получить хеш по "http://www.w3.org/2001/04/xmldsig-more#gostr3411". * * @param source входные данные */ byte[] digest(InputStream source); }