Я пытаюсь создать открытый ключ GOSTR3410.CKR_ATTRIBUTE_TYPE_INVALID исключение - PullRequest
0 голосов
/ 15 октября 2018

Добрый день!Я пытаюсь создать открытый ключ ObjectHandle на основе шестнадцатеричной строки, которая приходит от клиента через почтовый запрос.

Я делаю это в соответствии с документацией, но он возвращает мне CKR_ATTRIBUTE_TYPE_INVALID исключение.

Сообщение полного исключения: Net.Pkcs11Interop.Common.Pkcs11Exception: 'Method C_CreateObject returned CKR_ATTRIBUTE_VALUE_INVALID'

Внутреннее исключение равно нулю

Не могли бы вы помочь мне выяснить, что я делаю не так?

Вотмой код:

using (Pkcs11 pkcs11 = new Pkcs11(Settings.RutokenEcpDllDefaultPath, AppType.MultiThreaded))
{
    Slot slot = GetSlot(pkcs11);

    // This public key comes from client
    // But i put it here to show value. Maybe value is a reason. I'm not sure, 
    // but i hope you will help me

    var hexString = "1c:ec:2d:4a:b3:51:51:07:f7:c4:f6:d9:09:a3:06:73:c2:06:42:7f:b2:11:fd:be:ad:12:5c:22:b9:df:cb:e5:08:7c:7c:48:a6:af:92:67:d3:56:63:29:0c:9e:1a:4a:0e:d1:08:d8:7a:28:61:bd:da:ed:be:aa:49:84:f2:64";
    hexString = hexString.Replace(":", string.Empty);
    var publicKeyValue = ConvertUtils.HexStringToBytes(hexString);

    using (Session session = slot.OpenSession(SessionType.ReadWrite))
    {
        session.Login(CKU.CKU_USER, Settings.TokenPin);
        List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PUBLIC_KEY));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_GOSTR3410));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_LABEL, "Verification Key"));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_VERIFY, true));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_VALUE, publicKeyValue));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, true));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_PRIVATE, false));
        objectAttributes.Add(new ObjectAttribute(CKA.CKA_GOSTR3410_PARAMS, new byte[] { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x00 }));

        // Create object
        ObjectHandle objectHandle = session.CreateObject(objectAttributes);

    }
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Открытый ключ ГОСТ не может быть импортирован на ruToken - см. документы примечание в поле.

Просто измените

objectAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, **true**));

objectAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, **false**));

Открытый ключ в качестве объекта токена может быть «создан» только в результате вызова C_GenerateKeyPair.

0 голосов
/ 15 октября 2018

Возвращая CKR_ATTRIBUTE_VALUE_INVALID, ваша библиотека PKCS # 11 сообщает, что в вашем шаблоне указано недопустимое значение для допустимого атрибута (ов).

К сожалению, API PKCS # 11 не предоставляет подробностей, какой атрибут вызвал ошибкуно многие библиотеки PKCS # 11 поддерживают какой-то внутренний механизм ведения журнала, который может выявить истинную причину ошибки.Точные шаги, необходимые для включения ведения журнала, должны присутствовать в документации, предоставленной поставщиком библиотеки PKCS # 11.

...