Ошибка декодирования ключа

Несмотря на постоянное развитие технологий, интернет-системы не могут полностью застраховаться от каких-либо накладок. В любой момент при работе могут возникнуть ошибки. В данной статье находятся ответы на частые вопросы по ошибкам, решение которых трудно найти.

  • 1 Ошибки
    • 1.1 Файл секретного ключа не задан или неверный пароль
    • 1.2 Ошибка при инициализации СКЗИ
    • 1.3 Ошибка при создании ключевого носителя СКЗИ
    • 1.4 Внутренняя ошибка, попробуйте выполнить операцию позднее
    • 1.5 Ошибка при декодировании секретного ключа
    • 1.6 Пользователь не подключен ни к одному клиенту
    • 1.7 Ошибка аутентификации
    • 1.8 Учетная запись заблокирована
    • 1.9 Ошибка чтения ключевого контейнера
  • 2 Что такое каталог ключевого носителя СКЗИ?
    • 2.1 Инструкция по созданию криптографических ключей
    • 2.2 Генерация ключей ВТБ
  • 3 Если клиент ВТБ забыл пароль секретного ключа?

Ошибки

Ошибка входа в интернет банк

Как правило, одним системным недочетом дело не заканчивается. Имеется небольшой список неточностей, с которыми может столкнуться клиент ВТБ в любой момент.

Как решить? Что случилось? Что для этого нужно?
Самостоятельно Файл секретного ключа не задан (неверный пароль); Соединение с интернетом
Ошибки инициализации СКЗИ;
Ошибка при создании ключевого носителя СКЗИ;
Ошибки при декодировании секретного ключа;
Ошибка чтения ключевого контейнера.
С помощью специалистов ВТБ Внутренняя ошибка, попробуйте выполнить операцию позже; Обращение в офис ВТБ с паспортом РФ.
Пользователь не подключен ни к одному клиенту;
Ошибка аутентификации;
Учетная запись заблокирована.

По каждому вышерасположенному пункту существует решение, которым могут воспользоваться все клиенты ВТБ, столкнувшиеся с определенной проблемой. Итак, как исправить различные виды ошибок?

Файл секретного ключа не задан или неверный пароль

Такая проблема возникает:

  • При вводе пароля на странице входа. Возникновение проблемы на данном этапе говорит о том, что может быть действительно введен неверный пароль. Его можно будет сменить, после этой процедуры необходимо ввести логин и новый пароль.

Для решения рекомендуется проверить правильность введенного пароля на входе: язык (RU/ENG), регистр букв. Следует помнить о том, что код для дешифрования ключа не восстанавливается. Сменить или изменить можно пароль для обращения к системе ВТБ-Онлайн.

  • После нажатия на клавишу «Вход». Ошибка, возникшая на данном этапе, указывает на повреждение файлов секретного ключа.

Если имеется в наличии сохраненная копия ключа, то с её помощью можно будет войти в систему. Дополнительно рекомендуется произвести выход в личный кабинет, используя браузер Internet Explorer версии от 10.0, который следует запустить в режиме «Администратор».

  • Если резервная копия отсутствует или не работает, то клиент может запросить новый сертификат и сохранить его дополнительно на другой носитель информации: флешку, съемный диск.

Для его действия в Личном кабинете сертификат нужно активировать в отделении ВТБ, предоставив акт ввода Сертификата ключа по месту открытия счетов. В итоге, ошибка «Файл секретного ключа не задан» ВТБ сервиса исчезает.

Ошибка при инициализации СКЗИ

Такая проблема возникает, если в поле каталога ключевого носителя СКЗИ введен путь до каталога, не содержащего папку «keys» и связку файлов: kek.opq, mk.db3, masks.db3, rand.opq, request.pem. При этом, ошибка обращения к внешней системе тоже имеет место быть.

Как можно справиться с этой проблемой? Главное, составить другое направление в общий каталог, где будет находиться папка «keys» и все вышеперечисленные файлы. Если все файлы хранятся на съемном носителе, то клиент должен прописать направление к нему.

Ошибка при создании ключевого носителя СКЗИ

Данная неисправность может возникать по двум причинам:

Причина 1: несуществующий путь. Возникновение этой ошибки информирует о том, что путь ведет к каталогу, который не существует в системе или носителю, изъятому из устройства. Для решения этой неисправности нужно глянуть направление на строчке«Каталог ключевого носителя СКЗИ», который должен вести к пустому каталогу.

Причина 2: путь, защищенный от записи. Сначала проверяются атрибуты, установленные в свойствах каталога, для этого следуйте указаниям:

  1. Нажмите по нужной папке и щелкните выбрать «Сервис», вкладку «Свойства».
  2. Пройдите на вкладку «Общие» и выберите раздел «Атрибуты».
  3. Посмотрите на строчку атрибута «Только чтение» и убедитесь в отсутствии маркера рядом со строкой. Он может быть в виде галочки или квадрата зеленого цвета. Если маркер присутствует то его необходимо убрать, оставив квадрат пустым.
  4. Дайте согласие на все всплывающие системные сообщения и подтвердите изменения, нажав на кнопку «Ок».
  5. Обновите личный кабинет, нажав на клавиатуре «Ctrl+F5» и укажите направление в «Каталог ключевого носителя СКЗИ» повторно.

При невозможности снятия «Атрибута», то есть фактического отсутствия доступа к функциям администратора, следует сделать запрос сертификата на флэшку или запросить права руководителя системой.

Внутренняя ошибка, попробуйте выполнить операцию позднее

Вариант, когда совершаемая операция временно недоступна, тоже имеет место быть. Такая проблема возникает при задвоении учетных записей. Единственным решением этого является обращение в отделение ВТБ к специалистам.

Ошибка при декодировании секретного ключа

Проблема обычно возникает, когда сертификат сохраняется на носитель с ключами. Вполне возможно, что при этом неправильно вводится пароль для дешифровки ключа. Для решения необходимо проверить язык клавиатуры, регистр, правильность ввода. Как вариант, можно написать пароль в русской раскладке. Если все-таки его забыли, то можно запросить новый сертификат и пересохранить на чистый носитель информации.

Ошибки могут появляться при нажатии на значок дискеты. В этом случае необходимо проверить всю структуру файлов в каталоге, куда сохраняется сертификат. Там должны содержаться следующие названия: «masks.db3», «rand.opg», «kek.opg», «mk.db3», «request.pem» и папка «keys» с файлом «00000001.key». Если наименование документов в папке записано по-другому, то следует его переименовать в правильное и проверить, исчезла ли проблема.

Ключи не прошли проверку

Пользователь не подключен ни к одному клиенту

Пишется при входе в Личный кабинет, если аккаунт клиента блокируется в банк-клиенте ВТБ. Для решения необходимо подойти в удобный офис ВТБ с паспортом.

Ошибка аутентификации

Эта информация появляется на экране при попытке авторизации в Личном кабинете клиента ВТБ. Если такая проблема присутствует, то с паспортом необходимо обратиться к банковским специалистам в офисе ВТБ.

Учетная запись заблокирована

Пользователь может действовать разными способами, в зависимости от информации на экране. Если указано время разблокировки, то следует дождаться именно этого времени. Если советуют обратиться в техподдержку ВТБ, то стоит поступить именно так.

