From 48d568bc7d1addeabdcf273e15903e00ffe0e697 Mon Sep 17 00:00:00 2001 From: microshine Date: Sat, 27 Feb 2016 16:29:35 +0300 Subject: [PATCH] graphene-pk11 --- graphene-pk11/graphene-pk11-tests.ts | 31 + graphene-pk11/graphene-pk11.d.ts | 2554 ++++++++++++++++++++++++++ 2 files changed, 2585 insertions(+) create mode 100644 graphene-pk11/graphene-pk11-tests.ts create mode 100644 graphene-pk11/graphene-pk11.d.ts diff --git a/graphene-pk11/graphene-pk11-tests.ts b/graphene-pk11/graphene-pk11-tests.ts new file mode 100644 index 000000000..26c5b91cb --- /dev/null +++ b/graphene-pk11/graphene-pk11-tests.ts @@ -0,0 +1,31 @@ +/// + +import * as graphene from "graphene-pk11"; + +// Example of Hashing from README.MD + +let graphene = require("graphene-pk11"); +let Module = graphene.Module; + +let lib = "/usr/local/lib/softhsm/libsofthsm2.so"; + +let mod = Module.load(lib, "SoftHSM"); +mod.initialize(); + +let slot = mod.getSlots(0); +if (slot.flags & graphene.SlotFlag.TOKEN_PRESENT) { + let session = slot.open(); + + let digest = session.createDigest("sha1"); + digest.update("simple text 1"); + digest.update("simple text 2"); + let hash = digest.final(); + + console.log("Hash SHA1:", hash.toString("hex")); // Hash SHA1: e1dc1e52e9779cd69679b3e0af87d2e288190d34 + session.close(); +} +else { + console.error("Slot is not initialized"); +} + +mod.finalize(); \ No newline at end of file diff --git a/graphene-pk11/graphene-pk11.d.ts b/graphene-pk11/graphene-pk11.d.ts new file mode 100644 index 000000000..8d73366a6 --- /dev/null +++ b/graphene-pk11/graphene-pk11.d.ts @@ -0,0 +1,2554 @@ +// Type definitions for graphene-pk11 v2.0.0 +// Project: https://github.com/PeculiarVentures/graphene +// Definitions by: Stepan Miroshin +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +/** + * A simple layer for interacting with PKCS #11 / PKCS11 / CryptoKI for Node + * v2.0.0 + */ + +declare module "graphene-pk11" { + + type Callback = (err: Error, rv: number) => void; + type CK_PTR = Buffer; + + class Pkcs11 { + lib: any; + /** + * load a library with PKCS11 interface + * @param {string} libFile path to PKCS11 library + */ + constructor(libFile: string); + protected callFunction(funcName: string, args: any): number; + /** + * C_Initialize initializes the Cryptoki library. + * @param pInitArgs if this is not NULL_PTR, it gets + * cast to CK_C_INITIALIZE_ARGS_PTR + * and dereferenced + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Initialize(pInitArgs?: CK_PTR): number; + C_Initialize(pInitArgs: CK_PTR, cllback: Callback): void; + /** + * C_Finalize indicates that an application is done with the Cryptoki library. + * @param pReserved reserved. Should be NULL_PTR + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Finalize(pReserved?: CK_PTR): number; + C_Finalize(pReserved: CK_PTR, callback: Callback): void; + /** + * C_GetInfo returns general information about Cryptoki. + * @param pInfo location that receives information + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetInfo(pInfo: CK_PTR): number; + C_GetInfo(pInfo: CK_PTR, callback: Callback): void; + /** + * C_GetSlotList obtains a list of slots in the system. + * @param {boolean} tokenPresent only slots with tokens? + * @param pSlotList receives array of slot IDs + * @param pulCount receives number of slots + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetSlotList(tokenPresent: boolean, pSlotList: CK_PTR, pulCount: CK_PTR): number; + C_GetSlotList(tokenPresent: boolean, pSlotList: CK_PTR, pulCount: CK_PTR, callback: Callback): void; + /** + * C_GetSlotInfo obtains information about a particular slot in + * the system. + * @param {number} slotID the ID of the slot + * @param {Buffer} pInfo receives the slot information + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetSlotInfo(slotID: number, pInfo: CK_PTR): number; + C_GetSlotInfo(slotID: number, pInfo: CK_PTR, callback: Callback): void; + /** + * C_GetTokenInfo obtains information about a particular token + * in the system. + * @param {number} slotID ID of the token's slot + * @param {Buffer} pInfo receives the token information + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetTokenInfo(slotID: number, pInfo: Buffer): number; + C_GetTokenInfo(slotID: number, pInfo: Buffer, callback: Callback): void; + /** + * C_GetMechanismList obtains a list of mechanism types + * supported by a token. + * @param {number} slotID ID of the token's slot + * @param {number} pMechanismList gets mech. array + * @param {number} pulCount gets # of mechs + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetMechanismList(slotID: number, pMechanismList: Buffer, pulCount: Buffer): number; + C_GetMechanismList(slotID: number, pMechanismList: Buffer, pulCount: Buffer, callback: Callback): void; + /** C_GetMechanismInfo obtains information about a particular + * mechanism possibly supported by a token. + * @param {number} slotID ID of the token's slot + * @param {number} type type of mechanism + * @param {Buffer} pInfo receives mechanism info + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetMechanismInfo(slotID: number, type: number, pInfo: Buffer): number; + C_GetMechanismInfo(slotID: number, type: number, pInfo: Buffer, callback: Callback): void; + /** + * C_InitToken initializes a token. + * @param {number} slotID ID of the token's slot + * @param {Buffer} pPin the SO's initial PIN + * @param {number} ulPinLen length in bytes of the PIN + * @param {number} pLabel 32-byte token label (blank padded) + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_InitToken(slotID: number, pPin: Buffer, ulPinLen: number, pLabel: Buffer): number; + C_InitToken(slotID: number, pPin: Buffer, ulPinLen: number, pLabel: Buffer, callback: Callback): void; + /** + * C_InitPIN initializes the normal user's PIN. + * @param {number} hSession the session's handle + * @param {Buffer} pPin the normal user's PIN + * @param {number} ulPinLen length in bytes of the PIN + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_InitPIN(hSession: number, pPin: Buffer, ulPinLen: number): number; + C_InitPIN(hSession: number, pPin: Buffer, ulPinLen: number, callback: Callback): void; + /** + * C_SetPIN modifies the PIN of the user who is logged in. + * @param {number} hSession the session's handle + * @param {Buffer} pOldPin the old PIN + * @param {number} ulOldLen length of the old PIN + * @param {Buffer} pNewPin the new PIN + * @param {number} ulNewLen length of the new PIN + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SetPIN(hSession: any, pOldPin: Buffer, ulOldLen: number, pNewPin: Buffer, ulNewLen: number): number; + C_SetPIN(hSession: any, pOldPin: Buffer, ulOldLen: number, pNewPin: Buffer, ulNewLen: number, callback: Callback): void; + /** + * C_OpenSession opens a session between an application and a + * token. + * @param {number} slotID ID of the token's slot + * @param {number} flags from CK_SESSION_INFO + * @param {Buffer} pApplication passed to callback + * @param {Buffer} Notify callback function + * @param {Buffer} phSession gets session handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_OpenSession(slotID: number, flags: number, pApplication?: Buffer, notify?: Buffer, phSession?: Buffer): number; + C_OpenSession(slotID: number, flags: number, pApplication: Buffer, notify: Buffer, phSession: Buffer, callback: Callback): void; + /** + * C_CloseSession closes a session between an application and a token. + * @param {number} hSession the session's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_CloseSession(hSession: number): number; + C_CloseSession(hSession: number, callback: Callback): void; + /** + * C_CloseAllSessions closes all sessions with a token. + * @param {number} slotID ID of the token's slot + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_CloseAllSessions(slotID: number): number; + C_CloseAllSessions(slotID: number, callback: Callback): void; + /** + * C_GetSessionInfo obtains information about the session. + * @param {number} hSession the session's handle + * @param {Buffer} pInfo receives session info + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetSessionInfo(hSession: number, pInfo: Buffer): number; + C_GetSessionInfo(hSession: number, pInfo: Buffer, callback: Callback): void; + /** + * C_GetOperationState obtains the state of the cryptographic operation in a session. + * @param {number} hSession the session's handle + * @param {Buffer} pOperationState gets state + * @param {Buffer} pulOperationStateLen gets state length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetOperationState(hSession: number, pOperationState: Buffer, pulOperationStateLen: Buffer): number; + C_GetOperationState(hSession: number, pOperationState: Buffer, pulOperationStateLen: Buffer, callback: Callback): void; + /** + * C_SetOperationState restores the state of the cryptographic operation in a session. + * @param {number} hSession the session's handle + * @param {Buffer} pOperationState holds state + * @param {number} ulOperationStateLen holds holds state length + * @param {number} hEncryptionKey en/decryption key + * @param {number} hAuthenticationKey sign/verify key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SetOperationState(hSession: number, pOperationState: Buffer, ulOperationStateLen: number, hEncryptionKey: number, hAuthenticationKey: number): number; + C_SetOperationState(hSession: number, pOperationState: Buffer, ulOperationStateLen: number, hEncryptionKey: number, hAuthenticationKey: number, callback: Callback): void; + /** + * C_Login logs a user into a token. + * @param {number} hSession the session's handle + * @param {number} userType the user type + * @param {Buffer} pPin the user's PIN + * @param {number} ulPinLen the length of the PIN + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Login(hSession: number, userType: number, pPin: Buffer, ulPinLen: number): number; + C_Login(hSession: number, userType: number, pPin: Buffer, ulPinLen: number, callback: Callback): void; + /** + * C_Logout logs a user out from a token. + * @param {number} hSession the session's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Logout(hSession: number): number; + C_Logout(hSession: number, callback: Callback): void; + /** + * C_CreateObject creates a new object. + * @param {number} hSession the session's handle + * @param {Buffer} pTemplate the object's template + * @param {number} ulCount attributes in template + * @param {Buffer} phObject gets new object's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_CreateObject(hSession: number, pTemplate: Buffer, ulCount: number, phObject: Buffer): number; + C_CreateObject(hSession: number, pTemplate: Buffer, ulCount: number, phObject: Buffer, callback: Callback): void; + /** + * C_CopyObject copies an object, creating a new object for the copy. + * @param {number} hSession the session's handle + * @param {number} hObject the object's handle + * @param {Buffer} pTemplate template for new object + * @param {number} ulCount attributes in template + * @param {Buffer} phNewObject receives handle of copy + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_CopyObject(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number, phNewObject: Buffer): number; + C_CopyObject(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number, phNewObject: Buffer, callback: Callback): void; + /** + * C_DestroyObject destroys an object. + * @param {number} hSession the session's handle + * @param {number} hObject the object's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DestroyObject(hSession: number, hObject: number): number; + C_DestroyObject(hSession: number, hObject: number, callback: Callback): void; + /** + * C_GetObjectSize gets the size of an object in bytes. + * @param {number} hSession the session's handle + * @param {number} hObject the object's handle + * @param {Buffer} pulSize receives size of object + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetObjectSize(hSession: number, hObject: number, pulSize: Buffer): number; + C_GetObjectSize(hSession: number, hObject: number, pulSize: Buffer, callback: Callback): void; + /** + * C_GetAttributeValue obtains the value of one or more object attributes. + * @param {number} hSession the session's handle + * @param {number} hObject the object's handle + * @param {Buffer} pTemplate specifies attrs; gets vals + * @param {number} ulCount attributes in template + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetAttributeValue(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number): number; + C_GetAttributeValue(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number, callback: Callback): void; + /** + * C_SetAttributeValue modifies the value of one or more object attributes + * @param {number} hSession the session's handle + * @param {number} hObject the object's handle + * @param {Buffer} pTemplate specifies attrs and values + * @param {number} ulCount attributes in template + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SetAttributeValue(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number): number; + C_SetAttributeValue(hSession: number, hObject: number, pTemplate: Buffer, ulCount: number, callback: Callback): void; + /** + * C_FindObjectsInit initializes a search for token and session + * objects that match a template. + * @param {number} hSession the session's handle + * @param {Buffer} pTemplate attribute values to match + * @param {number} ulCount attrs in search template + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_FindObjectsInit(hSession: number, pTemplate: Buffer, ulCount: number): number; + C_FindObjectsInit(hSession: number, pTemplate: Buffer, ulCount: number, callback: Callback): void; + /** + * C_FindObjects continues a search for token and session + * objects that match a template, obtaining additional object + * handles. + * @param {number} hSession the session's handle + * @param {Buffer} phObject gets obj. handles + * @param {number} ulMaxObjectCount max handles to get + * @param {Buffer} pulObjectCount actual # returned + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_FindObjects(hSession: number, phObject: Buffer, ulMaxObjectCount: number, pulObjectCount: Buffer): number; + C_FindObjects(hSession: number, phObject: Buffer, ulMaxObjectCount: number, pulObjectCount: Buffer, callback: Callback): void; + /** + * C_FindObjectsFinal finishes a search for token and session objects. + * @param {number} hSession the session's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_FindObjectsFinal(hSession: number): number; + C_FindObjectsFinal(hSession: number, callback: Callback): void; + /** + * C_EncryptInit initializes an encryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the encryption mechanism + * @param {number} hKey handle of encryption key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_EncryptInit(hSession: number, pMechanism: Buffer, hKey: number): number; + C_EncryptInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_Encrypt encrypts single-part data. + * @param {number} hSession the session's handle + * @param {Buffer} pData the plaintext data + * @param {number} ulDataLen bytes of plaintext + * @param {Buffer} pEncryptedData gets ciphertext + * @param {Buffer} pulEncryptedDataLen gets c-text size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Encrypt(hSession: number, pData: Buffer, ulDataLen: number, pEncryptedData: Buffer, pulEncryptedDataLen: Buffer): number; + C_Encrypt(hSession: number, pData: Buffer, ulDataLen: number, pEncryptedData: Buffer, pulEncryptedDataLen: Buffer, callback: Callback): void; + /** + * C_EncryptUpdate continues a multiple-part encryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pPart the plaintext data + * @param {number} ulPartLen plaintext data len + * @param {Buffer} pEncryptedPart gets ciphertext + * @param {Buffer} pulEncryptedPartLen gets c-text size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_EncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer): number; + C_EncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer, callback: Callback): void; + /** + * C_EncryptFinal finishes a multiple-part encryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pLastEncryptedPart last c-text + * @param {Buffer} pulLastEncryptedPartLen gets last size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_EncryptFinal(hSession: number, pLastEncryptedPart: Buffer, pulLastEncryptedPartLen: Buffer): number; + C_EncryptFinal(hSession: number, pLastEncryptedPart: Buffer, pulLastEncryptedPartLen: Buffer, callback: Callback): void; + /** + * C_DecryptInit initializes a decryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the decryption mechanism + * @param {number} hKey handle of decryption key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DecryptInit(hSession: number, pMechanism: Buffer, hKey: number): any; + C_DecryptInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_Decrypt decrypts encrypted data in a single part. + * @param {number} hSession the session's handle + * @param {Buffer} pEncryptedData ciphertext + * @param {number} ulEncryptedDataLen ciphertext length + * @param {Buffer} pData gets plaintext + * @param {number} pulDataLen gets p-text size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Decrypt(hSession: number, pEncryptedData: Buffer, ulEncryptedDataLen: number, pData: Buffer, pulDataLen: Buffer): number; + C_Decrypt(hSession: number, pEncryptedData: Buffer, ulEncryptedDataLen: number, pData: Buffer, pulDataLen: Buffer, callback: Callback): void; + /** + * C_DecryptUpdate continues a multiple-part decryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pEncryptedPart encrypted data + * @param {number} ulEncryptedPartLen input length + * @param {Buffer} pPart gets plaintext + * @param {Buffer} pulPartLen p-text size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DecryptUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer): number; + C_DecryptUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer, callback: Callback): void; + /** + * C_DecryptFinal finishes a multiple-part decryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pLastPart gets plaintext + * @param {Buffer} pulLastPartLen p-text size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DecryptFinal(hSession: number, pLastPart: Buffer, pulLastPartLen: Buffer): number; + C_DecryptFinal(hSession: number, pLastPart: Buffer, pulLastPartLen: Buffer, callback: Callback): void; + /** + * C_DigestInit initializes a message-digesting operation. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the digesting mechanism + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DigestInit(hSession: number, pMechanism: Buffer): number; + C_DigestInit(hSession: number, pMechanism: Buffer, callback: Callback): void; + /** + * C_Digest digests data in a single part. + * @param {number} hSession the session's handle + * @param {Buffer} pData data to be digested + * @param {number} ulDataLen bytes of data to digest + * @param {Buffer} pDigest gets the message digest + * @param {Buffer} pulDigestLen gets digest length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Digest(hSession: number, pData: Buffer, ulDataLen: number, pDigest: Buffer, pulDigestLen: Buffer): number; + C_Digest(hSession: number, pData: Buffer, ulDataLen: number, pDigest: Buffer, pulDigestLen: Buffer, callback: Callback): void; + /** + * C_DigestUpdate continues a multiple-part message-digesting operation. + * @param {number} hSession the session's handle + * @param {Buffer} pPart data to be digested + * @param {number} ulPartLen bytes of data to be digested + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DigestUpdate(hSession: number, pPart: Buffer, ulPartLen: number): number; + C_DigestUpdate(hSession: number, pPart: Buffer, ulPartLen: number, callback: Callback): void; + /** + * C_DigestKey continues a multi-part message-digesting operation, + * by digesting the value of a secret key as part of + * the data already digested. + * @param {number} hSession the session's handle + * @param {number} hKey secret key to digest + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DigestKey(hSession: number, hKey: number): number; + C_DigestKey(hSession: number, hKey: number, callback: Callback): void; + /** + * C_DigestFinal finishes a multiple-part message-digesting + * operation. + * @param {number} hSession the session's handle + * @param {Buffer} pDigest gets the message digest + * @param {Buffer} pulDigestLen gets byte count of digest + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DigestFinal(hSession: number, pDigest: Buffer, pulDigestLen: Buffer): number; + C_DigestFinal(hSession: number, pDigest: Buffer, pulDigestLen: Buffer, callback: Callback): void; + /** + * C_SignInit initializes a signature (private key encryption) + * operation, where the signature is (will be) an appendix to + * the data, and plaintext cannot be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the signature mechanism + * @param {number} hKey handle of signature key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignInit(hSession: number, pMechanism: Buffer, hKey: number): number; + C_SignInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_Sign signs (encrypts with private key) data in a single + * part, where the signature is (will be) an appendix to the + * data, and plaintext cannot be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pData the data to sign + * @param {number} ulDataLen count of bytes to sign + * @param {Buffer} pSignature gets the signature + * @param {Buffer} pulSignatureLen gets signature length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Sign(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, pulSignatureLen: Buffer): number; + C_Sign(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, pulSignatureLen: Buffer, callback: Callback): void; + /** + * C_SignUpdate continues a multiple-part signature operation, + * where the signature is (will be) an appendix to the data, + * and plaintext cannot be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pPart the data to sign + * @param {number} ulPartLen count of bytes to sign + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignUpdate(hSession: number, pPart: Buffer, ulPartLen: Buffer): number; + C_SignUpdate(hSession: number, pPart: Buffer, ulPartLen: Buffer, callback: Callback): void; + /** + * C_SignFinal finishes a multiple-part signature operation, + * returning the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pSignature gets the signature + * @param {Buffer} pulSignatureLen gets signature length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignFinal(hSession: number, pSignature: Buffer, pulSignatureLen: Buffer): number; + C_SignFinal(hSession: number, pSignature: Buffer, pulSignatureLen: Buffer, callback: Callback): void; + /** + * C_SignRecoverInit initializes a signature operation, where + * the data can be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the signature mechanism + * @param {number} hKey handle of the signature key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignRecoverInit(hSession: number, pMechanism: Buffer, hKey: number): number; + C_SignRecoverInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_SignRecover signs data in a single operation, where the + * data can be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pData the data to sign + * @param {number} ulDataLen count of bytes to sign + * @param {Buffer} pSignature gets the signature + * @param {Buffer} pulSignatureLen gets signature length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignRecover(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, pulSignatureLen: Buffer): number; + C_SignRecover(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, pulSignatureLen: Buffer, callback: Callback): void; + /** + * C_VerifyInit initializes a verification operation, where the + * signature is an appendix to the data, and plaintext cannot + * cannot be recovered from the signature (e.g. DSA). + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the verification mechanism + * @param {number} hKey verification key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_VerifyInit(hSession: number, pMechanism: Buffer, hKey: number): number; + C_VerifyInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_Verify verifies a signature in a single-part operation, + * where the signature is an appendix to the data, and plaintext + * cannot be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pData signed data + * @param {number} ulDataLen length of signed data + * @param {Buffer} pSignature signature + * @param {number} ulSignatureLen signature length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_Verify(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, ulSignatureLen: Buffer): number; + C_Verify(hSession: number, pData: Buffer, ulDataLen: number, pSignature: Buffer, ulSignatureLen: Buffer, callback: Callback): void; + /** + * C_VerifyUpdate continues a multiple-part verification + * operation, where the signature is an appendix to the data, + * and plaintext cannot be recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pPart signed data + * @param {number} ulPartLen length of signed data + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_VerifyUpdate(hSession: number, pPart: Buffer, ulPartLen: number): number; + C_VerifyUpdate(hSession: number, pPart: Buffer, ulPartLen: number, callback: Callback): void; + /** + * C_VerifyFinal finishes a multiple-part verification + * operation, checking the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pSignature signature to verify + * @param {number} ulSignatureLen signature length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_VerifyFinal(hSession: number, pSignature: Buffer, ulSignatureLen: number): number; + C_VerifyFinal(hSession: number, pSignature: Buffer, ulSignatureLen: number, callback: Callback): void; + /** + * C_VerifyRecoverInit initializes a signature verification + * operation, where the data is recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the verification mechanism + * @param {number} hKey verification key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_VerifyRecoverInit(hSession: number, pMechanism: Buffer, hKey: number): number; + C_VerifyRecoverInit(hSession: number, pMechanism: Buffer, hKey: number, callback: Callback): void; + /** + * C_VerifyRecover verifies a signature in a single-part + * operation, where the data is recovered from the signature. + * @param {number} hSession the session's handle + * @param {Buffer} pSignature signature to verify + * @param {number} ulSignatureLen signature length + * @param {Buffer} pData gets signed data + * @param {Buffer} pulDataLen gets signed data len + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_VerifyRecover(hSession: number, pSignature: Buffer, ulSignatureLen: number, pData: Buffer, pulDataLen: Buffer): number; + C_VerifyRecover(hSession: number, pSignature: Buffer, ulSignatureLen: number, pData: Buffer, pulDataLen: Buffer, callback: Callback): void; + /** + * C_DigestEncryptUpdate continues a multiple-part digesting + * and encryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pPart the plaintext data + * @param {number} ulPartLen plaintext length + * @param {Buffer} pEncryptedPart gets ciphertext + * @param {Buffer} pulEncryptedPartLen gets c-text length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DigestEncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer): number; + C_DigestEncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer, callback: Callback): void; + /** + * C_DecryptDigestUpdate continues a multiple-part decryption and + * digesting operation. + * @param {number} hSession the session's handle + * @param {Buffer} pEncryptedPart ciphertext + * @param {number} ulEncryptedPartLen ciphertext length + * @param {Buffer} pPart gets plaintext + * @param {Buffer} pulPartLen gets plaintext len + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DecryptDigestUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer): number; + C_DecryptDigestUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer, callback: Callback): void; + /** + * C_SignEncryptUpdate continues a multiple-part signing and + * encryption operation. + * @param {number} hSession the session's handle + * @param {Buffer} pPart the plaintext data + * @param {number} ulPartLen plaintext length + * @param {Buffer} pEncryptedPart gets ciphertext + * @param {Buffer} pulEncryptedPartLen gets c-text length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SignEncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer): number; + C_SignEncryptUpdate(hSession: number, pPart: Buffer, ulPartLen: number, pEncryptedPart: Buffer, pulEncryptedPartLen: Buffer, callback: Callback): void; + /** + * C_DecryptVerifyUpdate continues a multiple-part decryption and + * verify operation. + * @param {number} hSession the session's handle + * @param {Buffer} pEncryptedPart ciphertext + * @param {number} ulEncryptedPartLen ciphertext length + * @param {Buffer} pPart gets plaintext + * @param {Buffer} pulPartLen gets p-text length + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DecryptVerifyUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer): number; + C_DecryptVerifyUpdate(hSession: number, pEncryptedPart: Buffer, ulEncryptedPartLen: number, pPart: Buffer, pulPartLen: Buffer, callback: Callback): void; + /** + * C_GenerateKey generates a secret key, creating a new key object. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism key generation mech. + * @param {Buffer} pTemplate template for new key + * @param {number} ulCount # of attrs in template + * @param {Buffer} phKey gets handle of new key + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GenerateKey(hSession: number, pMechanism: Buffer, pTemplate: Buffer, ulCount: number, phKey: Buffer): number; + C_GenerateKey(hSession: number, pMechanism: Buffer, pTemplate: Buffer, ulCount: number, phKey: Buffer, callback: Callback): any; + /** + * C_GenerateKeyPair generates a public-key/private-key pair, + * creating new key objects. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism key-gen mech. + * @param {Buffer} pPublicKeyTemplate template for public key + * @param {number} ulPublicKeyAttributeCount public attrs + * @param {Buffer} pPrivateKeyTemplate template for private key + * @param {number} ulPrivateKeyAttributeCount private attrs + * @param {Buffer} phPublicKey gets public key handle + * @param {Buffer} phPrivateKey gets private key handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GenerateKeyPair(hSession: number, pMechanism: Buffer, pPublicKeyTemplate: Buffer, ulPublicKeyAttributeCount: number, pPrivateKeyTemplate: Buffer, ulPrivateKeyAttributeCount: number, phPublicKey: Buffer, phPrivateKey: Buffer): number; + C_GenerateKeyPair(hSession: number, pMechanism: Buffer, pPublicKeyTemplate: Buffer, ulPublicKeyAttributeCount: number, pPrivateKeyTemplate: Buffer, ulPrivateKeyAttributeCount: number, phPublicKey: Buffer, phPrivateKey: Buffer, callback: Callback): void; + /** + * C_WrapKey wraps (i.e., encrypts) a key. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism the wrapping mechanism + * @param {number} hWrappingKey wrapping key + * @param {number} hKey key to be wrapped + * @param {Buffer} pWrappedKey gets wrapped key + * @param {Buffer} pulWrappedKeyLen gets wrapped key size + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_WrapKey(hSession: number, pMechanism: Buffer, hWrappingKey: number, hKey: number, pWrappedKey: Buffer, pulWrappedKeyLen: Buffer): number; + C_WrapKey(hSession: number, pMechanism: Buffer, hWrappingKey: number, hKey: number, pWrappedKey: Buffer, pulWrappedKeyLen: Buffer, callback: Callback): void; + /** + * C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new + * key object. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism unwrapping mech. + * @param {Buffer} pWrappedKey the wrapped key + * @param {number} ulWrappedKeyLen wrapped key len + * @param {Buffer} pTemplate new key template + * @param {number} ulAttributeCount template length + * @param {Buffer} pTemplate new key template + * @param {number} ulAttributeCount template length + * @param {Buffer} phKey gets new handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_UnwrapKey(hSession: number, pMechanism: Buffer, hUnwrappingKey: number, pWrappedKey: Buffer, ulWrappedKeyLen: number, pTemplate: Buffer, ulAttributeCount: number, phKey: Buffer): number; + C_UnwrapKey(hSession: number, pMechanism: Buffer, hUnwrappingKey: number, pWrappedKey: Buffer, ulWrappedKeyLen: number, pTemplate: Buffer, ulAttributeCount: number, phKey: Buffer, callback: Callback): void; + /** + * C_DeriveKey derives a key from a base key, creating a new key object. + * @param {number} hSession the session's handle + * @param {Buffer} pMechanism key deriv. mech. + * @param {number} hBaseKey base key + * @param {Buffer} pTemplate new key template + * @param {number} ulAttributeCount template length + * @param {Buffer} phKey gets new handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_DeriveKey(hSession: number, pMechanism: Buffer, hBaseKey: number, pTemplate: Buffer, ulAttributeCount: number, phKey: Buffer): number; + C_DeriveKey(hSession: number, pMechanism: Buffer, hBaseKey: number, pTemplate: Buffer, ulAttributeCount: number, phKey: Buffer, callback: Callback): void; + /** + * C_SeedRandom mixes additional seed material into the token's + * random number generator. + * @param {number} hSession the session's handle + * @param {Buffer} pSeed the seed material + * @param {number} ulSeedLen length of seed material + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_SeedRandom(hSession: number, pSeed: Buffer, ulSeedLen: number): number; + C_SeedRandom(hSession: number, pSeed: Buffer, ulSeedLen: number, callback: Callback): void; + /** + * C_GenerateRandom generates random data. + * @param {number} hSession the session's handle + * @param {Buffer} pRandomData receives the random data + * @param {number} ulRandomLen # of bytes to generate + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GenerateRandom(hSession: number, pRandomData: Buffer, ulRandomLen: number): number; + C_GenerateRandom(hSession: number, pRandomData: Buffer, ulRandomLen: number, callback: Callback): void; + /** + * C_GetFunctionStatus is a legacy function; it obtains an + * updated status of a function running in parallel with an + * application. + * @param {number} hSession the session's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_GetFunctionStatus(hSession: number): number; + C_GetFunctionStatus(hSession: number, callback: Callback): void; + /** + * C_CancelFunction is a legacy function; it cancels a function + * running in parallel. + * @param {number} hSession the session's handle + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_CancelFunction(hSession: number): number; + C_CancelFunction(hSession: number, callback: Callback): void; + /** + * C_WaitForSlotEvent waits for a slot event (token insertion, + * removal, etc.) to occur. + * @param {number} flags blocking/nonblocking flag + * @param {Buffer} pSlot location that receives the slot ID + * @param {Buffer} pRserved reserved. Should be NULL_PTR + * @param {Callback} callback callback function with PKCS11 result value + * @returns void PKCS11 result value + */ + C_WaitForSlotEvent(flags: number, pSlot: Buffer, pRserved: Buffer): number; + C_WaitForSlotEvent(flags: number, pSlot: Buffer, pRserved: Buffer, callback: Callback): number; + } + + enum KeyType { + RSA, + DSA, + DH, + ECDSA, + EC, + X9_42_DH, + KEA, + GENERIC_SECRET, + RC2, + RC4, + DES, + DES2, + DES3, + CAST, + CAST3, + CAST5, + CAST128, + RC5, + IDEA, + SKIPJACK, + BATON, + JUNIPER, + CDMF, + AES, + GOSTR3410, + GOSTR3411, + GOST28147, + BLOWFISH, + TWOFISH, + SECURID, + HOTP, + ACTI, + CAMELLIA, + ARIA, + } + enum KeyGenMechanism { + AES, + RSA, + RSA_X9_31, + DSA, + DH_PKCS, + DH_X9_42, + GOSTR3410, + GOST28147, + RC2, + RC4, + DES, + DES2, + SECURID, + ACTI, + CAST, + CAST3, + CAST5, + CAST128, + RC5, + IDEA, + GENERIC_SECRET, + SSL3_PRE_MASTER, + CAMELLIA, + ARIA, + SKIPJACK, + KEA, + BATON, + ECDSA, + EC, + JUNIPER, + TWOFISH, + } + + enum MechanismEnum { + RSA_PKCS_KEY_PAIR_GEN, + RSA_PKCS, + RSA_9796, + RSA_X_509, + MD2_RSA_PKCS, + MD5_RSA_PKCS, + SHA1_RSA_PKCS, + RIPEMD128_RSA_PKCS, + RIPEMD160_RSA_PKCS, + RSA_PKCS_OAEP, + RSA_X9_31_KEY_PAIR_GEN, + RSA_X9_31, + SHA1_RSA_X9_31, + RSA_PKCS_PSS, + SHA1_RSA_PKCS_PSS, + DSA_KEY_PAIR_GEN, + DSA, + DSA_SHA1, + DH_PKCS_KEY_PAIR_GEN, + DH_PKCS_DERIVE, + X9_42_DH_KEY_PAIR_GEN, + X9_42_DH_DERIVE, + X9_42_DH_HYBRID_DERIVE, + X9_42_MQV_DERIVE, + SHA256_RSA_PKCS, + SHA384_RSA_PKCS, + SHA512_RSA_PKCS, + SHA256_RSA_PKCS_PSS, + SHA384_RSA_PKCS_PSS, + SHA512_RSA_PKCS_PSS, + SHA224_RSA_PKCS, + SHA224_RSA_PKCS_PSS, + RC2_KEY_GEN, + RC2_ECB, + RC2_CBC, + RC2_MAC, + RC2_MAC_GENERAL, + RC2_CBC_PAD, + RC4_KEY_GEN, + RC4, + DES_KEY_GEN, + DES_ECB, + DES_CBC, + DES_MAC, + DES_MAC_GENERAL, + DES_CBC_PAD, + DES2_KEY_GEN, + DES3_KEY_GEN, + DES3_ECB, + DES3_CBC, + DES3_MAC, + DES3_MAC_GENERAL, + DES3_CBC_PAD, + CDMF_KEY_GEN, + CDMF_ECB, + CDMF_CBC, + CDMF_MAC, + CDMF_MAC_GENERAL, + CDMF_CBC_PAD, + DES_OFB64, + DES_OFB8, + DES_CFB64, + DES_CFB8, + MD2, + MD2_HMAC, + MD2_HMAC_GENERAL, + MD5, + MD5_HMAC, + MD5_HMAC_GENERAL, + SHA1, + SHA, + SHA_1, + SHA_1_HMAC, + SHA_1_HMAC_GENERAL, + RIPEMD128, + RIPEMD128_HMAC, + RIPEMD128_HMAC_GENERAL, + RIPEMD160, + RIPEMD160_HMAC, + RIPEMD160_HMAC_GENERAL, + SHA256, + SHA256_HMAC, + SHA256_HMAC_GENERAL, + SHA224, + SHA224_HMAC, + SHA224_HMAC_GENERAL, + SHA384, + SHA384_HMAC, + SHA384_HMAC_GENERAL, + SHA512, + SHA512_HMAC, + SHA512_HMAC_GENERAL, + SECURID_KEY_GEN, + SECURID, + HOTP_KEY_GEN, + HOTP, + ACTI, + ACTI_KEY_GEN, + CAST_KEY_GEN, + CAST_ECB, + CAST_CBC, + CAST_MAC, + CAST_MAC_GENERAL, + CAST_CBC_PAD, + CAST3_KEY_GEN, + CAST3_ECB, + CAST3_CBC, + CAST3_MAC, + CAST3_MAC_GENERAL, + CAST3_CBC_PAD, + CAST5_KEY_GEN, + CAST128_KEY_GEN, + CAST5_ECB, + CAST128_ECB, + CAST5_CBC, + CAST128_CBC, + CAST5_MAC, + CAST128_MAC, + CAST5_MAC_GENERAL, + CAST128_MAC_GENERAL, + CAST5_CBC_PAD, + CAST128_CBC_PAD, + RC5_KEY_GEN, + RC5_ECB, + RC5_CBC, + RC5_MAC, + RC5_MAC_GENERAL, + RC5_CBC_PAD, + IDEA_KEY_GEN, + IDEA_ECB, + IDEA_CBC, + IDEA_MAC, + IDEA_MAC_GENERAL, + IDEA_CBC_PAD, + GENERIC_SECRET_KEY_GEN, + CONCATENATE_BASE_AND_KEY, + CONCATENATE_BASE_AND_DATA, + CONCATENATE_DATA_AND_BASE, + XOR_BASE_AND_DATA, + EXTRACT_KEY_FROM_KEY, + SSL3_PRE_MASTER_KEY_GEN, + SSL3_MASTER_KEY_DERIVE, + SSL3_KEY_AND_MAC_DERIVE, + SSL3_MASTER_KEY_DERIVE_DH, + TLS_PRE_MASTER_KEY_GEN, + TLS_MASTER_KEY_DERIVE, + TLS_KEY_AND_MAC_DERIVE, + TLS_MASTER_KEY_DERIVE_DH, + TLS_PRF, + SSL3_MD5_MAC, + SSL3_SHA1_MAC, + MD5_KEY_DERIVATION, + MD2_KEY_DERIVATION, + SHA1_KEY_DERIVATION, + SHA256_KEY_DERIVATION, + SHA384_KEY_DERIVATION, + SHA512_KEY_DERIVATION, + SHA224_KEY_DERIVATION, + PBE_MD2_DES_CBC, + PBE_MD5_DES_CBC, + PBE_MD5_CAST_CBC, + PBE_MD5_CAST3_CBC, + PBE_MD5_CAST5_CBC, + PBE_MD5_CAST128_CBC, + PBE_SHA1_CAST5_CBC, + PBE_SHA1_CAST128_CBC, + PBE_SHA1_RC4_128, + PBE_SHA1_RC4_40, + PBE_SHA1_DES3_EDE_CBC, + PBE_SHA1_DES2_EDE_CBC, + PBE_SHA1_RC2_128_CBC, + PBE_SHA1_RC2_40_CBC, + PKCS5_PBKD2, + PBA_SHA1_WITH_SHA1_HMAC, + WTLS_PRE_MASTER_KEY_GEN, + WTLS_MASTER_KEY_DERIVE, + WTLS_MASTER_KEY_DERIVE_DH_ECC, + WTLS_PRF, + WTLS_SERVER_KEY_AND_MAC_DERIVE, + WTLS_CLIENT_KEY_AND_MAC_DERIVE, + KEY_WRAP_LYNKS, + KEY_WRAP_SET_OAEP, + CMS_SIG, + KIP_DERIVE, + KIP_WRAP, + KIP_MAC, + CAMELLIA_KEY_GEN, + CAMELLIA_ECB, + CAMELLIA_CBC, + CAMELLIA_MAC, + CAMELLIA_MAC_GENERAL, + CAMELLIA_CBC_PAD, + CAMELLIA_ECB_ENCRYPT_DATA, + CAMELLIA_CBC_ENCRYPT_DATA, + CAMELLIA_CTR, + ARIA_KEY_GEN, + ARIA_ECB, + ARIA_CBC, + ARIA_MAC, + ARIA_MAC_GENERAL, + ARIA_CBC_PAD, + ARIA_ECB_ENCRYPT_DATA, + ARIA_CBC_ENCRYPT_DATA, + SKIPJACK_KEY_GEN, + SKIPJACK_ECB64, + SKIPJACK_CBC64, + SKIPJACK_OFB64, + SKIPJACK_CFB64, + SKIPJACK_CFB32, + SKIPJACK_CFB16, + SKIPJACK_CFB8, + SKIPJACK_WRAP, + SKIPJACK_PRIVATE_WRAP, + SKIPJACK_RELAYX, + KEA_KEY_PAIR_GEN, + KEA_KEY_DERIVE, + FORTEZZA_TIMESTAMP, + BATON_KEY_GEN, + BATON_ECB128, + BATON_ECB96, + BATON_CBC128, + BATON_COUNTER, + BATON_SHUFFLE, + BATON_WRAP, + ECDSA_KEY_PAIR_GEN, + EC_KEY_PAIR_GEN, + ECDSA, + ECDSA_SHA1, + ECDSA_SHA224, + ECDSA_SHA256, + ECDSA_SHA384, + ECDSA_SHA512, + ECDH1_DERIVE, + ECDH1_COFACTOR_DERIVE, + ECMQV_DERIVE, + JUNIPER_KEY_GEN, + JUNIPER_ECB128, + JUNIPER_CBC128, + JUNIPER_COUNTER, + JUNIPER_SHUFFLE, + JUNIPER_WRAP, + FASTHASH, + AES_KEY_GEN, + AES_ECB, + AES_CBC, + AES_MAC, + AES_MAC_GENERAL, + AES_CBC_PAD, + AES_CTR, + AES_CMAC, + AES_CMAC_GENERAL, + BLOWFISH_KEY_GEN, + BLOWFISH_CBC, + TWOFISH_KEY_GEN, + TWOFISH_CBC, + AES_GCM, + AES_CCM, + AES_KEY_WRAP, + AES_KEY_WRAP_PAD, + DES_ECB_ENCRYPT_DATA, + DES_CBC_ENCRYPT_DATA, + DES3_ECB_ENCRYPT_DATA, + DES3_CBC_ENCRYPT_DATA, + AES_ECB_ENCRYPT_DATA, + AES_CBC_ENCRYPT_DATA, + GOSTR3410_KEY_PAIR_GEN, + GOSTR3410, + GOSTR3410_WITH_GOSTR3411, + GOSTR3410_KEY_WRAP, + GOSTR3410_DERIVE, + GOSTR3411, + GOSTR3411_HMAC, + GOST28147_KEY_GEN, + GOST28147_ECB, + GOST28147, + GOST28147_MAC, + GOST28147_KEY_WRAP, + DSA_PARAMETER_GEN, + DH_PKCS_PARAMETER_GEN, + X9_42_DH_PARAMETER_GEN, + VENDOR_DEFINED, + } + + interface IParams { + toCKI(): Buffer; + } + + interface IAlgorithm { + name: string; + params: Buffer | IParams; + } + + type MechanismType = MechanismEnum | KeyGenMechanism | IAlgorithm | string; + + enum MechanismFlag { + /** + * `True` if the mechanism is performed by the device; `false` if the mechanism is performed in software + */ + HW, + /** + * `True` if the mechanism can be used with encrypt function + */ + ENCRYPT, + /** + * `True` if the mechanism can be used with decrypt function + */ + DECRYPT, + /** + * `True` if the mechanism can be used with digest function + */ + DIGEST, + /** + * `True` if the mechanism can be used with sign function + */ + SIGN, + /** + * `True` if the mechanism can be used with sign recover function + */ + SIGN_RECOVER, + /** + * `True` if the mechanism can be used with verify function + */ + VERIFY, + /** + * `True` if the mechanism can be used with verify recover function + */ + VERIFY_RECOVER, + /** + * `True` if the mechanism can be used with geberate function + */ + GENERATE, + /** + * `True` if the mechanism can be used with generate key pair function + */ + GENERATE_KEY_PAIR, + /** + * `True` if the mechanism can be used with wrap function + */ + WRAP, + /** + * `True` if the mechanism can be used with unwrap function + */ + UNWRAP, + /** + * `True` if the mechanism can be used with derive function + */ + DERIVE, + } + class Mechanism extends HandleObject { + protected slotHandle: number; + /** + * the minimum size of the key for the mechanism + * _whether this is measured in bits or in bytes is mechanism-dependent_ + */ + minKeySize: number; + /** + * the maximum size of the key for the mechanism + * _whether this is measured in bits or in bytes is mechanism-dependent_ + */ + maxKeySize: number; + /** + * bit flag specifying mechanism capabilities + */ + flags: number; + /** + * returns string name from MechanismEnum + */ + name: string; + constructor(handle: number, slotHandle: number, lib: Pkcs11); + protected getInfo(): void; + static create(alg: MechanismType): Buffer; + static vendor(jsonFile: string): any; + static vendor(name: string, value: number): any; + } + + class MechanismCollection extends Collection { + protected slotHandle: number; + constructor(items: Array, slotHandle: number, lib: Pkcs11, classType?: typeof Mechanism); + /** + * returns item from collection by index + * @param {number} index of element in collection `[0..n]` + */ + items(index: number): Mechanism; + } + + /** + * Definition for the base key object class + * - defines the object class `CKO_PUBLIC_KEY`, `CKO_PRIVATE_KEY` and `CKO_SECRET_KEY` for type `CK_OBJECT_CLASS` + * as used in the `CKA_CLASS` attribute of objects + */ + class Key extends Storage { + /** + * Type of key + * - Must be specified when object is created with `C_CreateObject` + * - Must be specified when object is unwrapped with `C_UnwrapKey` + */ + type: KeyType; + /** + * Key identifier for key (default empty) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification + * of the attribute during the course of a `C_CopyObject` call. + */ + id: Buffer; + /** + * Start date for the key (default empty) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification + * of the attribute during the course of a `C_CopyObject` call. + */ + startDate: Date; + /** + * End date for the key (default empty) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification + * of the attribute during the course of a `C_CopyObject` call. + */ + endDate: Date; + /** + * `CK_TRUE` if key supports key derivation + * (i.e., if other keys can be derived from this one (default `CK_FALSE`) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification + * of the attribute during the course of a `C_CopyObject` call. + * @returns boolean + */ + derive: boolean; + /** + * `CK_TRUE` only if key was either * generated locally (i.e., on the token) + * with a `C_GenerateKey` or `C_GenerateKeyPair` call * created with a `C_CopyObject` call + * as a copy of a key which had its `CKA_LOCAL` attribute set to `CK_TRUE` + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + local: boolean; + /** + * Identifier of the mechanism used to generate the key material. + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + mechanism: KeyGenMechanism; + allowedMechanisms: void; + } + + + class DomainParameters extends Storage { + /** + * Type of key the domain parameters can be used to generate. + */ + keyType: KeyType; + /** + * `CK_TRUE` only if domain parameters were either * generated locally (i.e., on the token) + * with a `C_GenerateKey` * created with a `C_CopyObject` call as a copy of domain parameters + * which had its `CKA_LOCAL` attribute set to `CK_TRUE` + */ + local: boolean; + } + + /** + * Data objects (object class `CKO_DATA`) hold information defined by an application. + * Other than providing access to it, Cryptoki does not attach any special meaning to a data object + */ + class Data extends Storage { + /** + * Description of the application that manages the object (default empty) + */ + application: string; + /** + * DER-encoding of the object identifier indicating the data object type (default empty) + */ + objectId: Buffer; + /** + * Value of the object (default empty) + */ + value: Buffer; + } + + interface ITemplate { + /** + * CKA_CLASS + */ + class?: number; + /** + * CKA_TOKEN + */ + token?: boolean; + /** + * CKA_PRIVATE + */ + private?: boolean; + /** + * CKA_LABEL + */ + label?: string; + /** + * CKA_APPLICATION + */ + application?: string; + /** + * CKA_VALUE + */ + value?: Buffer; + /** + * CKA_OBJECT_ID + */ + objectId?: Buffer; + /** + * CKA_CERTIFICATE_TYPE + */ + certType?: number; + /** + * CKA_ISSUER + */ + issuer?: Buffer; + /** + * CKA_SERIAL_NUMBER + */ + serial?: Buffer; + /** + * CKA_AC_ISSUER + */ + issuerAC?: Buffer; + /** + * CKA_OWNER + */ + owner?: Buffer; + /** + * CKA_ATTR_TYPES + */ + attrTypes?: Buffer; + /** + * CKA_TRUSTED + */ + trusted?: boolean; + /** + * CKA_CERTIFICATE_CATEGORY + */ + certCategory?: number; + /** + * CKA_JAVA_MIDP_SECURITY_DOMAIN + */ + javaDomain?: number; + /** + * CKA_URL + */ + url?: string; + /** + * CKA_HASH_OF_SUBJECT_PUBLIC_KEY + */ + ski?: Buffer; + /** + * CKA_HASH_OF_ISSUER_PUBLIC_KEY + */ + aki?: Buffer; + /** + * CKA_NAME_HASH_ALGORITHM + */ + digestName?: number; + /** + * CKA_CHECK_VALUE + */ + checkValue?: Buffer; + /** + * CKA_KEY_TYPE + */ + keyType?: number; + /** + * CKA_SUBJECT + */ + subject?: Buffer; + /** + * CKA_ID + */ + id?: Buffer; + /** + * CKA_SENSITIVE + */ + sensitive?: boolean; + /** + * CKA_ENCRYPT + */ + encrypt?: boolean; + /** + * CKA_DECRYPT + */ + decrypt?: boolean; + /** + * CKA_WRAP + */ + wrap?: boolean; + /** + * CKA_UNWRAP + */ + unwrap?: boolean; + /** + * CKA_SIGN + */ + sign?: boolean; + /** + * CKA_SIGN_RECOVER + */ + signRecover?: boolean; + /** + * CKA_VERIFY + */ + verify?: boolean; + /** + * CKA_VERIFY_RECOVER + */ + verifyRecover?: boolean; + /** + * CKA_DERIVE + */ + derive?: boolean; + /** + * CKA_START_DATE + */ + startDate?: Date; + /** + * CKA_END_DATE + */ + endDate?: Date; + /** + * CKA_MODULUS + */ + modulus?: Buffer; + /** + * CKA_MODULUS_BITS + */ + modulusBits?: number; + /** + * CKA_PUBLIC_EXPONENT + */ + publicExponent?: Buffer; + /** + * CKA_PRIVATE_EXPONEN + */ + privateExponent?: Buffer; + /** + * CKA_PRIME_1 + */ + prime1?: Buffer; + /** + * CKA_PRIME_2 + */ + prime2?: Buffer; + /** + * CKA_EXPONENT_1 + */ + exp1?: Buffer; + /** + * CKA_EXPONENT_2 + */ + exp2?: Buffer; + /** + * CKA_COEFFICIEN + */ + coefficient?: Buffer; + /** + * CKA_PRIME + */ + prime?: Buffer; + /** + * CKA_SUBPRIME + */ + subprime?: Buffer; + /** + * CKA_BASE + */ + base?: Buffer; + /** + * CKA_PRIME_BITS + */ + primeBits?: number; + /** + * CKA_SUBPRIME_BITS + */ + subprimeBits?: number; + /** + * CKA_VALUE_BITS + */ + valueBits?: number; + /** + * CKA_VALUE_LEN + */ + valueLen?: number; + /** + * CKA_EXTRACTABLE + */ + extractable?: boolean; + /** + * CKA_LOCAL + */ + local?: boolean; + /** + * CKA_NEVER_EXTRACTABLE + */ + neverExtractable?: boolean; + /** + * CKA_ALWAYS_SENSITIVE + */ + alwaysSensitive?: boolean; + /** + * CKA_KEY_GEN_MECHANISM + */ + keyGenMechanism?: number; + /** + * CKA_MODIFIABLE + */ + modifiable?: boolean; + /** + * CKA_COPYABLE + */ + copyable?: boolean; + /** + * CKA_ECDSA_PARAMS + */ + paramsECDSA?: Buffer; + paramsEC?: Buffer; + /** + * CKA_EC_POINT + */ + pointEC?: Buffer; + /** + * CKA_SECONDARY_AUTH + */ + secondaryAuth?: boolean; + /** + * CKA_AUTH_PIN_FLAGS + */ + authPinFlags?: Buffer; + /** + * CKA_ALWAYS_AUTHENTICATE + */ + alwaysAuth?: boolean; + /** + * CKA_WRAP_WITH_TRUSTED + */ + wrapWithTrusted?: boolean; + /** + * CKA_WRAP_TEMPLATE + */ + wrapTemplate?: any; + /** + * CKA_UNWRAP_TEMPLATE + */ + unwrapTemplate?: any; + /** + * CKA_OTP_FORMAT + */ + otpFormat?: any; + /** + * CKA_OTP_LENGTH + */ + otpLength?: any; + /** + * CKA_OTP_TIME_INTERVAL + */ + otpTimeInterval?: any; + /** + * CKA_OTP_USER_FRIENDLY_MODE + */ + otpUserFriendlyMode?: any; + /** + * CKA_OTP_CHALLENGE_REQUIREMENT + */ + otpChallengeReq?: any; + /** + * CKA_OTP_TIME_REQUIREMENT + */ + otpTimeReq?: any; + /** + * CKA_OTP_COUNTER_REQUIREMENT + */ + otpCounterReq?: any; + /** + * CKA_OTP_PIN_REQUIREMENT + */ + otppinReq?: any; + /** + * CKA_OTP_COUNTER + */ + otpCounter?: any; + /** + * CKA_OTP_TIME + */ + otpTime?: any; + /** + * CKA_OTP_USER_IDENTIFIER + */ + OtpUserId?: any; + /** + * CKA_OTP_SERVICE_IDENTIFIER + */ + otpServiceId?: any; + /** + * CKA_OTP_SERVICE_LOGO + */ + otpServiceLogo?: any; + /** + * CKA_OTP_SERVICE_LOGO_TYPE + */ + otpServiceLogoType?: any; + /** + * CKA_HW_FEATURE_TYPE + */ + hwFeatureType?: any; + /** + * CKA_RESET_ON_INIT + */ + resetOnInit?: any; + /** + * CKA_HAS_RESET + */ + hasReset?: any; + /** + * CKA_PIXEL_X + */ + pixelX?: any; + /** + * CKA_PIXEL_Y + */ + pixelY?: any; + /** + * CKA_RESOLUTION + */ + resolution?: any; + /** + * CKA_CHAR_ROWS + */ + charRows?: any; + /** + * CKA_CHAR_COLUMNS + */ + charCols?: any; + /** + * CKA_COLOR + */ + color?: any; + /** + * CKA_BITS_PER_PIXEL + */ + bitsPerPixel?: any; + /** + * CKA_CHAR_SETS + */ + charSets?: any; + /** + * CKA_ENCODING_METHODS + */ + encMethod?: any; + /** + * CKA_MIME_TYPES + */ + mimeTypes?: any; + /** + * CKA_MECHANISM_TYPE + */ + mechanismType?: any; + /** + * CKA_REQUIRED_CMS_ATTRIBUTES + */ + requiredCmsAttrs?: any; + /** + * CKA_DEFAULT_CMS_ATTRIBUTES + */ + defaultCmsAttrs?: any; + /** + * CKA_SUPPORTED_CMS_ATTRIBUTES + */ + suportedCmsAttrs?: any; + /** + * CKA_ALLOWED_MECHANISMS + */ + allowedMechanisms?: any; + } + class Attribute { + protected $value: Buffer; + type: number; + name: string; + convertType: string; + length: number; + value: any; + constructor(type: number, value?: any); + constructor(type: string, value?: any); + get(): any; + set(template: any): void; + } + class Template { + protected attrs: Attribute[]; + length: number; + constructor(template: string); + constructor(template: ITemplate); + set(v: any): Template; + ref(): Buffer; + serialize(): any; + } + + class BaseObject { + protected lib: Pkcs11; + constructor(lib?: Pkcs11); + } + class HandleObject extends BaseObject { + /** + * handle to pkcs11 object + */ + handle: number; + constructor(handle: number, lib: Pkcs11); + protected getInfo(): void; + } + + enum ObjectClass { + DATA, + CERTIFICATE, + PUBLIC_KEY, + PRIVATE_KEY, + SECRET_KEY, + HW_FEATURE, + DOMAIN_PARAMETERS, + MECHANISM, + OTP_KEY, + } + + class SessionObject extends HandleObject { + /** + * Session + */ + session: Session; + /** + * gets the size of an object in bytes + */ + size: number; + constructor(object: SessionObject); + constructor(handle: number, session: Session, lib: Pkcs11); + /** + * copies an object, creating a new object for the copy + * @param {ITemplate} template template for the new object + */ + copy(template: ITemplate): SessionObject; + /** + * destroys an object + */ + destroy(): void; + getAttribute(attr: string): ITemplate; + getAttribute(attrs: ITemplate): ITemplate; + setAttribute(attrs: string, value: any): any; + setAttribute(attrs: ITemplate): any; + protected get(name: string): any; + protected set(name: string, value: any): void; + class: ObjectClass; + toType(): T; + } + + class SessionObjectCollection extends Collection { + session: Session; + items(index: number): SessionObject; + constructor(items: Array, session: Session, lib: Pkcs11, classType?: any); + } + + /** + * Private key objects (object class `CKO_PRIVATE_KEY`) hold private keys + */ + class PrivateKey extends Key { + /** + * DER-encoding of the key subject name (default empty) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + */ + subject: Buffer; + /** + * `CK_TRUE` if key is sensitive + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Attribute cannot be changed once set to CK_TRUE. It becomes a read only attribute. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + sensitive: boolean; + /** + * `CK_TRUE` if key supports decryption + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + decrypt: boolean; + /** + * `CK_TRUE` if key supports signatures where the signature is an appendix to the data + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + sign: boolean; + /** + * `CK_TRUE` if key supports signatures where the data can be recovered from the signature + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + signRecover: boolean; + /** + * `CK_TRUE` if key supports unwrapping (i.e., can be used to unwrap other keys) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + unwrap: boolean; + /** + * `CK_TRUE` if key is extractable and can be wrapped + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Attribute cannot be changed once set to `CK_FALSE`. It becomes a read only attribute. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + extractable: boolean; + /** + * `CK_TRUE` if key has always had the `CKA_SENSITIVE` attribute set to `CK_TRUE` + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + alwaysSensitive: boolean; + /** + * `CK_TRUE` if key has never had the `CKA_EXTRACTABLE` attribute set to `CK_TRUE` + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + neverExtractable: boolean; + /** + * `CK_TRUE` if the key can only be wrapped with a wrapping key + * that has `CKA_TRUSTED` set to `CK_TRUE`. Default is `CK_FALSE`. + * - Attribute cannot be changed once set to `CK_TRUE`. It becomes a read only attribute. + */ + wrapTrusted: boolean; + /** + * For wrapping keys. The attribute template to apply to any keys unwrapped + * using this wrapping key. Any user supplied template is applied after this template + * as if the object has already been created. + */ + template: void; + alwaysAuthenticate: boolean; + } + + /** + * Public key objects (object class CKO_PUBLIC_KEY) hold public keys + */ + class PublicKey extends Key { + /** + * DER-encoding of the key subject name (default empty) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + */ + subject: Buffer; + /** + * `CK_TRUE` if key supports encryption + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + encrypt: boolean; + /** + * `CK_TRUE` if key supports verification where the signature is an appendix to the data + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + verify: boolean; + /** + * `CK_TRUE` if key supports verification where the data is recovered from the signature + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + verifyRecover: boolean; + /** + * `CK_TRUE` if key supports wrapping (i.e., can be used to wrap other keys) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + wrap: boolean; + /** + * The key can be trusted for the application that it was created. + * - The wrapping key can be used to wrap keys with `CKA_WRAP_WITH_TRUSTED` set to `CK_TRUE`. + * - Can only be set to CK_TRUE by the SO user. + */ + trusted: boolean; + /** + * For wrapping keys. The attribute template to match against any keys wrapped using this wrapping key. + * Keys that do not match cannot be wrapped. + */ + template: void; + } + + /** + * Secret key objects (object class `CKO_SECRET_KEY`) hold secret keys. + */ + class SecretKey extends Key { + /** + * `CK_TRUE` if key is sensitive + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Attribute cannot be changed once set to `CK_TRUE`. It becomes a read only attribute. + */ + sensitive: boolean; + /** + * `CK_TRUE` if key supports encryption + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + encrypt: boolean; + /** + * `CK_TRUE` if key supports decryption + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + decrypt: boolean; + /** + * `CK_TRUE` if key supports verification (i.e., of authentication codes) where the signature is an appendix to the data + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + verify: boolean; + /** + * `CK_TRUE` if key supports signatures (i.e., authentication codes) where the signature is an appendix to the data + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + sign: boolean; + /** + * `CK_TRUE` if key supports wrapping (i.e., can be used to wrap other keys) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + wrap: boolean; + /** + * `CK_TRUE` if key supports unwrapping (i.e., can be used to unwrap other keys) + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + unwrap: boolean; + /** + * `CK_TRUE` if key is extractable and can be wrapped + * - May be modified after object is created with a `C_SetAttributeValue` call, + * or in the process of copying object with a `C_CopyObject` call. + * However, it is possible that a particular token may not permit modification of the attribute + * during the course of a `C_CopyObject` call. + * - Attribute cannot be changed once set to `CK_FALSE`. It becomes a read only attribute. + * - Default value is token-specific, and may depend on the values of other attributes. + */ + extractable: boolean; + /** + * `CK_TRUE` if key has always had the `CKA_SENSITIVE` attribute set to `CK_TRUE` + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + alwaysSensitive: boolean; + /** + * `CK_TRUE` if key has never had the `CKA_EXTRACTABLE` attribute set to `CK_TRUE` + * - Must not be specified when object is created with `C_CreateObject`. + * - Must not be specified when object is generated with `C_GenerateKey` or `C_GenerateKeyPair`. + * - Must not be specified when object is unwrapped with `C_UnwrapKey`. + */ + neverExtractable: boolean; + /** + * Key checksum + */ + checkValue: Buffer; + /** + * `CK_TRUE` if the key can only be wrapped with a wrapping key + * that has `CKA_TRUSTED` set to `CK_TRUE`. Default is `CK_FALSE`. + * - Attribute cannot be changed once set to `CK_TRUE`. It becomes a read only attribute. + */ + wrapTrusted: boolean; + /** + * The wrapping key can be used to wrap keys with `CKA_WRAP_WITH_TRUSTED` set to `CK_TRUE`. + * - Can only be set to CK_TRUE by the SO user. + */ + trusted: boolean; + /** + * For wrapping keys. + * The attribute template to match against any keys wrapped using this wrapping key. + * Keys that do not match cannot be wrapped. + */ + wrapTemplate: void; + /** + * For wrapping keys. + * The attribute template to apply to any keys unwrapped using this wrapping key. + * Any user supplied template is applied after this template as if the object has already been created. + */ + unwrapTemplate: void; + } + + + interface ISlotInfo { + slotDescription: string; + manufacturerID: string; + flags: number; + hardwareVersion: IVersion; + firmwareVersion: IVersion; + } + + enum SlotFlag { + /** + * `True` if a token is present in the slot (e.g., a device is in the reader) + */ + TOKEN_PRESENT, + /** + * `True` if the reader supports removable devices + */ + REMOVABLE_DEVICE, + /** + * True if the slot is a hardware slot, as opposed to a software slot implementing a "soft token" + */ + HW_SLOT, + } + + interface IVersion { + major: number; + minor: number; + } + interface IModuleInfo { + cryptokiVersion: IVersion; + manufacturerID: string; + flags: number; + libraryDescription: string; + libraryVersion: IVersion; + } + + class Collection { + protected items_: Array; + protected classType: any; + protected lib: Pkcs11; + constructor(items: Array, lib: Pkcs11, classType: any); + /** + * returns length of collection + */ + length: number; + /** + * returns item from collection by index + * @param {number} index of element in collection `[0..n]` + */ + items(index: number): T; + } + + enum SessionOpenFlag { + /** + * session is r/w + */ + RW_SESSION, + /** + * no parallel + */ + SERIAL_SESSION, + } + enum SessionFlag { + /** + * `True` if the session is read/write; `false` if the session is read-only + */ + RW_SESSION, + /** + * This flag is provided for backward compatibility, and should always be set to `true` + */ + SERIAL_SESSION, + } + enum UserType { + /** + * Security Officer + */ + SO, + /** + * User + */ + USER, + /** + * Context specific + */ + CONTEXT_SPECIFIC, + } + interface IKeyPair { + privateKey: PrivateKey; + publicKey: PublicKey; + } + /** + * provides information about a session + */ + class Session extends HandleObject { + constructor(handle: number, slot: Slot, lib: Pkcs11); + slot: Slot; + /** + * the state of the session + */ + state: number; + /** + * bit flags that define the type of session + */ + flags: number; + /** + * an error code defined by the cryptographic device. Used for errors not covered by Cryptoki + */ + deviceError: number; + protected getInfo(): void; + /** + * closes a session between an application and a token + */ + close(): void; + /** + * initializes the normal user's PIN + * @param {string} pin the normal user's PIN + */ + initPin(pin: string): void; + /** + * modifies the PIN of the user who is logged in + * @param {string} oldPin + * @param {string} newPin + */ + setPin(oldPin: string, newPin: string): void; + /** + * obtains a copy of the cryptographic operations state of a session, encoded as a string of bytes + */ + getOperationState(): Buffer; + /** + * restores the cryptographic operations state of a session + * from a string of bytes obtained with getOperationState + * @param {Buffer} state the saved state + * @param {number} encryptionKey holds key which will be used for an ongoing encryption + * or decryption operation in the restored session + * (or 0 if no encryption or decryption key is needed, + * either because no such operation is ongoing in the stored session + * or because all the necessary key information is present in the saved state) + * @param {number} authenticationKey holds a handle to the key which will be used for an ongoing signature, + * MACing, or verification operation in the restored session + * (or 0 if no such key is needed, either because no such operation is ongoing in the stored session + * or because all the necessary key information is present in the saved state) + */ + setOperationState(state: Buffer, encryptionKey?: number, authenticationKey?: number): void; + /** + * logs a user into a token + * @param {string} pin the user's PIN. + * - This standard allows PIN values to contain any valid `UTF8` character, + * but the token may impose subset restrictions + * @param {} userType the user type. Default is `USER` + */ + login(pin: string, userType?: UserType): void; + /** + * logs a user out from a token + */ + logout(): void; + /** + * creates a new object + * - Only session objects can be created during a read-only session. + * - Only public objects can be created unless the normal user is logged in. + * @param {ITemplate} template the object's template + */ + create(template: ITemplate): SessionObject; + /** + * removes all session objects matched to template + * - if template is null, removes all session objects + * - returns a number of destroied session objects + * @param {ITemplate} template template + */ + destroy(template: ITemplate): number; + /** + * @param {SessionObject} object + */ + destroy(object: SessionObject): number; + destroy(): number; + /** + * removes all session objects + * - returns a number of destroied session objects + */ + clear(): number; + /** + * returns a collection of session objects mached to template + * @param template template + * @param callback optional callback function wich is called for each founded object + * - if callback function returns false, it breaks find function. + */ + find(callback?: (obj: SessionObject) => any): SessionObjectCollection; + find(template: ITemplate, callback?: (obj: SessionObject) => any): SessionObjectCollection; + /** + * Returns object from session by handle + * @param {number} handle handle of object + * @returns T + */ + getObject(handle: number): T; + /** + * generates a secret key or set of domain parameters, creating a new object. + * @param mechanism generation mechanism + * @param template template for the new key or set of domain parameters + */ + generateKey(mechanism: MechanismType, template?: ITemplate): SecretKey; + generateKey(mechanism: MechanismType, template: ITemplate, callback: (err, key: SecretKey) => void): void; + generateKeyPair(mechanism: MechanismType, publicTemplate: ITemplate, privateTemplate: ITemplate): IKeyPair; + createSign(alg: MechanismType, key: Key): Sign; + createVerify(alg: MechanismType, key: Key): Verify; + createCipher(alg: MechanismType, key: Key): Cipher; + createDecipher(alg: MechanismType, key: Key): Decipher; + createDigest(alg: MechanismType): Digest; + wrapKey(alg: MechanismType, wrappingKey: Key, key: Key): Buffer; + unwrapKey(alg: MechanismType, unwrappingKey: Key, wrappedKey: Buffer, template: ITemplate): Key; + /** + * derives a key from a base key, creating a new key object + * @param {MechanismType} alg key deriv. mech + * @param {Key} baseKey base key + * @param {ITemplate} template new key template + */ + deriveKey(alg: MechanismType, baseKey: Key, template: ITemplate): SecretKey; + /** + * generates random data + * @param {number} size \# of bytes to generate + */ + generateRandom(size: number): Buffer; + } + + enum TokenFlag { + RNG, + WRITE_PROTECTED, + LOGIN_REQUIRED, + USER_PIN_INITIALIZED, + RESTORE_KEY_NOT_NEEDED, + CLOCK_ON_TOKEN, + PROTECTED_AUTHENTICATION_PATH, + DUAL_CRYPTO_OPERATIONS, + TOKEN_INITIALIZED, + SECONDARY_AUTHENTICATION, + USER_PIN_COUNT_LOW, + USER_PIN_FINAL_TRY, + USER_PIN_LOCKED, + USER_PIN_TO_BE_CHANGED, + SO_PIN_COUNT_LOW, + SO_PIN_FINAL_TRY, + SO_PIN_LOCKED, + SO_PIN_TO_BE_CHANGED, + } + class Token extends HandleObject { + /** + * application-defined label, assigned during token initialization. + * - Must be padded with the blank character (' '). + * - Should __not__ be null-terminated. + */ + label: string; + /** + * ID of the device manufacturer. + * - Must be padded with the blank character (' '). + * - Should __not__ be null-terminated. + */ + manufacturerID: string; + /** + * model of the device. + * - Must be padded with the blank character (' '). + * - Should __not__ be null-terminated. + */ + model: string; + /** + * character-string serial number of the device. + * - Must be padded with the blank character (' '). + * - Should __not__ be null-terminated. + */ + serialNumber: string; + /** + * bit flags indicating capabilities and status of the device + */ + flags: number; + /** + * maximum number of sessions that can be opened with the token at one time by a single application + */ + maxSessionCount: number; + /** + * number of sessions that this application currently has open with the token + */ + sessionCount: number; + /** + * maximum number of read/write sessions that can be opened + * with the token at one time by a single application + */ + maxRwSessionCount: number; + /** + * number of read/write sessions that this application currently has open with the token + */ + rwSessionCount: number; + /** + * maximum length in bytes of the PIN + */ + maxPinLen: number; + /** + * minimum length in bytes of the PIN + */ + minPinLen: number; + /** + * the total amount of memory on the token in bytes in which public objects may be stored + */ + totalPublicMemory: number; + /** + * the amount of free (unused) memory on the token in bytes for public objects + */ + freePublicMemory: number; + /** + * the total amount of memory on the token in bytes in which private objects may be stored + */ + totalPrivateMemory: number; + /** + * the amount of free (unused) memory on the token in bytes for private objects + */ + freePrivateMemory: number; + /** + * version number of hardware + */ + hardwareVersion: IVersion; + /** + * version number of firmware + */ + firmwareVersion: IVersion; + /** + * current time as a character-string of length 16, + * represented in the format YYYYMMDDhhmmssxx + */ + utcTime: Date; + constructor(handle: number, lib: Pkcs11); + protected getInfo(): void; + } + + class Slot extends HandleObject implements ISlotInfo { + slotDescription: string; + manufacturerID: string; + flags: number; + hardwareVersion: IVersion; + firmwareVersion: IVersion; + module: Module; + constructor(handle: number, module: Module, lib: Pkcs11); + protected getInfo(): void; + getToken(): Token; + /** + * returns list of `MechanismInfo` + */ + getMechanisms(): MechanismCollection; + /** + * initializes a token + * @param {string} pin the SO's initial PIN + * @param {string} label label of the token + */ + initToken(pin: string, label: string): void; + /** + * opens a session between an application and a token in a particular slot + * @parsm flags indicates the type of session + */ + open(flags?: number): Session; + /** + * closes all sessions an application has with a token + */ + closeAll(): void; + } + + class SlotCollection extends Collection { + module: Module; + items(index: number): Slot; + constructor(items: Array, module: Module, lib: Pkcs11, classType?: any); + } + + class Module extends BaseObject implements IModuleInfo { + libFile: string; + libName: string; + /** + * Cryptoki interface version + */ + cryptokiVersion: IVersion; + /** + * blank padded manufacturer ID + */ + manufacturerID: string; + /** + * must be zero + */ + flags: number; + /** + * blank padded library description + */ + libraryDescription: string; + /** + * version of library + */ + libraryVersion: IVersion; + constructor(lib: Pkcs11); + protected getInfo(): void; + /** + * initializes the Cryptoki library + */ + initialize(): void; + /** + * indicates that an application is done with the Cryptoki library + */ + finalize(): void; + /** + * obtains a list of slots in the system + * @param {number} index index of an element in collection + * @param {number} tokenPresent only slots with tokens. Default `True` + */ + getSlots(index: number, tokenPresent?: boolean): Slot; + /** + * @param {number} tokenPresent only slots with tokens. Default `True` + */ + getSlots(tokenPresent?: boolean): SlotCollection; + /** + * loads pkcs11 lib + */ + static load(libFile: string, libName?: string): Module; + } + + class Cipher { + session: Session; + lib: Pkcs11; + constructor(session: Session, alg: MechanismType, key: Key, lib: Pkcs11); + protected init(alg: MechanismType, key: Key): void; + update(text: string): Buffer; + update(data: Buffer): Buffer; + final(): Buffer; + } + + class Decipher { + session: Session; + lib: Pkcs11; + constructor(session: Session, alg: MechanismType, key: Key, lib: Pkcs11); + protected init(alg: MechanismType, key: Key): void; + update(text: string): Buffer; + update(data: Buffer): Buffer; + final(): Buffer; + } + + class Digest { + session: Session; + lib: Pkcs11; + constructor(session: Session, alg: MechanismType, lib: Pkcs11); + protected init(alg: MechanismType): void; + update(text: string): any; + update(data: Buffer): any; + final(): Buffer; + } + + class Sign { + session: Session; + lib: Pkcs11; + constructor(session: Session, alg: MechanismType, key: Key, lib: Pkcs11); + protected init(alg: MechanismType, key: Key): void; + update(text: string): any; + update(data: Buffer): any; + final(): Buffer; + } + + class Verify { + session: Session; + lib: Pkcs11; + constructor(session: Session, alg: MechanismType, key: Key, lib: Pkcs11); + protected init(alg: MechanismType, key: Key): void; + update(text: string): any; + update(data: Buffer): any; + final(signature: Buffer): boolean; + } + + +} \ No newline at end of file