C.SignInit
, C.Sign
, C.SignUpdate
и C.SignFinal
¶C.SignInit
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey)¶Параметры: |
|
---|
Инициализирует операцию подписи для указанного ключа, выработки имитовставки и вычисления HMAC.
Механизм формирования ЭП и имитовставки задаётся в поле mechanism
структуры CK_MECHANISM
. Для формирования ЭП и имитовставки библиотека Cryptoki поддерживает механизмы, перечисленные ниже.
Для апплета Криптотокен:
CKM_GOSTR3410
(0x00001201
) – механизм для генерации и проверки ЭП, соответствующий стандартуГОСТ Р 34.10-2001. Использует в качестве входного параметра ранее вычисленное 32-байтовое значение хэш-функции.
CKM_GOSTR3410_WITH_GOSTR3411
(0x00001202
) – механизм для генерации и проверки ЭП (ГОСТ Р 34.10-2001) схэшированием (ГОСТ Р 34.11-94) подаваемых на вход данных. Размер данных не ограничен.
CKM_GOST28147_MAC
(0x00001223
) – механизм выработки и проверки имитовставки, соответствующий стандартуГОСТ 28147-89. Размер входных данных не ограничен.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C.Sign
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶Параметры: |
|
---|
Осуществляет единоразовую подпись, т.е подписывает только один блок данных. Либо вычисляет HMAC от одного блока данных, вырабатывает имитовставку от одного блока данных – конкретная операция зависит от того, с каким значением параметра pMechanism
была инициализирована операция подписи.
Примечание
Если операция подписи инициализирована с механизмом CKM_GOSTR3410 (см. C.SignInit()
), то поддерживается только 32-байтовый размер данных.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C.SignUpdate
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen)¶Параметры: |
|
---|
Продолжает составную операцию подписи – подписывает очередной блок данных, вычисляет HMAC или вырабатывает имитовставку для очередного блока данных.
При работе с апплетом Криптотокен функция C.SignUpdate()
поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411
и CKM_GOST28147_MAC
.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C.SignInit()
.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C.SignFinal
(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)¶Параметры: |
|
---|
Завершает составную операцию подписи, вычисления HMAC или выработки имитовставки.
При работе с апплетом Криптотокен функция C.SignFinal()
поддерживает только механизмы CKM_GOSTR3410_WITH_GOSTR3411
и CKM_GOST28147_MAC
.
Примечание
Механизмы, используемые в процессе выработки электронной подписи или имитовставки предварительно задаются функцией C.SignInit()
.
Запускается в режимах
См.также
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Для обеспечения успешной подписи данных, необходимо, чтобы функции в алгоритме были использованы в одной из следующих последовательностей:
Для единоразовой операции подписи | Для составной операции подписи |
---|---|
|
Пример выработки ЭЦП на языке Java для ОС Android:
// дескриптор сессии
LongRef session = new LongRef();
// дескриптор закрытого ключа
LongRef prKeyHandle = new LongRef();
// буфер для результирующей хэш-последовательности
byte[] hash = new byte[32];
// механизм для формирования ЭЦП по ГОСТ Р34.10-2001
CKM signMech = new CKM(CKM.GOSTR3410, null);
// буфер для результирующей подписи
byte[] signature = new byte[64];
// длина буфера для подписи
LongRef signatureLength = new LongRef(signature.length);
// задание ключа подписи и механизма
rv = C.SignInit(session.value, signMech, prKeyHandle.value);
if(rv != CKR.OK)
{
throw new CKRException("C.SignInit", rv);
}
// подпись данных
rv = C.Sign(session.value, hash, signature, signatureLength);
if(rv != CKR.OK)
{
throw new CKRException("C.Sign", rv);
}