UniKey API Reference for Delphi Language
UniKey API Reference
Find a UniKey dongle
API Prototype
function UniKey__Find(pHandle: pWord; pSetting1: pLongWord; pSetting2: pLongWord); DWORD; stdcall;
Description
Check if a specific UniKey is attached to the USB port. This is the first API to start a UniKey session.
Parameters
| Parameter | Description |
|---|---|
| *pHandle | [out] Dongle handle |
| *pSetting1 | *[in] Working Mode (UniKey PRO only), useless for UniKey STD |
| [out] Hardware ID | |
| *pSetting2 | *[in] Access Mode (UniKey PRO only), useless for UniKey STD(UniKey PRO only) |
| [out] Number of dongle attached , useless for UniKey STD |
Return values
| Result | Value | Description |
|---|---|---|
| SUCCESS | 0 | Success |
| ERROR_UNIKEY_NO_UNIEKY | 200 | No UniKey dongle |
For UniKey PRO (Network UniKey), *pSetting specifies the working mode. If you do not specify the value in *lp1, the working mode will be read from the NetUniKey.ini.
Find the Next UniKey dongle
API Prototype
function UniKey__Find_Next(pHandle: pWord; pSetting1: pLongWord; pSetting2: pLongWord): DWORD; stdcall;
Description
Check if another UniKey is attached to the USB port.
Parameters
| Parameter | Description |
|---|---|
| *pHandle | [out] Dongle handle |
| *pSetting1 | *[in] Working Mode (UniKey PRO only), useless for UniKey STD |
| [out] Hardware ID | |
| *pSetting2 | *[in] Access Mode (UniKey PRO only), useless for UniKey STD(UniKeyPro only) |
| [out] Number of dongle attached , useless for UniKey STD |
Return values
| Result | Value | Meaning |
|---|---|---|
| SUCCESS | 0 | Success |
| ERROR_UNIKEY_NOMORE | 214 | No more dongle |
| ERROR_UNIKEY_NEED_FIND | 215 | No Find before Find_Next |
Logon UniKey Dongle
API Prototype
function UniKey__User_Logon(pHandle: pWord; pPassword1: pWord; pPassword2: pWord): DWORD; stdcall;
For UniKey Drive, the API Prototype is UniKey_User_Logon(WORD* pHandle, DWORD* pPassword1, DWORD* pPassword2);
Description
Logon a UniKey dongle with specified passwords. This API should be called in the released software in order to improve security.
Parameters
| Parameter | Description |
|---|---|
| *pPassword1 | [in]Password 1 |
| *pPassword2 | [in]Password 2 |
| *pHandle | [out] Dongle handle |
Return values
| Result | Value | Description |
|---|---|---|
| SUCCESS | 0 | Success |
| ERROR_UNIKEY_NOT_FOUND | 200 | No UniKey dongle |
| ERROR_UNIKEY_INVALID_PASSWORD | 201 | UniKey dongle found, but Basic passwords are incorrect |
| ERROR_UNIKEY_INVALID_PASSWORD_OR_ID | 202 | Wrong password or UniKey HID |
Logon UniKey Dongle in vendor mode
API Prototype
function UniKey__Vender_Logon(pHandle: pWord; pPassword1: pWord; pPassword2: pWord; pPassword3: pWord; pPassword4: pWord): DWORD; stdcall;
For UniKey Drive, the API Prototype
is UniKey_Vender_Logon(WORD* pHandle, DWORD* pPassword1, DWORD* pPassword2, DWORD* pPassword3, DWORD* pPassword4);
Description
Logon a UniKey dongle in vendor mode with specified passwords. This API helps software vendors to logon the UniKey dongle in vendor mode, and get the full permission to UniKey dongle.
We do NOT advise you to enclose this API in the final released software. This API is only for software vendor’s usage.
If password3 or password4 is wrong while password1 and password2 is correct, the dongle is also logged on in user mode automatically.
Parameters
Parameter
Description
*pPassword1
[in]Password 1
*pPassword2
[in]Password 2
*pPassword3
[in]Password 3
*pPassword4
[in]Password 4
*pHandle
[out] Dongle handle
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NOT_FOUND
200
No UniKey dongle
ERROR_UNIKEY_INVALID_PASSWORD
201
Found UniKey dongle, but Basic passwords are incorrect
ERROR_UNIKEY_INVALID_PASSWORD_OR_ID
202
Wrong password or UniKey HID
Logoff the UniKey dongle
API Prototype
function UniKey__Logoff(pHandle: pWord): DWORD; stdcall;
Description
Logoff a UniKey dongle with a specific handle. This API should be called at the end of UniKey session.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NOT_FOUND
200
No UniKey dongle
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
Read UniKey dongle memory
API Prototype
function UniKey__Read_Memory(pHandle: pWord; pStartAddress: pWord; pBufferLength: pWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Read the contents of the Memory. This API needs to be called after logon of a UniKey dongle.
Parameters
Parameter
Description
*handle*pHandle
[in] Dongle handle
*pStartAddress
[in] Offset of Memory
*pBufferLenght
[in] Number of bytes to read
pBbuffer
[out] Pointer to the buffer containing the data to be read
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_READ_MEMORY
207
Read Error
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_NEED_OPEN
215
No logon dongle before operating dongle
Write to UniKey dongle memory
API Prototype
function UniKey__Write_Memory(pHandle: pWord; pStartAddress: pWord; pBufferLength: pWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Write data into the memory. This API needs to be called after logging on to a UniKey dongle.
Parameters
Parameter
Description
*handle*pHandle
[in] Dongle handle
*pStartAddress
[in] Offset of the memory
*pBufferLength
[in] Number of bytes to write
pBbuffer
[in] Pointer to the buffer containing the data to be written
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_WRITE_MEMORY
207
Write Error
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_VERIFY_ADV_PASSWORD
223
Advanced passwords (password3 and passowrd4) not verified
---------------------------------------------------------------------------------------------------
To write the last 2k memory (for 2048 – 4096), you need to verify all the 4 passwords (vendor mode) to obtain full permission to the dongle.
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
UniKey_Read_Memory and UniKey_Write_Memory provide basic reading and writing functions to the dongle. You can store general information via such functions. And various levels of security can be applied too.
---------------------------------------------------------------------------------------------------
Generate a Random Number
API Prototype
function UniKey__Random(pHandle: pWord; pReturn1: pWord; pReturn2: pWord; pReturn3: pWord; pReturn4: pWord): DWORD; stdcall;
Description
Generate a random number from the dongle.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pReturn1
[out] Random number
*pReturn2
[out] Random number
*pReturn3
[out] Random number
*pReturn4
[out] Random number
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_RANDOM
209
Random number Error
---------------------------------------------------------------------------------------------------
UNIKEY_RANDOM is to generate a random number inside the dongle. The UniKey dongle computing engine generates the number and the hardware of the dongle is the seed for the random number.
---------------------------------------------------------------------------------------------------
Generate Seed Code Return Values
API Prototype
function UniKey__Seed(pHandle: pWord; pSeed: pLongWord; pReturn1: pWord; pReturn2: pWord; pReturn3: pWord; pReturn4: pWord): DWORD; stdcall;
Description
Get return codes from the input of a seed code. This API return for values which are related to pSeed and UniKey dongle’s password.
API Prototype
long UniKey_Seed(WORD* pHandle, DWORD* pSeed, WORD* pReturn1, WORD* pReturn2, WORD* pReturn3, WORD* pReturn4);
Description
Get return codes from the input of a seed code. This API return for values which are related to pSeed and UniKey dongle’s password.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pSeed
[in] Seed Code
*pReturn1
[out] Return Code 1
*pReturn2
[out] Return Code 2
*pReturn3
[out] Return Code 3
*pReturn4
[out] Return Code 4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_SEED
210
Seed code Error
---------------------------------------------------------------------------------------------------
UniKey_Seed generate a set of seed codes. All of these seed codes are based on the password. It provides another method to verify the password and check the insertion of the dongle. Apart from this, the seed codes can be used to involve in other computation, for example, you use the seed returned as a 64-bit long encryption key.
---------------------------------------------------------------------------------------------------
Write the Soft ID
API Prototype
function UniKey__Write_SoftID(pHandle: pWord; lp1: pLongWord): DWORD; stdcall;
Description
Write the vendor defined SoftID.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pSoftID
[in] Soft ID
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_SET_SOFTID
203
Set UniKey ID wrong
---------------------------------------------------------------------------------------------------
You need to verify all 4 passwords (vendor mode) to write the SoftID.
---------------------------------------------------------------------------------------------------
Read Soft ID
API Prototype
function UniKey__Read_SoftID(pHandle: pWord; pSoftID: pLongWord): DWORD; stdcall;
Description
Read the user defined SoftID.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pSoftID
[out] Soft ID
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
---------------------------------------------------------------------------------------------------
UniKey_Write_SoftID and UniKey_Read_SoftID provide a means to make a soft (write-able) ID for each software. You can write different software ID for each software and call UNIKEY_READ_SOFTID to check if the software ID is correct.
---------------------------------------------------------------------------------------------------
Set a UniKey License module
API Prototype
function UniKey__Set_Module(pHandle: pWord; pModule: pWord; pValue: pWord; pDecrease: pWord): DWORD; stdcall;
Description
To write a value to a specific UniKey license module and set the Decrement attribute.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module Number
*pValue
[in] License module Unit Value
*pDecrease
[in] Decreasing attribute. If decreasing is allowed (1 = allowed, 0 = not allowed)
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
202
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
A successful operation will result in license module unit # "*pModule" storing value "*pValue" and the Decrement attribute set to "0" or "1".
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
You need verify 4 passwords (vendor mode) to set a module value successfully.
---------------------------------------------------------------------------------------------------
Check a UniKey License module
API Prototype
function UniKey__Check_Module(pHandle: pWord; pModule: pWord; pValue: pWord; pDecrease: pWord): DWORD; stdcall;
Description
Read the attributes of a specific UniKey license module.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module Number
*pValue
[out] Validity (1 = license module value is not zero)
*pDecrease
[out] Decrement attribute (1 = license module can be decreased)
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
202
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
A successful operation will result in "*pValue" with value from the Validity (1 = license module value is not zero), and "*pDecrease" with the value from the Decrement attribute (1 = license module can be decreased). The value of a license module cannot be read out directly and it is invisible to end users.
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
UniKey_Set_Module and UniKey_Check_Module provide an easy mean to implement software limitation. For example, if you want to set a software can be only executed 3 times, so you can call UNIKEY_SET_MODULE to set a license module (let us say license module 0) as 3. And when each execution, we decrease the license module, if the license module is invalid (zero), we stop the software. Apart from this, we can implement a module-selling model with help of license module functions. For example, the software has four function modules, A, B, C and D. And we can map the function modules to the license module in the UniKey dongle. Let us say the function module A is mapped to license module 0, B to 1, C to 2 and D to 3. If a customer only buys function A, B, you just need to enable the license module 0 and 1, and leave 2 and 3 as zero. So only function module A and B can be executed. If the customer buys more function, you can use UniKey remote update function to update the dongle remotely.
---------------------------------------------------------------------------------------------------
Write Arithmetic
API Prototype
function UniKey__Write_Arithmetic(pHandle: pWord; pStartAddress: pWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Write user-defined mathematical algorithms.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pStartAddress
[in] Offset of first instruction
*pBuffer
[in] Pointer to the algorithm command string
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_AR_BAD_COMMAND
217
Arithmetic instruction Error
ERROR_UNIKEY_AR_UNKNOWN_OPCODE
218
Arithmetic operator Error
ERROR_UNIKEY_AR_WRON_GBEGIN
219
Const number can't use on first arithmetic instruction
ERROR_UNIKEY_AR_WRONG_END
220
Const number can't use on last arithmetic instruction
ERROR_UNIKEY_AR_VALUE_OVERFLOW
221
Const number > 63
---------------------------------------------------------------------------------------------------
A successful operation will result in the user-defined algorithm populated with the algorithm command string from the buffer.
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
UniKey_Write_Arithmetic is called when you write a series of algorithms into the dongle. This function is only called at software vendor side. For example, if you have a serial number generate algorithm, and you want to perform this algorithm inside the dongle, you need to call UniKey_Write_Arithmetic.
---------------------------------------------------------------------------------------------------
User-defined Algorithm Calculate 1
API Prototype
function UniKey__Calculate1(pHandle: pWord; pStartAddress: pLongWord; pModule: pLongWord; pRegisterA: pWord; pRegisterB: pWord; pRegisterC: pWord; pRegisterD: pWord): DWORD; stdcall;
Description
Return the results of a calculation performed in UniKey, using input provided by the developer and the CALCULATE1 function.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pStartAddress
[in] Start point of calculation
*pModule
[in] License module number
*p1
[in, out] Register A
*p2
[in, out] Register B
*p3
[in, out] Register C
*p4
[in, out] Register D
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_AR_BAD_COMMAND
217
Arithmetic instruction Error
ERROR_UNIKEY_AR_UNKNOWN_OPCODE
218
Arithmetic operator Error
ERROR_UNIKEY_AR_WRON_GBEGIN
219
Const number can't use on first arithmetic instruction
ERROR_UNIKEY_AR_WRONG_END
220
Const number can't use on last arithmetic instruction
ERROR_UNIKEY_AR_VALUE_OVERFLOW
221
Const number > 63
---------------------------------------------------------------------------------------------------
When the calculation starts, the values of other internal registers are listed in the table below.
E and F are reversed hardware ID byte wisely. For example, if the hardware is 0x12345678 (in Hex), and E will be 0x7856, and F will be 0x3412.
---------------------------------------------------------------------------------------------------
Internal Register
Description
E
HiWord of reversed hardware ID
F
LoWord of reversed hardware ID
G
Value stored in license module *pModule
H
Random number
---------------------------------------------------------------------------------------------------
Examples
If the internal algorithm is A = B + C,
Then the call result is *p1 = *p2 + *p3.
For example: The internal algorithm is A = A + G; If *p1 = 0, then when returning you may guess the content of license module *p1 = *pModule. Though you cannot read the content of modules directly, you may determine the content by algorithm. If possible, you had better check the content with an algorithm, not only comparing it in the program.
---------------------------------------------------------------------------------------------------
User-defined Algorithm Calculate 2
API Prototype
function UniKey__Calculate2(pHandle: pWord; pStartAddress: pLongWord; pSeed: pLongWord; pRegisterA: pWord; pRegisterB: pWord; pRegisterC: pWord; pRegisterD: pWord): DWORD; stdcall;
Description
Return the results of a calculation performed in UniKey, using input provided by the developer and the CALCULATE2 function.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pStartAddress
[in] Start point of calculation
*pSeed
[in] Seed Code (32-bit)
*p1
[in, out] Register A
*p2
[in, out] Register B
*p3
[in, out] Register C
*p4
[in, out] Register D
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_AR_BAD_COMMAND
217
Arithmetic instruction Error
ERROR_UNIKEY_AR_UNKNOWN_OPCODE
218
Arithmetic operator Error
ERROR_UNIKEY_AR_WRON_GBEGIN
219
Const number can't use on first arithmetic instruction
ERROR_UNIKEY_AR_WRONG_END
220
Const number can't use on last arithmetic instruction
ERROR_UNIKEY_AR_VALUE_OVERFLOW
221
Const number > 63
---------------------------------------------------------------------------------------------------
When performing calculation 2, the initial values of register E, F, G and H are the Return values of seed code *pSeed, to make it simple, UNIKEY calls function SEED with seed code *pSeed, and writes the Return values to register E, F, G and H for the next operation.
---------------------------------------------------------------------------------------------------
Internal Register
Description
E
Seed Result 1
F
Seed Result 2
G
Seed Result 3
H
Seed Result 4
User-defined Algorithm Calculate 3
API Prototype
function UniKey__Calculate3(pHandle: pWord; pStartAddress: pLongWord; pModule: pLongWord; pRegisterA: pWord; pRegisterB: pWord; pRegisterC: pWord; pRegisterD: pWord): DWORD; stdcall;
Description
Return results of a calculation performed in UniKey, using input provided by the developer and the CALCULATE3 function.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pStartAddress
[in] Start point of calculation
*pModule
[in] License module number
*pRegA
[in, out] Register A
*pRegB
[in, out] Register B
*pRegC
[in, out] Register C
*pRegD
[in, out] Register D
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_AR_BAD_COMMAND
217
Arithmetic instruction Error
ERROR_UNIKEY_AR_UNKNOWN_OPCODE
218
Arithmetic operator Error
ERROR_UNIKEY_AR_WRON_GBEGIN
219
Const number can't use on first arithmetic instruction
ERROR_UNIKEY_AR_WRONG_END
220
Const number can't use on last arithmetic instruction
ERROR_UNIKEY_AR_VALUE_OVERFLOW
221
Const number > 63
---------------------------------------------------------------------------------------------------
When performing calculation 3, the initial values of register E, F, G and H are the content of license module *lp2 and *lp2+1/2/3.
---------------------------------------------------------------------------------------------------
Internal Register
Description
E
Value in license module *lp2
F
Value in license module (*lp2 + 1)
G
Value in license module (*lp2 + 2)
H
Value in license module (*lp2 + 3)
---------------------------------------------------------------------------------------------------
Examples
When calls calculation 3 with *pModule = 0, the initial values of register E, F, G and H are:
E = Value of license module 0
F = Value of license module 1
G = Value of license module 2
F = Value of license module 3
Note: The address will return to "0" when the license module address call exceeds 128. For example: Calculation 3 with *pModule = 126, the initial values of register E, F, G and H are:
E = Value of license module 126
F = Value of license module 127
G = Value of license module 0
H = Value of license module 1
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
UniKey_Calculate is called when you want to perform the algorithm you have written inside the UniKey dongle. For example, you have written a formula into the dongle, you can call UniKey_Calculate to perform the algorithms and get the return of the formula.
---------------------------------------------------------------------------------------------------
Decrease a License Module
API Prototype
function UniKey__Module_Decrase(pHandle: pWord; pModule: pWord): DWORD; stdcall;
Description
Decrease the value in a specified UniKey license module by “1”.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module number
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
204
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
Please call UniKey_Check_Module to check if the license module is valid first.
---------------------------------------------------------------------------------------------------
Generate a New Password
API Prototype
function UniKey__Generate_New_Password(pHandle: pWord; pSeed: pLongWord; pPassword1: pWord; pPassword2: pWord; pPassword3: pWord; pPassword4: pWord): DWORD; stdcall;
Description
Generate a new password via a seed code; the mapping from the seed code to the password is only one way. Without the seed, you cannot generate the same password.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pSeed
[in] Seed Code (32-bit)
*pPassword1
[out] New password 1
*pPassword2
[out] New password 2
*pPassword3
[out] New password 3
*pPassword4
[out] New password 4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_VERIFY_ADV_PASSWORD
223
Advanced passwords (password3 and passowrd4) not verified
ERROR_UNIKEY_GENERATE_NEW_PASSWORD
225
Generate new password Error
---------------------------------------------------------------------------------------------------
A file recording the new SEED and PASSWORDs will be created in the working path, and help the software vendor to recall everything. The passwords can be distributed to ordinary developers!
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
1. The dongle will be automatically logoff after a new set of passwords are generated.
2. The dongle will be fully formatted when a new password is generated.
3. A file including new password and seed will be created in the working directory.
---------------------------------------------------------------------------------------------------
Generate a New Encryption Key
API Prototype
function UniKey__Generate_Key(pHandle: pWord; lKeyNumber: pLongWord): DWORD; stdcall;
Description
Generate a new key in the specific key storage.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pKeyNumber
[in] Key Storage Number
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_INVALID_KEY_STORE
224
Wrong key storage number
---------------------------------------------------------------------------------------------------
1. This function will delete the original key in the key storage, and generate a new key.
2. The data encrypted by the old key cannot be decrypted by the new key.
3. Each key is 128-bit long.
---------------------------------------------------------------------------------------------------
Generate a New Encryption Key via Seed
API Prototype
function UniKey__Generate_Key_Via_Seed (pHandle: pWord; pKeyNumber: pLongWord; pSeed1: pWord; pSeed2: pWord; pSeed3: pWord; pSeed4: pWord): DWORD; stdcall;
Description
Generate a new key in the specific key storage via seed.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pKeyNumber
[in] Key Storage Number
*pSeed1
[in] Seed1
*pSeed2
[in] Seed2
*pSeed3
[in] Seed3
*pSeed4
[in] Seed4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_INVALID_KEY_STORE
224
Wrong key storage number
---------------------------------------------------------------------------------------------------
1. This function will delete the original key in the key storage, and generate a new key via seed.
2. The data encrypted by the old key cannot be decrypted by the new key.
3. Each key is 128-bit long.
---------------------------------------------------------------------------------------------------
Encrypt the Buffer with a Specific Encryption Key
API Prototype
function UniKey__Encrypt(pHandle: pWord; pBufferLength: pLongWord; pKeyNumber: pLongWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Encrypt an amount of memory with a key. The length of data must be a multiple of 8.
Parameters
Parameter
Meaning
*pHandle
[in] Dongle handle
*pBufferLength
[in] Number of bytes to encrypt
*pKeyNumber
[in] Key Storage Number
*pBuffer
[in] Pointer to the data to be encrypted
[out] Pointer to the encrypted data
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_INVALID_KEY_STORE
224
Wrong key storage number
ERROR_UNIKEY_ENCRYPT_FAILED
228
Encrypt data error
---------------------------------------------------------------------------------------------------
This function only performs an encryption operation, no compression functions are involved.
---------------------------------------------------------------------------------------------------
Decrypt the Buffer with a Specific Encryption Key
API Prototype
function UniKey__Decrypt(pHandle: pWord; pBufferLength: pLongWord; pKeyNumber: pLongWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Encrypt an amount of memory with a key. The length of data must be a multiple of 8.
Parameters
Parameter
Meaning
*pHandle
[in] Dongle handle
*pBufferLength
[in] Number of bytes to encrypt
*pKeyNumber
[in] Key Storage Number
*pBuffer
[in] Pointer to the data to be decrypted
[out] Pointer to the decrypted data
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Not logon dongle before operating dongle
ERROR_UNIKEY_INVALID_KEY_STORE
224
Wrong key storage number
ERROR_UNIKEY_DECRYPT_FAILED
229
Decrypt data error
---------------------------------------------------------------------------------------------------
Please use the key that encrypted data to decrypt the data; otherwise you cannot decrypt the data.
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
UniKey_Encrypt and UniKey_Decrypt offer a basic 128-bit encryption/decryption operation based on UniKey’s hardware. You can call these functions when an encryption or decryption operation is needed. For better security, you can encrypt the credential before saving it into the UniKey’s memory.
---------------------------------------------------------------------------------------------------
Make an MD5 Digest for a Certain Content
API Prototype
function UniKey__MD5(pHandle: pWord; lp1: pLongWord; pBuffer: pByteArray): DWORD; stdcall;
Description
Make an MD5 digest for a mount of content or data.
Parameters
Parameter
Meaning
*pHandle
[in] Dongle handle
*pBufferLength
[in] Number of bytes to MD5
*pBuffer
[in] Pointer to the data to be digested
[out] Pointer to the digested data
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
Read UpdateTag
API Prototype
function UniKey__Read_UpdateTag(pHandle: pWord; pUpdateTag: pLongWord): DWORD; stdcall;
Description
Read UpdateTag from a specific dongle.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pUpdateTag
[out] UpdateTag
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_READ_UPDATETAG
226
Read UpdateTag error
Write UpdateTag
API Prototype
function UniKey__Write_UpdateTag(pHandle: pWord; pUpdateTag: pLongWord): DWORD; stdcall;
Description
Write UpdateTag into a specific dongle.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pUpdateTag
[in] UpdateTag
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_WRITE_UPDATETAG
227
Write UpdateTag error
---------------------------------------------------------------------------------------------------
UniKey_Read_UpdateTag APIs give software vendors an easy method to identify if the UniKey dongle needs to be updated. When distributing the software, software vendors may use the UpdateTag as an ID which shows if the dongle needs to update or has been updated. You can also use this Tag as a tracking ID for each update.
---------------------------------------------------------------------------------------------------
Get UniKey Library Version
API Prototype
function UniKey__Get_Version(pHandle: pWord; pVersion: pLongWord): DWORD; stdcall;
Description
Get the current UniKey library version.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pVersion
[out] UniKey library version
UniKey Time API Reference
Get UniKey Time
API Prototype
function UniKey__Get_Time(pHandle: pWord; pYear: pLongWord; pMonth: pLongWord; pDay: pWord; pHour: pWord; pMinute: pWord; pSecond: pWord: DWORD; stdcall;
Description
Get UniKey Time’s real time clock’s time.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pYear
[out] Year (input or output is 10, which refers to 2010)
*pMonth
[out] Month
*pDay
[out] Day
*pHour
[out] Hour
*pMinute
[out] Minute
*pSecond
[out] Second
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_READ_TIME
230
Get UniKey time error
---------------------------------------------------------------------------------------------------
Calling UniKey_Check_Time can check if the UniKey dongle is a real time dongle. If ERROR_UNIKEY_READ_TIME is returned, then the dongle is not a real time dongle.
---------------------------------------------------------------------------------------------------
Set UniKey Time
API Prototype
function UniKey__Set_Time(pHandle: pWord; pYear: pLongWord; pMonth: pLongWord; pDay: pWord; pHour: pWord; pMinute: pWord; pSecond: pWord): DWORD; stdcall;
Description
Set UniKey Time’s real time clock’s time.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pYear
[in] Year (input or output is 10, which refers to 2010)
*pMonth
[in] Month
*pDay
[in] Day
*pHour
[in] Hour
*pMinute
[in] Minute
*pSecond
[in] Second
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_READ_TIME
230
Get UniKey time error
---------------------------------------------------------------------------------------------------
You need verify all the 4 passwords (vendor mode) to set the time for UniKey internal clock.
---------------------------------------------------------------------------------------------------
Set UniKey Time by Host’s Clock
API Prototype
function UniKey__Set_Time(pHandle: pWord; pYear: pLongWord; pMonth: pLongWord; pDay: pWord; pHour: pWord; pMinute: pWord; pSecond: pWord): DWORD; stdcall;
Description
Set UniKey Time’s real time clock’s time by the host computer’s clock.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME
231
Write UniKey time error
Erase Real Time Module
API Prototype
function UniKey__Erase_Time_Module(pHandle: pWord; pModule: pLongWord): DWORD; stdcall;
Description
Erase/Reset a real time module, and all the info in the module will be erased including start, end or duration.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] Real time module number (0-15)
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME
231
Write UniKey time error
---------------------------------------------------------------------------------------------------
You need verify all the 4 passwords (vendor mode) to reset a module. If a real time module’s write once flag is enabled, only the first START_TIME call works. Later START_TIME call will return an error until this module is reset.
---------------------------------------------------------------------------------------------------
Set a Real Time Module’s Start Time
API Prototype
function UniKey__Set_Time_Module_Start_Time(pHandle: pWord; pModule: pLongWord; pYear: pWord; pMonth: pWord; pDay: pWord; pHour: pWord): DWORD; stdcall;
Description
Set a real time module’s start time.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] Real time module number (0-15)
*pYear
[in] Year (input or output is 10, which refers to 2010)
*pMonth
[in] Month
*pDay
[in] Day
*pHour
[in] Hour
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME_MODULE
231
Write time module error
ERROR_UNIKEY_TIME_MODULE_NOT_NULL
234
The real time module is not null, this error is returned when write once flag is set
---------------------------------------------------------------------------------------------------
Write Once flag is very useful for setting the Start for a real time module. If write once flag is set, only the first START_TIME call can set the start time for a module. All the later START_TIME will not work and return an ERROR_UNIKEY_TIME_MODULE_NOT_NULL. Software vendors may use this flag when the start for a module is not clear.
---------------------------------------------------------------------------------------------------
Set a Real Time Module’s Start Time by UniKey Dongle’s Clock
API Prototype
function UniKey__Set_Time_Module_Start_Time_Now(pHandle: pWord; pModule: pLongWord): DWORD; stdcall;
Description
Set a real time module’s start time as the now time in UniKey dongle’s clock.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] Real time module number (0-15)
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME_MODULE
231
Write time module error
ERROR_UNIKEY_TIME_MODULE_NOT_NULL
234
The real time module is not null, this error is returned when write once flag is set
Set a Real Time Module’s Start Time by Host’s Clock
API Prototype
function UniKey__Set_Time_Module_Start_Time_Now_PC(pHandle: pWord; pModule: pLongWord): DWORD; stdcall;
Description
Set a real time module’s start time as the now time in host computer.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pHandle
[in] Real time module number (0-15)
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME_MODULE
231
Write time module error
ERROR_UNIKEY_TIME_MODULE_NOT_NULL
234
The real time module is not null, this error is returned when write once flag is set
Set a Real Time Module’s End Time
API Prototype
function UniKey__Set_Time_Module_End_Time(pHandle: pWord; pModule: pLongWord; pYear: pWord; pMonth: pWord; pDay: pWord; pHour: pWord): DWORD; stdcall;
Description
Set a real time module’s end time.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pHandle
[in] Real time module number (0-15)
*pYear
[in] Year (input or output is 10, which refers to 2010)
*pMonth
[in] Month
*pDay
[in] Day
*pHour
[in] Hour
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME_MODULE
231
Write time module error
Set a Real Time Module’s Duration
API Prototype
function UniKey__Set_Time_Module_Duration(pHandle: pWord; pModule: pLongWord; pDay: pLongWord; pHour: pWord): DWORD; stdcall;
Description
Set the duration time for a specific real time module. The total duration is (*pDay)*24 + (*pHour) in hours.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] Real time module number (0-15)
*pDay
[in] Number of days
*pHour
[in] Number of hours
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_NEED_OPEN
212
Need open dongle before operating dongle
ERROR_UNIKEY_WRITE_TIME_MODULE
231
Write time module error
---------------------------------------------------------------------------------------------------
You need verify all the 4 passwords (vendor mode) to set the duration for a real time module.
---------------------------------------------------------------------------------------------------
Check a UniKey Time License module
API Prototype
function UniKey__Check_Time_Module(pHandle: pWord; pModule: pLongWord; pRemainDay: pLongWord; pYear: pWord; pMonth: pWord; pDay: pWord; pHour: pWord): DWORD; stdcall;
Description
Read the attributes of a specific UniKey Time license module.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module Number
*pRemainDays
[out] Remain days
*pYear
[in] Year (input or output is 10 ,which refers to 2010)
*pMonth
[in] Month
*pDay
[in] Day
*pHour
[in] Hour
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
202
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
A successful operation will result in "*pValue" with value from the Validity (1 = license module value is not zero).
The value of a license module cannot be read out directly and it is invisible to end users.
---------------------------------------------------------------------------------------------------
Check a UniKey Time License Module Now
API Prototype
function UniKey__Check_Time_Module_Now(pHandle: pWord; pModule: pLongWord; pRemainDay: pLongWord; pRemainHour: pWord): DWORD; stdcall;
Description
Read the attributes of a specific UniKey Time license module now.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module Number
*pRemainDays
[out] Remain days
*pRemainHours
[out] Remain hours
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
202
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
A successful operation will result in "*pValue" with value from the Validity (1 = license module value is not zero). The value of a license module cannot be read out directly and it is invisible to end users.
---------------------------------------------------------------------------------------------------
Check a UniKey Time License Module Now PC
API Prototype
function UniKey__Check_Time_Module_Now_PC(pHandle: pWord; pModule: pLongWord; pRemainDay: pLongWord; pRemainHour: pWord): DWORD; stdcall;
Description
Read the attributes of a specific UniKey Time license module Now PC.
Parameters
Parameter
Description
*pHandle
[in] Dongle handle
*pModule
[in] License module Number
*pRemainDays
[out] Remain days
*pRemainHours
[out] Remain hours
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_ADDR_OR_SIZE
202
Read/Write address or length is wrong
ERROR_UNIKEY_NEED_OPEN
212
No logon dongle before operating dongle
ERROR_UNIKEY_MODULE
216
License module error
---------------------------------------------------------------------------------------------------
A successful operation will result in "*pValue" with value from the Validity (1 = license module value is not zero). The value of a license module cannot be read out directly and it is invisible to end users.
---------------------------------------------------------------------------------------------------
UniKey Drive API Reference
Initialize File System
API Prototype
UniKey_FS_Init:function(handle: pWord; PW1: pLongWord; PW2: pLongWord; PW3: pLongWord; PW4: pLongWord): DWORD; stdcall;
Description
The user needs to call this function to initialize the file system before calling other file system related functions. The default password of the file system is 12345678.
Parameters
Parameter
Description
*pHandle
[in]Device handle
* pPassword1
[in]Password1
* pPassword2
[in]Password2
* pPassword3
[in]Password3
* pPassword4
[in]Password4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_PASSWORD_OR_ID
202
Invalid password or ID results in an error.
Format the file system
API Prototype
UniKey_FS_Format:function(handle: pWord): DWORD; stdcall;
Description
Format the file system.
Parameters
Parameter
Description
*pHandle
[in]Device handle
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_FILE_EXIST
245
File already existed.
---------------------------------------------------------------------------------------------------
Note: The user needs to initialize the file system successfully before calling other file system related functions.
---------------------------------------------------------------------------------------------------
Create files
API Prototype
UniKey_FS_CreateFile:function(handle: pWord; filename: pByteArray): DWORD; stdcall;
Description
Create files.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filename
[in/out]Input/Output file name
---------------------------------------------------------------------------------------------------
Note: single slash ( "\") should be added before the name of the file.
---------------------------------------------------------------------------------------------------
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_ERR_SYS_UNINIT
246
The file system is not initialized.
ERROR_UNIKEY_FS_FILE_NAME
240
Wrong or invalid file name
ERROR_UNIKEY_FS_FILE_EXIST
245
The file already existed.
Delete files
API Prototype
UniKey_FS_DeleteFile:function(handle: pWord; filename: pByteArray): DWORD; stdcall;
Description
Delete files.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filename
[in/out]Input/Output file name
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_ERR_SYS_UNINIT
246
The file is not yet initialized.
ERROR_UNIKEY_FS_NO_FILE
241
No such file name.
Open files
API Prototype
UniKey_FS_File_Open:function(handle: pWord; filename: pChar): DWORD; stdcall;
Description
Open files.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filename
[in]Input/Output file name
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_NO_FILE
241
No such file name
Get system space
API Prototype
UniKey_FS_Get_Free_Size:function(handle: pWord; usedsize: pLongWord; freesize: pLongWord): DWORD; stdcall;
Description
Get system space.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*usedsize
[out]System space size which has already been used
*freesize
[out]System space size that hasn’t been used
Return values
Result
Value
Description
SUCCESS
0
Success
Modify file data
API Prototype
UniKey_FS_File_Modify_Data:function(handle: pWord; offset: pLongWord; len: pLongWord; buffer: pByteArray): DWORD; stdcall;
Description
Modify file data.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*offset
[in]Address to be modified
*len
[in]Modify the data length
*buffer
[in]Modify the data
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_ERR_OPEN_FILE
247
The file to be modified hasn’t been opened yet.
ERROR_UNIKEY_FS_FILE_OFFSET
242
Offset of file error
Append data to the end-of-file
API Prototype
UniKey_FS_File_Append_Data:function(handle: pWord; len: pLongWord; buffer: pByteArray): DWORD; stdcall;
Description
Append data to the end-of-file.
Parameters
Parameter
Meaning
*len
[in]The length of the append data
*buffer
[in]Append data
Return values
Result
Value
Meaning
SUCCESS
0
Success
ERROR_UNIKEY_FS_NO_MEMORY
244
Not enough free memory
Read file data
API Prototype
UniKey_FS_File_Read_Data:function(handle: pWord; offset: pLongWord; len: pLongWord; buffer: pByteArray): DWORD; stdcall;
Description
Read data file.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*offset
[in]Read address
*len
[in]Read the data length
*buffer
[out]Read data
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_FS_ERR_OPEN_FILE
247
The file to be modified is not opened yet.
ERROR_UNIKEY_FS_FILE_OFFSET
242
Offset of file error.
Close files
API Prototype
UniKey_FS_File_Close:function(handle: pWord; filename: pByteArray): DWORD; stdcall;
Description
Close files.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filename
[in]file name
*len
[in]Read the data length
*buffer
[in]Read data
Return values
Result
Value
Description
SUCCESS
0
Success
Get file list
API Prototype
UniKey_FS_File_Get_List:function(handle: pWord; filecount: pLongWord; filelist: pByteArray): DWORD; stdcall;
Description
Get file list.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filecount
[out]The number of files
*filelist
[out]
Return values
Result
Value
Description
SUCCESS
0
Success
Get the file size
API Prototype
UniKey_FS_File_Get_Size:function(handle: pWord; filesize: pLongWord): DWORD; stdcall;
Description
Get the file size.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*filesize
[out]The size of the file
Return values
Result
Value
Description
SUCCESS
0
Success
Users reset file system password
API Prototype
UniKey_FS_Set_Password:function(handle: pWord; PW1: pLongWord; PW2: pLongWord; PW3: pLongWord; PW4: pLongWord): DWORD; stdcall;
Description
Users reset the password to the file system.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*pPassword1
[in]Password 1
*pPassword2
[in]Password 2
*pPassword3
[in]Password 3
*pPassword4
[in]Password 4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_GENERATE_NEW_PASSWORD
225
Fail to generate new password.
---------------------------------------------------------------------------------------------------
The reset of the password can only be successfully done after initializing the file system successfully.
---------------------------------------------------------------------------------------------------
Generate a RSA Key
API Prototype
UniKey_RSA_Generate_Key:function(handle: pWord; KeyIndex: pWord): DWORD; stdcall;
Description
UniKey Drive has encryption & decryption modules with 1024-bit RSA keys.
Calling this function can generate a 1024-bit RSA key.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*KeyIndex
[in]Return the handle generated Key
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The handle of the key is invalid.
Generate a DES Key
API Prototype
UniKey_DES_Generate_Key:function(handle: pWord; KeyIndex: pWord): DWORD; stdcall;
Description
Calling this function can generate a DES key.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*KeyIndex
[in]Return the handle generated Key
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The handle of the key is invalid.
RSA Get key counts generated
API Prototype
UniKey_RSA_Get_Key_Counts:function(handle: pWord; KeyIndex: pLongWord): DWORD; stdcall;
Description
Get the number of keys that are generated.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[out]The key counts returned
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The handle of the key is invalid.
DES Get key counts generated
API Prototype
UniKey_DES_Get_Key_Counts:function(handle: pWord; KeyIndex: pLongWord): DWORD; stdcall;
Description
Get the number of keys that are generated.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[out]The key counts returned
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The handle of the key is invalid.
RSA encryption
API Prototype
UniKey_RSA_Encrypt:function(handle: pWord; KeyIndex: pWord; Encrypt_Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
Description
Encrypt data using RSA.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[in]Encrypt & decrypt using the key handle
*Len
[in]The length of encryption & decryption data
*Buffer
[in/out]Input encrypted text and output plain text.
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_ENCRYPT_FAILED
228
Encryption failed.
RSA decryption
API Prototype
UniKey_RSA_Decrypt:function(handle: pWord; KeyIndex: pWord; Encrypt_Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
Description
Decrypt data using RSA.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[in]Encrypt & decrypt using the key handle
*Len
[in]The length of encryption & decryption data
*Buffer
[in/out]Input encrypted text and output plain text.
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
ERROR_UNIKEY_DECRYPT_FAILED
229
Decryption failed.
DES encryption
API Prototype
UniKey_DES1_Encrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
UniKey_DES2_Encrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
UniKey_DES3_Encrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
Description
Encrypt data using DES.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[in]Encrypt & decrypt using the key handle
*Len
[in]The length of encryption & decryption data
*Buffer
[in/out]Input encrypted text and output plain text.
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
ERROR_UNIKEY_ENCRYPT_FAILED
228
Encryption failed.
DES decryption
API Prototype
UniKey_DES1_Decrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
UniKey_DES2_Decrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
UniKey_DES3_Decrypt:function(handle: pWord; EncryptMode: pWord; KeyIndex: pWord; Len: pLongWord; Buffer: pByteArray): DWORD; stdcall;
Description
Encrypt data using DES.
Parameters
Parameter
Description
*Phandle
[in]Device handle
*KeyIndex
[in]Encrypt & decrypt using the key handle
*Len
[in]The length of encryption & decryption data
*Buffer
[in/out]Input encrypted text and output plain text.
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
ERROR_UNIKEY_DECRYPT_FAILED
229
Decryption failed.
RSA Delete Key
API Prototype
UniKey_RSA_Del_Key:function(handle: pWord; KeyIndex: pWord): DWORD; stdcall;
Description
Delete a key.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*KeyIndex
[in]The handle to be deleted
Return values
Result
Value
Meaning
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
KeyIndex <0 or KeyIndex > 3.
DES Delete key
API Prototype
UniKey_DES_Del_Key:function(handle: pWord; KeyIndex: pWord): DWORD; stdcall;
Description
Delete a key.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*KeyIndex
[in]The handle to be deleted
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
KeyIndex <0 or KeyIndex > 14.
Get user counts
API Prototype
UniKey_Get_UserCount:function(handle: pWord; Count: pWord): DWORD; stdcall;
Description
UniKey Drive can enable 32 concurrent users to logon. This function can be called to get the number of logon users.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*Count
[in]Number of logon users returned
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_KEY_INDEX
239
The key handle is invalid.
KeyIndex <0 or KeyIndex > 14.
Only allow one user to logon
API Prototype
Unikey_Logon_Single:function(handle: pWord; pPassword1: pLongWord; pPassword2: pLongWord; pPassword3: pLongWord; pPassword4: pLongWord): DWORD; stdcall;
Description
After calling this function, UniKey Drive only allows the active user to logon and other users will not be allowed to logon.
Parameters
Parameter
Description
*pHandle
[in]Device handle
*pPassword1
[in]Password 1
*pPassword2
[in]Password 2
*pPassword3
[in]Password 3
*pPassword4
[in]Password 4
Return values
Result
Value
Description
SUCCESS
0
Success
ERROR_UNIKEY_INVALID_PASSWORD_OR_ID
202
The password or ID is invalid.
Logoff the active user
API Prototype
UniKey_Logoff:function(handle: pWord):DWORD; stdcall;
Description
After calling this function, the active user will be logoff, without affecting other users’ logon status.
Parameters
Parameter
Description
*pHandle
[in]Device handle
Return values
Result
Value
Description
SUCCESS
0
Success
Logoff all users
API Prototype
UniKey_Logoff_All:function(handle: pWord): DWORD; stdcall;
Description
After calling this function, all the users will be logoff.
Parameters
Parameter
Description
*pHandle
[in]Device handle
Return values
Result
Value
Description
SUCCESS
0
Success