Перейти к содержимому

Структуры CMS-сообщения

USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta

Указатель на структуру JC_NID_OBJECT. typedef JC_NID_OBJECT CK_PTR JC_NID_OBJECT_PTR; JC_NID_OBJECT Описатель объектов: OID алгоритма, OID набора параметров или RDN субъекта. typedef struct JC_NID_OBJECT { CK_LONG nid; CK_CHAR_PTR shortName; CK_CHAR_PTR longName; CK_CHAR_PTR value; } JC_NID_OBJECT;

  • CK_LONG nid — идентификатор объекта.
  • CK_CHAR_PTR shortName — короткое имя объекта.
  • CK_CHAR_PTR longName — длинное имя объекта.
  • CK_CHAR_PTR value — значение объекта в DER формате.

JC_CMS_RECIPIENT_MATERIAL

typedef struct JC_CMS_RECIPIENT_MATERIAL
{
CK_LONG recipientInfoType;
CK_LONG recipientIdentity;
CK_ULONG keyWrapAlgorithm;
CK_BYTE_PTR certificate;
CK_ULONG certificateLength;
CK_BYTE_PTR keyTransport;
CK_ULONG keyTransportLength;
} JC_CMS_RECIPIENT_MATERIAL;
typedef JC_CMS_RECIPIENT_MATERIAL CK_PTR JC_CMS_RECIPIENT_MATERIAL_PTR;

Ключевой материал получателя.

  • CK_LONG recipientInfoType — способ формирования объекта ключевой информации получателя. Возможные значения:

    • JC_CMS_KTRI_RECIPIENT_INFO (0) – по передаче (KTRI);
    • JC_CMS_KARI_RECIPIENT_INFO (1) – по согласованию (KARI).
  • CK_LONG recipientIdentity — способ идентификации получателя. Возможные значения:

    • JC_CMS_ISSUER_SERIAL_ID (0) – по CN издателя и серийному номеру сертификата;
    • JC_CMS_SUBJECT_KEY_ID (1) – по идентификатору ключа субъекта.
  • CK_ULONG keyWrapAlgorithm — алгоритм шифрования ключа. Возможные значения:

    • JC_CMS_GOST28147_89_NONE_KEYWRAP (0) — соответствует id-Gost28147-89-None-KeyWrap (1.2.643.2.2.13.0);
    • JC_CMS_GOST28147_89_CRYPTOPRO_KEYWRAP (1) — соответствует id-Gost28147-89-CryptoPro-KeyWrap (1.2.643.2.2.13.1);
    • JC_CMS_GOSTR3412_2015_MAGMA_WRAP_KEXP15 (2) — соответствует id-tc26-wrap-gostr3412-2015-magma-kexp15 (1.2.643.7.1.1.7.1.1);
    • JC_CMS_GOSTR3412_2015_KUZNYECHIK_WRAP_KEXP15 (3) — соответствует id-tc26-wrap-gostr3412-2015-kuznyechik (1.2.643.7.1.1.7.1.2).
  • CK_BYTE_PTR certificate — сертификат получателя в DER формате.

  • CK_ULONG certificateLength — длина сертификата.

  • CK_BYTE_PTR keyTransport — транспортное представление ключа шифрования содержимого CEK. Получено при помощи функции C_WrapKey().

  • CK_ULONG keyTransportLength — длина транспортного представления ключа шифрования.

Материал формирования CMS контейнера.

