NodeJS: node-ffi, ref-struct, ref-array
NodeJS: node-ffi, ref-struct, ref-array
我正在使用nodejs插件ffi
, ref
, ref-struct
和ref-array
编写PKCS11加密包装器。我有这个代码。
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 */
});
(评论中的讨论记录)
使用纯Buffer
提供缓冲区来存储属性值:
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>)
来获得实际的字符串。
注意:我不精通节点FFI,但这种方法似乎只是工作。
相关文章:
- Mongoose更新ref对象
- React.js - REF undefined
- ExtJs视图中的ref选择器
- ExtJs 4.2 ref选择器与Ext.getcmp()与Ext.ComponentQuery.query()
- Firebase对ref调用.remove()正在删除所有父级
- Breeze不会用其真实数据替换Ref:节点
- Aurelia的“repeat.for”可以与“view-model.ref”一起使用吗?
- 尝试从工厂中的 ref.on() 返回值到控制器
- 如何使用 javascript 只允许将数字填充到带有类名的输入 ref 中
- Javascript 将元素插入 char Ref 到带有子元素的可编辑 DIV 中
- 动态添加链接到IMG雄鹿,IMG SRC作为链接REF
- 使用React JS.12,所有者如何知道它被分配了什么ref
- 在node.js中开始获取错误未定义Uncaught ReferenceError:模块,未定义Uncaught Ref
- Ref和Selector在视图中
- 使用多个ObjectId的Mongoose查询(带有'ref')
- React.js如何在内部组件中找到ref元素
- 如何使用ref在href上进行模拟
- 自定义元素问题:视图模型中的ref元素为null
- Firebase: angularfire 0.8.0升级保存ref.name记录
- NodeJS: node-ffi, ref-struct, ref-array