Если заблокировали банк-клиент и ничего дополнительного не указано, то в данном случае клиенту необходимо обратиться лично в отделение ВТБ с документом, который подтвердит личность человека, где менеджеры дадут рекомендации или разблокируют закрытые учетные записи.

Ошибка чтения ключевого контейнера

Возникает при отсутствии сертификата на носителе. Для исправления необходимо проверить всю структуру каталога, в общей папке должны находиться следующие документы: «masks.db3», «rand.opg», «kek.opg», «mk.db3», «request.pem» и папки «keys», «cert», «CA». Если каких-то папок не хватает, то заходим в ЛК ВТБ и пересохраняем сертификат. Как это сделать? В поле «Каталог ключевого носителя СКЗИ» указываем правильный путь к корневому каталогу с нужными документами и нажимаем на кнопку «Сохранить». После чего можно попробовать выполнить вход заново.

Проверка электронной подписи

Что такое каталог ключевого носителя СКЗИ?

СКЗИ – это сервис, обеспечивающий электронное шифрование документов. Обычно это используется для получения подписи важной информации или, наоборот, отправки документов. Где можно каталог ключевого носителя СКЗИ взять? На самом деле – это место для сохранения электронных ключей, в данной ситуации сохраняются ключи банк-клиента ВТБ. Хранить его, желательно, на отдельном носителе: флешкарте, диске или на внутреннем накопителе.

Инструкция по созданию криптографических ключей

Как создать секретный ключ в банк-клиенте ВТБ? Для начала производится вход в банк-клиент по ссылке , при начальном входе система может предложить установку для защиты информации элемент управления ActiveX. После установки компонента необходимо настроить свой личный кабинет для регистрации организации в банковской системе ВТБ.

Для создания секретных ключей надо получить сертификат:

  1. Выполнить вход в онлайн-офис;
  2. Ридер (генератор паролей) может создать код для входа в систему, если он используется клиентом. В случае, если он есть, то необходимо нажать на устройстве кнопку «Б» и автоматический генератор сгенерирует код.
  3. Приходят смс с одноразовым кодом на номер телефона, привязанный к ЛК ВТБ.
  4. Пароль при первом входе необходимо изменить в настройках с временного на постоянный и более защищенный.

В ЛК ВТБ можно создать сертификат. Место для хранения необходимо найти заранее на флешке или компьютере.

Следует обратить внимание, что в одной папке должен храниться только один сертификат, без остаточных других файлов. В ином случае получится ошибка, связанная с банк-клиентом ВТБ.Для этого на вкладке «Запрос нового сертификата» надо прописать путь к папке, в которой хранятся ключи.

При появлении сообщения с компьютера «Инициализация генератора» нужно передвигать мышь в случайном порядке.

После завершения появится новое окно ввода для дешифрования с требованием ввести новый пароль к секретному ключу. Его необходимо запомнить, так же обращается внимание на регистр букв и язык клавиатуры.
Далее создание сертификата завершено. Он будет доступен в разделе «Запросы», куда перекинет клиента ВТБ автоматически. После получения сертификата появляется сообщение об отправке данных в банк.

Генерация ключей ВТБ

Чтобы создать уникальный ключ, необходимо заняться установкой программы Quik ВТБ (издатель Step Up inc), которая нужна для создания секретных ключей.

  1. Запускаем приложение на ПК и при начальном этапе приложение предлагает нам показать путь к месту хранения кодов, имя клиента и пароль, с которыми мы будем открывать сервис. При утере клиентского пароля, указываемого на этом этапе, криптоключ создается снова и с самого начала, поскольку этот пароль не восстанавливается.
  2. На втором шаге необходимо подтвердить пароль.
  3. В следующем окне проверяются параметры создаваемого ключа. Если все верно – нажимаем кнопку «Далее».
  4. Дальше появляется сообщение о вводе случайных чисел. Введенные в строку данные запоминать не нужно. Завершаем работу кнопкой “Установить”.

После создания можно нажать кнопку «Готово» и завершить работу с криптоключами. Теперь мы скидываем документ е-ключа для регистрации на электронный адрес: quik@vtb24.ru, но для безопасности файл с названием sekring.txk не присылается. В письме прописываются полные данные владельца, номер соглашения, указанный в извещении, п.2, и файл pubring.txk.

Ждем ответа банка, распечатываем с ответного письма заявления и ставим подписи в любом офисе ВТБ в присутствии банковского специалиста.

Установка ИТС Quik

Создание ключа

Создание ключа сводка параметров

Ввод случайных битов

Если клиент ВТБ забыл пароль секретного ключа?

К сожалению, перевыпуск или смена пароля к сертификату в онлайн-клиенте ВТБ невозможна. Для работы необходимо пересохранить сам документ, тогда и обновятся электронные ключи.

При появлении проблем в банк-клиенте ВТБ не все пользователи могут справиться с решением самостоятельно. И с такими случаями можно обратиться за консультацией по номеру горячей линии в техническую поддержку к операторам, назвать свои данные для авторизации и спокойно воспользоваться решениями специалистов.

Я работал над цифровой подписью и верификатором, используя Crypto ++. Я обнаружил следующую проблему: моя подписывающая сторона и верификатор хорошо работают с открытыми и закрытыми ключами, которые я сгенерировал программно, используя первый пример (сгенерируйте пару ключей RSA и сохраните ее) из этого вики. Но когда я использую другую пару тестовых ключей, которую мне предоставили для тестирования, у меня появляется следующая ошибка: «Ошибка декодирования BER» при попытке загрузить ключ для подписи. Я искал в Интернете, но не могу решить проблему. Вот мои занятия:

class DSUtility
{
protected:
DSUtility() = default;
template<typename KeyType, typename KeySourceType>
KeyType PrepareKey_(const std::string& key_source);
};

template<typename KeyType, typename KeySourceType>
KeyType DSUtility::PrepareKey_(const std::string& key_source)
{
CryptoPP::ByteQueue key_bytes;
KeySourceType(key_source.c_str(), true, new CryptoPP::Base64Decoder).TransferTo(key_bytes);
key_bytes.MessageEnd();
KeyType key;
key.Load(key_bytes); // FAILS WHEN TRYING TO SIGN WITH ANOTHER PRIVATE KEY
return key;
}class Signer : private DSUtility
{
public:
Signer(const std::string& private_key);

std::string Sign(const std::string& data);

private:
typedef CryptoPP::RSA::PrivateKey PrivateKey;
CryptoPP::RSASS<CryptoPP::PKCS1v15, CryptoPP::SHA256>::Signer signer_;
};Signer::Signer(const std::string& private_key) :
signer_(PrepareKey_<PrivateKey, CryptoPP::StringSource>(private_key))
{
}

std::string Signer::Sign(const std::string& data)
{
CryptoPP::SecByteBlock signature(signer_.SignatureLength());
signer_.SignMessage(CryptoPP::AutoSeededRandomPool(), (byte const*)data.c_str(), data.size(), signature);
return std::string(signature.begin(), signature.end());
}

один из моих ключей (который работает) выглядит так:

MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAILkZnFV77ckeZkepDk1fvsE
qli05im29PTZq0ayWZsSgis+tpzP2KpSigWimAfkOCF36Y1Zb9E8VcxBaRbEEH0ObQTQdOl0
z1Cf0mViD2dQgH+8ZucU2gKy0YDpjIJ6wZM55azNZBg1s5J9PuDyM+nMRh5RiJqEpaXSXzgV...