typedef struct JC_CMS_MATERIAL
{
CK_ULONG recipientCount;
JC_CMS_RECIPIENT_MATERIAL_PTR recipients;
CK_BYTE_PTR senderCertificate;
CK_ULONG senderCertificateLength;
JC_NID_OBJECT contentEncryptionAlgorithm;
JC_NID_OBJECT contentEncryptionParamSet;
CK_ULONG ivLength;
CK_BYTE_PTR iv;
CK_BYTE_PTR cipherText;
CK_ULONG cipherTextLength;
CK_BYTE_PTR contentMac;
CK_ULONG contentMacLength;
} JC_CMS_MATERIAL;
typedef JC_CMS_MATERIAL CK_PTR JC_CMS_MATERIAL_PTR;
  • CK_ULONG recipientCount — число получателей в CMS контейнере.
  • JC_CMS_RECIPIENT_MATERIAL_PTR recipients — ключевой материал получателей.
  • CK_BYTE_PTR senderCertificate — сертификат отправителя. Используется, если есть получатель «по согласованию».
  • CK_ULONG senderCertificateLength — длина сертификата отправителя. Не используется, если все получатели «по передаче».
  • JC_NID_OBJECT contentEncryptionAlgorithm — алгоритм шифрования содержимого ГОСТ 28147 в режиме CFB, Магма или Кузнечик в режиме CTR-ACPKM.
  • JC_NID_OBJECT contentEncryptionParamSet — набор параметров шифрования содержимого по алгоритму ГОСТ 28147–89.
  • CK_ULONG ivLength — длина инициализационного вектора.
  • CK_BYTE_PTR iv — инициализационный вектор для шифрования содержимого.
  • CK_BYTE_PTR cipherText — зашифрованное содержимое.
  • CK_ULONG cipherTextLength — длина зашифрованного содержимого.
  • CK_BYTE_PTR contentMac — указатель на зашифрованное значение MAC открытого текста. Используется при шифровании алгоритмами «Магма», «Кузнечик» в режиме гаммирования CTR с механизмом преобразования ключа ACPKM с вычислением имитовставки (id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac, id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac).
  • CK_ULONG contentMacLength — размер зашифрованного значения MAC открытого текста.

Используется в:

Указатель на структуру JC_CERTIFICATE_TRAITS.

typedef JC_CERTIFICATE_TRAITS CK_PTR JC_CERTIFICATE_TRAITS_PTR;

JC_CERTIFICATE_TRAITS Признаки сертификата получателя.

typedef struct JC_CERTIFICATE_TRAITS {
CK_BYTE_PTR keyID;
CK_ULONG keyIDlength;
CK_CHAR_PTR serialNumber;
JC_NID_OBJECT_PTR issuerRecords;
CK_ULONG issuerRecordCount;
} JC_CERTIFICATE_TRAITS;
  • CK_BYTE_PTR keyID — идентификатор ключа субъекта.
  • CK_ULONG keyIDlength — длина идентификатора ключа субъекта.
  • CK_CHAR_PTR serialNumber — серийный номер сертификата (null terminated).
  • JC_NID_OBJECT_PTR issuerRecords — список RDN значений субъекта.
  • CK_ULONG issuerRecordCount — количество RDN значений субъекта.

Указатель на структуру JC_CERTIFICATE_MATERIAL.

typedef JC_CERTIFICATE_MATERIAL CK_PTR JC_CERTIFICATE_MATERIAL_PTR;

JC_CERTIFICATE_MATERIAL Материал разбора сертификата.

typedef struct JC_CERTIFICATE_MATERIAL {
CK_LONG publicKeyAlgorithmNid;
CK_BYTE_PTR ellipticCurveParams;
CK_ULONG ellipticCurveParamsLength;
CK_BYTE_PTR hashParams;
CK_ULONG hashParamsLength;
CK_BYTE_PTR publicKey;
CK_ULONG publicKeyLength;
} JC_CERTIFICATE_MATERIAL;
  • CK_LONG publicKeyAlgorithmNid — NID основного алгоритма.
  • CK_BYTE_PTR ellipticCurveParams — составляющая параметра публичного ключа, соответствующая атрибуту CKA_GOSTR3410_PARAMS.
  • CK_ULONG ellipticCurveParamsLength — длина JC_CERTIFICATE_MATERIAL.ellipticCurveParams.
  • CK_BYTE_PTR hashParams — составляющая параметра публичного ключа, соответствующая атрибуту CKA_GOSTR3411_PARAMS.
  • CK_ULONG hashParamsLength — длина JC_CERTIFICATE_MATERIAL.hashParams.
  • CK_BYTE_PTR publicKey — публичный ключ.
  • CK_ULONG publicKeyLength — длина публичного ключа. Используется в:
  • JC_KeyParametersFromCert().

