CryptoPro CAdES API.
Public API.

ru.CryptoPro.CAdES
Class CAdESSignature

java.lang.Object
  extended by ru.CryptoPro.CAdES.CAdESSignature

public class CAdESSignature
extends java.lang.Object

Класс создания, проверки, декодирования и усовершенствования подписи CAdES. Поддерживаемые виды подписей: CAdES-BES и CAdES-X Long Type 1.


Constructor Summary
CAdESSignature()
          Конструктор.
CAdESSignature(boolean detached)
          Конструктор.
CAdESSignature(byte[] cms, byte[] data, java.lang.Integer stype)
          Конструктор.
 
Method Summary
 void addSigner(java.security.PrivateKey p_key, java.util.Collection<java.security.cert.X509Certificate> chain, java.lang.Integer s_type, java.lang.String tsaUrl)
          Добавление подписи в формируемое подписанное сообщение.
 void addSigner(java.security.PrivateKey p_key, java.util.Collection<java.security.cert.X509Certificate> chain, java.lang.Integer s_type, java.lang.String tsaUrl, boolean countersignature)
          Добавление подписи в формируемое подписанное сообщение.
 void addSigner(java.lang.String provider, java.lang.String hashAlg, java.lang.String encAlg, java.security.PrivateKey p_key, java.util.Collection<java.security.cert.X509Certificate> chain, java.lang.Integer s_type, java.lang.String tsaUrl, boolean countersignature)
          Добавление подписи в формируемое подписанное сообщение.
 void addSigner(java.lang.String provider, java.lang.String hashAlg, java.lang.String encAlg, java.security.PrivateKey p_key, java.util.Collection<java.security.cert.X509Certificate> chain, java.lang.Integer s_type, java.lang.String tsaUrl, boolean countersignature, org.bouncycastle.asn1.cms.AttributeTable signedAttributes, org.bouncycastle.asn1.cms.AttributeTable unsignedAttributes)
          Добавление подписи в формируемое подписанное сообщение.
 void clear()
          Очистка списка подписантов, обновление генератора подписи.
 CAdESSigner getCAdESSignerInfo(int index)
          Получение i-го подписанта из списка подписантов.
 CAdESSigner[] getCAdESSignerInfos()
          Получение списка имеющихся подписантов.
 org.bouncycastle.cms.CMSSignedData getSignedData()
          Получение сформированной или декодированной подписи.
 void setCertificateStore(org.bouncycastle.util.CollectionStore store)
          Функция задания списка сертификатов, который следует поместить в подпись при ее формировании.
 void setCRLStore(org.bouncycastle.util.CollectionStore store)
          Функция задания списка СОС, который следует поместить в подпись при ее формировании.
 byte[] sign(byte[] data)
          Создание CAdES подписи данных data.
 void verify(java.util.Collection<java.security.cert.X509Certificate> addCerts)
          Проверка всех подписей.
 void verify(java.util.Collection<java.security.cert.X509Certificate> addCerts, java.util.Collection<java.security.cert.X509CRL> addCrls)
          Проверка всех подписей.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CAdESSignature

public CAdESSignature(byte[] cms,
                      byte[] data,
                      java.lang.Integer stype)
               throws CAdESException