другой выглядит следующим образом:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDGwB5n/xMsDoqo+bGaws15FYGGjsJxCM2deHJZqV2QKfvkmStf
8HntPqaJ+mc9UA6ghN1uGndChg1PuHSNVaRU2x8fem/mFUhfOJaZcYich8JAy0nm
sJUOwoRqLfKjLWmqy0QZHXDDVw+sD5uq/oOvfFFjuYIcsskHQmGTfkdJrQIDAQAB...

0

Решение

Но когда я использую другую пару тестовых ключей, которую мне предоставили для тестирования, у меня появляется следующая ошибка: «Ошибка декодирования BER» при попытке загрузить ключ для подписи.

Трудно сказать, что происходит … Вы должны предоставить реальный тестовые ключи. Не стоит тратить время на то, чтобы попытаться раскодировать фальшивку с «…», потому что мы знаем, что она потерпит неудачу.

Я просто догадываюсь, но это может быть необработанный ключ (т. Е. Просто открытый или закрытый ключ без идентификатора), а не информация о ключе (т. Е. Внешняя последовательность и идентификатор с внутренним открытым или секретным ключом). Последний (ключевая информация) иногда называют subjectPublicKeyIdnfo когда это открытый ключ.

Возможно, вы захотите взглянуть на Ключи и форматы на Crypto ++ вики. Указанное вами руководство довольно старое и предназначено для исторических целей. Вот 3-х секундный тур:

  • Когда вы загружаете raw key, вызов BERDecode
  • Когда вы загружаете key info, вызов Load
  • Когда вы сохраняете raw key, вызов DEREecode
  • Когда вы сохраняете key info, вызов Save

template<typename KeyType, typename KeySourceType> KeyType
DSUtility::PrepareKey_(const std::string& key_source)
{
CryptoPP::ByteQueue key_bytes;
KeySourceType(key_source.c_str(), true, new CryptoPP::Base64Decoder).TransferTo(key_bytes);
key_bytes.MessageEnd();
KeyType key;
key.Load(key_bytes); // FAILS WHEN TRYING TO SIGN WITH ANOTHER PRIVATE KEY
return key;
}

Это может быть немного упрощено:

template<typename KeyType, typename KeySourceType> KeyType
DSUtility::PrepareKey_(const std::string& key_source)
{
ArraySource as((const byte*)key_source.data(), key_source.size(),
true, new Base64Decoder());
key.Load(as);
return key;
}

И если это raw key, Вы можете попробовать:

key.BERDecode(as);

«… другой выглядит следующим образом: -----BEGIN RSA PRIVATE KEY-----…»

Для ключей, закодированных PEM, см. PEM Pack на Crypto ++ вики.

Вот ссылка на вопрос переполнения стека, но он просто ссылается на вики-страницу Crypto ++ (в дополнение к другим ответам): Загрузить закодированный PEM закрытый ключ RSA в Crypto ++.


Не удалось при попытке подписать с другим частным ключом

Кроме того, «ошибка при попытке подписать другой закрытый ключ» отличается от «ошибка при попытке загрузить». Я пытался сосредоточиться на вопросе, который вы задали, поэтому это может быть не тот ответ, на который вы надеялись.

Потратив некоторое время на переполнение стека, вы можете устать от людей, которые ответят на вопрос, который, как они надеялись, будет скорее, чем вопрос, который на самом деле был задан. Я устал от этого очень быстро, поэтому я стараюсь сосредоточиться на ответе (по этой причине я цитирую все, что отвечаю, даже если это комментарий).

1

Другие решения

Других решений пока нет …

В соответствии с:

$ echo "30819D300D06092A864886F70D010101050003818B0030818702818100DD2CED773D6F9A
E4A63F2DAEEF9019C056D4A35F338764FAAE85EDCBFB13FC9E53F13CEFADEF58C65B501C3D2D13DC
DE65282B7781C45259065F991C4184E6E6DEDB3087472B4AC4BDD74FDF4D3C893257D68722326516
53A4882588C61C0F4FB096C5906F2F88E0480513A2B1BA6418869DB01C9D9A2FB4BECADE54658D55
2F020111" | xxd -r -p > key.ber

А потом:

$ dumpasn1 key.ber
  0 157: SEQUENCE {
  3  13:   SEQUENCE {
  5   9:     OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
 16   0:     NULL
       :     }
 18 139:   BIT STRING, encapsulates {
 22 135:     SEQUENCE {
 25 129:       INTEGER
       :         00 DD 2C ED 77 3D 6F 9A E4 A6 3F 2D AE EF 90 19
       :         C0 56 D4 A3 5F 33 87 64 FA AE 85 ED CB FB 13 FC
       :         9E 53 F1 3C EF AD EF 58 C6 5B 50 1C 3D 2D 13 DC
       :         DE 65 28 2B 77 81 C4 52 59 06 5F 99 1C 41 84 E6
       :         E6 DE DB 30 87 47 2B 4A C4 BD D7 4F DF 4D 3C 89
       :         32 57 D6 87 22 32 65 16 53 A4 88 25 88 C6 1C 0F
       :         4F B0 96 C5 90 6F 2F 88 E0 48 05 13 A2 B1 BA 64
       :         18 86 9D B0 1C 9D 9A 2F B4 BE CA DE 54 65 8D 55
       :         2F
157   1:       INTEGER 17
       :       }
       :     }
       :   }

У вас есть subjectPublicKeyInfo. Я считаю, что все, что вам нужно сделать, это вызвать Load, но предполагает, что у вас есть хорошо сформированный ключ:

RSASS<PSSR, SHA1>::Verifier pub;
pub.AccessKey().Load(pubFile);

Здесь вся программа:

$ cat test.cxx
#include "cryptlib.h"
#include "filters.h"
#include "pssr.h"
#include "sha.h"
#include "rsa.h"
#include "hex.h"

#include <string>
#include <iostream>

int main()
{
    using namespace CryptoPP;
    std::string encodedKey = "30819D300D06092A864886F70D010101050003818B00"
        "30818702818100DD2CED773D6F9AE4A63F2DAEEF9019C056D4A35F338764FAAE8"
        "5EDCBFB13FC9E53F13CEFADEF58C65B501C3D2D13DCDE65282B7781C45259065F"
        "991C4184E6E6DEDB3087472B4AC4BDD74FDF4D3C893257D6872232651653A4882"
        "588C61C0F4FB096C5906F2F88E0480513A2B1BA6418869DB01C9D9A2FB4BECADE"
        "54658D552F020111";

    StringSource hexKey(encodedKey, true, new HexDecoder);

    RSASS<PSSR, SHA1>::Verifier pub;
    pub.AccessKey().Load(hexKey);

    std::cout << "n: " << std::hex << pub.AccessKey().GetModulus() << std::endl;
    std::cout << "e: " << std::dec << pub.AccessKey().GetPublicExponent() << std::endl;

    return 0;
}

И наконец:

$ ./test.exe
n: dd2ced773d6f9ae4a63f2daeef9019c056d4a35f338764faae85edcbfb13fc9e53f13cefadef5
8c65b501c3d2d13dcde65282b7781c45259065f991c4184e6e6dedb3087472b4ac4bdd74fdf4d3c8
93257d6872232651653a4882588c61c0f4fb096c5906f2f88e0480513a2b1ba6418869db01c9d9a2
fb4becade54658d552fh
e: 17.

