public final class EnvelopedSignature
extends java.lang.Object
Constructor and Description |
---|
EnvelopedSignature()
Конструктор.
|
EnvelopedSignature(EncryptionKeyAlgorithm encryptionKeyAlgorithm)
Конструктор.
|
EnvelopedSignature(java.io.InputStream encryptedData)
Конструктор.
|
Modifier and Type | Method and Description |
---|---|
void |
addKeyAgreeRecipient(java.security.cert.X509Certificate recipientCertificate)
Добавление информации о получателе сообщения в виде структуры key_agreement.
|
void |
addKeyTransRecipient(java.security.cert.X509Certificate recipientCertificate)
Добавление информации о получателе сообщения в виде структуры key_transport.
|
void |
close()
Завершение процедуры шифрования.
|
java.io.InputStream |
decrypt(org.bouncycastle.cms.RecipientInformation recipient,
java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey)
Расшифрование данных с помощью заданного получателя.
|
void |
decrypt(org.bouncycastle.cms.RecipientInformation recipient,
java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey,
java.io.OutputStream dataStream)
Расшифрование данных с помощью заданного получателя.
|
java.io.InputStream |
decrypt(java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey)
Расшифрование данных с помощью заданного получателя.
|
void |
decrypt(java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey,
java.io.OutputStream dataStream)
Расшифрование данных с помощью заданного получателя.
|
static java.io.InputStream |
decryptOne(org.bouncycastle.cms.RecipientInformation recipient,
java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey)
Расшифрование данных с помощью заданного получателя.
|
static void |
decryptOne(org.bouncycastle.cms.RecipientInformation recipient,
java.security.cert.X509Certificate recipientCertificate,
java.security.PrivateKey recipientPrivateKey,
java.io.OutputStream dataStream)
Расшифрование данных с помощью заданного получателя.
|
java.util.Collection |
getRecipients()
Получение списка получателей из зашифрованного
сообщения.
|
void |
open(java.io.OutputStream envelopedOutStream)
Открытие потока для шифрования сообщения.
|
void |
update(byte[] buffer)
Зашифрование блока данных.
|
void |
update(byte[] buffer,
int offset,
int length)
Зашифрование блока данных.
|
public EnvelopedSignature(EncryptionKeyAlgorithm encryptionKeyAlgorithm)
1. Пример формирования подписи формата Enveloped CMS с сохранением в буфер // Буфер для сохранения подписи Enveloped CMS ByteArrayOutputStream envelopedByteArrayOutStream = new ByteArrayOutputStream(); // Создание объекта Enveloped CMS с ключом шифрования на алгоритме МАГМА EnvelopedSignature signature = new EnvelopedSignature( EncryptionKeyAlgorithm.ekaMagma); // Добавление получателя (сертификат). При расшифровании получатель // будет использовать закрытый ключ, соответствующий данному сертификату signature.addKeyTransRecipient(recipientCertificate); // или signature.addKeyAgreeRecipient(recipientCertificate); // Инициализация Enveloped CMS буфером для сохранения подписи signature.open(envelopedByteArrayOutStream); // Подготовленные данные для зашифрования - строка или CMS, // полученная с помощью CMSSign (samples.jar) или CAdES API byte[] data = ... // Зашифрование данных data signature.update(data, 0, data.length); // Формирование подписи Enveloped CMS signature.close(); // Получение подписи в формате Enveloped CMS в буфер byte[] envelopedByteData = envelopedByteArrayOutStream.toByteArray(); 2. Пример формирования подписи формата Enveloped CMS с чтением и записью в поток // Открытие файлового потока для чтения данных для подписи - текстового // документа или CMS, полученной с помощью CMSSign (samples.jar) или CAdES API InputStream dataFile = new FileInputStream("data_file"); // Открытие файлового потока для сохранения подписи Enveloped CMS OutputStream envelopedFileOutStream = new FileOutputStream("signature_file"); // Создание объекта Enveloped CMS EnvelopedSignature signatureStream = new EnvelopedSignature(); // Добавление получателя (сертификат). При расшифровании получатель // будет использовать закрытый ключ, соответствующий данному сертификату signature.addKeyTransRecipient(recipientCertificate); // или signature.addKeyAgreeRecipient(recipientCertificate); // Инициализация Enveloped CMS потоком для сохранения подписи signatureStream.open(envelopedFileOutStream); // Чтение данных из файла для зашифрования final int bufferSize = 1024*1024; // размер буфера byte[] buffer = new byte[bufferSize]; int read = dataFile.read(buffer); // Зашифрование данных data while (read > 0) { signatureStream.update(buffer, 0, read); Array.clear(buffer); read = dataFile.read(buffer, 0, bufferSize); } // while // Формирование подписи Enveloped CMS. Подпись Enveloped CMS // сформирована и записана в "signature_file" signatureStream.close(); dataFile.close(); envelopedFileOutStream.close();
encryptionKeyAlgorithm
- Алгоритм ключа шифрования.
По умолчанию используется ГОСТ 28147.public EnvelopedSignature()
1. Пример формирования подписи формата Enveloped CMS с сохранением в буфер // Буфер для сохранения подписи Enveloped CMS ByteArrayOutputStream envelopedByteArrayOutStream = new ByteArrayOutputStream(); // Создание объекта Enveloped CMS EnvelopedSignature signature = new EnvelopedSignature(); // Добавление получателя (сертификат). При расшифровании получатель // будет использовать закрытый ключ, соответствующий данному сертификату signature.addKeyTransRecipient(recipientCertificate); // или signature.addKeyAgreeRecipient(recipientCertificate); // Инициализация Enveloped CMS буфером для сохранения подписи signature.open(envelopedByteArrayOutStream); // Подготовленные данные для зашифрования - строка или CMS, // полученная с помощью CMSSign (samples.jar) или CAdES API byte[] data = ... // Зашифрование данных data signature.update(data, 0, data.length); // Формирование подписи Enveloped CMS signature.close(); // Получение подписи в формате Enveloped CMS в буфер byte[] envelopedByteData = envelopedByteArrayOutStream.toByteArray(); 2. Пример формирования подписи формата Enveloped CMS с чтением и записью в поток // Открытие файлового потока для чтения данных для подписи - текстового // документа или CMS, полученной с помощью CMSSign (samples.jar) или CAdES API InputStream dataFile = new FileInputStream("data_file"); // Открытие файлового потока для сохранения подписи Enveloped CMS OutputStream envelopedFileOutStream = new FileOutputStream("signature_file"); // Создание объекта Enveloped CMS EnvelopedSignature signatureStream = new EnvelopedSignature(); // Добавление получателя (сертификат). При расшифровании получатель // будет использовать закрытый ключ, соответствующий данному сертификату signature.addKeyTransRecipient(recipientCertificate); // или signature.addKeyAgreeRecipient(recipientCertificate); // Инициализация Enveloped CMS потоком для сохранения подписи signatureStream.open(envelopedFileOutStream); // Чтение данных из файла для зашифрования final int bufferSize = 1024*1024; // размер буфера byte[] buffer = new byte[bufferSize]; int read = dataFile.read(buffer); // Зашифрование данных data while (read > 0) { signatureStream.update(buffer, 0, read); Array.clear(buffer); read = dataFile.read(buffer, 0, bufferSize); } // while // Формирование подписи Enveloped CMS. Подпись Enveloped CMS // сформирована и записана в "signature_file" signatureStream.close(); dataFile.close(); envelopedFileOutStream.close();
public EnvelopedSignature(java.io.InputStream encryptedData) throws EnvelopedException
1. Пример расшифрования подписи формата Enveloped CMS с чтением из буфера // Буфер для сохранения расшифрованных данных ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream(); // Прочитанное в буфер сообщение формата Enveloped CMS byte[] envelopedByteData = ... // Создание объекта Enveloped CMS с передачей ему буфера подписи для расшифрования signature = new EnvelopedSignature(new ByteArrayInputStream(envelopedByteData)); // Расшифрование подписи на закрытом ключе получателя с записью // расшифрованных данных в буфер decryptedByteDataStream signature.decrypt(recipientCertificate, recipientPrivateKey, decryptedByteDataStream); // Получение расшифрованных данных - строки или CMS, которую можно // далее проверить с помощью CMSVerify (samples.jar) или CAdES.jar byte[] decryptedByteData = decryptedByteDataStream.toByteArray(); 2. Пример рсшифрования подписи формата Enveloped CMS с чтением и записью в поток // Открытие файлового потока для чтения подписи Enveloped CMS InputStream encryptedDataFile = new FileInputStream("signature_file"); // Открытие файлового потока для сохранения расшифрованных данных FileOutputStream outDataFile = new FileOutputStream("decrypted_data_file"); // Создание объекта Enveloped CMS с передачей ему потока подписи для расшифрования signatureStream = new EnvelopedSignature(encryptedDataFile); // Расшифрование подписи на закрытом ключе получателя с записью // расшифрованных данных в поток decryptedDataStream InputStream decryptedDataStream = signatureStream.decrypt(recipientCertificate, recipientPrivateKey); // Чтение из потока расшифрованных данных decryptedDataStream и запись в файл final int bufferSize = 1024*1024; // размер буфера byte[] buffer = new byte[bufferSize]; int read = decryptedDataStream.read(buffer); // Запись расшифрованных данных в файл while (read > 0) { outDataFile.write(buffer, 0, read); Array.clear(buffer); read = decryptedDataStream.read(buffer, 0, bufferSize); } // while // Завершение расшифрования. Расшифрованные данные записаны в файл "decrypted_data_file" decryptedDataStream.close(); encryptedDataFile.close(); outDataFile.close();
encryptedData
- Зашифрованное сообщение формата Enveloped CMS.EnvelopedException
public void addKeyTransRecipient(java.security.cert.X509Certificate recipientCertificate) throws EnvelopedException
recipientCertificate
- Сертификат получателя.EnvelopedException
public void addKeyAgreeRecipient(java.security.cert.X509Certificate recipientCertificate) throws EnvelopedException
recipientCertificate
- Сертификат получателя.EnvelopedException
public void open(java.io.OutputStream envelopedOutStream) throws EnvelopedException
update(byte[], int, int)
или update(byte[])
и close()
. Должна быть
в итоге завершена с помощью close()
.envelopedOutStream
- Поток зашифрованных данных. Может
быть байтовым или файловым потоком.EnvelopedException
public void update(byte[] buffer, int offset, int length) throws java.lang.Exception
open(java.io.OutputStream)
.buffer
- Блок данных.offset
- Смещение в буфере.length
- Длина данных.java.lang.Exception
public void update(byte[] buffer) throws java.lang.Exception
open(java.io.OutputStream)
.buffer
- Блок данных.java.lang.Exception
public void close() throws EnvelopedException
open(java.io.OutputStream)
,
которую следует вызвать первой.
Необходим по крайней мере одни вызов update(byte[], int, int)
или update(byte[])
.EnvelopedException
public java.util.Collection getRecipients() throws EnvelopedException
EnvelopedException
public void decrypt(java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey, java.io.OutputStream dataStream) throws EnvelopedException, EnvelopedInvalidRecipientException
ByteArrayOutputStream
.
Происходит попытка расшифровать сообщение любого из
получателей с помощью переданного закрытого ключа.
Если был передан сертификат, то выполнится проверка,
соответствует ли сертификат данному получателю.recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.dataStream
- Исходящий поток с расшифрованными данными.EnvelopedException
EnvelopedInvalidRecipientException
public java.io.InputStream decrypt(java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey) throws EnvelopedException, EnvelopedInvalidRecipientException
recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.EnvelopedException
EnvelopedInvalidRecipientException
public void decrypt(org.bouncycastle.cms.RecipientInformation recipient, java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey, java.io.OutputStream dataStream) throws EnvelopedException, EnvelopedInvalidRecipientFormatException, EnvelopedWrongRecipientException
ByteArrayOutputStream
.
Происходит попытка расшифровать сообщение заданного
получателя с помощью переданного закрытого ключа.
Если был передан сертификат, то выполнится проверка,
соответствует ли сертификат данному получателю.recipient
- Информация о конкретном получателе.recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.dataStream
- Исходящий поток с расшифрованными данными.EnvelopedException
EnvelopedInvalidRecipientFormatException
EnvelopedWrongRecipientException
public static void decryptOne(org.bouncycastle.cms.RecipientInformation recipient, java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey, java.io.OutputStream dataStream) throws EnvelopedException, EnvelopedInvalidRecipientFormatException, EnvelopedWrongRecipientException
ByteArrayOutputStream
.
Происходит попытка расшифровать сообщение заданного
получателя с помощью переданного закрытого ключа.
Если был передан сертификат, то выполнится проверка,
соответствует ли сертификат данному получателю.recipient
- Информация о конкретном получателе.recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.dataStream
- Исходящий поток с расшифрованными данными.EnvelopedException
EnvelopedInvalidRecipientFormatException
EnvelopedWrongRecipientException
public java.io.InputStream decrypt(org.bouncycastle.cms.RecipientInformation recipient, java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey) throws EnvelopedException, EnvelopedInvalidRecipientFormatException, EnvelopedWrongRecipientException
recipient
- Информация о конкретном получателе.recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.EnvelopedException
EnvelopedInvalidRecipientFormatException
EnvelopedWrongRecipientException
public static java.io.InputStream decryptOne(org.bouncycastle.cms.RecipientInformation recipient, java.security.cert.X509Certificate recipientCertificate, java.security.PrivateKey recipientPrivateKey) throws EnvelopedException, EnvelopedInvalidRecipientFormatException, EnvelopedWrongRecipientException
recipient
- Информация о конкретном получателе.recipientCertificate
- Сертификат получателя.
Может быть null.recipientPrivateKey
- Закрытый ключ получателя.EnvelopedException
EnvelopedInvalidRecipientFormatException
EnvelopedWrongRecipientException