Конструктор. Рекомендуется использовать для проверки или усовершенствования подписи CAdES-BES до CAdES-X Long Type 1.
 Пример находится в samples.jar/CAdES.EnhanceExample.
 
 // Исходная CAdES-BES подпись.
 byte[] cadesCms = ...;
 
 // Цепочка сертификатов подписи.
 Collection chain = ...;
 
 // Декодируем и проверяем совмещенную CAdES-BES подпись.
 CAdESSignature cadesSignature = new CAdESSignature(cadesCms, null, 
 CAdESType.CAdES_BES);
 
 cadesSignature.verify(chain);
 CMSSignedData srcSignedData = cadesSignature.getSignedData();
 
 // Получаем отдельного подписанта.
 CAdESSigner srcSigner = cadesSignature.getCAdESSignerInfo(0);
 
 // Усовершенствуем подпись отдельного подписанта до CAdES-X Long Type 1.
 srcSigner.enhance(JCP.PROVIDER_NAME, JCP.GOST_DIGEST_OID, chain, 
 "http://www.cryptopro.ru:80/tsp/", CAdESType.CAdES_X_LONG_TYPE_1);
 
 // Получаем усовершенствованную подпись.
 SignerInformation enhSigner = srcSigner.getSignerInfo();
 SignerInformationStore dstSignerInfoStore = 
 new SignerInformationStore(Collections.singletonList(enhSigner));
                
 // В исходной подписи заменяем подписанта.
 CMSSignedData dstSignedData = 
 CMSSignedData.replaceSigners(srcSignedData, dstSignerInfoStore);
 
 // Усовершенствованная подпись.
 byte[] resultCms = dstSignedData.getEncoded();
 
 // Декодируем усовершенствованную совмещенную CAdES-X Long Type 1 подпись.
 cadesSignature = new CAdESSignature(resultCms, null, CAdESType.CAdES_X_LONG_TYPE_1);
 
 // Проверяем подпись. Сертификаты не задаются, так как подпись самодостаточная.
 cadesSignature.verify(null);
 

Parameters:
cms - CAdES подпись.
data - Данные, использовавшиеся для подписи. Если подпись совмещенная, то может быть null. Если данные не заданы, то считается, что подпись совмещенная, иначе отделенная.
stype - Тип подписи. Может быть null. Если тип null, то все подписи, в том числе и заверяющие, будут проверены с самостоятельным вычислением типа, иначе при проверке будет использован указанный тип.
Throws:
CAdESException

CAdESSignature

public CAdESSignature(boolean detached)
               throws CAdESException
Конструктор. Рекомендуется использовать для создания подписи CAdES.
 Пример находится в samples.jar/CAdES.SignExample.
 
 // Закрытый ключ подписи A.
 PrivateKey privateKeyA = ...;
 // Закрытый ключ подписи B.
 PrivateKey privateKeyB = ...;
 
 // Цепочка сертификатов подписи A.
 Collection chainA = ...;
 // Цепочка сертификатов подписи B.
 Collection chainB = ...;
 
 // Создаем CAdES подпись.
 CAdESSignature cadesSignature = new CAdESSignature(false);
        
 // Добавляем CADES-BES подпись.
 cadesSignature.addSigner(privateKeyA, chainA, CAdESType.CAdES_BES, null);
 // Добавляем CADES-X Long Type 1 подпись.
 cadesSignature.addSigner(privateKeyV, chainB, CAdESType.CAdES_X_LONG_TYPE_1, 
 "http://www.cryptopro.ru:80/tsp/");
        
 // Данные для подписи.
 byte[] data = ...;

 // Завершаем создание и получаем подпись с двумя подписантами.
 byte[] cadesCms = cadesSignature.sign(data);
 

Parameters:
detached - True, если подпись отделенная.
Throws:
CAdESException

CAdESSignature

public CAdESSignature()
               throws CAdESException
Конструктор. Рекомендуется использовать для создания заверяющей подписи CAdES. В этом случае подписанный атрибут content-type будет удален (RFC 5652, RFC 2634 п. 1.3.4, RFC 3852 п. 11.4).
 Пример находится в samples.jar/CAdES.CountersignatureExample.
 
 // Исходная CAdES-BES подпись.
 byte[] cadesCms = ...;
 
 // Цепочка сертификатов подписи.
 Collection chain = ...;
 
 // Декодируем и проверяем совмещенную CAdES-BES подпись.
 CAdESSignature cadesSignature = new CAdESSignature(cadesCms, null, CAdESType.CAdES_BES);
 
 cadesSignature.verify(chain);
        
 // Получаем заверяемую подпись.
 CAdESSigner srcSigner = cadesSignature.getCAdESSignerInfo(0);
        
 // Закрытый ключ заверителя.
 PrivateKey privateKeyC = ...;
 
 // Цепочка сертификатов заверителя.
 Collection chainC = ...;
                
 // Создаем заверяющую совмещенную подпись.
 CAdESSignature counterSignature = new CAdESSignature();
                                
 // Добавляем CAdES-X Long Type 1 подпись.
 counterSignature.addSigner(privateKeyC, chainC, CAdESType.CAdES_X_Long_Type_1,
 "http://www.cryptopro.ru:80/tsp/");
                                
 // Подписываем данные заверяемой подписи (байтовое представление поля signature заверяемой подписи).
 counterSignature.sign(srcSigner.getSignerInfo().getSignature());
                                
 // Получаем заверителя.
 CAdESSigner counterSigner = counterSignature.getCAdESSignerInfo(0);

 // Добавляем одного заверителя.
 srcSigner.addCounterSigner(counterSigner.getSignerInfo());
                                
 // Получаем измененную заверенную подпись с заверителем.
 SignerInformation newSigner = srcSigner.getSignerInfo();
 CMSSignedData srcCMSSignedData = cadesSignature.getSignedData();
                                
 // Обновляем исходную подпись новым подписантом с заверителем.
 CMSSignedData dstCMSSignedData = CMSSignedData.replaceSigners(srcCMSSignedData, 
 new SignerInformationStore(Collections.singletonList(newSigner)));

 // Новая подпись с заверителем.
 byte[] resultCms = dstCMSSignedData.getEncoded();
 