Это может быть слишком строгим:

if (signatureFile.MaxRetrievable() != pub.SignatureLength()) {
    return false;
}

Фактическая длина сигнатуры может быть чуть короче, чем MaxSignatureLength(), в зависимости от того, сколько из них приводит к увеличению числа экспоненциальных чисел.

Вы можете рассмотреть один из примеров wiki. Например, из RSA Signature Schemes:

...

// Signing      
RSASS<PSSR, SHA1>::Signer signer(privateKey);
RSASS<PSSR, SHA1>::Verifier verifier(publicKey);

// Setup
byte message[] = "RSA-PSSR Test";
size_t messageLen = sizeof(message);      

////////////////////////////////////////////////
// Sign and Encode
SecByteBlock signature(signer.MaxSignatureLength(messageLen));

size_t signatureLen = signer.SignMessageWithRecovery(rng, message, messageLen, NULL, 0, signature);

// Resize now we know the true size of the signature
signature.resize(signatureLen);

////////////////////////////////////////////////
// Verify and Recover
SecByteBlock recovered(
    verifier.MaxRecoverableLengthFromSignatureLength(signatureLen)
);

DecodingResult result = verifier.RecoverMessage(recovered, NULL, 0, signature, signatureLen);

if (!result.isValidCoding) {
    throw Exception(Exception::OTHER_ERROR, "Invalid Signature");
}

////////////////////////////////////////////////
// Use recovered message
//  MaxSignatureLength is likely larger than messageLength
recovered.resize(result.messageLength);
...

Offline

xvector

 


#1
Оставлено
:

5 мая 2015 г. 11:03:55(UTC)

xvector

Статус: Новичок

Группы: Участники

Зарегистрирован: 24.04.2015(UTC)
Сообщений: 6
Российская Федерация
Откуда: none

Приветствую!

Не могу понять почему после кодирования при помощи Asn1BerEncodeBuffer не получается декодировать при помощи Asn1BerDecodeBuffer.
Использую CryptoPro 2.0.38.

Пробовал кодировать ContentInfo с EncryptedData, потом передалал на EnvelopedData (с разными OID), как в примере показано.

В результате вот такой код дает ошибку:

Код:


ContentInfo contentInfo = ... (ContentInfo с EncryptedData или EnvelopedData)

final Asn1BerEncodeBuffer encodeBuffer = new Asn1BerEncodeBuffer();
contentInfo.encode(encodeBuffer);

byte[] encoded = encodeBuffer.getMsgCopy();

final Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(encoded);
final ContentInfo ci = new ContentInfo();
ci.decode(decodeBuffer); // здесь ошибка

Ошибка такая:

Код:


com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [UNIVERSAL 5]
        at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
        at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
        at ru.CryptoPro.JCP.ASN.Gost28147_89_EncryptionSyntax.Gost28147_89_Parameters.decode(Gost28147_89_Parameters.java:55)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:162)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
        at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
        at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
        at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
        at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
        at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
com.objsys.asn1j.runtime.Asn1Exception: table constraint: parameters decode failed
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:166)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
        at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
        at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
        at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
        at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
        at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)


Вверх


Offline

xvector

 


#2
Оставлено
:

6 мая 2015 г. 13:47:33(UTC)

xvector

Статус: Новичок

Группы: Участники

Зарегистрирован: 24.04.2015(UTC)
Сообщений: 6
Российская Федерация
Откуда: none

В общем, разобрался с EncryptedData. Проблема была с тем, что в encryptedData.encryptedContentInfo.contentEncryptionAlgorithm создавался без параметров, т.е. передавался new Asn1Null():

Код:


encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), new Asn1Null());

После вот таких изменений стало работать:

Код:


final Gost28147_89_Parameters params = new Gost28147_89_Parameters();
params.iv = new Gost28147_89_IV(iv);
params.encryptionParamSet = new Gost28147_89_ParamSet(AlgIdSpec.getDefaultCryptParams().getOID().value);

encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), params);

Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг — нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит).

Отредактировано пользователем 6 мая 2015 г. 13:49:38(UTC)
 | Причина: уточнение


Вверх


Offline

Евгений Афанасьев

 


#3
Оставлено
:

6 мая 2015 г. 14:23:26(UTC)

Евгений Афанасьев

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,782
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 655 раз в 618 постах

Автор: xvector Перейти к цитате

Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг — нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит).

Код сгенерирован по asn1 структурам, описанным в RFC. Он генерируется специализированным ПО и не документируется. По названиям большинства структур можно найти описание в тех же RFC документах.

Тех. поддержка
База знаний
Логирование JCP
Логирование JTLS
Тест JCP и сбор диаг. информации
Скачать JCP, JCSP и JTLS
Скачать Android CSP + SDK


Вверх

Пользователи, просматривающие эту тему

Guest (2)

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

<object type="application/x-rutoken-pki" id="plugin"></object>
<script type="text/javascript">
// получение объекта плагина
var plugin = document.getElementById("plugin");
if (!plugin.valid) {
    alert("Couldn't load plugin");
}
// использование синхронного интерфейса
var devices = Array();
try {
    devices = plugin.enumerateDevices();
}
catch (error) {
    console.log(error);
}
</script>

Class: CryptoPlugin 

Главный класс плагина. Реализует всю функциональность плагина.

Свойства

errorCodes

    Объект с константами ошибок.

       Общие ошибки

errorCodes.UNKNOWN_ERROR: «Неизвестная ошибка»;

errorCodes.BAD_PARAMS: «Неправильные параметры»;

errorCodes.DEVICE_NOT_FOUND: «Устройство не найдено»;

errorCodes.CERTIFICATE_CATEGORY_BAD: «Недопустимый тип сертификата»;

errorCodes.CERTIFICATE_EXISTS: «Сертификат уже существует на устройстве»;

errorCodes.PKCS11_LOAD_FAILED: «Не удалось загрузить PKCS#11 библиотеку»;

errorCodes.NOT_ENOUGH_MEMORY: «Недостаточно памяти»;

errorCodes.PIN_LENGTH_INVALID: «Некорректная длина PIN-кода»;

errorCodes.PIN_INCORRECT: «Некорректный PIN-код»;

errorCodes.PIN_LOCKED: «PIN-код заблокирован»;

errorCodes.PIN_CHANGED: «PIN-код был изменен»;

errorCodes.SESSION_INVALID: «Состояние токена изменилось»;

errorCodes.USER_NOT_LOGGED_IN: «Выполните вход на устройство»;

errorCodes.KEY_NOT_FOUND: «Соответствующая сертификату ключевая пара не найдена»;

errorCodes.KEY_ID_NOT_UNIQUE: «Идентификатор ключевой пары не уникален»;

errorCodes.CERTIFICATE_NOT_FOUND: «Сертификат не найден»;

errorCodes.CERTIFICATE_HASH_NOT_UNIQUE: «Хэш сертификата не уникален»;

errorCodes.TOKEN_INVALID: «Ошибка чтения/записи устройства. Возможно, устройство было извлечено»;

errorCodes.BASE64_DECODE_FAILED: «Ошибка декодирования данных из BASE64»;

errorCodes.PEM_ERROR: «Ошибка разбора PEM»;

