@openwallet-foundation/askar-nodejs 0.7.0-alpha-20261028113056 → 0.7.0-alpha-20261106181830
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.mjs +2 -15
- package/build/index.mjs.map +1 -1
- package/package.json +3 -3
package/build/index.mjs
CHANGED
|
@@ -137,28 +137,15 @@ const uint8ArrayToByteBufferStruct = (buffer = /* @__PURE__ */ new Uint8Array(0)
|
|
|
137
137
|
len: buffer.length
|
|
138
138
|
};
|
|
139
139
|
};
|
|
140
|
-
const decodeCounted = (struct, countedStruct, value) => {
|
|
141
|
-
const buffer = new Uint8Array(koffi.sizeof(struct));
|
|
142
|
-
koffi.encode(buffer, struct, value);
|
|
143
|
-
return koffi.decode(buffer, countedStruct).data;
|
|
144
|
-
};
|
|
145
|
-
const CountedByteBufferStruct = koffi.struct({
|
|
146
|
-
len: FFI_INT64,
|
|
147
|
-
data: koffi.pointer(null, FFI_UINT8, "len")
|
|
148
|
-
});
|
|
149
|
-
const CountedHandleListStruct = koffi.struct({
|
|
150
|
-
len: FFI_INT32,
|
|
151
|
-
data: koffi.pointer(null, FFI_USIZE, "len")
|
|
152
|
-
});
|
|
153
140
|
const decodeHandleList = (handleList) => {
|
|
154
141
|
if (handleList.len === 0) return [];
|
|
155
|
-
return Array.from(
|
|
142
|
+
return Array.from(koffi.decode(handleList.data, FFI_USIZE, handleList.len), Number);
|
|
156
143
|
};
|
|
157
144
|
const byteBufferToUint8Array = (byteBuffer) => {
|
|
158
145
|
const { data, len } = byteBuffer;
|
|
159
146
|
if (data instanceof Uint8Array) return data.slice(0, len);
|
|
160
147
|
if (len === 0) return /* @__PURE__ */ new Uint8Array(0);
|
|
161
|
-
return
|
|
148
|
+
return koffi.decode(data, FFI_UINT8, len);
|
|
162
149
|
};
|
|
163
150
|
const secretBufferToUint8Array = byteBufferToUint8Array;
|
|
164
151
|
const encryptedBufferStructToClass = ({ secretBuffer, tagPos, noncePos }) => {
|
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/ffi/alloc.ts","../src/ffi/primitives.ts","../src/ffi/structures.ts","../src/ffi/callbacks.ts","../src/ffi/conversion.ts","../src/ffi/serialize.ts","../src/library/bindings.ts","../src/library/register.ts","../src/NodeJSAskar.ts","../src/index.ts"],"sourcesContent":["export const allocatePointer = () => {\n return [undefined] as [unknown]\n}\n\nexport const allocateStringBuffer = () => {\n return [undefined] as [unknown]\n}\n\nexport const allocateInt32Buffer = () => {\n return [0] as [number]\n}\n\nexport const allocateInt8Buffer = () => {\n return [0] as [number]\n}\n\nexport const allocateSecretBuffer = () => {\n return {} as unknown\n}\n\nexport const allocateEncryptedBuffer = () => {\n return {} as unknown\n}\n\nexport const allocateAeadParams = () => {\n return {} as unknown\n}\n\nexport const allocateLocalKeyHandle = allocatePointer\n\nexport const allocateStringListHandle = allocatePointer\n","import * as koffi from 'koffi'\n\n// koffi doesn't export the type of a type specifier\nexport type TypeSpec = Parameters<typeof koffi.out>[0]\n\nexport const FFI_UINT8 = koffi.types.uint8_t\nexport const FFI_UINT64 = koffi.types.uint64_t\nexport const FFI_USIZE = koffi.types.size_t\nexport const FFI_INT8 = koffi.types.int8_t\nexport const FFI_INT32 = koffi.types.int32_t\nexport const FFI_INT64 = koffi.types.int64_t\nexport const FFI_STRING = koffi.types.string\nexport const FFI_VOID = koffi.types.void\n\n// Askar allocates the strings it returns: return values, out parameters and callback results. koffi converts these to a\n// JS string and then calls askar_string_free on the original pointer. Strings that JS passes to Askar use FFI_STRING\nlet freeAskarString: ((pointer: unknown) => void) | undefined\nexport const setFreeAskarString = (free: (pointer: unknown) => void) => {\n freeAskarString = free\n}\nexport const FFI_ASKAR_STRING = koffi.disposable('askar_string', FFI_STRING, (pointer: unknown) => {\n if (pointer) freeAskarString?.(pointer)\n})\n\nexport const FFI_CALLBACK_ID = FFI_INT64\nexport const FFI_ERROR_CODE = FFI_INT64\n\nexport const FFI_ARC_HANDLE = koffi.pointer(FFI_VOID)\nexport const FFI_ENTRY_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_KEY_ENTRY_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_LOCAL_KEY_HANDLE = FFI_ARC_HANDLE\nexport const FFI_STRING_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_SESSION_HANDLE = FFI_USIZE\nexport const FFI_SCAN_HANDLE = FFI_USIZE\nexport const FFI_STORE_HANDLE = FFI_USIZE\n","import * as koffi from 'koffi'\nimport { FFI_INT32, FFI_INT64, FFI_UINT8, FFI_USIZE } from './primitives'\n\nexport const ByteBufferStruct = koffi.struct('ByteBuffer', {\n len: FFI_INT64,\n data: koffi.pointer(FFI_UINT8),\n})\n\nexport type ByteBufferType = {\n len: number\n data: Uint8Array\n}\n\nexport const SecretBufferStruct = koffi.struct('SecretBuffer', {\n len: FFI_INT64,\n data: koffi.pointer(FFI_UINT8),\n})\nexport type SecretBufferType = {\n len: number\n data: Uint8Array\n}\n\nexport const EncryptedBufferStruct = koffi.struct('EncryptedBuffer', {\n secretBuffer: ByteBufferStruct,\n tagPos: FFI_INT64,\n noncePos: FFI_INT64,\n})\n\nexport type EncryptedBufferType = {\n secretBuffer: SecretBufferType\n tagPos: number\n noncePos: number\n}\n\nexport const AeadParamsStruct = koffi.struct('AeadParams', {\n nonceLength: FFI_INT32,\n tagLength: FFI_INT32,\n})\n\nexport const Argon2ConfigStruct = koffi.struct('Argon2Config', {\n algorithm: FFI_INT32,\n version: FFI_INT32,\n parallelism: FFI_INT32,\n mem_cost: FFI_INT32,\n time_cost: FFI_INT32,\n})\n\nexport type Argon2ConfigType = {\n algorithm: number\n version: number\n parallelism: number\n mem_cost: number\n time_cost: number\n}\n\nexport const FfiHandleListStruct = koffi.struct('FfiHandleList', {\n len: FFI_INT32,\n data: koffi.pointer(FFI_USIZE),\n})\n\nexport type FfiHandleListType = {\n len: number\n data: number[]\n}\n","import * as koffi from 'koffi'\nimport {\n FFI_ARC_HANDLE,\n FFI_ASKAR_STRING,\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_INT8,\n FFI_INT32,\n FFI_INT64,\n FFI_STRING,\n FFI_USIZE,\n FFI_VOID,\n} from './primitives'\nimport { FfiHandleListStruct } from './structures'\n\nexport const FFI_CALLBACK_NO_RESULT = koffi.proto('cb_no_result', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE])\nexport const FFI_CALLBACK_HANDLE_LIST = koffi.proto('cb_handle_list', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FfiHandleListStruct,\n])\n\nexport const FFI_CALLBACK_INT64 = koffi.proto('cb_int64', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT64])\nexport const FFI_CALLBACK_INT8 = koffi.proto('cb_int8', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT8])\nexport const FFI_CALLBACK_STRING = koffi.proto('cb_string', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_ASKAR_STRING,\n])\nexport const FFI_CALLBACK_LOG = koffi.proto('cb_log', FFI_VOID, [\n koffi.pointer(FFI_VOID),\n FFI_INT32,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT32,\n])\n\nconst FFI_CALLBACK_USIZE = koffi.proto('cb_usize', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_USIZE])\nexport const FFI_CALLBACK_STORE_HANDLE = FFI_CALLBACK_USIZE\nexport const FFI_CALLBACK_SCAN_HANDLE = FFI_CALLBACK_USIZE\nexport const FFI_CALLBACK_SESSION_HANDLE = FFI_CALLBACK_USIZE\n\nconst FFI_CALLBACK_ARC_HANDLE = koffi.proto('cb_arc_handle', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_ARC_HANDLE,\n])\nexport const FFI_CALLBACK_ENTRY_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_LOCAL_KEY_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_STRING_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\n","import { EncryptedBuffer } from '@openwallet-foundation/askar-shared'\nimport * as koffi from 'koffi'\nimport { FFI_INT32, FFI_INT64, FFI_UINT8, FFI_USIZE } from './primitives'\nimport {\n ByteBufferStruct,\n type ByteBufferType,\n type EncryptedBufferType,\n FfiHandleListStruct,\n type FfiHandleListType,\n} from './structures'\n\nexport const uint8ArrayToByteBufferStruct = (buffer: Uint8Array = new Uint8Array(0)): ByteBufferType => {\n return { data: buffer, len: buffer.length }\n}\n\nexport type NodeJsHandleList = {\n len: number\n data: unknown\n}\n\n// koffi.decode(pointer, type, len) leaks about 20 bytes on every call: it formats the name of a new array type each\n// time. koffi does decode a pointer member whose length is in another member of the struct without a new type, so the\n// struct is copied to a buffer and decoded as a struct with such a member\nconst decodeCounted = <Type>(struct: koffi.TypeObject, countedStruct: koffi.TypeObject, value: object): Type => {\n const buffer = new Uint8Array(koffi.sizeof(struct))\n koffi.encode(buffer, struct, value)\n return koffi.decode(buffer, countedStruct).data\n}\n\n// decodeCounted reads the bytes of a struct as its counted struct, so each counted struct must have the same layout as\n// its source struct in structures.ts: the same member types, in the same order\nconst CountedByteBufferStruct = koffi.struct({ len: FFI_INT64, data: koffi.pointer(null, FFI_UINT8, 'len') })\nconst CountedHandleListStruct = koffi.struct({ len: FFI_INT32, data: koffi.pointer(null, FFI_USIZE, 'len') })\n\nexport const decodeHandleList = (handleList: FfiHandleListType): number[] => {\n if (handleList.len === 0) return []\n\n // koffi decodes size_t values as BigInts. The handles are sequence numbers, as for the store, session and scan\n // handles that Askar returns directly\n return Array.from(decodeCounted<BigUint64Array>(FfiHandleListStruct, CountedHandleListStruct, handleList), Number)\n}\n\nexport const byteBufferToUint8Array = (byteBuffer: ByteBufferType): Uint8Array => {\n // With koffi, pointer data needs to be decoded\n const { data, len } = byteBuffer\n\n // Check if data is already a Uint8Array\n if (data instanceof Uint8Array) {\n return data.slice(0, len)\n }\n\n if (len === 0) return new Uint8Array(0)\n\n // If data is a koffi pointer, decode it as uint8 array\n return decodeCounted<Uint8Array>(ByteBufferStruct, CountedByteBufferStruct, byteBuffer)\n}\n\nexport const secretBufferToUint8Array = byteBufferToUint8Array\n\nexport const encryptedBufferStructToClass = ({ secretBuffer, tagPos, noncePos }: EncryptedBufferType) => {\n const buffer = Uint8Array.from(secretBufferToUint8Array(secretBuffer))\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer })\n}\n","import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared'\nimport { uint8ArrayToByteBufferStruct } from './conversion'\nimport type { ByteBufferType, SecretBufferType } from './structures'\n\nconst NULL = null\n\nexport type Callback = (err: number) => void\nexport type CallbackWithResponse = (err: number, response: string) => void\n\ntype Argument =\n | Record<string, unknown>\n | ArcHandle\n | StoreHandle\n | SessionHandle\n | ScanHandle\n | unknown[]\n | Date\n | Uint8Array\n | SerializedArgument\n | boolean\n | Jwk\n | Key\n\ntype SerializedArgument =\n | string\n | number\n | bigint\n | Callback\n | CallbackWithResponse\n | ByteBufferType\n | Uint8Array\n | ByteBufferType\n | SecretBufferType\n | null\n\ntype SerializedArguments = Record<string, SerializedArgument>\n\nexport type SerializedOptions<Type> = {\n [Property in keyof Type]: Type[Property] extends string\n ? string\n : Type[Property] extends number | boolean | Date | StoreHandle | SessionHandle | ScanHandle\n ? number\n : Type[Property] extends Record<string, unknown> | unknown[]\n ? string\n : Type[Property] extends Uint8Array | Key | ArcHandle | Jwk\n ? Uint8Array\n : Type[Property] extends Callback\n ? Callback\n : Type[Property] extends CallbackWithResponse\n ? CallbackWithResponse\n : Type[Property] extends boolean | undefined\n ? number | undefined\n : Type[Property] extends unknown[] | undefined\n ? string | undefined\n : Type[Property] extends Record<string, unknown> | undefined\n ? string | undefined\n : Type[Property] extends Date | undefined\n ? number | undefined\n : Type[Property] extends string | undefined\n ? string | undefined\n : Type[Property] extends number | undefined\n ? number | undefined\n : Type[Property] extends Uint8Array | undefined\n ? Uint8Array | undefined\n : unknown\n}\n\nconst serialize = (arg: Argument): SerializedArgument => {\n switch (typeof arg) {\n case 'undefined':\n return NULL\n case 'boolean':\n return +arg\n case 'string':\n return arg\n case 'number':\n return arg\n case 'function':\n return arg\n case 'object':\n if (arg instanceof Date) {\n return arg.valueOf()\n }\n if (\n arg instanceof ArcHandle ||\n arg instanceof StoreHandle ||\n arg instanceof SessionHandle ||\n arg instanceof ScanHandle\n ) {\n return arg.handle\n }\n if (arg instanceof Key) {\n return arg.handle.handle\n }\n if (arg instanceof Uint8Array) {\n return uint8ArrayToByteBufferStruct(arg)\n }\n if (arg instanceof Jwk) {\n return uint8ArrayToByteBufferStruct(arg.toUint8Array())\n }\n return JSON.stringify(arg)\n default:\n throw new Error('could not serialize value')\n }\n}\n\nconst serializeArguments = <T extends Record<string, Argument> = Record<string, Argument>>(\n args: T\n): SerializedOptions<T> => {\n const retVal: SerializedArguments = {}\n for (const [key, value] of Object.entries(args)) {\n retVal[key] = serialize(value)\n }\n return retVal as SerializedOptions<T>\n}\n\nexport { serializeArguments }\n","import * as koffi from 'koffi'\nimport {\n AeadParamsStruct,\n Argon2ConfigStruct,\n ByteBufferStruct,\n EncryptedBufferStruct,\n FFI_ASKAR_STRING,\n FFI_CALLBACK_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_HANDLE_LIST,\n FFI_CALLBACK_ID,\n FFI_CALLBACK_INT8,\n FFI_CALLBACK_INT64,\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_LOG,\n FFI_CALLBACK_NO_RESULT,\n FFI_CALLBACK_SCAN_HANDLE,\n FFI_CALLBACK_SESSION_HANDLE,\n FFI_CALLBACK_STORE_HANDLE,\n FFI_CALLBACK_STRING,\n FFI_CALLBACK_STRING_LIST_HANDLE,\n FFI_ENTRY_LIST_HANDLE,\n FFI_ERROR_CODE,\n FFI_INT8,\n FFI_INT32,\n FFI_INT64,\n FFI_KEY_ENTRY_LIST_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_SCAN_HANDLE,\n FFI_SESSION_HANDLE,\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING_LIST_HANDLE,\n FFI_VOID,\n FfiHandleListStruct,\n SecretBufferStruct,\n type TypeSpec,\n} from '../ffi'\n\nexport const nativeBindings: Record<string, [TypeSpec, Array<TypeSpec>]> = {\n // Version and termination\n askar_terminate: [FFI_VOID, []],\n askar_version: [FFI_ASKAR_STRING, []],\n\n // Error handling\n askar_get_current_error: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n\n // Buffer management\n askar_buffer_free: [FFI_VOID, [SecretBufferStruct]],\n askar_string_free: [FFI_VOID, [koffi.pointer(FFI_VOID)]],\n\n // Logger functions\n askar_clear_custom_logger: [FFI_VOID, []],\n askar_set_custom_logger: [\n FFI_ERROR_CODE,\n [\n koffi.pointer(FFI_VOID),\n koffi.pointer(FFI_CALLBACK_LOG),\n koffi.pointer(FFI_VOID),\n koffi.pointer(FFI_VOID),\n FFI_INT32,\n ],\n ],\n askar_set_default_logger: [FFI_ERROR_CODE, []],\n askar_set_max_log_level: [FFI_ERROR_CODE, [FFI_INT32]],\n\n // Argon2\n askar_argon2_derive_password: [\n FFI_ERROR_CODE,\n [\n FFI_INT8,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.pointer(Argon2ConfigStruct),\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n\n // Entry list functions\n askar_entry_list_count: [FFI_ERROR_CODE, [FFI_ENTRY_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_entry_list_free: [FFI_VOID, [FFI_ENTRY_LIST_HANDLE]],\n askar_entry_list_get_category: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_name: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_tags: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_value: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n\n // Handle list\n askar_handle_list_free: [FFI_VOID, [FfiHandleListStruct]],\n\n // String list functions\n askar_string_list_count: [FFI_ERROR_CODE, [FFI_STRING_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_string_list_free: [FFI_VOID, [FFI_STRING_LIST_HANDLE]],\n askar_string_list_get_item: [\n FFI_ERROR_CODE,\n [FFI_STRING_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n\n // Key AEAD functions\n askar_key_aead_decrypt: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_aead_encrypt: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(EncryptedBufferStruct)),\n ],\n ],\n askar_key_aead_get_padding: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, FFI_INT64, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_key_aead_get_params: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(AeadParamsStruct))]],\n askar_key_aead_random_nonce: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n\n // Key functions\n askar_key_convert: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_crypto_box: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_crypto_box_open: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_crypto_box_random_nonce: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_crypto_box_seal: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_crypto_box_seal_open: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_derive_ecdh_1pu: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n FFI_INT8,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n askar_key_derive_ecdh_es: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n FFI_INT8,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n\n // Key entry list functions\n askar_key_entry_list_count: [FFI_ERROR_CODE, [FFI_KEY_ENTRY_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_key_entry_list_free: [FFI_VOID, [FFI_KEY_ENTRY_LIST_HANDLE]],\n askar_key_entry_list_get_algorithm: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_metadata: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_name: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_tags: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_load_local: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n\n // Key management\n askar_key_free: [FFI_VOID, [FFI_LOCAL_KEY_HANDLE]],\n askar_key_from_jwk: [FFI_ERROR_CODE, [ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))]],\n askar_key_from_key_exchange: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_LOCAL_KEY_HANDLE, FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_public_bytes: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_secret_bytes: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_seed: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_generate: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_INT8, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_get_algorithm: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n askar_key_get_ephemeral: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_INT8))]],\n askar_key_get_jwk_public: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_get_jwk_secret: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_jwk_thumbprint: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_get_public_bytes: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_secret_bytes: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_supported_backends: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(FFI_STRING_LIST_HANDLE))]],\n askar_key_sign_message: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_unwrap_key: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_STRING,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n askar_key_verify_signature: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(FFI_INT8))],\n ],\n askar_key_wrap_key: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(EncryptedBufferStruct))],\n ],\n\n // Scan functions\n askar_scan_free: [FFI_ERROR_CODE, [FFI_SCAN_HANDLE]],\n askar_scan_next: [FFI_ERROR_CODE, [FFI_SCAN_HANDLE, koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE), FFI_CALLBACK_ID]],\n askar_scan_start: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_INT64,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_SCAN_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n\n // Session functions\n askar_session_close: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_INT8, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_session_count: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT64), FFI_CALLBACK_ID],\n ],\n askar_session_fetch: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_all: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_STRING,\n FFI_INT8,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_all_keys: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_key: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_INT8, koffi.pointer(FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_session_insert_key: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_remove_all: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT64), FFI_CALLBACK_ID],\n ],\n askar_session_remove_key: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_session_start: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_INT8, koffi.pointer(FFI_CALLBACK_SESSION_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_session_update: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_INT8,\n FFI_STRING,\n FFI_STRING,\n ByteBufferStruct,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_update_key: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n\n // Store functions\n askar_store_close: [FFI_ERROR_CODE, [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID]],\n askar_store_copy: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_STORE_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_copy_profile: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_create_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_generate_raw_key: [FFI_ERROR_CODE, [ByteBufferStruct, koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n askar_store_get_default_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_get_profile_name: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_list_profiles: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING_LIST_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_store_list_scans: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_HANDLE_LIST), FFI_CALLBACK_ID],\n ],\n askar_store_list_sessions: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_HANDLE_LIST), FFI_CALLBACK_ID],\n ],\n askar_store_open: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_STORE_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_store_provision: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_STORE_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_rekey: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_store_remove: [FFI_ERROR_CODE, [FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID]],\n askar_store_remove_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID],\n ],\n askar_store_rename_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID],\n ],\n askar_store_set_default_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n\n // Migration\n askar_migrate_indy_sdk: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n} as const\n","import fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport os from 'node:os'\nimport path from 'node:path'\nimport * as koffi from 'koffi'\nimport { setFreeAskarString } from '../ffi'\nimport { nativeBindings } from './bindings'\nimport type { NativeMethods } from './NativeBindingInterface'\n\n// TODO(rename): when lib is changed\nconst LIBNAME = 'aries_askar'\nconst ENV_VAR = 'LIB_ASKAR_PATH'\n\ntype Platform = 'darwin' | 'linux' | 'win32'\n\ntype ExtensionMap = Record<Platform, { prefix?: string; extension: string }>\n\nconst extensions: ExtensionMap = {\n darwin: { prefix: 'lib', extension: '.dylib' },\n linux: { prefix: 'lib', extension: '.so' },\n win32: { extension: '.dll' },\n}\n\nconst libPaths: Record<Platform, string[]> = {\n darwin: ['/usr/local/lib/', '/usr/lib/', '/opt/homebrew/opt/'],\n linux: ['/usr/lib/', '/usr/local/lib/'],\n win32: ['c:\\\\windows\\\\system32\\\\'],\n}\n\n// Alias for a simple function to check if the path exists\nconst doesPathExist = fs.existsSync\n\nconst getLibrary = () => {\n // Detect OS; darwin, linux and windows are only supported\n const platform = os.platform()\n\n if (platform !== 'linux' && platform !== 'win32' && platform !== 'darwin')\n throw new Error(`Unsupported platform: ${platform}. linux, win32 and darwin are supported.`)\n\n // Get a potential path from the environment variable\n const pathFromEnvironment = process.env[ENV_VAR]\n\n // Get the paths specific to the users operating system\n const platformPaths = libPaths[platform]\n\n // Look for the file in the native directory of the package.\n // node-pre-gyp will download the binaries to this directory after installing the package\n // The package root, from both the bundle in build and the sources (Vitest)\n const packageRoot = path.dirname(\n createRequire(import.meta.url).resolve('@openwallet-foundation/askar-nodejs/package.json')\n )\n platformPaths.unshift(path.join(packageRoot, 'native'))\n\n // Check if the path from the environment variable is supplied and add it\n // We use unshift here so that when we want to get a valid library path this will be the first to resolve\n if (pathFromEnvironment) platformPaths.unshift(pathFromEnvironment)\n\n // Create the path + file\n const libraries = platformPaths.map((p) =>\n path.join(p, `${extensions[platform].prefix ?? ''}${LIBNAME}${extensions[platform].extension}`)\n )\n\n // Guard so we quit if there is no valid path for the library\n if (!libraries.some((libraryPath) => doesPathExist(libraryPath)))\n throw new Error(`Could not find ${LIBNAME} with these paths: ${libraries.join(' ')}`)\n\n // Get the first valid library\n // Casting here as a string because there is a guard of none of the paths\n const validLibraryPath = libraries.find((l) => doesPathExist(l)) as string\n\n // Load the library using koffi\n const lib = koffi.load(validLibraryPath)\n\n // Bind all the native functions\n const methods: Partial<NativeMethods> = {}\n for (const [name, [returnType, argumentTypes]] of Object.entries(nativeBindings)) {\n methods[name as keyof NativeMethods] = lib.func(name, returnType, argumentTypes)\n }\n setFreeAskarString((pointer) => methods.askar_string_free?.(pointer))\n\n return methods as NativeMethods\n}\n\nlet nativeAskar: NativeMethods | undefined\nexport const getNativeAskar = () => {\n if (!nativeAskar) nativeAskar = getLibrary()\n return nativeAskar\n}\n","import type {\n AeadParamsOptions,\n Argon2DerivePasswordOptions,\n Askar,\n AskarErrorObject,\n EncryptedBuffer,\n EntryListCountOptions,\n EntryListFreeOptions,\n EntryListGetCategoryOptions,\n EntryListGetNameOptions,\n EntryListGetTagsOptions,\n EntryListGetValueOptions,\n KeyAeadDecryptOptions,\n KeyAeadEncryptOptions,\n KeyAeadGetPaddingOptions,\n KeyAeadGetParamsOptions,\n KeyAeadRandomNonceOptions,\n KeyConvertOptions,\n KeyCryptoBoxOpenOptions,\n KeyCryptoBoxOptions,\n KeyCryptoBoxSealOpenOptions,\n KeyCryptoBoxSealOptions,\n KeyDeriveEcdh1puOptions,\n KeyDeriveEcdhEsOptions,\n KeyEntryListCountOptions,\n KeyEntryListFreeOptions,\n KeyEntryListGetAlgorithmOptions,\n KeyEntryListGetMetadataOptions,\n KeyEntryListGetNameOptions,\n KeyEntryListGetTagsOptions,\n KeyEntryListLoadLocalOptions,\n KeyFreeOptions,\n KeyFromJwkOptions,\n KeyFromKeyExchangeOptions,\n KeyFromPublicBytesOptions,\n KeyFromSecretBytesOptions,\n KeyFromSeedOptions,\n KeyGenerateOptions,\n KeyGetAlgorithmOptions,\n KeyGetEphemeralOptions,\n KeyGetJwkPublicOptions,\n KeyGetJwkSecretOptions,\n KeyGetJwkThumbprintOptions,\n KeyGetPublicBytesOptions,\n KeyGetSecretBytesOptions,\n KeySignMessageOptions,\n KeyUnwrapKeyOptions,\n KeyVerifySignatureOptions,\n KeyWrapKeyOptions,\n MigrateIndySdkOptions,\n ScanFreeOptions,\n ScanNextOptions,\n ScanStartOptions,\n SessionCloseOptions,\n SessionCountOptions,\n SessionFetchAllKeysOptions,\n SessionFetchAllOptions,\n SessionFetchKeyOptions,\n SessionFetchOptions,\n SessionInsertKeyOptions,\n SessionRemoveAllOptions,\n SessionRemoveKeyOptions,\n SessionStartOptions,\n SessionUpdateKeyOptions,\n SessionUpdateOptions,\n SetCustomLoggerOptions,\n SetMaxLogLevelOptions,\n StoreCloseOptions,\n StoreCopyProfileOptions,\n StoreCopyToOptions,\n StoreCreateProfileOptions,\n StoreGenerateRawKeyOptions,\n StoreGetDefaultProfileOptions,\n StoreGetProfileNameOptions,\n StoreListProfilesOptions,\n StoreListScansOptions,\n StoreListSessionsOptions,\n StoreOpenOptions,\n StoreProvisionOptions,\n StoreRekeyOptions,\n StoreRemoveOptions,\n StoreRemoveProfileOptions,\n StoreRenameProfileOptions,\n StoreSetDefaultProfileOptions,\n} from '@openwallet-foundation/askar-shared'\nimport {\n AeadParams,\n AskarError,\n EntryListHandle,\n handleInvalidNullResponse,\n KeyEntryListHandle,\n LocalKeyHandle,\n ScanHandle,\n SessionHandle,\n StoreHandle,\n} from '@openwallet-foundation/askar-shared'\nimport * as koffi from 'koffi'\nimport {\n allocateAeadParams,\n allocateEncryptedBuffer,\n allocateInt8Buffer,\n allocateInt32Buffer,\n allocatePointer,\n allocateSecretBuffer,\n allocateStringBuffer,\n allocateStringListHandle,\n type ByteBufferType,\n decodeHandleList,\n type EncryptedBufferType,\n encryptedBufferStructToClass,\n FFI_CALLBACK_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_HANDLE_LIST,\n FFI_CALLBACK_INT8,\n FFI_CALLBACK_INT64,\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_LOG,\n FFI_CALLBACK_NO_RESULT,\n FFI_CALLBACK_SCAN_HANDLE,\n FFI_CALLBACK_SESSION_HANDLE,\n FFI_CALLBACK_STORE_HANDLE,\n FFI_CALLBACK_STRING,\n FFI_CALLBACK_STRING_LIST_HANDLE,\n type FfiHandleListType,\n secretBufferToUint8Array,\n serializeArguments,\n type TypeSpec,\n} from './ffi'\nimport { getNativeAskar } from './library'\n\nfunction handleNullableReturnPointer<Return>(returnValue: [unknown]): Return | null {\n const value = returnValue[0]\n if (value === null || value === undefined) return null\n return value as Return\n}\n\nfunction handleReturnPointer<Return>(returnValue: [unknown] | unknown): Return {\n const value = Array.isArray(returnValue) ? returnValue[0] : returnValue\n if (value === null || value === undefined) {\n throw AskarError.customError({ message: 'Unexpected null pointer' })\n }\n\n return value as Return\n}\n\nexport class NodeJSAskar implements Askar {\n private callbackId = 1\n\n private promisify = async <R>(\n method: (_: unknown, id: number) => number,\n callbackType: TypeSpec\n ): Promise<R | null> => {\n return new Promise((resolve, reject) => {\n let keepAlive: NodeJS.Immediate | undefined\n const scheduleKeepAlive = () => {\n keepAlive = setImmediate(scheduleKeepAlive)\n }\n scheduleKeepAlive()\n\n const registeredCallback = koffi.register((_cbId: number, errorCode: number, result: R) => {\n clearImmediate(keepAlive)\n koffi.unregister(registeredCallback)\n\n if (errorCode !== 0) {\n reject(this.getAskarError(errorCode))\n } else {\n resolve(result)\n }\n }, koffi.pointer(callbackType))\n\n const errorCode = method(registeredCallback, this.callbackId++)\n if (errorCode !== 0) {\n clearImmediate(keepAlive)\n koffi.unregister(registeredCallback)\n reject(this.getAskarError(errorCode))\n }\n })\n }\n\n /**\n * Fetch the error from the native library and throw it as a JS error\n *\n * NOTE:\n * Checks whether the error code of the returned error matches the error code that was passed to the function.\n * If it doesn't, we throw an error with the original errorCode, and a custom message explaining we weren't able\n * to retrieve the error message from the native library. This should however not break functionality as long as\n * error codes are used rather than error messages for error handling.\n *\n */\n private getAskarError(errorCode: number): AskarError {\n const error = this.getCurrentError()\n if (error.code !== errorCode) {\n return new AskarError({\n code: errorCode,\n message:\n 'Error details have already been overwritten on the native side, unable to retrieve error message for the error',\n })\n }\n\n return new AskarError(error)\n }\n\n private handleError(errorCode: number) {\n if (errorCode === 0) return\n\n throw this.getAskarError(errorCode)\n }\n\n private handleListFree(options: { handleList: FfiHandleListType }): void {\n this.nativeAskar.askar_handle_list_free(options.handleList)\n }\n\n public get nativeAskar() {\n return getNativeAskar()\n }\n\n public version(): string {\n return this.nativeAskar.askar_version()\n }\n\n public getCurrentError(): AskarErrorObject {\n const error = allocateStringBuffer()\n this.nativeAskar.askar_get_current_error(error)\n const serializedError = handleReturnPointer<string>(error)\n\n return JSON.parse(serializedError) as AskarErrorObject\n }\n\n public clearCustomLogger(): void {\n this.nativeAskar.askar_clear_custom_logger()\n }\n\n public setCustomLogger({ logLevel, logger }: SetCustomLoggerOptions): void {\n const registeredCallback = koffi.register(logger, koffi.pointer(FFI_CALLBACK_LOG))\n // No enabled and flush callbacks: Askar then filters by the log level only\n const errorCode = this.nativeAskar.askar_set_custom_logger(null, registeredCallback, null, null, logLevel)\n // Askar sets a custom logger once per process and keeps calling it after clearCustomLogger (a log call on another\n // thread can pass the check just before the logger is disabled), so the callback is only unregistered when Askar\n // didn't take it\n if (errorCode !== 0) {\n koffi.unregister(registeredCallback)\n this.handleError(errorCode)\n }\n }\n\n public setDefaultLogger(): void {\n const errorCode = this.nativeAskar.askar_set_default_logger()\n this.handleError(errorCode)\n }\n\n public setMaxLogLevel(options: SetMaxLogLevelOptions): void {\n const { logLevel } = serializeArguments(options)\n\n const errorCode = this.nativeAskar.askar_set_max_log_level(logLevel)\n this.handleError(errorCode)\n }\n\n public argon2DerivePassword(options: Argon2DerivePasswordOptions): Uint8Array {\n const { parameters, password, salt } = serializeArguments(options)\n\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_argon2_derive_password(\n parameters,\n password,\n salt,\n // NOTE: we should not serialize the config, it should be passed as struct\n options.config ?? null,\n ret\n )\n\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public entryListCount(options: EntryListCountOptions): number {\n const { entryListHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_count(entryListHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public entryListFree(options: EntryListFreeOptions): void {\n const { entryListHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_entry_list_free(entryListHandle)\n }\n\n public entryListGetCategory(options: EntryListGetCategoryOptions): string {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_category(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public entryListGetName(options: EntryListGetNameOptions): string {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_name(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public entryListGetTags(options: EntryListGetTagsOptions): string | null {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_tags(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public entryListGetValue(options: EntryListGetValueOptions): Uint8Array {\n const { entryListHandle, index } = serializeArguments(options)\n\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_value(entryListHandle, index, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyAeadDecrypt(options: KeyAeadDecryptOptions): Uint8Array {\n const { ciphertext, localKeyHandle, nonce, aad, tag } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n nonce: options.nonce,\n ciphertext: options.ciphertext,\n tag: options.tag ?? new Uint8Array(0),\n aad: options.aad ?? new Uint8Array(0),\n })\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_decrypt(localKeyHandle, ciphertext, nonce, tag, aad, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyAeadEncrypt(options: KeyAeadEncryptOptions): EncryptedBuffer {\n const { localKeyHandle, message, nonce, aad } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n message: options.message,\n nonce: options.nonce ?? new Uint8Array(0),\n aad: options.aad ?? new Uint8Array(0),\n })\n const ret = allocateEncryptedBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_encrypt(localKeyHandle, message, nonce, aad, ret)\n this.handleError(errorCode)\n const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)\n const encryptedBufferClass = encryptedBufferStructToClass(encryptedBuffer)\n this.nativeAskar.askar_buffer_free(encryptedBuffer.secretBuffer)\n\n return encryptedBufferClass\n }\n\n public keyAeadGetPadding(options: KeyAeadGetPaddingOptions): number {\n const { localKeyHandle, msgLen } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_get_padding(localKeyHandle, msgLen, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyAeadGetParams(options: KeyAeadGetParamsOptions): AeadParams {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateAeadParams()\n\n const errorCode = this.nativeAskar.askar_key_aead_get_params(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return new AeadParams(handleReturnPointer<AeadParamsOptions>(ret))\n }\n\n public keyAeadRandomNonce(options: KeyAeadRandomNonceOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_random_nonce(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyConvert(options: KeyConvertOptions): LocalKeyHandle {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_convert(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyCryptoBox(options: KeyCryptoBoxOptions): Uint8Array {\n const { nonce, message, recipientKey, senderKey } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box(recipientKey, senderKey, message, nonce, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxOpen(options: KeyCryptoBoxOpenOptions): Uint8Array {\n const { nonce, message, senderKey, recipientKey } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_open(recipientKey, senderKey, message, nonce, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxRandomNonce(): Uint8Array {\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_random_nonce(ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxSeal(options: KeyCryptoBoxSealOptions): Uint8Array {\n const { message, localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_seal(localKeyHandle, message, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxSealOpen(options: KeyCryptoBoxSealOpenOptions): Uint8Array {\n const { ciphertext, localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_seal_open(localKeyHandle, ciphertext, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyDeriveEcdh1pu(options: KeyDeriveEcdh1puOptions): LocalKeyHandle {\n const { senderKey, recipientKey, algorithm, algId, apu, apv, ephemeralKey, receive, ccTag } = serializeArguments({\n senderKey: options.senderKey,\n recipientKey: options.recipientKey,\n algorithm: options.algorithm,\n algId: options.algId,\n apu: options.apu,\n apv: options.apv,\n ephemeralKey: options.ephemeralKey,\n receive: options.receive,\n ccTag: options.ccTag ?? new Uint8Array(0),\n })\n\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_derive_ecdh_1pu(\n algorithm,\n ephemeralKey,\n senderKey,\n recipientKey,\n algId,\n apu,\n apv,\n ccTag,\n receive,\n ret\n )\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyDeriveEcdhEs(options: KeyDeriveEcdhEsOptions): LocalKeyHandle {\n const { receive, apv, apu, algId, recipientKey, ephemeralKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_derive_ecdh_es(\n algorithm,\n ephemeralKey,\n recipientKey,\n algId,\n apu,\n apv,\n receive,\n ret\n )\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyEntryListCount(options: KeyEntryListCountOptions): number {\n const { keyEntryListHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_count(keyEntryListHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyEntryListFree(options: KeyEntryListFreeOptions): void {\n const { keyEntryListHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_key_entry_list_free(keyEntryListHandle)\n }\n\n public keyEntryListGetAlgorithm(options: KeyEntryListGetAlgorithmOptions): string {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_algorithm(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyEntryListGetMetadata(options: KeyEntryListGetMetadataOptions): string | null {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_metadata(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public keyEntryListGetName(options: KeyEntryListGetNameOptions): string {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_name(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyEntryListGetTags(options: KeyEntryListGetTagsOptions): string | null {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_tags(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public keyEntryListLoadLocal(options: KeyEntryListLoadLocalOptions): LocalKeyHandle {\n const { index, keyEntryListHandle } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_load_local(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFree(options: KeyFreeOptions): void {\n const { localKeyHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_key_free(localKeyHandle)\n }\n\n public keyFromJwk(options: KeyFromJwkOptions): LocalKeyHandle {\n const { jwk } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_jwk(jwk, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromKeyExchange(options: KeyFromKeyExchangeOptions): LocalKeyHandle {\n const { algorithm, pkHandle, skHandle } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_key_exchange(algorithm, skHandle, pkHandle, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromPublicBytes(options: KeyFromPublicBytesOptions): LocalKeyHandle {\n const { publicKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_public_bytes(algorithm, publicKey, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSecretBytes(options: KeyFromSecretBytesOptions): LocalKeyHandle {\n const { secretKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_secret_bytes(algorithm, secretKey, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSeed(options: KeyFromSeedOptions): LocalKeyHandle {\n const { algorithm, method, seed } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_seed(algorithm, seed, method, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyGenerate(options: KeyGenerateOptions): LocalKeyHandle {\n const { algorithm, ephemeral, keyBackend } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_generate(algorithm, keyBackend, ephemeral, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyGetAlgorithm(options: KeyGetAlgorithmOptions): string {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_algorithm(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetEphemeral(options: KeyGetEphemeralOptions): number {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_get_ephemeral(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyGetJwkPublic(options: KeyGetJwkPublicOptions): string {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_public(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetJwkSecret(options: KeyGetJwkSecretOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_secret(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyGetJwkThumbprint(options: KeyGetJwkThumbprintOptions): string {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_thumbprint(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetPublicBytes(options: KeyGetPublicBytesOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_public_bytes(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyGetSecretBytes(options: KeyGetSecretBytesOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_secret_bytes(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keySignMessage(options: KeySignMessageOptions): Uint8Array {\n const { localKeyHandle, message, sigType } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_sign_message(localKeyHandle, message, sigType, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyUnwrapKey(options: KeyUnwrapKeyOptions): LocalKeyHandle {\n const { localKeyHandle, algorithm, ciphertext, nonce, tag } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n algorithm: options.algorithm,\n ciphertext: options.ciphertext,\n nonce: options.nonce ?? new Uint8Array(0),\n tag: options.tag ?? new Uint8Array(0),\n })\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_unwrap_key(localKeyHandle, algorithm, ciphertext, nonce, tag, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyVerifySignature(options: KeyVerifySignatureOptions): boolean {\n const { localKeyHandle, sigType, message, signature } = serializeArguments(options)\n const ret = allocateInt8Buffer()\n\n const errorCode = this.nativeAskar.askar_key_verify_signature(localKeyHandle, message, signature, sigType, ret)\n this.handleError(errorCode)\n\n return Boolean(handleReturnPointer<number>(ret))\n }\n\n public keyWrapKey(options: KeyWrapKeyOptions): EncryptedBuffer {\n const { localKeyHandle, nonce, other } = serializeArguments({\n ...options,\n nonce: options.nonce ?? new Uint8Array(0),\n })\n const ret = allocateEncryptedBuffer()\n\n const errorCode = this.nativeAskar.askar_key_wrap_key(localKeyHandle, other, nonce, ret)\n this.handleError(errorCode)\n const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)\n const encryptedBufferClass = encryptedBufferStructToClass(encryptedBuffer)\n this.nativeAskar.askar_buffer_free(encryptedBuffer.secretBuffer)\n\n return encryptedBufferClass\n }\n\n public keyGetSupportedBackends(): string[] {\n const stringListHandlePtr = allocateStringListHandle()\n\n const keyGetSupportedBackendsErrorCode = this.nativeAskar.askar_key_get_supported_backends(stringListHandlePtr)\n this.handleError(keyGetSupportedBackendsErrorCode)\n const stringListHandle = stringListHandlePtr[0]\n\n const listCountPtr = allocateInt32Buffer()\n const stringListCountErrorCode = this.nativeAskar.askar_string_list_count(stringListHandle, listCountPtr)\n this.handleError(stringListCountErrorCode)\n const count = listCountPtr[0]\n\n const supportedBackends = []\n\n for (let i = 0; i < count; i++) {\n const strPtr = allocateStringBuffer()\n const errorCode = this.nativeAskar.askar_string_list_get_item(stringListHandle, i, strPtr)\n this.handleError(errorCode)\n supportedBackends.push(strPtr[0] as string)\n }\n this.nativeAskar.askar_string_list_free(stringListHandle)\n\n return supportedBackends\n }\n\n public scanFree(options: ScanFreeOptions): void {\n const { scanHandle } = serializeArguments(options)\n\n const errorCode = this.nativeAskar.askar_scan_free(scanHandle)\n this.handleError(errorCode)\n }\n\n public async scanNext(options: ScanNextOptions): Promise<EntryListHandle | null> {\n const { scanHandle } = serializeArguments(options)\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_scan_next(scanHandle, cb, cbId),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async scanStart(options: ScanStartOptions): Promise<ScanHandle> {\n const { category, limit, offset, profile, storeHandle, tagFilter, orderBy, descending } = serializeArguments({\n ...options,\n offset: options.offset ?? 0,\n limit: options.limit ?? -1,\n descending: options.descending ?? 0,\n })\n\n const handle = await this.promisify<number>(\n (cb, cbId) =>\n this.nativeAskar.askar_scan_start(\n storeHandle,\n profile,\n category,\n tagFilter,\n offset,\n limit,\n orderBy,\n descending,\n cb,\n cbId\n ),\n FFI_CALLBACK_SCAN_HANDLE\n )\n\n return ScanHandle.fromHandle(handle)\n }\n\n public async sessionClose(options: SessionCloseOptions): Promise<void> {\n const { commit, sessionHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_close(sessionHandle, commit, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionCount(options: SessionCountOptions): Promise<number> {\n const { sessionHandle, tagFilter, category } = serializeArguments(options)\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_count(sessionHandle, category, tagFilter, cb, cbId),\n FFI_CALLBACK_INT64\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionFetch(options: SessionFetchOptions): Promise<EntryListHandle | null> {\n const { name, category, sessionHandle, forUpdate } = serializeArguments(options)\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_session_fetch(sessionHandle, category, name, forUpdate, cb, cbId),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAll(options: SessionFetchAllOptions): Promise<EntryListHandle | null> {\n const { forUpdate, sessionHandle, tagFilter, limit, category, orderBy, descending } = serializeArguments({\n ...options,\n limit: options.limit ?? -1,\n descending: options.descending ?? 0,\n })\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) =>\n this.nativeAskar.askar_session_fetch_all(\n sessionHandle,\n category,\n tagFilter,\n limit,\n orderBy,\n descending,\n forUpdate,\n cb,\n cbId\n ),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAllKeys(options: SessionFetchAllKeysOptions): Promise<KeyEntryListHandle | null> {\n const { forUpdate, limit, tagFilter, sessionHandle, algorithm, thumbprint } = serializeArguments({\n ...options,\n limit: options.limit ?? -1,\n })\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) =>\n this.nativeAskar.askar_session_fetch_all_keys(\n sessionHandle,\n algorithm,\n thumbprint,\n tagFilter,\n limit,\n forUpdate,\n cb,\n cbId\n ),\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchKey(options: SessionFetchKeyOptions): Promise<KeyEntryListHandle | null> {\n const { forUpdate, sessionHandle, name } = serializeArguments(options)\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_session_fetch_key(sessionHandle, name, forUpdate, cb, cbId),\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public async sessionInsertKey(options: SessionInsertKeyOptions): Promise<void> {\n const { name, sessionHandle, expiryMs, localKeyHandle, metadata, tags } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n })\n\n await this.promisify(\n (cb, cbId) =>\n this.nativeAskar.askar_session_insert_key(\n sessionHandle,\n localKeyHandle,\n name,\n metadata,\n tags,\n expiryMs,\n cb,\n cbId\n ),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionRemoveAll(options: SessionRemoveAllOptions): Promise<number> {\n const { sessionHandle, tagFilter, category } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_remove_all(sessionHandle, category, tagFilter, cb, cbId),\n FFI_CALLBACK_INT64\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionRemoveKey(options: SessionRemoveKeyOptions): Promise<void> {\n const { sessionHandle, name } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_remove_key(sessionHandle, name, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionStart(options: SessionStartOptions): Promise<SessionHandle> {\n const { storeHandle, profile, asTransaction } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_start(storeHandle, profile, asTransaction, cb, cbId),\n FFI_CALLBACK_SESSION_HANDLE\n )\n\n return SessionHandle.fromHandle(handle)\n }\n\n public async sessionUpdate(options: SessionUpdateOptions): Promise<void> {\n const { name, sessionHandle, category, expiryMs, tags, operation, value } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n value: options.value ?? new Uint8Array(0),\n })\n\n await this.promisify(\n (cb, cbId) =>\n this.nativeAskar.askar_session_update(\n sessionHandle,\n operation,\n category,\n name,\n value,\n tags,\n expiryMs,\n cb,\n cbId\n ),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionUpdateKey(options: SessionUpdateKeyOptions): Promise<void> {\n const { expiryMs, tags, name, sessionHandle, metadata } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n })\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_update_key(sessionHandle, name, metadata, tags, expiryMs, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeClose(options: StoreCloseOptions): Promise<void> {\n const { storeHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_close(storeHandle, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeCopyTo(options: StoreCopyToOptions): Promise<StoreHandle> {\n const { storeHandle, targetUri, passKey, keyMethod, recreate } = serializeArguments({\n ...options,\n recreate: options.recreate ?? 0,\n })\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_copy(storeHandle, targetUri, keyMethod, passKey, recreate, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(response)\n }\n\n public async storeCreateProfile(options: StoreCreateProfileOptions): Promise<string> {\n const { storeHandle, profile } = serializeArguments(options)\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_create_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public storeGenerateRawKey(options: StoreGenerateRawKeyOptions): string {\n const { seed } = serializeArguments({\n ...options,\n seed: options.seed ?? new Uint8Array(0),\n })\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_store_generate_raw_key(seed, ret)\n this.handleError(errorCode)\n\n return ret[0] as string\n }\n\n public async storeGetDefaultProfile(options: StoreGetDefaultProfileOptions): Promise<string> {\n const { storeHandle } = serializeArguments(options)\n\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_get_default_profile(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeGetProfileName(options: StoreGetProfileNameOptions): Promise<string> {\n const { storeHandle } = serializeArguments(options)\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_get_profile_name(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeListProfiles(options: StoreListProfilesOptions): Promise<string[]> {\n const { storeHandle } = serializeArguments(options)\n\n const listHandle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_store_list_profiles(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING_LIST_HANDLE\n )\n\n if (listHandle === null) {\n throw AskarError.customError({ message: 'Invalid handle' })\n }\n\n const counti32 = allocateInt32Buffer()\n const errorCode = this.nativeAskar.askar_string_list_count(listHandle, counti32)\n this.handleError(errorCode)\n const count = counti32[0]\n const ret = []\n const strval = allocateStringBuffer()\n for (let i = 0; i < count; i++) {\n const errorCode = this.nativeAskar.askar_string_list_get_item(listHandle, i, strval)\n this.handleError(errorCode)\n ret.push(strval[0] as string)\n }\n this.nativeAskar.askar_string_list_free(listHandle)\n return ret\n }\n\n public async storeListScans(options: StoreListScansOptions): Promise<ScanHandle[]> {\n const { storeHandle } = serializeArguments(options)\n const handleList = await this.promisify<FfiHandleListType>(\n (cb, cbId) => this.nativeAskar.askar_store_list_scans(storeHandle, cb, cbId),\n FFI_CALLBACK_HANDLE_LIST\n )\n\n if (!handleList) return []\n\n const scanHandleList = decodeHandleList(handleList).map((scanHandle) => ScanHandle.fromHandle(scanHandle))\n this.handleListFree({ handleList })\n\n return scanHandleList\n }\n\n public async storeListSessions(options: StoreListSessionsOptions): Promise<SessionHandle[]> {\n const { storeHandle } = serializeArguments(options)\n const handleList = await this.promisify<FfiHandleListType>(\n (cb, cbId) => this.nativeAskar.askar_store_list_sessions(storeHandle, cb, cbId),\n FFI_CALLBACK_HANDLE_LIST\n )\n\n if (!handleList) return []\n\n const sessionHandleList = decodeHandleList(handleList).map((sessionHandle) =>\n SessionHandle.fromHandle(sessionHandle)\n )\n this.handleListFree({ handleList })\n\n return sessionHandleList\n }\n\n public async storeOpen(options: StoreOpenOptions): Promise<StoreHandle> {\n const { profile, keyMethod, passKey, specUri } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_open(specUri, keyMethod, passKey, profile, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeProvision(options: StoreProvisionOptions): Promise<StoreHandle> {\n const { profile, passKey, keyMethod, specUri, recreate } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_provision(specUri, keyMethod, passKey, profile, recreate, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeRekey(options: StoreRekeyOptions): Promise<void> {\n const { passKey, keyMethod, storeHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_rekey(storeHandle, keyMethod, passKey, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeRemove(options: StoreRemoveOptions): Promise<number> {\n const { specUri } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_remove(specUri, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRemoveProfile(options: StoreRemoveProfileOptions): Promise<number> {\n const { storeHandle, profile } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_remove_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeSetDefaultProfile(options: StoreSetDefaultProfileOptions): Promise<void> {\n const { storeHandle, profile } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_set_default_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeRenameProfile(options: StoreRenameProfileOptions): Promise<number> {\n const { storeHandle, fromProfile, toProfile } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_rename_profile(storeHandle, fromProfile, toProfile, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeCopyProfile(options: StoreCopyProfileOptions): Promise<void> {\n const { fromHandle, toHandle, fromProfile, toProfile } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_copy_profile(fromHandle, toHandle, fromProfile, toProfile, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async migrateIndySdk(options: MigrateIndySdkOptions): Promise<void> {\n const { specUri, kdfLevel, walletKey, walletName } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_migrate_indy_sdk(specUri, walletName, walletKey, kdfLevel, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n}\n","import { NativeAskar } from '@openwallet-foundation/askar-shared'\nimport { NodeJSAskar } from './NodeJSAskar'\n\nexport const askarNodeJS = new NodeJSAskar()\nNativeAskar.register(askarNodeJS)\n\nexport * from '@openwallet-foundation/askar-shared'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/ffi/alloc.ts","../src/ffi/primitives.ts","../src/ffi/structures.ts","../src/ffi/callbacks.ts","../src/ffi/conversion.ts","../src/ffi/serialize.ts","../src/library/bindings.ts","../src/library/register.ts","../src/NodeJSAskar.ts","../src/index.ts"],"sourcesContent":["export const allocatePointer = () => {\n return [undefined] as [unknown]\n}\n\nexport const allocateStringBuffer = () => {\n return [undefined] as [unknown]\n}\n\nexport const allocateInt32Buffer = () => {\n return [0] as [number]\n}\n\nexport const allocateInt8Buffer = () => {\n return [0] as [number]\n}\n\nexport const allocateSecretBuffer = () => {\n return {} as unknown\n}\n\nexport const allocateEncryptedBuffer = () => {\n return {} as unknown\n}\n\nexport const allocateAeadParams = () => {\n return {} as unknown\n}\n\nexport const allocateLocalKeyHandle = allocatePointer\n\nexport const allocateStringListHandle = allocatePointer\n","import * as koffi from 'koffi'\n\n// koffi doesn't export the type of a type specifier\nexport type TypeSpec = Parameters<typeof koffi.out>[0]\n\nexport const FFI_UINT8 = koffi.types.uint8_t\nexport const FFI_UINT64 = koffi.types.uint64_t\nexport const FFI_USIZE = koffi.types.size_t\nexport const FFI_INT8 = koffi.types.int8_t\nexport const FFI_INT32 = koffi.types.int32_t\nexport const FFI_INT64 = koffi.types.int64_t\nexport const FFI_STRING = koffi.types.string\nexport const FFI_VOID = koffi.types.void\n\n// Askar allocates the strings it returns: return values, out parameters and callback results. koffi converts these to a\n// JS string and then calls askar_string_free on the original pointer. Strings that JS passes to Askar use FFI_STRING\nlet freeAskarString: ((pointer: unknown) => void) | undefined\nexport const setFreeAskarString = (free: (pointer: unknown) => void) => {\n freeAskarString = free\n}\nexport const FFI_ASKAR_STRING = koffi.disposable('askar_string', FFI_STRING, (pointer: unknown) => {\n if (pointer) freeAskarString?.(pointer)\n})\n\nexport const FFI_CALLBACK_ID = FFI_INT64\nexport const FFI_ERROR_CODE = FFI_INT64\n\nexport const FFI_ARC_HANDLE = koffi.pointer(FFI_VOID)\nexport const FFI_ENTRY_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_KEY_ENTRY_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_LOCAL_KEY_HANDLE = FFI_ARC_HANDLE\nexport const FFI_STRING_LIST_HANDLE = FFI_ARC_HANDLE\nexport const FFI_SESSION_HANDLE = FFI_USIZE\nexport const FFI_SCAN_HANDLE = FFI_USIZE\nexport const FFI_STORE_HANDLE = FFI_USIZE\n","import * as koffi from 'koffi'\nimport { FFI_INT32, FFI_INT64, FFI_UINT8, FFI_USIZE } from './primitives'\n\nexport const ByteBufferStruct = koffi.struct('ByteBuffer', {\n len: FFI_INT64,\n data: koffi.pointer(FFI_UINT8),\n})\n\nexport type ByteBufferType = {\n len: number\n data: Uint8Array\n}\n\nexport const SecretBufferStruct = koffi.struct('SecretBuffer', {\n len: FFI_INT64,\n data: koffi.pointer(FFI_UINT8),\n})\nexport type SecretBufferType = {\n len: number\n data: Uint8Array\n}\n\nexport const EncryptedBufferStruct = koffi.struct('EncryptedBuffer', {\n secretBuffer: ByteBufferStruct,\n tagPos: FFI_INT64,\n noncePos: FFI_INT64,\n})\n\nexport type EncryptedBufferType = {\n secretBuffer: SecretBufferType\n tagPos: number\n noncePos: number\n}\n\nexport const AeadParamsStruct = koffi.struct('AeadParams', {\n nonceLength: FFI_INT32,\n tagLength: FFI_INT32,\n})\n\nexport const Argon2ConfigStruct = koffi.struct('Argon2Config', {\n algorithm: FFI_INT32,\n version: FFI_INT32,\n parallelism: FFI_INT32,\n mem_cost: FFI_INT32,\n time_cost: FFI_INT32,\n})\n\nexport type Argon2ConfigType = {\n algorithm: number\n version: number\n parallelism: number\n mem_cost: number\n time_cost: number\n}\n\nexport const FfiHandleListStruct = koffi.struct('FfiHandleList', {\n len: FFI_INT32,\n data: koffi.pointer(FFI_USIZE),\n})\n\nexport type FfiHandleListType = {\n len: number\n data: number[]\n}\n","import * as koffi from 'koffi'\nimport {\n FFI_ARC_HANDLE,\n FFI_ASKAR_STRING,\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_INT8,\n FFI_INT32,\n FFI_INT64,\n FFI_STRING,\n FFI_USIZE,\n FFI_VOID,\n} from './primitives'\nimport { FfiHandleListStruct } from './structures'\n\nexport const FFI_CALLBACK_NO_RESULT = koffi.proto('cb_no_result', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE])\nexport const FFI_CALLBACK_HANDLE_LIST = koffi.proto('cb_handle_list', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FfiHandleListStruct,\n])\n\nexport const FFI_CALLBACK_INT64 = koffi.proto('cb_int64', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT64])\nexport const FFI_CALLBACK_INT8 = koffi.proto('cb_int8', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT8])\nexport const FFI_CALLBACK_STRING = koffi.proto('cb_string', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_ASKAR_STRING,\n])\nexport const FFI_CALLBACK_LOG = koffi.proto('cb_log', FFI_VOID, [\n koffi.pointer(FFI_VOID),\n FFI_INT32,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT32,\n])\n\nconst FFI_CALLBACK_USIZE = koffi.proto('cb_usize', FFI_VOID, [FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_USIZE])\nexport const FFI_CALLBACK_STORE_HANDLE = FFI_CALLBACK_USIZE\nexport const FFI_CALLBACK_SCAN_HANDLE = FFI_CALLBACK_USIZE\nexport const FFI_CALLBACK_SESSION_HANDLE = FFI_CALLBACK_USIZE\n\nconst FFI_CALLBACK_ARC_HANDLE = koffi.proto('cb_arc_handle', FFI_VOID, [\n FFI_CALLBACK_ID,\n FFI_ERROR_CODE,\n FFI_ARC_HANDLE,\n])\nexport const FFI_CALLBACK_ENTRY_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_LOCAL_KEY_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\nexport const FFI_CALLBACK_STRING_LIST_HANDLE = FFI_CALLBACK_ARC_HANDLE\n","import { EncryptedBuffer } from '@openwallet-foundation/askar-shared'\nimport * as koffi from 'koffi'\nimport { FFI_UINT8, FFI_USIZE } from './primitives'\nimport type { ByteBufferType, EncryptedBufferType, FfiHandleListType } from './structures'\n\nexport const uint8ArrayToByteBufferStruct = (buffer: Uint8Array = new Uint8Array(0)): ByteBufferType => {\n return { data: buffer, len: buffer.length }\n}\n\nexport type NodeJsHandleList = {\n len: number\n data: unknown\n}\n\nexport const decodeHandleList = (handleList: FfiHandleListType): number[] => {\n if (handleList.len === 0) return []\n\n // koffi decodes size_t values as BigInts. The handles are sequence numbers, as for the store, session and scan\n // handles that Askar returns directly\n return Array.from(koffi.decode(handleList.data, FFI_USIZE, handleList.len) as ArrayLike<bigint>, Number)\n}\n\nexport const byteBufferToUint8Array = (byteBuffer: ByteBufferType): Uint8Array => {\n // With koffi, pointer data needs to be decoded\n const { data, len } = byteBuffer\n\n // Check if data is already a Uint8Array\n if (data instanceof Uint8Array) {\n return data.slice(0, len)\n }\n\n if (len === 0) return new Uint8Array(0)\n\n // If data is a koffi pointer, decode it as uint8 array\n return koffi.decode(data, FFI_UINT8, len)\n}\n\nexport const secretBufferToUint8Array = byteBufferToUint8Array\n\nexport const encryptedBufferStructToClass = ({ secretBuffer, tagPos, noncePos }: EncryptedBufferType) => {\n const buffer = Uint8Array.from(secretBufferToUint8Array(secretBuffer))\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer })\n}\n","import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared'\nimport { uint8ArrayToByteBufferStruct } from './conversion'\nimport type { ByteBufferType, SecretBufferType } from './structures'\n\nconst NULL = null\n\nexport type Callback = (err: number) => void\nexport type CallbackWithResponse = (err: number, response: string) => void\n\ntype Argument =\n | Record<string, unknown>\n | ArcHandle\n | StoreHandle\n | SessionHandle\n | ScanHandle\n | unknown[]\n | Date\n | Uint8Array\n | SerializedArgument\n | boolean\n | Jwk\n | Key\n\ntype SerializedArgument =\n | string\n | number\n | bigint\n | Callback\n | CallbackWithResponse\n | ByteBufferType\n | Uint8Array\n | ByteBufferType\n | SecretBufferType\n | null\n\ntype SerializedArguments = Record<string, SerializedArgument>\n\nexport type SerializedOptions<Type> = {\n [Property in keyof Type]: Type[Property] extends string\n ? string\n : Type[Property] extends number | boolean | Date | StoreHandle | SessionHandle | ScanHandle\n ? number\n : Type[Property] extends Record<string, unknown> | unknown[]\n ? string\n : Type[Property] extends Uint8Array | Key | ArcHandle | Jwk\n ? Uint8Array\n : Type[Property] extends Callback\n ? Callback\n : Type[Property] extends CallbackWithResponse\n ? CallbackWithResponse\n : Type[Property] extends boolean | undefined\n ? number | undefined\n : Type[Property] extends unknown[] | undefined\n ? string | undefined\n : Type[Property] extends Record<string, unknown> | undefined\n ? string | undefined\n : Type[Property] extends Date | undefined\n ? number | undefined\n : Type[Property] extends string | undefined\n ? string | undefined\n : Type[Property] extends number | undefined\n ? number | undefined\n : Type[Property] extends Uint8Array | undefined\n ? Uint8Array | undefined\n : unknown\n}\n\nconst serialize = (arg: Argument): SerializedArgument => {\n switch (typeof arg) {\n case 'undefined':\n return NULL\n case 'boolean':\n return +arg\n case 'string':\n return arg\n case 'number':\n return arg\n case 'function':\n return arg\n case 'object':\n if (arg instanceof Date) {\n return arg.valueOf()\n }\n if (\n arg instanceof ArcHandle ||\n arg instanceof StoreHandle ||\n arg instanceof SessionHandle ||\n arg instanceof ScanHandle\n ) {\n return arg.handle\n }\n if (arg instanceof Key) {\n return arg.handle.handle\n }\n if (arg instanceof Uint8Array) {\n return uint8ArrayToByteBufferStruct(arg)\n }\n if (arg instanceof Jwk) {\n return uint8ArrayToByteBufferStruct(arg.toUint8Array())\n }\n return JSON.stringify(arg)\n default:\n throw new Error('could not serialize value')\n }\n}\n\nconst serializeArguments = <T extends Record<string, Argument> = Record<string, Argument>>(\n args: T\n): SerializedOptions<T> => {\n const retVal: SerializedArguments = {}\n for (const [key, value] of Object.entries(args)) {\n retVal[key] = serialize(value)\n }\n return retVal as SerializedOptions<T>\n}\n\nexport { serializeArguments }\n","import * as koffi from 'koffi'\nimport {\n AeadParamsStruct,\n Argon2ConfigStruct,\n ByteBufferStruct,\n EncryptedBufferStruct,\n FFI_ASKAR_STRING,\n FFI_CALLBACK_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_HANDLE_LIST,\n FFI_CALLBACK_ID,\n FFI_CALLBACK_INT8,\n FFI_CALLBACK_INT64,\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_LOG,\n FFI_CALLBACK_NO_RESULT,\n FFI_CALLBACK_SCAN_HANDLE,\n FFI_CALLBACK_SESSION_HANDLE,\n FFI_CALLBACK_STORE_HANDLE,\n FFI_CALLBACK_STRING,\n FFI_CALLBACK_STRING_LIST_HANDLE,\n FFI_ENTRY_LIST_HANDLE,\n FFI_ERROR_CODE,\n FFI_INT8,\n FFI_INT32,\n FFI_INT64,\n FFI_KEY_ENTRY_LIST_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_SCAN_HANDLE,\n FFI_SESSION_HANDLE,\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING_LIST_HANDLE,\n FFI_VOID,\n FfiHandleListStruct,\n SecretBufferStruct,\n type TypeSpec,\n} from '../ffi'\n\nexport const nativeBindings: Record<string, [TypeSpec, Array<TypeSpec>]> = {\n // Version and termination\n askar_terminate: [FFI_VOID, []],\n askar_version: [FFI_ASKAR_STRING, []],\n\n // Error handling\n askar_get_current_error: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n\n // Buffer management\n askar_buffer_free: [FFI_VOID, [SecretBufferStruct]],\n askar_string_free: [FFI_VOID, [koffi.pointer(FFI_VOID)]],\n\n // Logger functions\n askar_clear_custom_logger: [FFI_VOID, []],\n askar_set_custom_logger: [\n FFI_ERROR_CODE,\n [\n koffi.pointer(FFI_VOID),\n koffi.pointer(FFI_CALLBACK_LOG),\n koffi.pointer(FFI_VOID),\n koffi.pointer(FFI_VOID),\n FFI_INT32,\n ],\n ],\n askar_set_default_logger: [FFI_ERROR_CODE, []],\n askar_set_max_log_level: [FFI_ERROR_CODE, [FFI_INT32]],\n\n // Argon2\n askar_argon2_derive_password: [\n FFI_ERROR_CODE,\n [\n FFI_INT8,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.pointer(Argon2ConfigStruct),\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n\n // Entry list functions\n askar_entry_list_count: [FFI_ERROR_CODE, [FFI_ENTRY_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_entry_list_free: [FFI_VOID, [FFI_ENTRY_LIST_HANDLE]],\n askar_entry_list_get_category: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_name: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_tags: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_entry_list_get_value: [\n FFI_ERROR_CODE,\n [FFI_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n\n // Handle list\n askar_handle_list_free: [FFI_VOID, [FfiHandleListStruct]],\n\n // String list functions\n askar_string_list_count: [FFI_ERROR_CODE, [FFI_STRING_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_string_list_free: [FFI_VOID, [FFI_STRING_LIST_HANDLE]],\n askar_string_list_get_item: [\n FFI_ERROR_CODE,\n [FFI_STRING_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n\n // Key AEAD functions\n askar_key_aead_decrypt: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_aead_encrypt: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(EncryptedBufferStruct)),\n ],\n ],\n askar_key_aead_get_padding: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, FFI_INT64, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_key_aead_get_params: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(AeadParamsStruct))]],\n askar_key_aead_random_nonce: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n\n // Key functions\n askar_key_convert: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_crypto_box: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_crypto_box_open: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(SecretBufferStruct)),\n ],\n ],\n askar_key_crypto_box_random_nonce: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_crypto_box_seal: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_crypto_box_seal_open: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_derive_ecdh_1pu: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n FFI_INT8,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n askar_key_derive_ecdh_es: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_LOCAL_KEY_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n FFI_INT8,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n\n // Key entry list functions\n askar_key_entry_list_count: [FFI_ERROR_CODE, [FFI_KEY_ENTRY_LIST_HANDLE, koffi.out(koffi.pointer(FFI_INT32))]],\n askar_key_entry_list_free: [FFI_VOID, [FFI_KEY_ENTRY_LIST_HANDLE]],\n askar_key_entry_list_get_algorithm: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_metadata: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_name: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_get_tags: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_entry_list_load_local: [\n FFI_ERROR_CODE,\n [FFI_KEY_ENTRY_LIST_HANDLE, FFI_INT32, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n\n // Key management\n askar_key_free: [FFI_VOID, [FFI_LOCAL_KEY_HANDLE]],\n askar_key_from_jwk: [FFI_ERROR_CODE, [ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))]],\n askar_key_from_key_exchange: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_LOCAL_KEY_HANDLE, FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_public_bytes: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_secret_bytes: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_from_seed: [\n FFI_ERROR_CODE,\n [FFI_STRING, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_generate: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_INT8, koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE))],\n ],\n askar_key_get_algorithm: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n askar_key_get_ephemeral: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(FFI_INT8))]],\n askar_key_get_jwk_public: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_get_jwk_secret: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_jwk_thumbprint: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_STRING, koffi.out(koffi.pointer(FFI_ASKAR_STRING))],\n ],\n askar_key_get_public_bytes: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_secret_bytes: [FFI_ERROR_CODE, [FFI_LOCAL_KEY_HANDLE, koffi.out(koffi.pointer(SecretBufferStruct))]],\n askar_key_get_supported_backends: [FFI_ERROR_CODE, [koffi.out(koffi.pointer(FFI_STRING_LIST_HANDLE))]],\n askar_key_sign_message: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(SecretBufferStruct))],\n ],\n askar_key_unwrap_key: [\n FFI_ERROR_CODE,\n [\n FFI_LOCAL_KEY_HANDLE,\n FFI_STRING,\n ByteBufferStruct,\n ByteBufferStruct,\n ByteBufferStruct,\n koffi.out(koffi.pointer(FFI_LOCAL_KEY_HANDLE)),\n ],\n ],\n askar_key_verify_signature: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, ByteBufferStruct, FFI_STRING, koffi.out(koffi.pointer(FFI_INT8))],\n ],\n askar_key_wrap_key: [\n FFI_ERROR_CODE,\n [FFI_LOCAL_KEY_HANDLE, FFI_LOCAL_KEY_HANDLE, ByteBufferStruct, koffi.out(koffi.pointer(EncryptedBufferStruct))],\n ],\n\n // Scan functions\n askar_scan_free: [FFI_ERROR_CODE, [FFI_SCAN_HANDLE]],\n askar_scan_next: [FFI_ERROR_CODE, [FFI_SCAN_HANDLE, koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE), FFI_CALLBACK_ID]],\n askar_scan_start: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_INT64,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_SCAN_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n\n // Session functions\n askar_session_close: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_INT8, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_session_count: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT64), FFI_CALLBACK_ID],\n ],\n askar_session_fetch: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_all: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_STRING,\n FFI_INT8,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_all_keys: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_fetch_key: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_INT8, koffi.pointer(FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_session_insert_key: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_LOCAL_KEY_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_remove_all: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT64), FFI_CALLBACK_ID],\n ],\n askar_session_remove_key: [\n FFI_ERROR_CODE,\n [FFI_SESSION_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_session_start: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_INT8, koffi.pointer(FFI_CALLBACK_SESSION_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_session_update: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_INT8,\n FFI_STRING,\n FFI_STRING,\n ByteBufferStruct,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_session_update_key: [\n FFI_ERROR_CODE,\n [\n FFI_SESSION_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT64,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n\n // Store functions\n askar_store_close: [FFI_ERROR_CODE, [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID]],\n askar_store_copy: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_STORE_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_copy_profile: [\n FFI_ERROR_CODE,\n [\n FFI_STORE_HANDLE,\n FFI_STORE_HANDLE,\n FFI_STRING,\n FFI_STRING,\n koffi.pointer(FFI_CALLBACK_NO_RESULT),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_create_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_generate_raw_key: [FFI_ERROR_CODE, [ByteBufferStruct, koffi.out(koffi.pointer(FFI_ASKAR_STRING))]],\n askar_store_get_default_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_get_profile_name: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING), FFI_CALLBACK_ID],\n ],\n askar_store_list_profiles: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_STRING_LIST_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_store_list_scans: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_HANDLE_LIST), FFI_CALLBACK_ID],\n ],\n askar_store_list_sessions: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, koffi.pointer(FFI_CALLBACK_HANDLE_LIST), FFI_CALLBACK_ID],\n ],\n askar_store_open: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_STORE_HANDLE), FFI_CALLBACK_ID],\n ],\n askar_store_provision: [\n FFI_ERROR_CODE,\n [\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_STRING,\n FFI_INT8,\n koffi.pointer(FFI_CALLBACK_STORE_HANDLE),\n FFI_CALLBACK_ID,\n ],\n ],\n askar_store_rekey: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n askar_store_remove: [FFI_ERROR_CODE, [FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID]],\n askar_store_remove_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID],\n ],\n askar_store_rename_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_INT8), FFI_CALLBACK_ID],\n ],\n askar_store_set_default_profile: [\n FFI_ERROR_CODE,\n [FFI_STORE_HANDLE, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n\n // Migration\n askar_migrate_indy_sdk: [\n FFI_ERROR_CODE,\n [FFI_STRING, FFI_STRING, FFI_STRING, FFI_STRING, koffi.pointer(FFI_CALLBACK_NO_RESULT), FFI_CALLBACK_ID],\n ],\n} as const\n","import fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport os from 'node:os'\nimport path from 'node:path'\nimport * as koffi from 'koffi'\nimport { setFreeAskarString } from '../ffi'\nimport { nativeBindings } from './bindings'\nimport type { NativeMethods } from './NativeBindingInterface'\n\n// TODO(rename): when lib is changed\nconst LIBNAME = 'aries_askar'\nconst ENV_VAR = 'LIB_ASKAR_PATH'\n\ntype Platform = 'darwin' | 'linux' | 'win32'\n\ntype ExtensionMap = Record<Platform, { prefix?: string; extension: string }>\n\nconst extensions: ExtensionMap = {\n darwin: { prefix: 'lib', extension: '.dylib' },\n linux: { prefix: 'lib', extension: '.so' },\n win32: { extension: '.dll' },\n}\n\nconst libPaths: Record<Platform, string[]> = {\n darwin: ['/usr/local/lib/', '/usr/lib/', '/opt/homebrew/opt/'],\n linux: ['/usr/lib/', '/usr/local/lib/'],\n win32: ['c:\\\\windows\\\\system32\\\\'],\n}\n\n// Alias for a simple function to check if the path exists\nconst doesPathExist = fs.existsSync\n\nconst getLibrary = () => {\n // Detect OS; darwin, linux and windows are only supported\n const platform = os.platform()\n\n if (platform !== 'linux' && platform !== 'win32' && platform !== 'darwin')\n throw new Error(`Unsupported platform: ${platform}. linux, win32 and darwin are supported.`)\n\n // Get a potential path from the environment variable\n const pathFromEnvironment = process.env[ENV_VAR]\n\n // Get the paths specific to the users operating system\n const platformPaths = libPaths[platform]\n\n // Look for the file in the native directory of the package.\n // node-pre-gyp will download the binaries to this directory after installing the package\n // The package root, from both the bundle in build and the sources (Vitest)\n const packageRoot = path.dirname(\n createRequire(import.meta.url).resolve('@openwallet-foundation/askar-nodejs/package.json')\n )\n platformPaths.unshift(path.join(packageRoot, 'native'))\n\n // Check if the path from the environment variable is supplied and add it\n // We use unshift here so that when we want to get a valid library path this will be the first to resolve\n if (pathFromEnvironment) platformPaths.unshift(pathFromEnvironment)\n\n // Create the path + file\n const libraries = platformPaths.map((p) =>\n path.join(p, `${extensions[platform].prefix ?? ''}${LIBNAME}${extensions[platform].extension}`)\n )\n\n // Guard so we quit if there is no valid path for the library\n if (!libraries.some((libraryPath) => doesPathExist(libraryPath)))\n throw new Error(`Could not find ${LIBNAME} with these paths: ${libraries.join(' ')}`)\n\n // Get the first valid library\n // Casting here as a string because there is a guard of none of the paths\n const validLibraryPath = libraries.find((l) => doesPathExist(l)) as string\n\n // Load the library using koffi\n const lib = koffi.load(validLibraryPath)\n\n // Bind all the native functions\n const methods: Partial<NativeMethods> = {}\n for (const [name, [returnType, argumentTypes]] of Object.entries(nativeBindings)) {\n methods[name as keyof NativeMethods] = lib.func(name, returnType, argumentTypes)\n }\n setFreeAskarString((pointer) => methods.askar_string_free?.(pointer))\n\n return methods as NativeMethods\n}\n\nlet nativeAskar: NativeMethods | undefined\nexport const getNativeAskar = () => {\n if (!nativeAskar) nativeAskar = getLibrary()\n return nativeAskar\n}\n","import type {\n AeadParamsOptions,\n Argon2DerivePasswordOptions,\n Askar,\n AskarErrorObject,\n EncryptedBuffer,\n EntryListCountOptions,\n EntryListFreeOptions,\n EntryListGetCategoryOptions,\n EntryListGetNameOptions,\n EntryListGetTagsOptions,\n EntryListGetValueOptions,\n KeyAeadDecryptOptions,\n KeyAeadEncryptOptions,\n KeyAeadGetPaddingOptions,\n KeyAeadGetParamsOptions,\n KeyAeadRandomNonceOptions,\n KeyConvertOptions,\n KeyCryptoBoxOpenOptions,\n KeyCryptoBoxOptions,\n KeyCryptoBoxSealOpenOptions,\n KeyCryptoBoxSealOptions,\n KeyDeriveEcdh1puOptions,\n KeyDeriveEcdhEsOptions,\n KeyEntryListCountOptions,\n KeyEntryListFreeOptions,\n KeyEntryListGetAlgorithmOptions,\n KeyEntryListGetMetadataOptions,\n KeyEntryListGetNameOptions,\n KeyEntryListGetTagsOptions,\n KeyEntryListLoadLocalOptions,\n KeyFreeOptions,\n KeyFromJwkOptions,\n KeyFromKeyExchangeOptions,\n KeyFromPublicBytesOptions,\n KeyFromSecretBytesOptions,\n KeyFromSeedOptions,\n KeyGenerateOptions,\n KeyGetAlgorithmOptions,\n KeyGetEphemeralOptions,\n KeyGetJwkPublicOptions,\n KeyGetJwkSecretOptions,\n KeyGetJwkThumbprintOptions,\n KeyGetPublicBytesOptions,\n KeyGetSecretBytesOptions,\n KeySignMessageOptions,\n KeyUnwrapKeyOptions,\n KeyVerifySignatureOptions,\n KeyWrapKeyOptions,\n MigrateIndySdkOptions,\n ScanFreeOptions,\n ScanNextOptions,\n ScanStartOptions,\n SessionCloseOptions,\n SessionCountOptions,\n SessionFetchAllKeysOptions,\n SessionFetchAllOptions,\n SessionFetchKeyOptions,\n SessionFetchOptions,\n SessionInsertKeyOptions,\n SessionRemoveAllOptions,\n SessionRemoveKeyOptions,\n SessionStartOptions,\n SessionUpdateKeyOptions,\n SessionUpdateOptions,\n SetCustomLoggerOptions,\n SetMaxLogLevelOptions,\n StoreCloseOptions,\n StoreCopyProfileOptions,\n StoreCopyToOptions,\n StoreCreateProfileOptions,\n StoreGenerateRawKeyOptions,\n StoreGetDefaultProfileOptions,\n StoreGetProfileNameOptions,\n StoreListProfilesOptions,\n StoreListScansOptions,\n StoreListSessionsOptions,\n StoreOpenOptions,\n StoreProvisionOptions,\n StoreRekeyOptions,\n StoreRemoveOptions,\n StoreRemoveProfileOptions,\n StoreRenameProfileOptions,\n StoreSetDefaultProfileOptions,\n} from '@openwallet-foundation/askar-shared'\nimport {\n AeadParams,\n AskarError,\n EntryListHandle,\n handleInvalidNullResponse,\n KeyEntryListHandle,\n LocalKeyHandle,\n ScanHandle,\n SessionHandle,\n StoreHandle,\n} from '@openwallet-foundation/askar-shared'\nimport * as koffi from 'koffi'\nimport {\n allocateAeadParams,\n allocateEncryptedBuffer,\n allocateInt8Buffer,\n allocateInt32Buffer,\n allocatePointer,\n allocateSecretBuffer,\n allocateStringBuffer,\n allocateStringListHandle,\n type ByteBufferType,\n decodeHandleList,\n type EncryptedBufferType,\n encryptedBufferStructToClass,\n FFI_CALLBACK_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_HANDLE_LIST,\n FFI_CALLBACK_INT8,\n FFI_CALLBACK_INT64,\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE,\n FFI_CALLBACK_LOG,\n FFI_CALLBACK_NO_RESULT,\n FFI_CALLBACK_SCAN_HANDLE,\n FFI_CALLBACK_SESSION_HANDLE,\n FFI_CALLBACK_STORE_HANDLE,\n FFI_CALLBACK_STRING,\n FFI_CALLBACK_STRING_LIST_HANDLE,\n type FfiHandleListType,\n secretBufferToUint8Array,\n serializeArguments,\n type TypeSpec,\n} from './ffi'\nimport { getNativeAskar } from './library'\n\nfunction handleNullableReturnPointer<Return>(returnValue: [unknown]): Return | null {\n const value = returnValue[0]\n if (value === null || value === undefined) return null\n return value as Return\n}\n\nfunction handleReturnPointer<Return>(returnValue: [unknown] | unknown): Return {\n const value = Array.isArray(returnValue) ? returnValue[0] : returnValue\n if (value === null || value === undefined) {\n throw AskarError.customError({ message: 'Unexpected null pointer' })\n }\n\n return value as Return\n}\n\nexport class NodeJSAskar implements Askar {\n private callbackId = 1\n\n private promisify = async <R>(\n method: (_: unknown, id: number) => number,\n callbackType: TypeSpec\n ): Promise<R | null> => {\n return new Promise((resolve, reject) => {\n let keepAlive: NodeJS.Immediate | undefined\n const scheduleKeepAlive = () => {\n keepAlive = setImmediate(scheduleKeepAlive)\n }\n scheduleKeepAlive()\n\n const registeredCallback = koffi.register((_cbId: number, errorCode: number, result: R) => {\n clearImmediate(keepAlive)\n koffi.unregister(registeredCallback)\n\n if (errorCode !== 0) {\n reject(this.getAskarError(errorCode))\n } else {\n resolve(result)\n }\n }, koffi.pointer(callbackType))\n\n const errorCode = method(registeredCallback, this.callbackId++)\n if (errorCode !== 0) {\n clearImmediate(keepAlive)\n koffi.unregister(registeredCallback)\n reject(this.getAskarError(errorCode))\n }\n })\n }\n\n /**\n * Fetch the error from the native library and throw it as a JS error\n *\n * NOTE:\n * Checks whether the error code of the returned error matches the error code that was passed to the function.\n * If it doesn't, we throw an error with the original errorCode, and a custom message explaining we weren't able\n * to retrieve the error message from the native library. This should however not break functionality as long as\n * error codes are used rather than error messages for error handling.\n *\n */\n private getAskarError(errorCode: number): AskarError {\n const error = this.getCurrentError()\n if (error.code !== errorCode) {\n return new AskarError({\n code: errorCode,\n message:\n 'Error details have already been overwritten on the native side, unable to retrieve error message for the error',\n })\n }\n\n return new AskarError(error)\n }\n\n private handleError(errorCode: number) {\n if (errorCode === 0) return\n\n throw this.getAskarError(errorCode)\n }\n\n private handleListFree(options: { handleList: FfiHandleListType }): void {\n this.nativeAskar.askar_handle_list_free(options.handleList)\n }\n\n public get nativeAskar() {\n return getNativeAskar()\n }\n\n public version(): string {\n return this.nativeAskar.askar_version()\n }\n\n public getCurrentError(): AskarErrorObject {\n const error = allocateStringBuffer()\n this.nativeAskar.askar_get_current_error(error)\n const serializedError = handleReturnPointer<string>(error)\n\n return JSON.parse(serializedError) as AskarErrorObject\n }\n\n public clearCustomLogger(): void {\n this.nativeAskar.askar_clear_custom_logger()\n }\n\n public setCustomLogger({ logLevel, logger }: SetCustomLoggerOptions): void {\n const registeredCallback = koffi.register(logger, koffi.pointer(FFI_CALLBACK_LOG))\n // No enabled and flush callbacks: Askar then filters by the log level only\n const errorCode = this.nativeAskar.askar_set_custom_logger(null, registeredCallback, null, null, logLevel)\n // Askar sets a custom logger once per process and keeps calling it after clearCustomLogger (a log call on another\n // thread can pass the check just before the logger is disabled), so the callback is only unregistered when Askar\n // didn't take it\n if (errorCode !== 0) {\n koffi.unregister(registeredCallback)\n this.handleError(errorCode)\n }\n }\n\n public setDefaultLogger(): void {\n const errorCode = this.nativeAskar.askar_set_default_logger()\n this.handleError(errorCode)\n }\n\n public setMaxLogLevel(options: SetMaxLogLevelOptions): void {\n const { logLevel } = serializeArguments(options)\n\n const errorCode = this.nativeAskar.askar_set_max_log_level(logLevel)\n this.handleError(errorCode)\n }\n\n public argon2DerivePassword(options: Argon2DerivePasswordOptions): Uint8Array {\n const { parameters, password, salt } = serializeArguments(options)\n\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_argon2_derive_password(\n parameters,\n password,\n salt,\n // NOTE: we should not serialize the config, it should be passed as struct\n options.config ?? null,\n ret\n )\n\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public entryListCount(options: EntryListCountOptions): number {\n const { entryListHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_count(entryListHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public entryListFree(options: EntryListFreeOptions): void {\n const { entryListHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_entry_list_free(entryListHandle)\n }\n\n public entryListGetCategory(options: EntryListGetCategoryOptions): string {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_category(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public entryListGetName(options: EntryListGetNameOptions): string {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_name(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public entryListGetTags(options: EntryListGetTagsOptions): string | null {\n const { entryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_tags(entryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public entryListGetValue(options: EntryListGetValueOptions): Uint8Array {\n const { entryListHandle, index } = serializeArguments(options)\n\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_entry_list_get_value(entryListHandle, index, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyAeadDecrypt(options: KeyAeadDecryptOptions): Uint8Array {\n const { ciphertext, localKeyHandle, nonce, aad, tag } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n nonce: options.nonce,\n ciphertext: options.ciphertext,\n tag: options.tag ?? new Uint8Array(0),\n aad: options.aad ?? new Uint8Array(0),\n })\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_decrypt(localKeyHandle, ciphertext, nonce, tag, aad, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyAeadEncrypt(options: KeyAeadEncryptOptions): EncryptedBuffer {\n const { localKeyHandle, message, nonce, aad } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n message: options.message,\n nonce: options.nonce ?? new Uint8Array(0),\n aad: options.aad ?? new Uint8Array(0),\n })\n const ret = allocateEncryptedBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_encrypt(localKeyHandle, message, nonce, aad, ret)\n this.handleError(errorCode)\n const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)\n const encryptedBufferClass = encryptedBufferStructToClass(encryptedBuffer)\n this.nativeAskar.askar_buffer_free(encryptedBuffer.secretBuffer)\n\n return encryptedBufferClass\n }\n\n public keyAeadGetPadding(options: KeyAeadGetPaddingOptions): number {\n const { localKeyHandle, msgLen } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_get_padding(localKeyHandle, msgLen, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyAeadGetParams(options: KeyAeadGetParamsOptions): AeadParams {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateAeadParams()\n\n const errorCode = this.nativeAskar.askar_key_aead_get_params(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return new AeadParams(handleReturnPointer<AeadParamsOptions>(ret))\n }\n\n public keyAeadRandomNonce(options: KeyAeadRandomNonceOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_aead_random_nonce(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyConvert(options: KeyConvertOptions): LocalKeyHandle {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_convert(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyCryptoBox(options: KeyCryptoBoxOptions): Uint8Array {\n const { nonce, message, recipientKey, senderKey } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box(recipientKey, senderKey, message, nonce, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxOpen(options: KeyCryptoBoxOpenOptions): Uint8Array {\n const { nonce, message, senderKey, recipientKey } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_open(recipientKey, senderKey, message, nonce, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxRandomNonce(): Uint8Array {\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_random_nonce(ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxSeal(options: KeyCryptoBoxSealOptions): Uint8Array {\n const { message, localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_seal(localKeyHandle, message, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyCryptoBoxSealOpen(options: KeyCryptoBoxSealOpenOptions): Uint8Array {\n const { ciphertext, localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_crypto_box_seal_open(localKeyHandle, ciphertext, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyDeriveEcdh1pu(options: KeyDeriveEcdh1puOptions): LocalKeyHandle {\n const { senderKey, recipientKey, algorithm, algId, apu, apv, ephemeralKey, receive, ccTag } = serializeArguments({\n senderKey: options.senderKey,\n recipientKey: options.recipientKey,\n algorithm: options.algorithm,\n algId: options.algId,\n apu: options.apu,\n apv: options.apv,\n ephemeralKey: options.ephemeralKey,\n receive: options.receive,\n ccTag: options.ccTag ?? new Uint8Array(0),\n })\n\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_derive_ecdh_1pu(\n algorithm,\n ephemeralKey,\n senderKey,\n recipientKey,\n algId,\n apu,\n apv,\n ccTag,\n receive,\n ret\n )\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyDeriveEcdhEs(options: KeyDeriveEcdhEsOptions): LocalKeyHandle {\n const { receive, apv, apu, algId, recipientKey, ephemeralKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_derive_ecdh_es(\n algorithm,\n ephemeralKey,\n recipientKey,\n algId,\n apu,\n apv,\n receive,\n ret\n )\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyEntryListCount(options: KeyEntryListCountOptions): number {\n const { keyEntryListHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_count(keyEntryListHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyEntryListFree(options: KeyEntryListFreeOptions): void {\n const { keyEntryListHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_key_entry_list_free(keyEntryListHandle)\n }\n\n public keyEntryListGetAlgorithm(options: KeyEntryListGetAlgorithmOptions): string {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_algorithm(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyEntryListGetMetadata(options: KeyEntryListGetMetadataOptions): string | null {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_metadata(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public keyEntryListGetName(options: KeyEntryListGetNameOptions): string {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_name(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyEntryListGetTags(options: KeyEntryListGetTagsOptions): string | null {\n const { keyEntryListHandle, index } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_get_tags(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n return handleNullableReturnPointer<string>(ret)\n }\n\n public keyEntryListLoadLocal(options: KeyEntryListLoadLocalOptions): LocalKeyHandle {\n const { index, keyEntryListHandle } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_entry_list_load_local(keyEntryListHandle, index, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFree(options: KeyFreeOptions): void {\n const { localKeyHandle } = serializeArguments(options)\n\n this.nativeAskar.askar_key_free(localKeyHandle)\n }\n\n public keyFromJwk(options: KeyFromJwkOptions): LocalKeyHandle {\n const { jwk } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_jwk(jwk, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromKeyExchange(options: KeyFromKeyExchangeOptions): LocalKeyHandle {\n const { algorithm, pkHandle, skHandle } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_key_exchange(algorithm, skHandle, pkHandle, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromPublicBytes(options: KeyFromPublicBytesOptions): LocalKeyHandle {\n const { publicKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_public_bytes(algorithm, publicKey, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSecretBytes(options: KeyFromSecretBytesOptions): LocalKeyHandle {\n const { secretKey, algorithm } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_secret_bytes(algorithm, secretKey, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSeed(options: KeyFromSeedOptions): LocalKeyHandle {\n const { algorithm, method, seed } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_from_seed(algorithm, seed, method, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyGenerate(options: KeyGenerateOptions): LocalKeyHandle {\n const { algorithm, ephemeral, keyBackend } = serializeArguments(options)\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_generate(algorithm, keyBackend, ephemeral, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyGetAlgorithm(options: KeyGetAlgorithmOptions): string {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_algorithm(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetEphemeral(options: KeyGetEphemeralOptions): number {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateInt32Buffer()\n\n const errorCode = this.nativeAskar.askar_key_get_ephemeral(localKeyHandle, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<number>(ret)\n }\n\n public keyGetJwkPublic(options: KeyGetJwkPublicOptions): string {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_public(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetJwkSecret(options: KeyGetJwkSecretOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_secret(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyGetJwkThumbprint(options: KeyGetJwkThumbprintOptions): string {\n const { localKeyHandle, algorithm } = serializeArguments(options)\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_jwk_thumbprint(localKeyHandle, algorithm, ret)\n this.handleError(errorCode)\n\n return handleReturnPointer<string>(ret)\n }\n\n public keyGetPublicBytes(options: KeyGetPublicBytesOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_public_bytes(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyGetSecretBytes(options: KeyGetSecretBytesOptions): Uint8Array {\n const { localKeyHandle } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_get_secret_bytes(localKeyHandle, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keySignMessage(options: KeySignMessageOptions): Uint8Array {\n const { localKeyHandle, message, sigType } = serializeArguments(options)\n const ret = allocateSecretBuffer()\n\n const errorCode = this.nativeAskar.askar_key_sign_message(localKeyHandle, message, sigType, ret)\n this.handleError(errorCode)\n const byteBuffer = handleReturnPointer<ByteBufferType>(ret)\n const uint8Array = secretBufferToUint8Array(byteBuffer)\n this.nativeAskar.askar_buffer_free(byteBuffer)\n\n return uint8Array\n }\n\n public keyUnwrapKey(options: KeyUnwrapKeyOptions): LocalKeyHandle {\n const { localKeyHandle, algorithm, ciphertext, nonce, tag } = serializeArguments({\n localKeyHandle: options.localKeyHandle,\n algorithm: options.algorithm,\n ciphertext: options.ciphertext,\n nonce: options.nonce ?? new Uint8Array(0),\n tag: options.tag ?? new Uint8Array(0),\n })\n const ret = allocatePointer()\n\n const errorCode = this.nativeAskar.askar_key_unwrap_key(localKeyHandle, algorithm, ciphertext, nonce, tag, ret)\n this.handleError(errorCode)\n\n const handle = handleReturnPointer<Uint8Array>(ret)\n return new LocalKeyHandle(handle)\n }\n\n public keyVerifySignature(options: KeyVerifySignatureOptions): boolean {\n const { localKeyHandle, sigType, message, signature } = serializeArguments(options)\n const ret = allocateInt8Buffer()\n\n const errorCode = this.nativeAskar.askar_key_verify_signature(localKeyHandle, message, signature, sigType, ret)\n this.handleError(errorCode)\n\n return Boolean(handleReturnPointer<number>(ret))\n }\n\n public keyWrapKey(options: KeyWrapKeyOptions): EncryptedBuffer {\n const { localKeyHandle, nonce, other } = serializeArguments({\n ...options,\n nonce: options.nonce ?? new Uint8Array(0),\n })\n const ret = allocateEncryptedBuffer()\n\n const errorCode = this.nativeAskar.askar_key_wrap_key(localKeyHandle, other, nonce, ret)\n this.handleError(errorCode)\n const encryptedBuffer = handleReturnPointer<EncryptedBufferType>(ret)\n const encryptedBufferClass = encryptedBufferStructToClass(encryptedBuffer)\n this.nativeAskar.askar_buffer_free(encryptedBuffer.secretBuffer)\n\n return encryptedBufferClass\n }\n\n public keyGetSupportedBackends(): string[] {\n const stringListHandlePtr = allocateStringListHandle()\n\n const keyGetSupportedBackendsErrorCode = this.nativeAskar.askar_key_get_supported_backends(stringListHandlePtr)\n this.handleError(keyGetSupportedBackendsErrorCode)\n const stringListHandle = stringListHandlePtr[0]\n\n const listCountPtr = allocateInt32Buffer()\n const stringListCountErrorCode = this.nativeAskar.askar_string_list_count(stringListHandle, listCountPtr)\n this.handleError(stringListCountErrorCode)\n const count = listCountPtr[0]\n\n const supportedBackends = []\n\n for (let i = 0; i < count; i++) {\n const strPtr = allocateStringBuffer()\n const errorCode = this.nativeAskar.askar_string_list_get_item(stringListHandle, i, strPtr)\n this.handleError(errorCode)\n supportedBackends.push(strPtr[0] as string)\n }\n this.nativeAskar.askar_string_list_free(stringListHandle)\n\n return supportedBackends\n }\n\n public scanFree(options: ScanFreeOptions): void {\n const { scanHandle } = serializeArguments(options)\n\n const errorCode = this.nativeAskar.askar_scan_free(scanHandle)\n this.handleError(errorCode)\n }\n\n public async scanNext(options: ScanNextOptions): Promise<EntryListHandle | null> {\n const { scanHandle } = serializeArguments(options)\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_scan_next(scanHandle, cb, cbId),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async scanStart(options: ScanStartOptions): Promise<ScanHandle> {\n const { category, limit, offset, profile, storeHandle, tagFilter, orderBy, descending } = serializeArguments({\n ...options,\n offset: options.offset ?? 0,\n limit: options.limit ?? -1,\n descending: options.descending ?? 0,\n })\n\n const handle = await this.promisify<number>(\n (cb, cbId) =>\n this.nativeAskar.askar_scan_start(\n storeHandle,\n profile,\n category,\n tagFilter,\n offset,\n limit,\n orderBy,\n descending,\n cb,\n cbId\n ),\n FFI_CALLBACK_SCAN_HANDLE\n )\n\n return ScanHandle.fromHandle(handle)\n }\n\n public async sessionClose(options: SessionCloseOptions): Promise<void> {\n const { commit, sessionHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_close(sessionHandle, commit, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionCount(options: SessionCountOptions): Promise<number> {\n const { sessionHandle, tagFilter, category } = serializeArguments(options)\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_count(sessionHandle, category, tagFilter, cb, cbId),\n FFI_CALLBACK_INT64\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionFetch(options: SessionFetchOptions): Promise<EntryListHandle | null> {\n const { name, category, sessionHandle, forUpdate } = serializeArguments(options)\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_session_fetch(sessionHandle, category, name, forUpdate, cb, cbId),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAll(options: SessionFetchAllOptions): Promise<EntryListHandle | null> {\n const { forUpdate, sessionHandle, tagFilter, limit, category, orderBy, descending } = serializeArguments({\n ...options,\n limit: options.limit ?? -1,\n descending: options.descending ?? 0,\n })\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) =>\n this.nativeAskar.askar_session_fetch_all(\n sessionHandle,\n category,\n tagFilter,\n limit,\n orderBy,\n descending,\n forUpdate,\n cb,\n cbId\n ),\n FFI_CALLBACK_ENTRY_LIST_HANDLE\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAllKeys(options: SessionFetchAllKeysOptions): Promise<KeyEntryListHandle | null> {\n const { forUpdate, limit, tagFilter, sessionHandle, algorithm, thumbprint } = serializeArguments({\n ...options,\n limit: options.limit ?? -1,\n })\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) =>\n this.nativeAskar.askar_session_fetch_all_keys(\n sessionHandle,\n algorithm,\n thumbprint,\n tagFilter,\n limit,\n forUpdate,\n cb,\n cbId\n ),\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchKey(options: SessionFetchKeyOptions): Promise<KeyEntryListHandle | null> {\n const { forUpdate, sessionHandle, name } = serializeArguments(options)\n\n const handle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_session_fetch_key(sessionHandle, name, forUpdate, cb, cbId),\n FFI_CALLBACK_KEY_ENTRY_LIST_HANDLE\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public async sessionInsertKey(options: SessionInsertKeyOptions): Promise<void> {\n const { name, sessionHandle, expiryMs, localKeyHandle, metadata, tags } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n })\n\n await this.promisify(\n (cb, cbId) =>\n this.nativeAskar.askar_session_insert_key(\n sessionHandle,\n localKeyHandle,\n name,\n metadata,\n tags,\n expiryMs,\n cb,\n cbId\n ),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionRemoveAll(options: SessionRemoveAllOptions): Promise<number> {\n const { sessionHandle, tagFilter, category } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_remove_all(sessionHandle, category, tagFilter, cb, cbId),\n FFI_CALLBACK_INT64\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionRemoveKey(options: SessionRemoveKeyOptions): Promise<void> {\n const { sessionHandle, name } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_remove_key(sessionHandle, name, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionStart(options: SessionStartOptions): Promise<SessionHandle> {\n const { storeHandle, profile, asTransaction } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_session_start(storeHandle, profile, asTransaction, cb, cbId),\n FFI_CALLBACK_SESSION_HANDLE\n )\n\n return SessionHandle.fromHandle(handle)\n }\n\n public async sessionUpdate(options: SessionUpdateOptions): Promise<void> {\n const { name, sessionHandle, category, expiryMs, tags, operation, value } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n value: options.value ?? new Uint8Array(0),\n })\n\n await this.promisify(\n (cb, cbId) =>\n this.nativeAskar.askar_session_update(\n sessionHandle,\n operation,\n category,\n name,\n value,\n tags,\n expiryMs,\n cb,\n cbId\n ),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async sessionUpdateKey(options: SessionUpdateKeyOptions): Promise<void> {\n const { expiryMs, tags, name, sessionHandle, metadata } = serializeArguments({\n ...options,\n expiryMs: options.expiryMs ?? -1,\n })\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_session_update_key(sessionHandle, name, metadata, tags, expiryMs, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeClose(options: StoreCloseOptions): Promise<void> {\n const { storeHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_close(storeHandle, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeCopyTo(options: StoreCopyToOptions): Promise<StoreHandle> {\n const { storeHandle, targetUri, passKey, keyMethod, recreate } = serializeArguments({\n ...options,\n recreate: options.recreate ?? 0,\n })\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_copy(storeHandle, targetUri, keyMethod, passKey, recreate, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(response)\n }\n\n public async storeCreateProfile(options: StoreCreateProfileOptions): Promise<string> {\n const { storeHandle, profile } = serializeArguments(options)\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_create_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public storeGenerateRawKey(options: StoreGenerateRawKeyOptions): string {\n const { seed } = serializeArguments({\n ...options,\n seed: options.seed ?? new Uint8Array(0),\n })\n const ret = allocateStringBuffer()\n\n const errorCode = this.nativeAskar.askar_store_generate_raw_key(seed, ret)\n this.handleError(errorCode)\n\n return ret[0] as string\n }\n\n public async storeGetDefaultProfile(options: StoreGetDefaultProfileOptions): Promise<string> {\n const { storeHandle } = serializeArguments(options)\n\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_get_default_profile(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeGetProfileName(options: StoreGetProfileNameOptions): Promise<string> {\n const { storeHandle } = serializeArguments(options)\n const response = await this.promisify<string>(\n (cb, cbId) => this.nativeAskar.askar_store_get_profile_name(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeListProfiles(options: StoreListProfilesOptions): Promise<string[]> {\n const { storeHandle } = serializeArguments(options)\n\n const listHandle = await this.promisify<Uint8Array>(\n (cb, cbId) => this.nativeAskar.askar_store_list_profiles(storeHandle, cb, cbId),\n FFI_CALLBACK_STRING_LIST_HANDLE\n )\n\n if (listHandle === null) {\n throw AskarError.customError({ message: 'Invalid handle' })\n }\n\n const counti32 = allocateInt32Buffer()\n const errorCode = this.nativeAskar.askar_string_list_count(listHandle, counti32)\n this.handleError(errorCode)\n const count = counti32[0]\n const ret = []\n const strval = allocateStringBuffer()\n for (let i = 0; i < count; i++) {\n const errorCode = this.nativeAskar.askar_string_list_get_item(listHandle, i, strval)\n this.handleError(errorCode)\n ret.push(strval[0] as string)\n }\n this.nativeAskar.askar_string_list_free(listHandle)\n return ret\n }\n\n public async storeListScans(options: StoreListScansOptions): Promise<ScanHandle[]> {\n const { storeHandle } = serializeArguments(options)\n const handleList = await this.promisify<FfiHandleListType>(\n (cb, cbId) => this.nativeAskar.askar_store_list_scans(storeHandle, cb, cbId),\n FFI_CALLBACK_HANDLE_LIST\n )\n\n if (!handleList) return []\n\n const scanHandleList = decodeHandleList(handleList).map((scanHandle) => ScanHandle.fromHandle(scanHandle))\n this.handleListFree({ handleList })\n\n return scanHandleList\n }\n\n public async storeListSessions(options: StoreListSessionsOptions): Promise<SessionHandle[]> {\n const { storeHandle } = serializeArguments(options)\n const handleList = await this.promisify<FfiHandleListType>(\n (cb, cbId) => this.nativeAskar.askar_store_list_sessions(storeHandle, cb, cbId),\n FFI_CALLBACK_HANDLE_LIST\n )\n\n if (!handleList) return []\n\n const sessionHandleList = decodeHandleList(handleList).map((sessionHandle) =>\n SessionHandle.fromHandle(sessionHandle)\n )\n this.handleListFree({ handleList })\n\n return sessionHandleList\n }\n\n public async storeOpen(options: StoreOpenOptions): Promise<StoreHandle> {\n const { profile, keyMethod, passKey, specUri } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_open(specUri, keyMethod, passKey, profile, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeProvision(options: StoreProvisionOptions): Promise<StoreHandle> {\n const { profile, passKey, keyMethod, specUri, recreate } = serializeArguments(options)\n\n const handle = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_provision(specUri, keyMethod, passKey, profile, recreate, cb, cbId),\n FFI_CALLBACK_STORE_HANDLE\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeRekey(options: StoreRekeyOptions): Promise<void> {\n const { passKey, keyMethod, storeHandle } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_rekey(storeHandle, keyMethod, passKey, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeRemove(options: StoreRemoveOptions): Promise<number> {\n const { specUri } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_remove(specUri, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRemoveProfile(options: StoreRemoveProfileOptions): Promise<number> {\n const { storeHandle, profile } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_remove_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeSetDefaultProfile(options: StoreSetDefaultProfileOptions): Promise<void> {\n const { storeHandle, profile } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_set_default_profile(storeHandle, profile, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async storeRenameProfile(options: StoreRenameProfileOptions): Promise<number> {\n const { storeHandle, fromProfile, toProfile } = serializeArguments(options)\n\n const response = await this.promisify<number>(\n (cb, cbId) => this.nativeAskar.askar_store_rename_profile(storeHandle, fromProfile, toProfile, cb, cbId),\n FFI_CALLBACK_INT8\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeCopyProfile(options: StoreCopyProfileOptions): Promise<void> {\n const { fromHandle, toHandle, fromProfile, toProfile } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_store_copy_profile(fromHandle, toHandle, fromProfile, toProfile, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n\n public async migrateIndySdk(options: MigrateIndySdkOptions): Promise<void> {\n const { specUri, kdfLevel, walletKey, walletName } = serializeArguments(options)\n\n await this.promisify(\n (cb, cbId) => this.nativeAskar.askar_migrate_indy_sdk(specUri, walletName, walletKey, kdfLevel, cb, cbId),\n FFI_CALLBACK_NO_RESULT\n )\n }\n}\n","import { NativeAskar } from '@openwallet-foundation/askar-shared'\nimport { NodeJSAskar } from './NodeJSAskar'\n\nexport const askarNodeJS = new NodeJSAskar()\nNativeAskar.register(askarNodeJS)\n\nexport * from '@openwallet-foundation/askar-shared'\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwallet-foundation/askar-nodejs",
|
|
3
|
-
"version": "0.7.0-alpha-
|
|
3
|
+
"version": "0.7.0-alpha-20261106181830",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Nodejs wrapper for Askar",
|
|
6
6
|
"main": "./build/index.mjs",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"scripts"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@openwallet-foundation/askar-shared": "0.7.0-alpha-
|
|
32
|
-
"koffi": "^3.3.
|
|
31
|
+
"@openwallet-foundation/askar-shared": "0.7.0-alpha-20261106181830",
|
|
32
|
+
"koffi": "^3.3.6"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.20.5",
|