Throws:
CAdESException
Method Detail

clear

public void clear()
Очистка списка подписантов, обновление генератора подписи.


getSignedData

public org.bouncycastle.cms.CMSSignedData getSignedData()
Получение сформированной или декодированной подписи.

Returns:
подпись или null.

getCAdESSignerInfo

public CAdESSigner getCAdESSignerInfo(int index)
                               throws java.lang.ArrayIndexOutOfBoundsException
Получение i-го подписанта из списка подписантов.

Parameters:
index - Номер элемента.
Returns:
значение i-го элемента.
Throws:
java.lang.ArrayIndexOutOfBoundsException

getCAdESSignerInfos

public CAdESSigner[] getCAdESSignerInfos()
Получение списка имеющихся подписантов.

Returns:
список подписантов.

setCertificateStore

public void setCertificateStore(org.bouncycastle.util.CollectionStore store)
Функция задания списка сертификатов, который следует поместить в подпись при ее формировании.

Parameters:
store - Список сертификатов.

setCRLStore

public void setCRLStore(org.bouncycastle.util.CollectionStore store)
Функция задания списка СОС, который следует поместить в подпись при ее формировании.

Parameters:
store - Список СОС.

addSigner

public void addSigner(java.lang.String provider,
                      java.lang.String hashAlg,
                      java.lang.String encAlg,
                      java.security.PrivateKey p_key,
                      java.util.Collection<java.security.cert.X509Certificate> chain,
                      java.lang.Integer s_type,
                      java.lang.String tsaUrl,
                      boolean countersignature,
                      org.bouncycastle.asn1.cms.AttributeTable signedAttributes,
                      org.bouncycastle.asn1.cms.AttributeTable unsignedAttributes)
               throws CAdESException
Добавление подписи в формируемое подписанное сообщение. Сертификат подписи должен быть первым в списке. Функция позволяет указать дополнительные аттрибуты для добавления в подпись.

Parameters:
provider - Криптопровайдер для хеширования и подписи. Если перед вызовом данной функции было обращение к функции CAdESConfig.setDefaultDigestSignatureProvider(String), то при подписи будет использоваться провайдер, указанный в указанном поле.
hashAlg - Идентификатор алгоритма хэширования.
encAlg - Идентификатор алгоритма шифрования.
p_key - Закрытый ключ для подписания.
chain - Цепочка сертификатов подписанта. Должна содержать как минимум один сертификат (сертификат подписи).
s_type - Тип подписи.
tsaUrl - Адрес TSA службы.
countersignature - True, если подпись заверяющая.
signedAttributes - Таблица подписанных аттрибутов для добавления в подпись. Может быть null.
unsignedAttributes - Таблица неподписанных аттрибутов для добавления в подпись. Может быть null.
Throws:
CAdESException

addSigner

public void addSigner(java.lang.String provider,
                      java.lang.String hashAlg,
                      java.lang.String encAlg,
                      java.security.PrivateKey p_key,
                      java.util.Collection<java.security.cert.X509Certificate> chain,
                      java.lang.Integer s_type,
                      java.lang.String tsaUrl,
                      boolean countersignature)
               throws CAdESException