errorCodes.ASN1_ERROR: «Ошибка декодирования ASN1 структуры»;

errorCodes.WRONG_KEY_TYPE: «Неправильный тип ключа»;

errorCodes.NO_CA_CERTIFICATES_FOUND: «Сертификат УЦ не найден».

Ошибки проверки подписи

.      errorCodes.X509_UNABLE_TO_GET_ISSUER_CERT: «Невозможно получить сертификат подписанта»;

       errorCodes.X509_UNABLE_TO_GET_CRL: «Невозможно получить CRL»;

       errorCodes.X509_UNABLE_TO_DECRYPT_CERT_SIGNATURE: «Невозможно расшифровать подпись сертификата»;

       errorCodes.X509_UNABLE_TO_DECRYPT_CRL_SIGNATURE: «Невозможно расшифровать подпись CRL»;

       errorCodes.X509_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: «Невозможно раскодировать открытый ключ эмитента»;

       errorCodes.X509_CERT_SIGNATURE_FAILURE: «Неверная подпись сертификата»;

       errorCodes.X509_CRL_SIGNATURE_FAILURE: «Неверная подпись CRL»;

       errorCodes.X509_CERT_NOT_YET_VALID: «Срок действия сертификата еще не начался»;

       errorCodes.X509_CRL_NOT_YET_VALID: «Срок действия CRL еще не начался»;

       errorCodes.X509_CERT_HAS_EXPIRED: «Срок действия сертификата истек»;

       errorCodes.X509_CRL_HAS_EXPIRED: «Срок действия CRL истек»;

       errorCodes.X509_ERROR_IN_CERT_NOT_BEFORE_FIELD: «Некорректные данные в поле «notBefore» у сертификата»;

       errorCodes.X509_ERROR_IN_CERT_NOT_AFTER_FIELD: «Некорректные данные в поле «notAfter» у сертификата»;

       errorCodes.X509_ERROR_IN_CRL_LAST_UPDATE_FIELD: «Некорректные данные в поле «lastUpdate» у CRL»;

       errorCodes.X509_ERROR_IN_CRL_NEXT_UPDATE_FIELD: «Некорректные данные в поле «nextUpdate» у CRL»;

       errorCodes.X509_OUT_OF_MEM: «Не хватает памяти»;

       errorCodes.X509_DEPTH_ZERO_SELF_SIGNED_CERT: «Недоверенный самоподписанный сертификат»;

       errorCodes.X509_SELF_SIGNED_CERT_IN_CHAIN: «В цепочке обнаружен недоверенный самоподписанный сертификат»;

       errorCodes.X509_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: «Невозможно получить локальный сертификат подписанта»;

       errorCodes.X509_UNABLE_TO_VERIFY_LEAF_SIGNATURE: «Невозможно проверить первый сертификат»;

       errorCodes.X509_CERT_CHAIN_TOO_LONG: «Слишком длинная цепочка сертификатов»;

       errorCodes.X509_CERT_REVOKED: «Сертификат отозван»;

       errorCodes.X509_INVALID_CA: «Неверный корневой сертификат»;

       errorCodes.X509_INVALID_NON_CA: «Неверный некорневой сертфикат, помеченный как корневой»;

       errorCodes.X509_PATH_LENGTH_EXCEEDED: «Превышена длина пути»;

       errorCodes.X509_PROXY_PATH_LENGTH_EXCEEDED: «Превышено количество промежуточных сертификатов»;

       errorCodes.X509_PROXY_CERTIFICATES_NOT_ALLOWED: «Промежуточные сертификаты недопустимы»;

       errorCodes.X509_INVALID_PURPOSE: «Неподдерживаемое назначение сертификата»;

       errorCodes.X509_CERT_UNTRUSTED: «Недоверенный сертификат»;

       errorCodes.X509_CERT_REJECTED: «Сертификат отклонен»;

       errorCodes.X509_APPLICATION_VERIFICATION: «Ошибка проверки приложения»;

       errorCodes.X509_SUBJECT_ISSUER_MISMATCH: «Несовпадения субьекта и эмитента»;

       errorCodes.X509_AKID_SKID_MISMATCH: «Несовпадение идентификатора ключа у субьекта и доверенного центра»;

       errorCodes.X509_AKID_ISSUER_SERIAL_MISMATCH: «Несовпадение серийного номера субьекта и доверенного центра»;

       errorCodes.X509_KEYUSAGE_NO_CERTSIGN: «Ключ не может быть использован для подписи сертификатов»;

       errorCodes.X509_UNABLE_TO_GET_CRL_ISSUER: «Невозможно получить CRL подписанта»;

       errorCodes.X509_UNHANDLED_CRITICAL_EXTENSION: «Неподдерживаемое расширение»;

       errorCodes.X509_KEYUSAGE_NO_CRL_SIGN: «Ключ не может быть использован для подписи CRL»;

       errorCodes.X509_KEYUSAGE_NO_DIGITAL_SIGNATURE: «Ключ не может быть использован для цифровой подписи»;

       errorCodes.X509_UNHANDLED_CRITICAL_CRL_EXTENSION: «Неподдерживаемое расширение CRL»;

       errorCodes.X509_INVALID_EXTENSION: «Неверное или некорректное расширение сертификата»;

       errorCodes.X509_INVALID_POLICY_EXTENSION: «Неверное или некорректное расширение политик сертификата»;

       errorCodes.X509_NO_EXPLICIT_POLICY: «Явные политики отсутствуют»;

       errorCodes.X509_DIFFERENT_CRL_SCOPE: «Другая область CRL»;

       errorCodes.X509_UNSUPPORTED_EXTENSION_FEATURE: «Неподдерживаемое расширение возможностей»;

       errorCodes.X509_UNNESTED_RESOURCE: «RFC 3779 неправильное наследование ресурсов»;

       errorCodes.X509_PERMITTED_VIOLATION: «Неправильная структура сертификата»;

       errorCodes.X509_EXCLUDED_VIOLATION: «Неправильная структура сертификата»;

       errorCodes.X509_SUBTREE_MINMAX: «Неправильная структура сертификата»;

       errorCodes.X509_UNSUPPORTED_CONSTRAINT_TYPE: «Неправильная структура сертификата»;

       errorCodes.X509_UNSUPPORTED_CONSTRAINT_SYNTAX: «Неправильная структура сертификата»;

       errorCodes.X509_UNSUPPORTED_NAME_SYNTAX: «Неправильная структура сертификата»;

       errorCodes.X509_CRL_PATH_VALIDATION_ERROR: «Неправильный путь CRL».

valid {bool}

    Правильно созданный объект всегда возвращает true

version {string}

    Версия плагина в формате 1.2.3.4

Методы

Рутокен Плагин API(deviceId, certId, salt, resultCallback, errorCallback) → {string}

Аутентификация по сертификату.

Для выполнения этой функции требуется авторизоваться на устройстве.

cmsDecrypt(deviceId, keyId, cmsData, options, resultCallback, errorCallback) → {string}

Расшифрование данных в формате CMS.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certId, recipientCert, data, options, resultCallback, errorCallback) → {string}

Шифрование данных в формате CMS.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyId, subject, extensions, includeSubjSignTool, resultCallback, errorCallback) → {string}

Формирование самоподписанного запроса в формате PKCS#10.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyLabel, data, resultCallback, errorCallback) → {string}