Указатель на структуру JC_CMS_RECIPIENT. typedef JC_CMS_RECIPIENT CK_PTR JC_CMS_RECIPIENT_PTR; JC_CMS_RECIPIENT Получатель CMS сообщения.

typedef struct JC_CMS_RECIPIENT {
CK_LONG recipientInfoType;
JC_CERTIFICATE_TRAITS recipientCertTraits;
JC_NID_OBJECT keyWrapAlgorithm;
CK_BYTE_PTR secretKeyOID;
CK_ULONG secretKeyOIDlength;
CK_BYTE_PTR keyTransport;
CK_ULONG keyTransportLength;
JC_CERTIFICATE_MATERIAL originator;
} JC_CMS_RECIPIENT;
  • CK_LONG recipientInfoType — способ формирования объекта ключевой информации получателя. Возможные значения:
    • JC_CMS_KTRI_RECIPIENT_INFO (0) – по передаче (KTRI);
    • JC_CMS_KARI_RECIPIENT_INFO (1) – по согласованию (KARI).
  • JC_CERTIFICATE_TRAITS recipientCertTraits — признаки сертификата получателя.
  • JC_NID_OBJECT keyWrapAlgorithm — алгоритм шифрования ключа.
  • CK_BYTE_PTR secretKeyOID — OID алгоритма шифрования содержимого в DER представлении.
  • CK_BYTE_PTR secretKeyOIDlength — длина OID алгоритма шифрования.
  • CK_BYTE_PTR keyTransport — транспортное представление ключа шифрования содержимого.
  • CK_BYTE_PTR keyTransportLength — длина транспортного представления ключа шифрования содержимого.
  • JC_CERTIFICATE_MATERIAL originator — описатель публичного ключа отправителя CMS. Присутствует только для формата «по согласованию» (KARI), т.е. JC_CMS_RECIPIENT.recipientInfoType равен JC_CMS_KARI_RECIPIENT_INFO.

Разобранное CMS сообщение.

typedef struct JC_CMS_CONTAINER
{
CK_ULONG recipientCount;
JC_CMS_RECIPIENT* recipients;
JC_NID_OBJECT contentEncryptionAlgorithm;
JC_NID_OBJECT encryptionParamSet;
CK_BYTE_PTR iv;
CK_ULONG ivLength;
CK_BYTE_PTR cipherText;
CK_ULONG cipherTextLength;
CK_BYTE_PTR contentMac;
CK_ULONG contentMacLength;
} JC_CMS_CONTAINER;
typedef JC_CMS_CONTAINER CK_PTR JC_CMS_CONTAINER_PTR;
  • CK_ULONG recipientCount — число получателей CMS сообщения.
  • JC_CMS_RECIPIENT_PTR recipients — получатели CMS сообщения.
  • JC_NID_OBJECT contentEncryptionAlgorithm — описатель OID алгоритма шифрования содержимого.
  • JC_NID_OBJECT encryptionParamSet — описатель OID набора параметров этого алгоритма.
  • CK_BYTE_PTR iv — инициализационный вектор зашифрованного содержимого.
  • CK_ULONG ivLength — длина инициализационного вектора.
  • CK_BYTE_PTR cipherText — зашифрованное содержимое.
  • CK_ULONG cipherTextLength — длина зашифрованного содержимого.
  • CK_BYTE_PTR contentMac — указатель на зашифрованное значение MAC открытого текста. Используется при шифровании алгоритмами «Магма», «Кузнечик» в режиме гаммирования CTR с механизмом преобразования ключа ACPKM с вычислением имитовставки (id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac, id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac).
  • CK_ULONG contentMacLength — размер зашифрованного значения MAC. Используется в:
  • JC_Decompose_CMS()