Добавление подписи в формируемое подписанное сообщение. Сертификат подписи должен быть первым в списке.

Parameters:
provider - Криптопровайдер для хеширования и подписи. Если перед вызовом данной функции было обращение к функции CAdESConfig.setDefaultDigestSignatureProvider(String), то при подписи будет использоваться провайдер, указанный в указанном поле.
hashAlg - Идентификатор алгоритма хэширования.
encAlg - Идентификатор алгоритма шифрования.
p_key - Закрытый ключ для подписания.
chain - Цепочка сертификатов подписанта. Должна содержать как минимум один сертификат (сертификат подписи).
s_type - Тип подписи.
tsaUrl - Адрес TSA службы.
countersignature - True, если подпись заверяющая.
Throws:
CAdESException

addSigner

public void addSigner(java.security.PrivateKey p_key,
                      java.util.Collection<java.security.cert.X509Certificate> chain,
                      java.lang.Integer s_type,
                      java.lang.String tsaUrl,
                      boolean countersignature)
               throws CAdESException
Добавление подписи в формируемое подписанное сообщение. Сертификат подписи должен быть первым в списке. По умолчанию алгоритмы хэширования и подписи ГОСТ Р 34.11/34.10, провайдер определяется путем обращения к функции CAdESConfig.getDefaultDigestSignatureProvider(). Рекомендуется использовать для добавления заверяющей подписи CAdES-BES или CAdES-X Long Type 1.

Parameters:
p_key - Закрытый ключ для подписания.
chain - Цепочка сертификатов подписанта. Должна содержать как минимум один сертификат (сертификат подписи).
s_type - Тип подписи.
tsaUrl - Адрес TSA службы.
countersignature - True, если подпись заверяющая.
Throws:
CAdESException

addSigner

public void addSigner(java.security.PrivateKey p_key,
                      java.util.Collection<java.security.cert.X509Certificate> chain,
                      java.lang.Integer s_type,
                      java.lang.String tsaUrl)
               throws CAdESException
Добавление подписи в формируемое подписанное сообщение. Сертификат подписи должен быть первым в списке. По умолчанию алгоритмы хэширования и подписи ГОСТ Р 34.11/34.10, провайдер определяется путем обращения к функции CAdESConfig.getDefaultDigestSignatureProvider(). Рекомендуется использовать для добавления подписи CAdES-BES или CAdES-X Long Type 1.

Parameters:
p_key - Закрытый ключ для подписания.
chain - Цепочка сертификатов подписанта. Должна содержать как минимум один сертификат (сертификат подписи).
s_type - Тип подписи.
tsaUrl - Адрес TSA службы.
Throws:
CAdESException

sign

public byte[] sign(byte[] data)
            throws CAdESException
Создание CAdES подписи данных data. Необходимо предварительно добавить как минимум одну подпись.

Parameters:
data - Пользовательские данные для подписи.
Returns:
подпись в виде массива байтов.
Throws:
CAdESException

verify

public void verify(java.util.Collection<java.security.cert.X509Certificate> addCerts)
            throws CAdESException
Проверка всех подписей. Рекомендуется для проверки подписей CAdES-BES (онлайн) с заданием списка сертификатов (как минимум, должен присутствовать сертификат подписи), или CAdES-X Long Type 1 (список сертификатов может быть null).

Parameters:
addCerts - Дополнительные сертификаты для построения цепочек. Может быть null.
Throws:
CAdESException

verify

public void verify(java.util.Collection<java.security.cert.X509Certificate> addCerts,
                   java.util.Collection<java.security.cert.X509CRL> addCrls)
            throws CAdESException
Проверка всех подписей. Рекомендуется использовать для проверки, например, подписей CAdES-BES с заданием списка сертификатов (как минимум, должен присутствовать сертификат подписи) и списка(-ов) CRL (оффлайн проверка).

Parameters:
addCerts - Дополнительные сертификаты для построения цепочек. Может быть null.
addCrls - Списки CRL, которые могут использоваться для проверки подписи CAdES-BES. Может быть null.
Throws:
CAdESException

Copyright Crypto-Pro.
All rights reserved.