0

nodejs プラグインffirefref-structおよびを使用して PKCS11 cryptoki ラッパーを作成していますref-array。私はこのコードを持っています。

var hSession = this.session.handle;
var hObject = this.handle;
var $label = new (arrayType(cki.CK_UTF8CHAR))(80);

var template = new (arrayType(cki.CK_ATTRIBUTE))(1);
template[0] = new cki.CK_ATTRIBUTE({
    type:cki.CKA_LABEL, 
    pValue: $label.ref(), 
    ulValueLen: 80}) 
var res = this.cki.C_GetAttributeValue(hSession, hObject, template.ref(), 1);
if (res == cki.CKR_OK) {
    console.log("Ok");
}
else{
    console.log("Wrong "+res);
}

この関数を呼び出すと、間違った結果が得られます (CKR_ARGUMENTS_BAD、CKR_ATTRIBUTE_TYPE_INVALID)。エラーを見つけるのを手伝ってください。

FFI関数

"C_GetAttributeValue":[t.CK_RV, [t.CK_SESSION_HANDLE, t.CK_OBJECT_HANDLE, t.CK_ATTRIBUTE_PTR, t.CK_ULONG]],

種類

/* CK_ATTRIBUTE is a structure that includes the type, length
 * and value of an attribute */
t.CK_ATTRIBUTE = struct({
  type: t.CK_ATTRIBUTE_TYPE,
  pValue: t.CK_VOID_PTR,

  /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
  ulValueLen: t.CK_ULONG  /* in bytes */
});

4

1 に答える 1

1

(コメントでの議論の写し)

Buffer属性値を格納するためのバッファを提供するには、pure を使用します。

var $label = new Buffer(80);

次のように構造体に渡します。

template[0] = new cki.CK_ATTRIBUTE({
    type:cki.CKA_LABEL, 
    pValue: $label, 
    ulValueLen: $label.length}) 

次に$label.toString('utf8',0,<ulValueLen>)、実際の文字列を取得するために使用します。

注: 私は Node FFI に精通していませんが、このアプローチは機能しているようです

于 2015-10-03T21:36:07.057 に答える