Расшифрование данных в формате CMS.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certId, resultCallback, errorCallback)

Удаление сертификата из токена.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyId, resultCallback, errorCallback)

Удаление ключевой пары.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, hashType, data, options, resultCallback, errorCallback)

Вычисление хеш-значения по заданному алгоритму от данных.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyLabel, data, resultCallback, errorCallback) → {string}

Шифрование данных на симметричном ключе.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, category, resultCallback, errorCallback) → {string[]}

Получение массива с идентификаторами сертификатов.

Рутокен Плагин API(resultCallback, errorCallback) → {number[]}

Получение идентификаторов доступных устройств

 Рутокен Плагин API(deviceId, marker, resultCallback, errorCallback) → {string[]}

Получение массива с идентификаторами секретных ключей в HEX .

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, params, marker, specialKey, resultCallback, errorCallback) → {string}

Генерация ключевой пары ГОСТ Р 34.10-2001 на «борту» токена.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certId, resultCallback, errorCallback) → {string}

Получение тела сертификата в PEM.

Рутокен Плагин API(deviceId, option, resultCallback, errorCallback) → {object}

Получение информации об устройстве.

Рутокен Плагин API(deviceId, resultCallback, errorCallback, deviceId) → {string}

Получение метки устройства

getDeviceModel(deviceId, resultCallback, errorCallback) → {string}

Получение строки с моделью устройства, понятной для человека. Внимание: возвращаемая строка может меняться в будущем.

Рутокен Плагин API(deviceId, resultCallback, errorCallback) → {number}

Получение константы, обозначающей тип устройства.

Рутокен Плагин API(deviceId, keyId, options, resultCallback, errorCallback) → {object}

Получение журнала операций на устройстве и его подписи, сформированной на соответствующем ключе. Если с момента подключения устройства никаких операций не производилось будет возвращен null.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certId, resultCallback, errorCallback) → {string}

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

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyId, resultCallback, errorCallback) → {string}

Получение метки секретного ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, keyId, options, resultCallback, errorCallback) → {string}

 Получение значения открытого ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certificate, category, resultCallback, errorCallback) → {string}

Импорт сертификата на токен.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, pin, resultCallback, errorCallback)

Авторизация на устройстве.

Рутокен Плагин API(deviceId, resultCallback, errorCallback)

Закрытие сессии с устройством.

Рутокен Плагин API(deviceId, certId, resultCallback, errorCallback) → {object}

Получение ассоциативного массива с разобранными полями из сертификата.

Рутокен Плагин API(text, resultCallback, errorCallback) → {object}

Получение ассоциативного массива с разобранными полями из сертификата.

Рутокен Плагин API(deviceId, keyId, data, options, resultCallback, errorCallback) → {string}

Вычисление «сырой» подписи.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, resultCallback, errorCallback) 

Удаление закешированного PIN-кода из файла. 

Рутокен Плагин API(deviceId, resultCallback, errorCallback) 

Сохранение PIN-кода в файл для автоматической аутентификации.

Рутокен Плагин API(deviceId, keyId, label, resultCallback, errorCallback)

Установка метки секретного ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, certId, data, isBase64, object, resultCallback, options) → {string}

Вычисление цифровой подписи в формате CMS. 

Для выполнения этой функции требуется авторизоваться на устройстве.

Рутокен Плагин API(deviceId, cms, options, resultCallback, errorCallback) → {bool}

Проверка цифровой подписи.

Подробнее

authenticate(deviceId, certId, salt, resultCallback, errorCallback) → {string}

Аутентификация по сертификату.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата

3

salt string Аутентификационные данные

4

resultCallback function Функция обратного вызова для случая успешного выполнения

5

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Строка для аутентификации


  cmsDecrypt(deviceId, keyId, cmsData, options, resultCallback, errorCallback) → {string}

Расшифрование данных в формате CMS. Аргумент options принимает параметры расшифрования, пока зарезервирован для будущего использования.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:

  Name Type Description
1 deviceId number Идентификатор устройства
2 keyId string Идентификатор ключа для расшифровыания
3 cmsData string CMS-сообщение, содержащие зашифрованные данные
4 options object Массив, содержащий параметры расшифрования — объекты вида {параметр:значение} (зарезервирован для будущего использования)
5 resultCallback function Функция обратного вызова для случая успешного выполнения
6 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Расшифрованные данные


cmsEncrypt(deviceId, certId, recipientCert, data, options, resultCallback, errorCallback) → {string}

Шифрование данных в формате CMS.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:

  Name Type Description
1 deviceId number Идентификатор устройства
2 certId string Идентификатор сертификата, зарезервированно для будущего использования
3 recipientCert string Тело сертификата сервера
4 data string Зашифровываемые данные (текстовая строка или base64-encoded бинарные данные)
5 options object

Аргумент options принимает параметры шифрования. Доступны следующие опции (в скобках указано значение по умолчанию):

    • base64:bool (false) — закодированы ли переданные данные в base64
    • useHardwareEncryption:bool (false) — производить шифрование на устройстве
6 resultCallback function Функция обратного вызова для случая успешного выполнения
7 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Зашифрованные данные в формате CMS


createPkcs10(deviceId, keyId, subject, extensions, includeSubjSignTool, resultCallback, errorCallback) → {string}

Формирование самоподписанного запроса PKCS#10.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyId string Идентификатор ключа

3

subject object[] Массив, содержащий объекты вида: {rdn: «commonName», value: «значение»}

4

extensions object Ассоциативный массив, содержащий массивы расширений: {keyUsage: [«digitalSignature»,…], extKeyUsage: [«oid», «longName» ]}

5

includeSubjSignTool boolean Флаг, включать или нет в запрос расширение SubjectSignTool

6

resultCallback function Функция обратного вызова для случая успешного выполнения

7

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Запрос PKCS#10 в PEM-формате.

Пример:
*        var subject = [
          {
              rdn:    "countryName",
              value:  "RU"
          }
          ,{
              rdn:    "stateOrProvinceName",
              value:  "moscow"
          }
          ,{
              rdn:    "localityName",
              value:  "locality"
          }
          ,{
              rdn:    "streetAddress",
              value:  "street"
          }
          ,{
              rdn:    "organizationName",
              value:  "Aktiv"
          }
          ,{
              rdn:    "organizationalUnitName",
              value:  "IT"
          }
          ,{
              rdn:    "title",
              value:  "должность"
          }
          ,{
              rdn:    "commonName",
              value:  "Фамилия Имя Очество"
          }
          ,{
              rdn:    "postalAddress",
              value:  "postal address"
          }
          ,{
              rdn:    "pseudonym",
              value:  "pseudonymus"
          }
          ,{
              rdn:    "surname",
              value:  "surname"
          }
          ,{
              rdn:    "givenName",
              value:  "given name"
          }
          ,{
              rdn:    "emailAddress",
              value:  "example@example.com"
          }
      ];
      var keyUsageVal = [
          "digitalSignature"
          ,"nonRepudiation"
          ,"keyEncipherment"
          ,"dataEncipherment"
          ,"keyAgreement"
          ,"keyCertSign"
          ,"cRLSign"
          ,"encipherOnly"
          ,"decipherOnly"
      ];
      var extKeyUsageVal = [
          "emailProtection"
          ,"clientAuth"
          ,"serverAuth"
          ,"codeSigning"
          ,"timeStamping"
          ,"msCodeInd"
          ,"msCodeCom"
          ,"msCTLSign"
          ,"1.3.6.1.5.5.7.3.9" // OSCP
          ,"1.2.643.2.2.34.6" // CryptoPro RA user
           // ,"anyExtendedKeyUsage"
 
      ];
      var extensions = {
          "keyUsage":     keyUsageVal,
          "extKeyUsage":  extKeyUsageVal
      };
      plugin.createPkcs10(deviceID, keyID, subject, extensions, includeSubjectSignToolExt,
              this.printResult, this.printError);
  }

