PKCS # 11 Создать ключ AES - PullRequest
6 голосов
/ 11 июля 2011

Hei, Вопрос на самом деле не о Ncryptoki, но я не знаю, где еще спросить ... так что если кто-то может помочь, пожалуйста, помогите мне. Я пытаюсь сгенерировать ключ AES и вот код, который у меня есть сейчас:

CK_MECHANISM keyGenMech = new CK_MECHANISM(CKM.AES_KEY_GEN);

CK_ATTRIBUTE[] template =
{
    new CK_ATTRIBUTE(CKA.CLASS, CKO.SECRET_KEY),
    new CK_ATTRIBUTE(CKA.TOKEN, CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.SENSITIVE, CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.VALUE_LEN, 32),
    new CK_ATTRIBUTE(CKA.KEY_TYPE, CKK.AES),
    new CK_ATTRIBUTE(CKA.LABEL, "testAES".getBytes()),
    new CK_ATTRIBUTE(CKA.PRIVATE, new CK_BBOOL(bPrivate))
};
CryptokiEx.C_GenerateKey(session, keyGenMech, template, template.length, wrappingKey);

Но это дает мне ошибку:

C_GenerateKey rv=0x62 - key size range

Кто-нибудь может дать мне представление, куда идти, чтобы решить эту проблему ...

РЕДАКТИРОВАТЬ: просто для информации - у меня SafeNet HSM, и я использую java PKCS # 11 оболочку под названием jprov, что поставляется с SafeNet ProtectToolkit.

1 Ответ

6 голосов
/ 12 июля 2011

Я нашел ответ, new CK_ATTRIBUTE(CKA.VALUE_LEN, 32),, 32 там должно быть значением CK_ULONG, поэтому, когда я делаю это:

LongRef l = new LongRef((long)32);

CK_ATTRIBUTE[] template =
{
    new CK_ATTRIBUTE(CKA.CLASS,     CKO.SECRET_KEY),
    new CK_ATTRIBUTE(CKA.TOKEN,     CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.SENSITIVE, CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.VALUE_LEN, l.value),
    //new CK_ATTRIBUTE(CKA.VALUE,     key),
    new CK_ATTRIBUTE(CKA.KEY_TYPE,  CKK.AES),
    new CK_ATTRIBUTE(CKA.LABEL,     "testAES".getBytes()),
    new CK_ATTRIBUTE(CKA.PRIVATE,   new CK_BBOOL(bPrivate))
};

Где LongRef:

public class LongRef {

    public long value; 

    public LongRef(long l) {
        //compiled code
        throw new RuntimeException("Compiled Code");
    }
}

Надеюсь, это кому-нибудь поможет.

...