decrypt(deviceId, keyLabel, data, resultCallback, errorCallback) → {string}

Расшифрование данных на симметричном ключе.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyLabel string Метка ключа для шифрования (если такого ключа нет, будет возвращена ошибка)

3

data string Расшифровываемые данные

4

resultCallback function Функция обратного вызова для случая успешного выполнения

5

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Расшифрованные данные.


deleteCertificate(deviceId, certId, resultCallback, errorCallback)

Удаление сертификата из токена.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата, полученный в результате вызова enumerateCertificates

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки void

deleteKeyPair(deviceId, keyId, resultCallback, errorCallback)

Удаление ключевой пары

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyId string Идентификатор секретного ключа из ключевой пары

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки void

digest(deviceId, hashType, data, options, resultCallback, errorCallback) → {string}

        Вычисление хеш-значения по заданному алгоритму от данных

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 hashType string Идентификатор алгоритма хеширования
3 data string данные для хеширования
4 options object

Массив, содержащий параметры хеширования — объекты вида {параметр:true/false}.

  • useHardwareHash:bool (false) — производить аппаратное хеширование данных 
  • base64:bool (false) — перекодировать ли данные из base64
5 resultCallback function Функция обратного вызова для случая успешного выполнения
6 errorCallback function Функция обратного вызова для случая возникновения ошибки void 
Возвращает:

Хеш-значение в hex


encrypt(deviceId, keyLabel, data, resultCallback, errorCallback) → {string}

Шифрование данных.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyLabel string Метка ключа для шифрования (если такого ключа нет, он будет сгенерирован)

3

data string Зашифровываемые данные

4

resultCallback function Функция обратного вызова для случая успешного выполнения

5

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Зашифрованные данные


enumerateCertificates(deviceId, category, resultCallback, errorCallback) → {string[]}

Получение массива с идентификаторами сертификатов.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

category number Тип сертификата: «user», «other» или «CA»

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Массив строк с идентификаторами сертификатов


enumerateDevices(resultCallback, errorCallback) → {number[]}

Получение идентификаторов доступных устройств

Параметры:
  Name Type Description

1

resultCallback function Функция обратного вызова для случая успешного выполнения

2

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Список идентификаторов подключенных устройств


enumerateKeys(deviceId, marker, resultCallback, errorCallback) → {string[]}

Получение массива с идентификаторами секретных ключей в HEX.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

marker string Идентификатор группы ключей, «» — все ключи

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Массив строк с идентификаторами закрытых ключей


generateKeyPair(deviceId, params, marker, options, resultCallback, errorCallback) → {string}

Генерация ключевой пары ГОСТ Р 34.10-2001 на «борту» токена.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

params string Параметры ключа

3

marker string Идентификатор группы ключей

4

options object

Доступны следующие опции:

  • keyType:enum(KEY_TYPE_COMMON) — тип ключевой пары. Доступные варианты: 
    • KEY_TYPE_COMMON — обычная ключевая пара; 
    • KEY_TYPE_JOURNAL — журнальная ключевая пара (может быть использована только для подписи журнала)

Для ключевой пары типа KEY_TYPE_COMMON так же доступны следующие атрибуты:

  • needPin:bool(false) — если ключевая пара создана на PINPad 2, для каждого ее использования потребуется ввести PIN на устройстве;
  • needConfirm:bool(false) — если ключевая пара создана на PINPad 2, для каждого ее использования потребуется подтверждение на устройстве.

5

resultCallback function Функция обратного вызова для случая успешного выполнения

6

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

ID ключа в HEX


getCertificate(deviceId, certId, resultCallback, errorCallback) → {string}

Получение тела сертификата в PEM.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Строку, содержащую сертификат в PEM-формате.


  getDeviceInfo(deviceId, option, resultCallback, errorCallback) → {object}

Получение информации об устройстве.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 option number

Тип запрашиваемой информации:

  • TOKEN_INFO_MODEL — модель устройства;
  • TOKEN_INFO_READER — название ридера, через который подключено устройство;
  • TOKEN_INFO_LABEL — метка устройства;
  • TOKEN_INFO_DEVICE_TYPE — тип устройства;
  • TOKEN_INFO_SERIAL — серийный номер устройства;
  • TOKEN_INFO_IS_LOGGED_IN — произведена ли авторизация на устройстве;
  • TOKEN_INFO_FORMATS — форматы входных данных, обработка которых доступна на устройстве;
  • TOKEN_INFO_FEATURES — аппаратные возможности устройства.
3 resultCallback function Функция обратного вызова для случая успешного выполнения
4 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Текстовая строка для метки и серийного номера, число для типа устройства.

В случае передачи в качестве параметра TOKEN_INFO_FORMATS возвращается список форматов, которые поддерживает устройство, в виде массива констант:

  • DEVICE_DATA_FORMAT_PLAIN — произвольные данные
  • DEVICE_DATA_FORMAT_RAW — неформатированные данные для отображения на PINPad 2
  • DEVICE_DATA_FORMAT_PINPAD2 — данные в формате PINPADFILE для отображения на PINPad 2
  • DEVICE_DATA_FORMAT_XML — данные в XML формате для отображения на PINPad 2
  • DEVICE_DATA_FORMAT_SAFETOUCH — данные для отображения на Safetouch

В случае передачи в качестве параметра TOKEN_INFO_FEATURES возвращается ассоциативный массив, определяющий возможности устройства, со следующими полями:

  • journal:bool — поддержка журанала операций
  • pin2:bool — поддержка ввода PIN2 на устройстве
  • visualization:bool — поддержка генерации ключей, требующих визуализации данных на устройстве 

В случае передачи в качестве параметра TOKEN_INFO_DEVICE_TYPE возвращает тип устройства в виде числовой константы. Возможные типы устройства:

  • TOKEN_TYPE_UNKNOWN — неизвестное устройство;
  • TOKEN_TYPE_RUTOKEN_ECP — Рутокен ЭЦП;
  • TOKEN_TYPE_RUTOKEN_WEB — Рутокен WEB;
  • TOKEN_TYPE_RUTOKEN_PINPAD_2 — Рутокен PINPad;
  • TOKEN_TYPE_KAZTOKEN — Казтокен.

getDeviceLabel(deviceId, resultCallback, errorCallback) → {string}

Получение метки устройства

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 resultCallback function Функция обратного вызова для случая успешного выполнения
3 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Метка устройства


getDeviceModel(deviceId, resultCallback, errorCallback) → {string}

Получение строки с моделью устройства, понятной для человека. Внимание: возвращаемая строка может меняться в будущем.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

resultCallback function Функция обратного вызова для случая успешного выполнения

3

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Тип устройства в виде человеко-понятной строки


getDeviceType(deviceId, resultCallback, errorCallback) → {void}

Получение константы, обозначающей тип устройства.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

resultCallback function Функция обратного вызова для случая успешного выполнения

3

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Тип устройства в виде числовой константы. Возможные типы устройства:

  • TOKEN_TYPE_UNKNOWN — неизвестное устройство;
  • TOKEN_TYPE_RUTOKEN_ECP — Рутокен ЭЦП;
  • TOKEN_TYPE_RUTOKEN_WEB — Рутокен WEB;
  • TOKEN_TYPE_RUTOKEN_PINPAD_2 — Рутокен PINPad;
  • TOKEN_TYPE_KAZTOKEN — Казтокен.


  getJournal(deviceId, keyId, options resultCallback, errorCallback) → {object}

Получение журнала операций на устройстве и его подписи, сформированной на соответствующем ключе. Если с момента подключения устройства никаких операций не производилось будет возвращен null

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 keyId string Идентификатор ключа
3 options object Зарезервировано для будущего использования
4 resultCallback function Функция обратного вызова для случая успешного выполнения
6 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Ассоциативный массив с полями journal и signature



getKeyByCertificate
(deviceId, certId, resultCallback, errorCallback) → {string}

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

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Идентификатор ключа


getKeyLabel(deviceId, keyId, resultCallback, errorCallback) → {string}

Получение метки секретного ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyId string Идентификатор ключа

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Метка закрытого ключа.

getPublicKeyValue(deviceId, keyId, options, resultCallback, errorCallback) → {string}

Получение значения открытого ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 keyId string Идентификатор ключа
3 options object Массив, содержащий дополнительные параметры — объекты вида {параметр:значение} (зарезервирован для будущего использования)
4 resultCallback function Функция обратного вызова для случая успешного выполнения
5 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Открытый ключ (hex-строка)

importCertificate(deviceId, certificate, category, resultCallback, errorCallback) → {string}

Импорт сертификата на токен.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certificate string Тело сертификата в формате BASE64

3

category number Тип сертификата: «user», «other» или «CA»

4

resultCallback function Функция обратного вызова для случая успешного выполнения

5

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Идентификатор сертификата


login(deviceId, pin, resultCallback, errorCallback)

Авторизация на устройстве

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

pin string PIN-код доступа к устройству

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки void

logout(deviceId, resultCallback, errorCallback)

Закрытие сессии с устройством

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

resultCallback function Функция обратного вызова для случая успешного выполнения

3

errorCallback function Функция обратного вызова для случая возникновения ошибки void

parseCertificate(deviceId, certId, resultCallback, errorCallback) → {object}

Получение ассоциативного массива с разобранными полями из сертификата.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата, полученный в результате вызова enumerateCertificates

3

resultCallback function Функция обратного вызова для случая успешного выполнения

4

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Ассоциативный массив объектов


parseCertificateFromString(text, resultCallback, errorCallback) → {object}

Получение ассоциативного массива с разобранными полями из сертификата.

Параметры:
  Name Type Description

1

text string Тело сертификата в BASE64

2

resultCallback function Функция обратного вызова для случая успешного выполнения

3

errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Ассоциативный массив объектов

rawSign(deviceId, keyId, data, options, resultCallback, errorCallback) → {string}

Подпись на ключе. Аргумент options принимает параметры подписи.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 keyId string Идентификатор ключа
3 data string Подписываемый хеш (hex-строка) или текстовые данные
4 options object

Массив, содержащий параметры подписи — объекты вида {параметр:true/false}.

Доступны следующие параметры:

  • computeHash:bool (false) — производить хеширование переданных данных
  • useHardwareHash:bool (false) — производить аппаратное хеширование данных (только если computeHash = true)
  • invisible:bool (false) — производить подпись данных в режиме без отображения на PINPad 2 
2 resultCallback function Функция обратного вызова для случая успешного выполнения
3 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

Электронно-цифровая подпись в hex-формате.


removePin(deviceId, resultCallback, errorCallback) 

Удаление закешированного PIN-кода из файла.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 resultCallback function Функция обратного вызова для случая успешного выполнения
3 errorCallback function Функция обратного вызова для случая возникновения ошибкиboolean

  savePin(deviceId, resultCallback, errorCallback) 

Сохранение PIN-кода в файл для автоматической аутентификации.

 Параметры:

  Name Type Description
1 deviceId number Идентификатор устройства
2 resultCallback function Функция обратного вызова для случая успешного выполнения
3 errorCallback function Функция обратного вызова для случая возникновения ошибкиvoid

setKeyLabel(deviceId, keyId, label, resultCallback, errorCallback)

Установка метки секретного ключа.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

keyId string Идентификатор ключа

3

label string Новая метка закрытого ключа

4

resultCallback function Функция обратного вызова для случая успешного выполнения

5

errorCallback function Функция обратного вызова для случая возникновения ошибки void

sign(deviceId, certId, data, isBase64, object, resultCallback, options) → {string}

Вычисление цифровой подписи.

Для выполнения этой функции требуется авторизоваться на устройстве.

Параметры:
  Name Type Description

1

deviceId number Идентификатор устройства

2

certId string Идентификатор сертификата

3

data string Подписываемые данные (текстовая строка или base64-encoded бинарные данные)

4

isBase64 boolean Флаг, данные передаются в кодировке base64 или нет

5

object   options Параметры подписи — объект {параметр:true/false} (по умолчанию все значение false) доступны следующие параметры: detached — генерировать отсоединенную подпись addUserCertificate — включить в подпись сертификат пользователя addSignTime — включить в подпись время подписи useHardwareHash — производить хеширование на «борту» токена

6

resultCallback function Функция обратного вызова для случая успешного выполнения

7

options string[] undefined
Возвращает:

Электронную подпись в формате CMS в base64


verify (deviceId, cms, options, resultCallback, errorCallback) → {bool}

Проверка цифровой подписи.

Параметры:
  Name Type Description
1 deviceId number Идентификатор устройства
2 cms string Контейнер с цифровой подписью
3 options object

Аргумент options принимает параметры проверки подписи. Доступны следующие опции (в скобках указано значение по умолчанию):

    • data:string (null) — подписанные данные, только в случае detached подписи;
    • base64:bool (false) — указывает, закодированы ли даные, переданные в data в base64. Будет произведено декодирование данных;
    • certificates:string[] (null) — набор сертификатов, на которых необходимо проверять подпись. При этом сертификаты содержащиеся в cms будут проигнорированы;
    • CA:string[] (null) — список дополнительных корневых сертификатов для проверки сертификата. Кроме них берутся корневые сертификаты с устройства;
    • CRL:string[] (null) — набор списков отзыва сертификатов. Каждый список отзыва в PEM.
    • useHardwareHash:bool (false) — производить хеширование на устройстве;
    • verifyCertificate:bool (true) — проверять ли сертификат пользователя (выстраивать цепочку до корневого);
4 resultCallback function Функция обратного вызова для случая успешного выполнения
5 errorCallback function Функция обратного вызова для случая возникновения ошибки
Возвращает:

true — подпись верна / false — не верна

Понравилась статья? Поделить с друзьями:
  • Ошибка декодирования видеонаблюдения ip камеры
  • Ошибка декодирования fb2
  • Ошибка декодирования dahua
  • Ошибка декодирования asn1 структуры
  • Ошибка декодера это