<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://esecutech.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bao</id>
	<title>SecuTech Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://esecutech.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bao"/>
	<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=Special:Contributions/Bao"/>
	<updated>2026-10-24T10:39:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Server_APIs&amp;diff=1534</id>
		<title>UniOTP Server APIs</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Server_APIs&amp;diff=1534"/>
		<updated>2016-08-23T06:42:12Z</updated>

		<summary type="html">&lt;p&gt;Bao: Medium rework of overall structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_API]]&lt;br /&gt;
&lt;br /&gt;
== How to use C/C++ SDK ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
# The SDK server needs to operate a database. Inside the C/C++ version SDK uses ODBC to access to the database. That’s why, before beginning to develop, it is required to install a database(for now, UniOTP supports Oracle/MySQL/Postgresql/SQL Server) and to configure the ODBC driver for database products access.&lt;br /&gt;
# In the distributable package, you can find a file named initsqlscript that contains the SQL initialization script for the 4 types of database described before. You must use your database administration tool (for example SQLPlus, MySQL Client, etc.) to create a new database, or you can use one of your own databases. Use the SQL file inside the folder initsqlscript to initialize the database tables for UniOTP for UniOTP dynamic password authentication system.&lt;br /&gt;
# Once you finish preparing the database, create an ODBC data source for this newly created database. (Use the database prepared in step 2).&lt;br /&gt;
# Before beginning developing using the SDK, you need to create a configuration file (use the file otp_conf.com as an example)&lt;br /&gt;
&lt;br /&gt;
You just need to use the configuration file created in step 2 to reconfigure the information related to the settings file. Use the function secuinitenv(char *pszConfpath) to add settings file (such as otp_conf.con) and to complete initialization of information in the SDK.&lt;br /&gt;
&lt;br /&gt;
==== Add support for UniOTP dynamic password authentication ====&lt;br /&gt;
&lt;br /&gt;
# Add the Server SDK library files (dynamic or static library) and its header files (otp_corec32.h) to the project.&lt;br /&gt;
# Copy the database configuration file created in the “preparation” part step 4 to the appropriate place in your project. (you can actually put the configuration file anywhere, but it is recommended to put it in the project directory )&lt;br /&gt;
# Use API introduced later in this document to perform operations related to authentication.&lt;br /&gt;
&lt;br /&gt;
==== SDK Operation procedure and Important points ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Operation procedure&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Use the API secuotp_initenv(char *pszConfpath) to initialize the SDK Settings information.&lt;br /&gt;
# Use other interface to complete business related treatments.&lt;br /&gt;
# Use Secuotp_cleanup()API to perform maintenance operations such as releasing resources.&lt;br /&gt;
&lt;br /&gt;
For more details about other interfaces way of use, please see the sample.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important points&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# The function secuotp_initenv(char *pszConfpath) is used to initialize settings information, when using the SDK, you only need to call the function once.&lt;br /&gt;
# Once you finish using UniOTP SDK, call the secuotp_cleanup() function to perform cleaning operations.&lt;br /&gt;
# secuotp_tokenimport(char*pszTokenfile, char *pszSecret, char **pstrErrinfo) function is used to import token in batch, pstrErrinfo is assigned a value by the internal API. If you don’t need this memory area any longer, please use secuotp_free(void **spsbuf) to release it.&lt;br /&gt;
# secuotp_userimport(char *pszUserfile, char *pszSecret, char **pstrErrinfo) this function is used to import users in batch, pstrErrinfo is assigned a value by the internal API. If you don’t need this memory area any longer, please use secuotp_free(void **spsbuf) to release it.&lt;br /&gt;
# secuotp_userimport(char *pszUserfile, char *pszSecret, char **pstrErrinfo) this function is used to import users in batch, pszSecret points to the user record file decryption key, if pzSecret is NULL or the buffer data is null, then it shows the file isn&#039;t encrypted . We recommend not to use encryption.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_INITENV() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_initenv(char *pszConfpath);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialize environment, set the path for the configuration file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszConfpath [IN] configuration file path&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS the function was executed successfully&lt;br /&gt;
* SECUOTP_ERROR_INVALID_PARAM Invalid parameters&lt;br /&gt;
* SECUOTP_ERROR_ALLOCHANDLE_FAILED Failed to allocate database handle(ODBC)&lt;br /&gt;
* SECUOTP_ERROR_SETENVATTR_FAILED Failed to configure ODBC driver version&lt;br /&gt;
* SECUOTP_ERROR_GETCONFIGFAILED Configuration file error or failed to read configuration information&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_CLEANUP() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_cleanup();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Complete a few cleaning operations, before the process ends or before uninstalling dynamic libraries, you need to call this function to release handles that haven’t been unreleased.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS function executed successfully&lt;br /&gt;
* SECUOTP_ERROR_FREEHANDLE_FAILED error while releasing handles&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_GETLASTERROR() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;unsigned long secuotp_getlasterror();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get last error code&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Code of the last error that happened.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_AUTH() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_auth(char *pszUsername, char *pszPwd, unsigned int *pChallenge);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Perform dynamic password user authentication&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username for the user waiting to be authenticated&lt;br /&gt;
* char *pszPwd [IN] password (OTP or OTP+PIN)&lt;br /&gt;
* unsigned int *pChallenge [OUT] challenge code returned by the server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Authentication succeeded&lt;br /&gt;
* SECUOTP_ERROR_CHALLENGE the challenge information from the client is needed&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details). Authentication failed or error happened when authenticating.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SYNCHRONIZE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_synchronize(char *pszUsername, char *pszOtp1, char *pszOtp2);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Perform user token synchronization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] username of the user’s token that needs to be synchronized&lt;br /&gt;
* char *pszOtp1 [IN] For the synchronization to be completed, you need to provide two consecutive dynamic passwords. This parameter is the first of the two passwords&lt;br /&gt;
* char *pszOtp2 [IN] The second of the two passwords&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Synchronization succeeded&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details): Synchronization failed or error happened while synchronizing.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_setuserpin(char *pszUsername, char *pszPin);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Configure user static PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username&lt;br /&gt;
* char *pszPin [IN] new static PIN for this user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Static PIN configured correctly&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details): Failed to configure the static PIN&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_RESETPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_resetpin(char *pszUsername, char *pszOldpin, char *pszNewpin);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Reset user static PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username&lt;br /&gt;
* char *pszOldpin [IN] old static PIN&lt;br /&gt;
* char *pszNewpin [IN] new static PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS New PIN set successfully&lt;br /&gt;
&lt;br /&gt;
Others(See the error code list for more details) Failed to set the new static PIN&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETAUTHTYPE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_setauthtype(char *pszUsername, int nAuthtype);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set authentication type&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username&lt;br /&gt;
* int nAuthtype [IN] Authentication type(1- use only OTP, 2-use OTP+PIN)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS authentication type set successfully&lt;br /&gt;
Others (See the error code list for more details) failed to set authentication type&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_ADDUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int secuotp_adduser(&lt;br /&gt;
    char *pszUsername,&lt;br /&gt;
    char *pszUserid,&lt;br /&gt;
    char *pszContacttel,&lt;br /&gt;
    char *pszSerialnum,&lt;br /&gt;
    char *pszRemark,&lt;br /&gt;
    char *pszEmail,&lt;br /&gt;
    char *pszDomain,&lt;br /&gt;
    char *pszPin,&lt;br /&gt;
    char *pszPreusedate,&lt;br /&gt;
    int nAuthtype&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a new user&lt;br /&gt;
&lt;br /&gt;
Remark: Before adding a user into the UniOTP Authentication System, Please make sure that the token allocated to the user has been imported into the database using the &#039;&#039;&#039;secuotp_tokenimport()&#039;&#039;&#039; function.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] username of the user you want to add&lt;br /&gt;
* char *pszUserid [IN] User ID, for example Identity card number&lt;br /&gt;
* char *pszContacttel [IN] Phone number&lt;br /&gt;
* char *pszSerialnum [IN] serial number of the token allocated to the user&lt;br /&gt;
* char *pszRemark [IN] remarks/comments about the user&lt;br /&gt;
* char *pszEmail [IN] user Email address&lt;br /&gt;
* char *pszDomain [IN] reserved, NULL&lt;br /&gt;
* char *pszPin [IN] User static PIN&lt;br /&gt;
* char *pszPreusedate [IN] User registration date&lt;br /&gt;
* int nAuthtype [IN] Authentication date&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS User registration successful&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) failed to register user&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_DELETEUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_deleteuser(char *pszUsername);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Delete a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] username of the user you want to delete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS user deleted successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) failed to delete user&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERINVALID() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_setuserinvalid(char *pszUsername, int nvalid);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set user validity status (used to report a token as “lost”)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username&lt;br /&gt;
* int nvalid [IN] User validity status (0-valid, 1-invalid)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS function called successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) failed to call the function&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERLOCK() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_setuserlock(char *pszUsername, int nlock);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Lock a user&lt;br /&gt;
&lt;br /&gt;
Remark: If nlock is set 1, then the user will be locked for 10 minutes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUsername [IN] Username&lt;br /&gt;
* int nlock [IN] lock (0-not locked 1-locked)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS function called successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) failed to call the function&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_FREE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;void secuotp_free(void **psbuf);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Release the buffer (release the space created by the caller)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* void **psbuf [IN] first address of the area that you want to release&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int secuotp_tokenimport(&lt;br /&gt;
    char *pszTokenfile,&lt;br /&gt;
    char *pszSecret,&lt;br /&gt;
    char **pstrErrinfo&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Import tokens by batch&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszTokenfile [IN] Token file path&lt;br /&gt;
* char *pszSecret [IN] decryption secret key&lt;br /&gt;
* char *pstrErrinfo [OUT] invalid records occur in batch import&lt;br /&gt;
&lt;br /&gt;
note: this function for internal using assigns space used for storing invalid record for the caller, when caller no longer uses the space, please use secuotp_free(void **psbuf) to release the space pointed by pstrErrinfo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS token batch import succeeded.&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS_WITHINFO token batch import partially succeeded. (use pstrErrinfo to search for invalid entries)&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) token batch import failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_USERIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_userimport(char *pszUserfile, char *pszSecret, char **pstrErrinfo);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
User batch import&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszUserfile [IN] User file path&lt;br /&gt;
* char *pszSecret [IN] Decryption secret key&lt;br /&gt;
* char **pstrErrinfo [OUT] invalid records occur in batch import&lt;br /&gt;
&lt;br /&gt;
note: this function for internal using assigns space used for storing invalid record for the caller, when caller no longer uses the space, please use secuotp_free(void **psbuf) to release the space pointed by pstrErrinfo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS user batch import successful&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS_WITHINFO user batch import partially succeeded. (use pstrErrinfo to search for invalid entries)&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) user batch import failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENDELETE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_tokendelete(char *pszTokenserialnum);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Delete a token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* char *pszTokenserialnum [IN] serial number of the token you want to delete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS token deleted successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) failed to delete the token&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_MAKELOG() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_makelog(int nLoglev, char *pszOperator, int nOptype, char *pszContent, char *pszSrvip);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
write logs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* int nLoglev [IN] logs level (1 or SECUOTP_PRI_SUPER super administrator level; 4 or SECUOTP_PRI_ADMIN administrator level; 10 or SECUOTP_PRI_OPERATOR operator level; 100 or SECUOTP_PRI_USER user level)&lt;br /&gt;
* char *pszOperator [IN] operator ID, if no user is authenticated, set the username.&lt;br /&gt;
* int nOptype [IN] operator type code (see operations list)&lt;br /&gt;
* char *pszContent [IN] logs contents&lt;br /&gt;
* char *pszSrvip [IN] IP address of the computer performing the operation, if the user is authenticated, set the IP address of the authenticated client.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS log file written successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) Failed to create log file&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_REBIND() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;int secuotp_rebind(const char *pszUsername, const char *pszNewserialnum);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rebind a token to an user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* const char *pszUsername [IN] Username&lt;br /&gt;
* const char *pszNewserialnum [IN] new token serial number used&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS token rebound successfully&lt;br /&gt;
&lt;br /&gt;
Others (See the error code list for more details) Failed to rebind the token&lt;br /&gt;
&lt;br /&gt;
==== Operation code list ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;600&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Operation code&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Operation &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| User authentication&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Add user&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Delete user&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Token synchronization&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Set User static PIN&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Set User authentication method&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Set User usability&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Set User lock&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| User batch import&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| Token batch import&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Token deletion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Error code list ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;500&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Error code&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SUCCESS&lt;br /&gt;
| 0&lt;br /&gt;
| success&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_ALLOCHANDLE_FAILED&lt;br /&gt;
| 11&lt;br /&gt;
| Failed to request ODBC source&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_FREEHANDLE_FAILED&lt;br /&gt;
| 12&lt;br /&gt;
| Failed to release ODBC source&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SETENVATTR_FAILED&lt;br /&gt;
| 13&lt;br /&gt;
| Failed to set ODBC properties&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETCONFIGFAILED&lt;br /&gt;
| 14&lt;br /&gt;
| Failed to get setting information&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_CONNECTDBFAILED&lt;br /&gt;
| 15&lt;br /&gt;
| Failed to connect to the database&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SQLEXFAILED&lt;br /&gt;
| 16&lt;br /&gt;
| Failed to execute SQL query&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_NORELATEITEM&lt;br /&gt;
| 17&lt;br /&gt;
| unrelated record&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETUSERINFO_FAILED&lt;br /&gt;
| 18&lt;br /&gt;
| Failed to get user information&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_USERREGLOST&lt;br /&gt;
| 19&lt;br /&gt;
| User token reported lost&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_USERLOCKED&lt;br /&gt;
| 20&lt;br /&gt;
| User is locked&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UNLOCK_FAILED&lt;br /&gt;
| 21&lt;br /&gt;
| Failed to unlock the user&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATEUSEDATE_FAILED&lt;br /&gt;
| 22&lt;br /&gt;
| Failed to update operation time&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UNKNOWNTKTYPE&lt;br /&gt;
| 23&lt;br /&gt;
| Unknown token type&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPCHALLENG_FAILED&lt;br /&gt;
| 24&lt;br /&gt;
| Failed to update user challenge information&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALID_PASSWORD&lt;br /&gt;
| 25&lt;br /&gt;
| Authentication password error&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SYNCHRONIZE_FAILED&lt;br /&gt;
| 26&lt;br /&gt;
| Synchronization failed&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALID_OLDPWD&lt;br /&gt;
| 27&lt;br /&gt;
| Wrong old password&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALID_AUTHTYPE&lt;br /&gt;
| 28&lt;br /&gt;
| Unable to use this authentication method&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_USEREXIST&lt;br /&gt;
| 29&lt;br /&gt;
| Username already exists&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALID_TOKEN&lt;br /&gt;
| 30&lt;br /&gt;
| Invalid Token (the Token doesn’t exist, is already bound or is disabled.)&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALID_PARAM&lt;br /&gt;
| 31&lt;br /&gt;
| Invalid parameters&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_ADDUSER_FAILED&lt;br /&gt;
| 32&lt;br /&gt;
| Failed to add user&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATETOKEN_FAILED&lt;br /&gt;
| 33&lt;br /&gt;
| Failed to update token state&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_DELETETOKEN_FAILED&lt;br /&gt;
| 34&lt;br /&gt;
| Failed to delete token&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETTOKENSTATE_FAILED&lt;br /&gt;
| 35&lt;br /&gt;
| Failed to get token state&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_TOKENINUSE&lt;br /&gt;
| 36&lt;br /&gt;
| Token is already bound&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALIDKEY&lt;br /&gt;
| 37&lt;br /&gt;
| Invalid secret key&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_OPENTOKENFILE_FAILED&lt;br /&gt;
| 38&lt;br /&gt;
| Failed to open token file&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_AESMKKEY_FAILED&lt;br /&gt;
| 39&lt;br /&gt;
| AES process private key error&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_AESDECRYPT_FAILED&lt;br /&gt;
| 40&lt;br /&gt;
| Failed to decrypt file&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_AESGETPLAIN_FAILED&lt;br /&gt;
| 41&lt;br /&gt;
| Failed to read plain text&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_AUTHSUCCESS_WITHINFO&lt;br /&gt;
| 42&lt;br /&gt;
| Authentication succeeded but with warning message&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATEKEYINFO_FAILED&lt;br /&gt;
| 43&lt;br /&gt;
| Failed to upgrade counter&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_NOTNEEDSYNCHRONIZE&lt;br /&gt;
| 44&lt;br /&gt;
| Try to synchronize the challenge/response Token.&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SETUSERPIN_FAILED&lt;br /&gt;
| 45&lt;br /&gt;
| Failed to set static PIN&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATEPIN_FAILED&lt;br /&gt;
| 46&lt;br /&gt;
| Failed to update static PIN&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SUCCESS_WITHINFO&lt;br /&gt;
| 47&lt;br /&gt;
| Token/User batch import partially succeeded. There are some invalid records returned&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_OPENUSERFILE_FAILED&lt;br /&gt;
| 48&lt;br /&gt;
| Failed to open the user filefor batch import&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETFILESIZE_FAILED&lt;br /&gt;
| 49&lt;br /&gt;
| Failed to get the size of the file.&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_SRVIPNULL&lt;br /&gt;
| 50&lt;br /&gt;
| Client IP address error&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETERRINFOBUF_FAILED&lt;br /&gt;
| 51&lt;br /&gt;
| Failed to apply for space&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_GETFILECONT_FAILED&lt;br /&gt;
| 52&lt;br /&gt;
| Failed to get the file contents.&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATEUSERBINDINFO_FAILED&lt;br /&gt;
| 53&lt;br /&gt;
| Failed to rebind the token with the user&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_UPDATENEWTKSTATE_FAILED&lt;br /&gt;
| 54&lt;br /&gt;
| Failed to update the token state after rebinding&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_INVALIDLOGLEV&lt;br /&gt;
| 55&lt;br /&gt;
| Invalid log level&lt;br /&gt;
|-&lt;br /&gt;
| SECUOTP_ERROR_CHALLENGE&lt;br /&gt;
| 100&lt;br /&gt;
| Challenge error for the user requesting authentication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Static data definition ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;500&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Static data&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| MAX_PATH&lt;br /&gt;
| 260&lt;br /&gt;
| Path maximum length&lt;br /&gt;
|-&lt;br /&gt;
| MAXLEN_56&lt;br /&gt;
| 56&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| MAXLEN_32&lt;br /&gt;
| 32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| MAXLEN_10&lt;br /&gt;
| 10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| MAX_DATEBUF_LEN&lt;br /&gt;
| 56&lt;br /&gt;
| Maximum size for the buffer&lt;br /&gt;
|-&lt;br /&gt;
| COUNTER_SIZE&lt;br /&gt;
| 8&lt;br /&gt;
| Counter(number of bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to use PHP SDK ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
1. Use the sql file inside the distributable package to create the database for UniOTP dynamic password authentication.&lt;br /&gt;
2. The PHP version SDK uses PHP to access to the database. Before beginning, we should make sure that the appropriate PHP database modules are running.&lt;br /&gt;
3. Create a configuration file (or modify the existing configuration file) and set the parameters to access the database.&lt;br /&gt;
&lt;br /&gt;
==== Add support for UniOTP dynamic password ====&lt;br /&gt;
1. Add the SDK files (include otp_const.php, otp_corefunc.php, folder config, folder dbinterface and folder encrypt) to the project in which you want to implement dynamic password authentication.&lt;br /&gt;
2. Modify the configuration file.&lt;br /&gt;
3. Use the provided API to perform authentication related operations and others.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Call procedure&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you need to perform some business treatments, you just need to call the related API. (for details about calls, please see the sample)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important points&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. You need to set the database type inside the configuration file. (This is because, depending on the database type, the connection interface used by the database is not the same)&lt;br /&gt;
2. Call the function secuotp_userimport($sUserfile, &amp;amp;$sErrinfo, $sSecret=&amp;quot;&amp;quot;) to perform batch import for user. If $sSecret value is not empty, this means that the file is encrypted. We recommend not to use file encryption feature.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_AUTH() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_auth($susername, $sPassword, &amp;amp;$challenge);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dynamic password authentication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername name of user to be authenticated&lt;br /&gt;
* $sPassword authentication password(OTP or OTP+PIN. Depends on the user’s&lt;br /&gt;
authentication mode)&lt;br /&gt;
* &amp;amp;$Challenge challenge number. if SECUOTP_ERROR_CHALLENGE is returned, challenge number will be set in $Challenge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS authentication successful&lt;br /&gt;
* SECUOTP_ERROR_CHALLENGE a challenge should be sent to the user&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SYNCHRONIZE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_synchronize($sUsername, $sOtp1, $sOtps)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Synchronize the token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername name of user whose token is to be synchronized&lt;br /&gt;
* $sOtp1 the first OTP&lt;br /&gt;
* $sOtp2 the second OTP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS synchronized successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
Remark: the two OTPs must be consecutive&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_setuserpin($sUsername, $sPin)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set PIN for user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername user name&lt;br /&gt;
* $sPin PIN for $sUsername&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS New PIN set successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_RESETPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_resetpin($sUsername, $sOldpin, $sNewpin)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Reset PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername Username of the user you want to reset the PIN for&lt;br /&gt;
* $sOldpin old PIN&lt;br /&gt;
* $sNewpin new PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS PIN reset successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETAUTHTYPE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_setauthtype($sUsername, $nAuthtype)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set authentication type (1—use OTP only 2—user OTP+PIN)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername Username of the user you want to reset the PIN for&lt;br /&gt;
* $nAuthtype authentication type (1-OTP, 2-OTP+PIN)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Authentication type set successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_ADDUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_adduser(&lt;br /&gt;
    $sUsername,&lt;br /&gt;
    $sUserid,&lt;br /&gt;
    $sContacttel,&lt;br /&gt;
    $sSerialnum,&lt;br /&gt;
    $sRemark,&lt;br /&gt;
    $sEmail,&lt;br /&gt;
    $sDomain,&lt;br /&gt;
    $sPin,&lt;br /&gt;
    $sPreusedate,&lt;br /&gt;
    $nAuthtype&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a new user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername username&lt;br /&gt;
* $sUserid identity number such as personal ID&lt;br /&gt;
* $sContacttel contact phone number&lt;br /&gt;
* $sSerialnum serial number of a usable token allocated to the user&lt;br /&gt;
* $sRemark remark&lt;br /&gt;
* $sEmail email address&lt;br /&gt;
* $sDomain reserved, you should set it null string(“”)&lt;br /&gt;
* $sPin static PIN&lt;br /&gt;
* $nAuthtype authentication type (1-OTP, 2-OTP+PIN)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS User added successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_DELETEUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_deleteuser($sUsername)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Delete a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername username of user to be deleted&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS User deleted successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERINVALID() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_setuserinvalid($nUsername, $nValid)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set user validity status (0 valid, 1 invalid)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername username&lt;br /&gt;
* $nValid validity status (0 valid, 1 invalid)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Validity status set successfully&lt;br /&gt;
&lt;br /&gt;
Others failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERLOCK() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_setuserlock($sUsername, $nLock)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set user’s lock status&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername username&lt;br /&gt;
* $nLock lock status (0 unlocked, 1 locked)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Lock status set successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
Remark: If nLock is set to 1, the user will be locked for 10 minutes&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_tokenimport($sTokenfile, $sSecret, &amp;amp;$sErrinfo)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Import token items into the UniOTP system&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sTokenfile token file path&lt;br /&gt;
* $sSecret decrypt share key&lt;br /&gt;
* &amp;amp;$sErrinfo error information. It often contains invalid token items if&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS_WITHINFO is returned&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Token imported successfully&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS_WITHINFO the token file has some invalid&lt;br /&gt;
token item&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_USERIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_userimport($sUserfile, &amp;amp;$sErrinfo, $sSecret)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Batch user import&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUserfile path of file which contains user items&lt;br /&gt;
* &amp;amp;$sErrinfo If SECUOTP_ERROR_SUCCESS_WITHINFO is returned, it contains the bad user items&lt;br /&gt;
* $sSecret decrypt secret, if a null string is given, the user file will be deal with as a plain text&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS User(s) imported successfully&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS_WITHINFO The user file has some invalid user items. Invalid items have been stored in $sErrinfo&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENDELETE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_tokendelete($sTokenserialnum)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Remove a token from the database&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sTokenserialnum serial number of the token to be removed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Token deleted from database successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_MAKELOG() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_makelog($nLoglev, $sOperator, $nOptype, $sContent, $sSrvip)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add log information&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $nLoglev log level (1 super administrator, 4 administrator, 10 operator,100 user)&lt;br /&gt;
* $sOperator operator id or name of user&lt;br /&gt;
* $nOptype operation type (see the operation type definition in file otp_const.php)&lt;br /&gt;
* $sContent log content&lt;br /&gt;
* $sSrvip IP address of operator’s computer or user’s computer&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* SECUOTP_ERROR_SUCCESS Log created successfully&lt;br /&gt;
&lt;br /&gt;
Others: failed&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_REBIND() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;Function secuotp_rebind($sUsername, $sNewserialnum)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Allocated a new token to the user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $sUsername username&lt;br /&gt;
* $sNewserialnum new token serial number&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
== How to use PHP Extension SDK ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
# Use the SQL file inside the distributable package to create the database for the UniOTP dynamic password authentication system.&lt;br /&gt;
# Install the driver corresponding to the database you are using and choose to use this driver.&lt;br /&gt;
# Create an ODBC data source for the newly created database.&lt;br /&gt;
# Create a configuration file (or modify the existing configuration file) and define the database access settings.&lt;br /&gt;
&lt;br /&gt;
==== Add support for UniOTP dynamic password ====&lt;br /&gt;
&lt;br /&gt;
# Copy UniOTP SDK extension modules to the PHP extension modules directory.&lt;br /&gt;
# Modify the PHP configuration file and add support for UniOTP extension modules.&lt;br /&gt;
# Restart the server to enable extension modules.&lt;br /&gt;
# Modify the configuration file. the configuration file contains the database connection and authentication parameters.&lt;br /&gt;
# Use API to perform operations related to authentication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Call procedure&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Call the function secuotp_initenv($Confpath) to initialize database settings.&lt;br /&gt;
# Use other interfaces to perform business-related operations.&lt;br /&gt;
# Call the function secuotp_cleanup() to perform cleaning operations such as releasing the memory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important points&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# The first time you call functions from the SDK, you should first call the function secuotp_initenv($Confpath) to initialize database settings. You only need to call it once in each PHP page where you will use functions of the SDK.&lt;br /&gt;
# When you finish using the SDK, use secuotp_cleanup() to perform cleaning operations.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_INITENV() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_initenv($Confpath);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialize configuration file. Only need to be called once.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Confpath [IN] configuration file path&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_CLEANUP() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_cleanup();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function is in charge of freeing assigned global resources (apply initialization settings)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_GETLASTERROR() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_getlasterror();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Return the last error message&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error.&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_AUTH() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_auth($Username, $Pwd, &amp;amp;$Challenge);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dynamic password authentication&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Pwd [IN] Authentication password for this time&lt;br /&gt;
* $Challenge [OUT] Use to save the challenge message returned by the server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SYNCHRONIZE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_synchronize($Username, $Otp1, $Otp2);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Synchronize the token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Otp1 [IN] For the synchronization to be completed, you need to provide 2&lt;br /&gt;
consecutive dynamic passwords. This parameter is the first of the two passwords $Otp2 [IN] The second of the two passwords&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_setuserpin($Username, $Pin);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the user PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Pin [IN] User PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_RESETPIN() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_resetpin($Username, $Oldpin, $Newpin);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set a new PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Oldpin [IN] old PIN&lt;br /&gt;
* $Newpin [IN] new PIN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETAUTHTYPE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_setauthtype($Username, $nAuthtype);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set authentication type&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $nAuthtype [IN] Authentication type 1- Use only OTP to perform&lt;br /&gt;
authentication, 2- Use both OTP and PIN to perform authentication&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, use ErrorCode2Msg($index) to check the error&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_ADDUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_adduser(&lt;br /&gt;
    $Username,&lt;br /&gt;
    $Userid,&lt;br /&gt;
    $Contacttel,&lt;br /&gt;
    $Serialnum,&lt;br /&gt;
    $Remark,&lt;br /&gt;
    $Email,&lt;br /&gt;
    $Domain,&lt;br /&gt;
    $Pin,&lt;br /&gt;
    $Preusedate,&lt;br /&gt;
    $nAuthtype&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a new user; this operation will bind a new user and a new token.&lt;br /&gt;
&lt;br /&gt;
Remark: Before adding a user, make sure the token allocated to the user has been imported into the database using the function secuotp_tokenimport().&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Userid [IN] User ID (Unique)&lt;br /&gt;
* $Contacttel [IN] User phone number&lt;br /&gt;
* $Serialnum [IN] Token serial number attributed to this user&lt;br /&gt;
* $Remark [IN] Remark/Comment&lt;br /&gt;
* $Email [IN]Email address&lt;br /&gt;
* $Domain [IN]Reserved, always NULL&lt;br /&gt;
* $Pin [IN]User PIN&lt;br /&gt;
* $Preusedate [IN]User registration date&lt;br /&gt;
* $nAuthtype [IN]Authentication type,1- only use OTP to perform&lt;br /&gt;
authentication 2- Use OTP+PIN to perform authentication.&lt;br /&gt;
&lt;br /&gt;
Return value&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_DELETEUSER() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_deleteuser($Username);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Delete a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERINVALID() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_setuserinvalid($Username, $nValid);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set user validity status&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $ nValid [IN]User validity status 0-valid, 1-invalid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_SETUSERLOCK() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Protoype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
function secuotp_setuserlock($Username, $nLock);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the user lock state&lt;br /&gt;
&lt;br /&gt;
Remark: If nLock has been set to 1, the user will be locked for 10 minutes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $nLock [IN]lock state (0-unlocked, 1-locked)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_tokenimport($Tokenfile, $Secret, $invalid_items);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
import token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Tokenfile [IN]Token file path&lt;br /&gt;
* $Secret [IN] secret key used for decryption&lt;br /&gt;
* $invalid_items [OUT] invalid token record inside the token file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_USERIMPORT() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_userimport($Userfile, $Secret, $invalid_items);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
User import&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Userfile [IN] User file&lt;br /&gt;
* $Secret [IN] Decryption secret key, let empty if the file is not encrypted&lt;br /&gt;
* $invalid_items [OUT] invalid token record inside the user file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_TOKENDELETE() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_tokendelete($Tokenserialnum);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Delete a token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Tokenserialnum [IN] token that you want to delete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_MAKELOG() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_makelog($nLoglev, $pszOperator, $nOptype, $pszContent, $pszSrvip);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Write logs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $nLoglev [IN]logs level .The following values are usable: 1 (super administrator), 2 (administrator), 3 (operator), 4 (user)&lt;br /&gt;
* $pszOperator [IN]Operator&lt;br /&gt;
* $nOptype [IN]Operation type&lt;br /&gt;
* $pszContent [IN]logs data&lt;br /&gt;
* $pszSrvip [IN]Server IP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;br /&gt;
&lt;br /&gt;
==== API:SECUOTP_REBIND() ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;function secuotp_rebind($Username, $Newtokenserial);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rebind a token with a user&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PARAMETERS DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
* $Username [IN] Username&lt;br /&gt;
* $Newtokenserial [IN]New Token serial number&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RETURN VALUE DESCRIPTION&lt;br /&gt;
&lt;br /&gt;
0 success&lt;br /&gt;
&lt;br /&gt;
Others: failure, check error through ErrorCode2Msg($index)&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_XP_Client_Smart_Card_Configuration&amp;diff=2094</id>
		<title>UniToken Integration Guide Windows XP Client Smart Card Configuration</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_XP_Client_Smart_Card_Configuration&amp;diff=2094"/>
		<updated>2016-08-23T06:08:42Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Configure Windows XP to join your Windows Domain  ==&lt;br /&gt;
&lt;br /&gt;
Please note that the following guide requires the configured computer to be Windows XP Professional to be able to join a Windows domain. From the Start Menu, right-click on [My Computer] select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img63.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;System Properties&amp;quot; window, under  the tab &amp;quot;Computer Name&amp;quot;, click on [Change]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img64.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Below &amp;quot;Member of&amp;quot; in the field &amp;quot;Domain&amp;quot;, input the name of your Windows domain to join. In this example, &#039;secutech&#039; was entered. Click on [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img65.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A pop-up window will appear asking to enter the name and password of the account to join the domain with. Input the corresponding username and the password for the user account and click [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img66.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
The confirmation window containing the message [Welcome to (domain name) domain.] will appear when joining the domain was successful.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img67.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
To apply the new settings, it is necessary to restart the computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img68.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. First, ensure the account logged into the computer is the same as the above connected to the Windows domain.&lt;br /&gt;
Right-click on the PKI package installation file and choose [Run as...].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img69.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Execute the file with an account that has administrator rights on the computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img70.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img71.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input your User Name and Company Name and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img72.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Select [Complete] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img73.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img74.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;Hardware Installation&amp;quot; warning message will appear, asking to confirm installing &amp;quot;UniToken Virtual Reader&amp;quot;. Click on [Continue Anyway] to continue the installation.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img75.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img76.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Request and Install the Certificate from the CA ==&lt;br /&gt;
&lt;br /&gt;
Launch your internet browser of your choice and navigate to &amp;quot;https://[address of domain server]/certsr&amp;quot;. Input your username and password to log in when requested.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img77.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Microsoft Active Directory Certificate Services&amp;quot; main page, under &amp;quot;Select a task&amp;quot;, click on [Request a certificate].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img78.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Request a certificate&amp;quot;, click on [advanced certificate request].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img79.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Advanced Certificate Request&amp;quot; on the page, select [Create and submit a request to this CA].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img80.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the subheading &amp;quot;Key Options&amp;quot; on the &amp;quot;Advanced Certificate Request&amp;quot; page, select [Smartcard User] from the drop-down list for &amp;quot;Certificate Template&amp;quot;, and [UniToken PRO CSP v2.0] from the drop-down list for &amp;quot;CSP&amp;quot;. Continue with the default settings and click on [Submit] to apply for the certificate.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img81.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;Web Access Confirmation&amp;quot; warning message will appear, asking to confirm the operation. Click on [Yes] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img82.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A window requesting the PIN for the UniToken device will appear. Input the User PIN and click on [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img83.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Install this certificate] on the &amp;quot;Certificate Issued&amp;quot; page to install the certificate within the token.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img84.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Yes] when the warning message [Do you want to allow the actions performed by this website] appears.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img85.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Certificate Installed&amp;quot; page will appear when the installation is complete.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img86.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Configure Smart Card Logon ==&lt;br /&gt;
&lt;br /&gt;
In the start menu, click on [Run].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img87.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input &amp;quot;gpedit.msc&amp;quot;, without the quotation marks, in &amp;quot;Open&amp;quot; and click [OK].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img89.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [Group Policy] page, in [Computer Configuration], [Windows Settings], [Security Settings],[Local Policies], [Security Options], right-click on [Interactive Logon: Requires smart card] and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img90.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Local Security Setting] tab, select [Enabled] and click on [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img91.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the same directory, right-click [Interactive logon: Smart card removal behavior] and select [properties]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img92.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Local Security Setting] tab, select the action to perform when the UniToken device is removed from the computer, then click on [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img93.jpg|370px]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_7_Client_Smart_Card_Configuration&amp;diff=2141</id>
		<title>UniToken Integration Guide Windows 7 Client Smart Card Configuration</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_7_Client_Smart_Card_Configuration&amp;diff=2141"/>
		<updated>2016-08-23T06:08:05Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Configure Windows 7 to join your Windows Domain ==&lt;br /&gt;
&lt;br /&gt;
Please note that the following guide requires the configured computer to be Windows 7 Professional or a higher edition to be able to join a Windows domain.&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, right-click on [My Computer] and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img94.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the subheading &amp;quot;Computer name, domain, and workgroup settings&amp;quot; near the bottom right of the window, click on [Change settings].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img95.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the tab &amp;quot;Computer name&amp;quot; in the &amp;quot;System Properties&amp;quot; window, click on [Change].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img96.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Below &amp;quot;Member of&amp;quot; in the field &amp;quot;Domain&amp;quot;, input the name of your Windows domain to join. In this example, &#039;secutech&#039; was entered. Click on [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img97.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A pop-up window will appear asking to enter the name and password of the account to join the domain with. Input the corresponding username and the password for the user account and click [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img98.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
The confirmation window containing the message [Welcome to (domain name) domain.] will appear when joining the domain was successful.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img99.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
To apply the new settings, it is necessary to restart the computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img100.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. First, ensure the account logged into the computer is the same as the above connected to the Windows domain. Right-click on the PKI package installation file and choose [Run as administrator].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img101.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img102.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input your User Name and Company Name and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img103.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Select [Complete] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img104.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img105.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img106.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Request and Install the Certificate from the CA ==&lt;br /&gt;
&lt;br /&gt;
Launch Internet Explorer and navigate to &amp;quot;https://[address of domain server]/certsr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
E.g. The URL &amp;quot;https://192.168.1.229/certsrv&amp;quot;, without the quotation marks, was entered in this example.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img107.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input your username and password to log in when requested.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img108.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Microsoft Active Directory Certificate Services&amp;quot; main page, under &amp;quot;Select a task&amp;quot;, click on [Request a certificate].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img109.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Request a certificate&amp;quot;, click on [advanced certificate request].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img110.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Advanced Certificate Request&amp;quot; on the page, select [Create and submit a request to this CA].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img111.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;Web Access Confirmation&amp;quot; warning message will appear, asking to confirm the operation. Click on [Yes] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img112.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the subheading &amp;quot;Key Options&amp;quot; on the &amp;quot;Advanced Certificate Request&amp;quot; page, select [Smartcard User] from the drop-down list for &amp;quot;Certificate Template&amp;quot;, and [UniToken PRO CSP v2.0] from the drop-down list for &amp;quot;CSP&amp;quot;. Continue with the default settings and click on [Submit] to apply for the certificate.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img113.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A window requesting the PIN for the UniToken device will appear. Input the User PIN and click on [OK] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img114.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;Web Access Confirmation&amp;quot; warning message will appear, asking to confirm the operation. Click on [Yes] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img115.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Install this certificate] on the &amp;quot;Certificate Issued&amp;quot; page to install the certificate within the token.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img116.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Certificate Installed&amp;quot; page will appear when the installation is complete.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img117.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Configure Smart Card Logon ==&lt;br /&gt;
&lt;br /&gt;
In the start menu, type &amp;quot;gpedit.msc&amp;quot;, without the quotation marks, in the search field, and right-click on &amp;quot;gpedit&amp;quot; and select [Run as administrator].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img118.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [Group Policy] page, in [Computer Configuration], [Windows Settings], [Security Settings],[Local Policies], [Security Options], right-click on [Interactive Logon: Requires smart card] and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img119.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Local Security Setting] tab, select [Enabled] and click on [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img120.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the same directory, right-click [Interactive logon: Smart card removal behavior] and select [properties]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img121.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Local Security Setting] tab, select the action to perform when the UniToken device is removed from the computer, then click on [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img122.jpg|370px]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_2008_Server_Smart_Card_Configuration&amp;diff=909</id>
		<title>UniToken Integration Guide Windows 2008 Server Smart Card Configuration</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_2008_Server_Smart_Card_Configuration&amp;diff=909"/>
		<updated>2016-08-23T06:07:28Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken Integration Guide]]&lt;br /&gt;
&lt;br /&gt;
== Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, and click on [Server Manager].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img01.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [View Network Connections]on the right-hand side of the window under &amp;quot;Server Summary&amp;quot;, &amp;quot;Computer Information&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img02.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Right-click on the connection interface used between clients and the server and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img03.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the properties window of the connection, highlight [Internet Protocol (TCP/IPv4)] and click on [Properties] below.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img04.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Internet Protocol Version 4 (TCP/IPv4) Properties&amp;quot; window, select [Use the following IP address] and input a static IP address, subnet mask and default gateway for your server.&lt;br /&gt;
&lt;br /&gt;
Select [Use the following DNS server addresses] and input the same IP address as your static IP address. This server will be used as the main DNS server.&lt;br /&gt;
&lt;br /&gt;
Click on [OK] on all windows to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img05.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Active Directory Installation ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click [Run...] or in the search box from the Start Menu, type &amp;quot;dcpromo&amp;quot;, without quotation marks, and press [Enter].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img06.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Wait while the binaries for Active Directory Services are being installed.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img07.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Active Directory Domain Services Installation Wizard&amp;quot; welcome screen, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img08.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On &amp;quot;Operating System Compatibility&amp;quot; step, click on [next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img09.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Choose a Deployment Configuration&amp;quot; step, verify that [Create a new domain in a new forest] is selected and click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img10.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Name the Forest Root Domain&amp;quot; step, input a name for the domain and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img11.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Set Forest Functional Level&amp;quot; step, keep the default settings and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img12.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the following &amp;quot;Set Forest Functional Level&amp;quot; step, keep the default settings and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img13.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the screen [Additional Domain Controller Options], check the option [DNS Server] and click on [Next]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img14.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the dialog box &amp;quot;Active Directory Domain Services Installation Wizard&amp;quot;, click on [Yes] when asked &amp;quot;Do you want to continue?&amp;quot; to continue.&lt;br /&gt;
&lt;br /&gt;
Please note, in this tutorial, we are assuming the preferred DNS on the local network is our server and that DNS information is distributed to clients by the DHCP service installed on this server.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img15.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Location for Database, Log Files, and SYSVOL&amp;quot; step, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img16.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Directory Service Restore Mode Administrator Password&amp;quot; ste[, set the password for the administrator of restore mode and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img17.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Summary&amp;quot; screen , verify the settings up to now are correct, then click [Next] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img18.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Wait until the configuration of Active Directory is completed.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img19.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click [Finish] to close the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img20.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Certification Authority Installation ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Server Manager].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img21.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
From the left-hand side pane, click on [Roles].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img22.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
In the right-hand side of the window, click on [Add Roles].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img23.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click [Next] on the screen [Before You Begin] to begin.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img24.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Select Server Roles&amp;quot; step, select [Active Directory Certificate Services], then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img25.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Introduction to Active Directory Certificates Services&amp;quot; page, click on [Next]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img26.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Select Role Services&amp;quot; page, check [Certification Authority] and [Certification Authority Web Enrollment], then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img27.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add Roles Wizard&amp;quot; dialog box, click on [Add Required Role Services].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img28.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Make sure that [Certification Authority Web Enrollment] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img29.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Specify Setup Type&amp;quot; page, select [Enterprise], then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img30.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Specify CA Type&amp;quot; page, select [Root CA], and click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img31.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Set Up Private Key&amp;quot; page, click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img32.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Configure Cryptography for CA&amp;quot; page, click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img33.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Configure CA Name&amp;quot; page, accept the proposed CA Name or otherwise input a new CA name. Click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img34.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Set Validity Period&amp;quot; page, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img35.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Configure Certificate Database&amp;quot; page, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img36.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Web Server(IIS)&amp;quot; page, click on [Next]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img37.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Select Role Services&amp;quot;, verify that the required services have been selected and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img38.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Confirm Installation Selections&amp;quot; page, verify installation information is correct, then click on [Install] to begin the installation.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img39.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Installation Results&amp;quot; page, verify that the installation has been completed successfully, then click on [Close] to complete.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img40.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Secure Access to Certsrv with SSL ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click [Administrative Tools], [Internet Information Services (IIS) Manager].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img41.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the left pane, select the corresponding server under &amp;quot;Connection&amp;quot;, then in the main window double-click on [Server Certificates].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img42.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [Server Certificates] page, from the &amp;quot;Actions&amp;quot; menu on the right, click on [Create Self-Signed Certificate...].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img43.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Create Self-Signed Certificate&amp;quot; window, on the &amp;quot;Specify Friendly Name&amp;quot; step, enter a name for the certificate and click on [OK].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img44.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the left pane, under &amp;quot;Sites&amp;quot;, right-click on [Default Web Site] and click [Edit Bindings...].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img45.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [Site Bindings] window, click [Add].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img46.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Modify the following settings:&lt;br /&gt;
&lt;br /&gt;
* Type: https&lt;br /&gt;
* IP address: All Unassigned&lt;br /&gt;
* Port: 443&lt;br /&gt;
* Certificate: (the certificate created earlier)&lt;br /&gt;
&lt;br /&gt;
Click [OK].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img47.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [CertSrv] within [Default Web Site] from the left pane. Double-click on [SSL settings].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img48.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;SSL Settings&amp;quot; page, check [Require SSL] and [Require 128-bit SSL]. Under &amp;quot;Client certificates&amp;quot;, select [Ignore] and click on [Apply] to save changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img49.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Create Users in Active Directory ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click [Administrative tools], [Active directory Users and Computers].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img50.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
From the tree list on the left under the &amp;quot;Active Directory Users and Computers&amp;quot; window, right click on [(Domain)], [Users], then from the popup menu [New], [User].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img51.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Complete the form on the new user and click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img52.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Fill in the [Password] and [Confirm password] fields. Choose the corresponding options as needed and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img53.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify information about the new user is correct and click [Finish] to close the window.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img54.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Set Access Rights for Certificate Templates ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click [Run...] or in the search box from the Start Menu, type &amp;quot;certtmpl&amp;quot;, without quotation marks, and press [Enter].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img55.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Certificate Templates Console&amp;quot; window, right-click [Smartcard User] from the list on the right and click [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img56.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Security] tab, click on [Add] to add a new user to the list.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img57.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Select the user previously created (UniTokenPRO in this example) and click [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img58.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Back on the [Security] tab, select the newly added user and check [Read] and [Enroll] for the user&#039;s permissions. Click on [OK] to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img59.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Administrative Tools], [Certification Authority].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img60.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Certification Authority&amp;quot; window, right-click on [Certificate Template], and select [New], [Certificate Template to Issue].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img61.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the &amp;quot;Enable Certificate Templates&amp;quot; window, select [Smartcard User] and click [OK] to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img62.jpg|370px]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_2003_Server_Smart_Card_Configuration&amp;diff=870</id>
		<title>UniToken Integration Guide Windows 2003 Server Smart Card Configuration</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Windows_2003_Server_Smart_Card_Configuration&amp;diff=870"/>
		<updated>2016-08-23T06:07:02Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken Integration Guide]]&lt;br /&gt;
&lt;br /&gt;
== Network Configuration ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Connect To], [Show all connections].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img123.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Right-click on the connection interface between the domain controller and client and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img124.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the properties window of the connection, select [Internet Protocol (TCP/IP)] and click on [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img125.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Internet Protocol Version 4 (TCP/IPv4) Properties&amp;quot; window, select [Use the following IP address] and input a static IP address, subnet mask and default gateway for your server.&lt;br /&gt;
&lt;br /&gt;
Select [Use the following DNS server addresses] and input the same IP address as your static IP address. This server will be used as the main DNS server.&lt;br /&gt;
&lt;br /&gt;
Click on [OK] on all windows to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img126.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Active Directory Installation ==&lt;br /&gt;
&lt;br /&gt;
From the start menu, click on “Run...”&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img127.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input &amp;quot;dcpromo&amp;quot;, without quotation marks, and click [OK] to launch the Active Directory wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img128.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Active Directory Installation Wizard&amp;quot; welcome screen, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img129.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Operating System Compatibility&amp;quot; page, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img130.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Domain Controller Type&amp;quot; page, verify that [Controller for a new domain] is selected, then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img131.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Create New Domain&amp;quot; page, verify that [Domain in a new forest] is selected, then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img132.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [New Domain Name] page, input a name for your domain, then click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img133.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;NetBIOS Domain Name&amp;quot; page, input a NetBIOS name or otherwise leave the suggested name, then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img134.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Database and Log Folders&amp;quot; page, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img135.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Shared System Volume&amp;quot; page, click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img136.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [DNS Registration Diagnostics] page, select [Install and configure the DNS server on this computer, and set this computer to use this DNS server as its preferred DNS server], then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img137.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Permissions&amp;quot; page, select [Permissions compatible only with Windows 2000 or Windows Server 2003], then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img138.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Directory Service Restore Mode Administrator Password&amp;quot; page, input a restore mode password, then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img139.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Summary&amp;quot; page, confirm the entered settings, then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img140.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
After the configuration of Active Directory is completed, the Windows Server 2003 CD-ROM is required to complete the procedure.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img141.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that the Active Directory has been installed successfully, then click on [Finish] to close the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img142.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== IIS Installation ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Control Panel], [Add or Remove Programs].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img143.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the &amp;quot;Add or Remove Programs&amp;quot; window, choose [Add/Remove Windows Components] from the left-hand side menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img144.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Check [Application Server] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img145.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify the installation was successful after completion.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img146.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Certification Authority Installation ==&lt;br /&gt;
&lt;br /&gt;
If continuing from the previous step, return to the &amp;quot;Add/Remove Windows Components&amp;quot; window. Otherwise, from the Start Menu, click on [Control Panel], [Add or Remove Programs], then choose [Add/Remove Windows Components] from the left-hand side menu.&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add/Remove Windows Components&amp;quot; window, check [Certificate Services]. A warning message indicating the computer name and domain may not be changed once Certificate Services is installed will appear. Click [Yes] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img147.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that [Certificate Services] has been checked, and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img148.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;CA Type&amp;quot; step, select [Enterprise root CA], then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img149.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;CA Identifying Information&amp;quot; step, input the name for the CA in the field [Common name for this CA], and check that [Distinguish name suffix] corresponds to the domain name. Click on [Next] when done.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img150.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Certificate Database Settings&amp;quot; page, click on [Next]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img151.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
During the installation, a warning message indicating the IIS service must be stopped temporarily will be displayed. Click on “Yes” to continue the installation.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img152.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
The installation changes will be applied.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img153.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
A warning message asking if Active Server Pages is to be enabled will appear. Click on [Yes] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img154.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that the component has been installed successfully and click on [Finish] to close the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img155.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Update CertSrv for Windows Vista/7 ==&lt;br /&gt;
&lt;br /&gt;
An update available from Microsoft configures the CA web interface to be resolve an issue with enrolling web certificates against a Windows Server 2003 Certificate Services Web enrollment, and improves the CA&#039;s compatibility with Windows XP to Windows Vista and 7. The file can be downloaded from https://www.microsoft.com/en-us/download/details.aspx?id=4758.&lt;br /&gt;
&lt;br /&gt;
Back up your data before installing this update! SecuTech cannot be held as responsible for any data loss caused by this update.&lt;br /&gt;
&lt;br /&gt;
Double-click the downloaded file to launch the installation.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img156.jpg|170px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Next] in the &amp;quot;Software Update Installation Wizard&amp;quot; screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img157.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [License Agreement] step, select [I agree] and click on [Next] to continue.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img158.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Changes will be applied.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img159.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify that the update has been successfully installed and click on [Finish] to complete.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img160.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Secure Access to Certsrv with SSL ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Administrative Tools], [Internet Information Services (IIS) Manager].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img161.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Internet Information Services (IIS) Manager&amp;quot; window, navigate to [Web Sites], [Default Website] in the tree list on the left. Right-click on [Default Website], then click on [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img162.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Directory Security] tab, in the [Secure communications] section, click on [Server Certificate].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img163.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Next] in the Web Server Certificate Wizard to begin.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img164.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Server Certificate&amp;quot; page, select [Create a new certificate], then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img165.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Delayed or Immediate Request&amp;quot; step, select [Prepare the request now, but send it later] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img166.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Name and Security Settings&amp;quot; page, enter the name of the certificate, then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img167.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Organization Information&amp;quot; step, input the organization and organizational unit information and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img168.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Your Site&#039;s Common Name&amp;quot; step, input the name of your website and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img169.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Input the [Country/region], [State/province], [City/locality] and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img170.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Indicate the certificate request file path and name in the &amp;quot;Certificate Request File Name&amp;quot; page. Click on [Next] afterwards.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img171.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Request File Summary&amp;quot; page, verify the information is correct, then click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img172.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Finish] to complete the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img173.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Launch your internet browser of your choice and navigate to &amp;quot;https://[address of domain server]/certsr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img174.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Microsoft Active Directory Certificate Services&amp;quot; main page, under &amp;quot;Select a task&amp;quot;, click on [Request a certificate]. Under &amp;quot;Request a certificate&amp;quot;, click on [advanced certificate request].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img175.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the page “Advanced Certificate Request”, choose [Submit a certificate request by using a base 64 encoded CMC or PKCS#10 file, or submit a renewal request by using a base 64 encoded CMC or PKCS#7 file]&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img176.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Navigate to the folder where the &amp;quot;certreq.txt&amp;quot; file is located and open it.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img177.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Excluding the first and last line, copy the whole contents of &amp;quot;certreq.txt&amp;quot; and paste it in the corresponding text area in the web page.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img178.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Certificate Template&amp;quot;, choose [Web server] from the drop-down list and click on [Submit].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img179.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Select [DER encoded] and click on [Download certificate].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img180.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Save the file [certnew.cer] to a destination for later use.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img181.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Return to the [Default Web Site Properties] window, and click on [Server Certificate] under &amp;quot;Secure communications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img182.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the &amp;quot;Welcome to the Web Server Certificate Wizard&amp;quot; welcome screen, click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img183.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Pending Certificate Request&amp;quot; step, select [Process the pending request and install the certificate].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img184.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Process a Pending Request&amp;quot; step, check or otherwise enter the path to the &amp;quot;certnew.cer&amp;quot; file created eariler. Click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img185.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the [SSL Port] step, check the correct SSL port used on the server is correct and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img186.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Click on [Finish] to complete the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img187.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Return to the [Internet Information Service (IIS) Manager] window and expand [Default Web Site], right-click on the element [CertSrv], and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img188.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the tab [Directory Security], click on the [Edit…] button located under &amp;quot;Secure communications.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img189.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In the [Secure Communications] window, check [Require secure channel (SLL)] and [Require 128-bit encryption]. Verify that [Ignore client certificates] is selected under &amp;quot;Client certificates&amp;quot; and select [Enable client certificate mapping]. Click [OK] to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img190.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Create Users in Active Directory ==&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click [Administrative tools], [Active directory Users and Computers].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img191.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
From the tree list on the left under the &amp;quot;Active Directory Users and Computers&amp;quot; window, right click on [(Domain)], [Users], then from the popup menu [New], [User].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img192.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Complete the form on the new user and click [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img193.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Fill in the [Password] and [Confirm password] fields. Choose the corresponding options as needed and click on [Next].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img194.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Verify information about the new user is correct and click [Finish] to close the window.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img195.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Set Access Rights for Certificate Templates ==&lt;br /&gt;
&lt;br /&gt;
From the start menu, select [Run...].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img196.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Type &amp;quot;certtmpl.msc&amp;quot;, without quotation marks, then click [OK].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img197.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;certtmpl - [Certificate Templates}&amp;quot; window, right-click [Smartcard User] from the list on the right and select [Properties].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img198.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the [Security] tab, click on [Add] to add a new user to the list.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img199.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Select the user previously created (UniTokenPRO in this example) and click [OK] to apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img200.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Back on the [Security] tab, select the newly added user and check [Read] and [Enroll] for the user&#039;s permissions. Click on [OK] to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img201.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
From the Start Menu, click on [Administrative Tools], [Certification Authority].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img202.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Certification Authority&amp;quot; window, right-click on [Certificate Template], and select [New], [Certificate Template to Issue].&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img203.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
Under the &amp;quot;Enable Certificate Templates&amp;quot; window, select [Smartcard User] and click [OK] to finish.&lt;br /&gt;
&lt;br /&gt;
[[Image:tokensmart img204.jpg|370px]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_TrueCrypt_Keyfile&amp;diff=938</id>
		<title>UniToken Integration TrueCrypt Keyfile</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_TrueCrypt_Keyfile&amp;diff=938"/>
		<updated>2016-08-23T06:05:10Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator].Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configure PKCS Support in TrueCrypt ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu of TrueCrypt, click on [Settings],[Security Tokens].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:truecrypt img01.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [TrueCrypt - Security Token Preferences] window, click [Select Library...] and select the library file to be used. By default, the PKI package will install this file in the Windows%System32% directory, library file &amp;quot;utp11.dll&amp;quot;. Click [OK].&lt;br /&gt;
| [[Image:truecrypt img02.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create an Encrypted Volume with TrueCrypt ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | To create a new encrypted volume, in the main window, click [Create Volume]. Then, on the first page of the wizard, click [New].&lt;br /&gt;
| [[Image:freeotfe img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the [Volume Type] page, click on [Next] to continue the volume creation procedure.&lt;br /&gt;
| [[Image:freeotfe img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click [Select File] to choose where to store the encrypted volume. Click [Next] to continue. &lt;br /&gt;
| [[Image:freeotfe img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose a file name for your encrypted volume and click [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Once you’ve chosen where to save your file. Click [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img07.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Keep the default encryption algorithms or change it depending on your needs. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the size for your volume. Click [Next].&lt;br /&gt;
| [[Image:freeotfe img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose a password for your volume, make sure that [Use keyfiles] is checked and click on [Keyfiles] in order to create a keyfile for your volume (later we will store this keyfile inside the UniToken).&lt;br /&gt;
| [[Image:freeotfe img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click [Generate Random Keyfile…] to generate a new keyfile.&lt;br /&gt;
| [[Image:freeotfe img11.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click [Generate and Save Keyfile] to save the file.&lt;br /&gt;
| [[Image:freeotfe img12.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create a keyfile for the encrypted volume and store it inside UniToken ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu, click on [Tools] [Create keyfile…]&lt;br /&gt;
| [[Image:freeotfe img13.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the type of your encrypted volume (file or partition) and click on [Next].&lt;br /&gt;
| [[Image:freeotfe img14.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Indicate where your encrypted volume is located and click on [Next].&lt;br /&gt;
| [[Image:freeotfe img15.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the password of your volume and click on [Next].&lt;br /&gt;
| [[Image:freeotfe img16.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose where you want to store the keyfile (At this step you cannot directly store the keyfile directly to the Token, you first have to save it to your computer and import it to your Token later).&lt;br /&gt;
| [[Image:freeotfe img17.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input a password for your keyfile and confirm it. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img18.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the elements that you want to use for password salting and random padding data. We have decided to choose Microsoft CrytoAPI and PKCS#11 Token. Click on [Next].&lt;br /&gt;
| [[Image:freeotfe img19.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that the correct UniToken is selected and click on [Finish].&lt;br /&gt;
| [[Image:freeotfe img20.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu, choose [Tools] [PKCS#11 token management].&lt;br /&gt;
| [[Image:freeotfe img21.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the PIN for the UniToken and click on [OK].&lt;br /&gt;
| [[Image:freeotfe img22.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;11&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [Keyfiles] tab, click on [Import] and select the keyfile that you just created.&lt;br /&gt;
| [[Image:freeotfe img23.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;12&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When the dialog box [Keyfile imported successfully as : (name of the keyfile)] appears, the import is finished. For more security, you can choose to delete the keyfile stored on your computer and keep only the one inside the UniToken.&lt;br /&gt;
| [[Image:freeotfe img24.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unlock the encrypted volume with the keyfile stored in UniToken ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If you lost the password for your volume, you can now use your UniToken to access the data. Click on [Mount file] (or [Mount Partition] if you encrypted a whole partition). &lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:freeotfe img25.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check [PKCS#11] and when the [Security Token/SmartCard PIN] dialog box appears, fill in your PIN and click on OK.&lt;br /&gt;
| [[Image:freeotfe img26.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the password for the keyfile in the password field and select the right keyfile in the PKCS#11 file. Click on [OK] to confirm and get access to your encrypted volume.&lt;br /&gt;
| [[Image:freeotfe img27.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Outlook_Express&amp;diff=709</id>
		<title>UniToken Integration Outlook Express</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Outlook_Express&amp;diff=709"/>
		<updated>2016-08-23T06:02:00Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator].Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Request a VeriSign Certificate ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Open your internet browser of your choice and navigate to the page https://digitalid.verisign.com/client/class1MS.htm With VeriSign, you have the option of either buying a digital certificate, or obtaining a free evaluation digital certificate usable for 60 days.&lt;br /&gt;
| [[Image:adobepdf img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the field &amp;quot;Cryptographic Service Provider Name&amp;quot;, choose [UniToken PRO CSP v2.0].&lt;br /&gt;
| [[Image:adobepdf img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Accept] to request the certificate.&lt;br /&gt;
| [[Image:adobepdf img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Type the corresponding User PIN for the UniToken PRO device and click [OK].&lt;br /&gt;
| [[Image:adobepdf img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | An email containing a Digital ID PIN and explaining how to continue the request procedure will be sent to the email address specified earlier. Copy the Digital ID PIN from the email and navigate to the URL specified in the email, https://digitalid.verisign.com/enrollment/mspickup.htm .&lt;br /&gt;
| [[Image:adobepdf img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Paste the Digital ID PIN copied from the email in the corresponding field and click on [Submit].&lt;br /&gt;
| [[Image:adobepdf img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [INSTALL] to import the certificate inside your UniToken PRO. If UniToken Monitor is running, a &amp;quot;Certificate Imported Successfully&amp;quot; message will appear. The request procedure is complete. You can now use this certificate to protect documents, sign and encrypt emails and related applications.&lt;br /&gt;
| [[Image:adobepdf img07.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sign and Encrypt Emails ==&lt;br /&gt;
&lt;br /&gt;
In the case an evaluation certificate from VeriSign was used, you must add it to the list of trusted certificates in it in Outlook Express (and other associated programs, if necessary). Please find in the [[#Attachments|attachments]] the certificates to install. &#039;&#039;&#039;Certificates to install:&#039;&#039;&#039;&lt;br /&gt;
* VeriSign Class 1 Individual Subscriber CA - G3.cer &lt;br /&gt;
* VeriSign Class 1 Public Primary Certification Authority - G3.cer &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &#039;&#039;&#039;User 1&#039;s Mailbox (receiver.secutech)&#039;&#039;&#039;In Microsoft Outlook 2003, select [New] to compose a new email. &lt;br /&gt;
| [[Image:outlookexpress img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Below the main menu in the tool bar, click [Options].&lt;br /&gt;
| [[Image:outlookexpress img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the [Message Options] page, click [Security Settings].&lt;br /&gt;
| [[Image:outlookexpress img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the [Security Properties] page, check [Add digital &lt;br /&gt;
signature to this message] and click on [Change Settings].&lt;br /&gt;
| [[Image:outlookexpress img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Choose] to select the certificate stored inside &lt;br /&gt;
the UniToken and click on [OK] consecutively until you get back to [New Message] window.&lt;br /&gt;
| [[Image:outlookexpress img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the new mail window, click on [Send] to send the &lt;br /&gt;
signed mail. You will be asked for the UniToken password.&lt;br /&gt;
| [[Image:outlookexpress img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &#039;&#039;&#039;User 2&#039;s Mailbox (helper.secutech)&#039;&#039;&#039; Go the mail account that you’ve just sent the signed mail to, and click on [Send/Recv]. Open the signed mail, right-click on the sender name and choose [Add to Outlook Contacts]&lt;br /&gt;
| [[Image:outlookexpress img07.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Save and Close] to save the information about User 1 (receiver.secutech) as well as his certificate. &lt;br /&gt;
| [[Image:outlookexpress img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Back to the main window of Microsoft 2003, select the signed email and click on [Reply]. Now that you have received that user’s digital signature, you can send encrypted mails to that user (The public key of that user is included in the signature)&lt;br /&gt;
| [[Image:outlookexpress img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on the [ ] icon on the top right of the windows and click on [Send] to send the encrypted message. If the signature and encryption icon doesn’t appear, you can configure message encryption from [Options…] [Security settings] [Encrypt message and attachment]&lt;br /&gt;
| [[Image:outlookexpress img10.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open an encrypted mail ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &#039;&#039;&#039;User 1 mailbox (receiver.secutech)&#039;&#039;&#039; Go back to User 1’s mailbox and check your mail. You should have received the encrypted mail from User 2. Double-click on it to open it.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:outlookexpress img17.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | A warning security will display “This message has been encrypted by the sender”. Click on [Continue] to see the mail.&lt;br /&gt;
| [[Image:outlookexpress img18.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If your UniToken is inserted, you will be able to see the content of the mail. Note: If you’ve just inserted UniToken, you will be asked for the user password to decrypt the mail. Otherwise, there is no need to input the password once again.&lt;br /&gt;
| [[Image:outlookexpress img19.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If you remove the UniToken and try to open the encrypted mail, you will get the error “Error Decrypting Message”&lt;br /&gt;
| [[Image:outlookexpress img20.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Digital Signature&#039;&#039;&#039;: a mathematical scheme for demonstrating the authenticity of a digital message or document. A valid digital signature gives a recipient reason to believe that the message was created by a known sender, and that it was not altered in transit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
* [[File:Certificates for Outlook Express Mail.zip]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Outlook_2003&amp;diff=684</id>
		<title>UniToken Integration Outlook 2003</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Outlook_2003&amp;diff=684"/>
		<updated>2016-08-23T05:59:55Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator].Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Request a VeriSign Certificate ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Open your internet browser of your choice and navigate to the page https://digitalid.verisign.com/client/class1MS.htm With VeriSign, you have the option of either buying a digital certificate, or obtaining a free evaluation digital certificate usable for 60 days.&lt;br /&gt;
| [[Image:adobepdf img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the field &amp;quot;Cryptographic Service Provider Name&amp;quot;, choose [UniToken PRO CSP v2.0].&lt;br /&gt;
| [[Image:adobepdf img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Accept] to request the certificate.&lt;br /&gt;
| [[Image:adobepdf img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Type the corresponding User PIN for the UniToken PRO device and click [OK].&lt;br /&gt;
| [[Image:adobepdf img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | An email containing a Digital ID PIN and explaining how to continue the request procedure will be sent to the email address specified earlier. Copy the Digital ID PIN from the email and navigate to the URL specified in the email, https://digitalid.verisign.com/enrollment/mspickup.htm.&lt;br /&gt;
| [[Image:adobepdf img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Paste the Digital ID PIN copied from the email in the corresponding field and click on [Submit].&lt;br /&gt;
| [[Image:adobepdf img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [INSTALL] to import the certificate inside your UniToken PRO. If UniToken Monitor is running, a &amp;quot;Certificate Imported Successfully&amp;quot; message will appear. The request procedure is complete. You can now use this certificate to protect documents, sign and encrypt emails and related applications.&lt;br /&gt;
| [[Image:adobepdf img07.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sign and Encrypt Emails ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &#039;&#039;&#039;User 1 mailbox (receiver.secutech)&#039;&#039;&#039;In Microsoft Outlook 2003, below the main menu, select [New] to create a new message. &lt;br /&gt;
| [[Image:mail2003 img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Below the main menu, in the tool bar click on [Options].&lt;br /&gt;
| [[Image:mail2003 img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the [Message Options] page, click on [Security Settings]&lt;br /&gt;
| [[Image:mail2003 img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the [Security Properties] page, check [Add digital signature to this message] and click on [Change Settings] &lt;br /&gt;
| [[Image:mail2003 img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Choose] to Select the certificate stored inside the UniToken and click on [OK] consecutively until you get back to [New Message] window.&lt;br /&gt;
| [[Image:mail2003 img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the new mail window, click on [Send] to send the signed mail. You will be asked for the UniToken password.&lt;br /&gt;
| [[Image:mail2003 img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &#039;&#039;&#039;User 2 mailbox (helper.secutech)&#039;&#039;&#039; Go the mail account that you’ve just sent the signed mail to, and click on [Send/Recv]. Open the signed mail, right-click on the sender name and choose [Add to Outlook Contacts]&lt;br /&gt;
| [[Image:mail2003 img07.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Save and Close] to save the information about User 1 (receiver.secutech) as well as his certificate. &lt;br /&gt;
| [[Image:mail2003 img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Back to the main window of Microsoft 2003, select the signed email and click on [Reply]. Now that you have received that user’s digital signature, you can send encrypted mails to that user (The public key of that user is included in the signature)&lt;br /&gt;
| [[Image:mail2003 img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on the [ ] icon on the top right of the windows and click on [Send] to send the encrypted message. If the signature and encryption icon doesn’t appear, you can configure message encryption from [Options…] [Security settings] [Encrypt message and attachment]&lt;br /&gt;
| [[Image:mail2003 img10.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open an encrypted mail ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | User 1 mailbox (receiver.secutech)Go back to User 1’s mailbox and check your mail. You should have received the encrypted mail from User 2. Double-click on it to open it.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:mail2003 img11.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If your UniToken is inserted, you will be able to see the content of the mail. &#039;&#039;Note: If you’ve just inserted UniToken, you will be asked for the user password to decrypt the mail. Otherwise, there is no need to input the password once again&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
| [[Image:mail2003 img12.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If UniToken is not inserted or if the certificate is incorrect, the message [Cannot Open this item. Your digital ID name cannot be found by the underlying system]&lt;br /&gt;
| [[Image:mail2003 img13.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Digital Signature&#039;&#039;&#039;: a mathematical scheme for demonstrating the authenticity of a digital message or document. A valid digital signature gives a recipient reason to believe that the message was created by a known sender, and that it was not altered in transit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Word_2003&amp;diff=649</id>
		<title>UniToken Integration Guide Word 2003</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Word_2003&amp;diff=649"/>
		<updated>2016-08-23T05:57:58Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator]. Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypt a Microsoft Word 2003 Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the Microsoft Word 2003 document, click on [File], [Save As].&lt;br /&gt;
| [[Image:msword img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under the &amp;quot;Save As&amp;quot; window, click on [Tools], [Security Options].&lt;br /&gt;
| [[Image:msword img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Security&amp;quot; window, input your password, then click on [Advanced]. The password for the document does not have to be the same as the UniToken PIN.&lt;br /&gt;
| [[Image:msword img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under the &amp;quot;Encryption Type&amp;quot; window, choose [RC4, UniToken PRO CSP v2.0] and click on [OK].&lt;br /&gt;
| [[Image:msword img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Security&amp;quot; window, re-enter your password and click [OK].&lt;br /&gt;
| [[Image:msword img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Save As&amp;quot; window, input a name for your protected file and click on [Save] to apply the settings.&lt;br /&gt;
| [[Image:msword img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open the Protected Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Insert the UniToken device into the computer and open the protected document. You will be asked to input the document&#039;s password. If the correct password in entered and the correct UniToken device plugged in to your computer, the protected document can be opened.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:msword img07.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If the corresponding UniToken device is not plugged into the computer, the error message ..“The encryption type used is not available”.. will appear.&lt;br /&gt;
| [[Image:msword img08.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Word&#039;&#039;&#039;: a commercial word processor designed by Microsoft. It was first released in 1983 under the name Multi-Tool Word for Xenix systems. Subsequent versions were later written for several other platforms including IBM PCs running DOS (1983), the Apple Macintosh (1984), the AT&amp;amp;T Unix PC(1985), Atari ST (1986), SCO UNIX, OS/2, and Microsoft Windows (1989). It is a component of the Microsoft Office software system; it is also sold as a standalone product and included in Microsoft Works Suite.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_GINA&amp;diff=509</id>
		<title>UniToken Integration Guide GINA</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_GINA&amp;diff=509"/>
		<updated>2016-08-23T05:56:48Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== UniToken GINA Package Installation ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the standalone authentication package for Windows XP/2k, which can be found inside the UniToken SDK. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Navigate to the folder &amp;quot;Integration Guides/Smart Card Logon Feature/Standalone SmartCard logon(GINA)&amp;quot;. Find the file &amp;quot;UniTokenGina.exe&amp;quot; and execute it to begin the installation.&lt;br /&gt;
| [[Image:GINA img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click [Next] in the InstallShield welcome screen.&lt;br /&gt;
| [[Image:GINA img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation.&lt;br /&gt;
| [[Image:GINA img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | After installation has completed, the computer must be restarted. Choose either option and click [Finish] to complete the wizard.&lt;br /&gt;
| [[Image:GINA img05.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bind UniToken PRO to a Windows Account ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Insert your UniToken PRO device into your computer, input the PIN code for the token and click on [Settings].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:GINA img06.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;UniToken Settings&amp;quot; window, under the &amp;quot;Add WinLogon User into Token&amp;quot;, input the username, domain (leave domain blank if the computer is not member of a domain) and password. Click [Add] to bind the user with the token. Click [OK] to finish. Note: You can also delete a user from the token and change your token PIN using this tool.&lt;br /&gt;
| [[Image:GINA img07.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Logging onto Windows ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When logging onto your computer, insert your UniToken, input your PIN and click on [OK].&lt;br /&gt;
| [[Image:GINA img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select the user account that you wish to log in as (You can store numerous Windows account settings within your UniToken). Click on [OK] to log in. Logging onto the computer now only requires the correct UniToken device with it&#039;s corresponding password and no longer the Windows account password to log on.&lt;br /&gt;
| [[Image:GINA img09.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Graphical Identification and Authentication (GINA)&#039;&#039;&#039;: a component of some Microsoft Windows operating systems that provides secure authentication and interactive logon services. GINA is also responsible for starting initial processes for a user (such as the Windows Shell) when they first log on. In Windows Vista, GINA has been entirely replaced by &#039;&#039;&#039;Credential Providers&#039;&#039;&#039;, which allow for significantly increased flexibility in supporting multiple credential collection methods. GINA libraries do not work with Windows Vista and later Windows versions. One difference, however, is that GINA could completely replace the Windows logon user interface; Credential Providers cannot.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
*[[File:UniToken_Gina_WinXP_X86.zip]]&lt;br /&gt;
*[[File:UniToken_Gina_WinXP_X64.zip]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_FreeOTFE_Secretfile&amp;diff=477</id>
		<title>UniToken Integration Guide FreeOTFE Secretfile</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_FreeOTFE_Secretfile&amp;diff=477"/>
		<updated>2016-08-23T05:54:28Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
[[category:UniToken_FreeOTFE_Integration]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator].Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configure PKCS Support in FreeOTFE ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu, go to [Settings], [Security Tokens]. &lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:freeotfe img01.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [Options] window, under the [PKCS#11] tab, check [Enable PKCS#11 support] and locate and select the library file. By default, the PKI package will install this file in the Windows\System32\ directory. Choose where to save the settings in the field [Save above settings to] and click on [OK] to apply the settings.&lt;br /&gt;
| [[Image:freeotfe img02.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create an Encrypted Volume with FreeOTFE ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | To create a new encrypted volume under FreeOTFE, click on [New].&lt;br /&gt;
| [[Image:freeotfe img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the FreeOTFE Volume Creation Wizard welcome page, click on [Next] to begin the volume creation procedure.&lt;br /&gt;
&lt;br /&gt;
| [[Image:freeotfe img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | You can choose to store the encrypted volume as a file or to encrypt a whole partition/disk. Choose the option that best fits your purposes. In this example, we have chosen to store the encrypted volume as a file. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose where you want to store the volume and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the size of your encrypted volume and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img07.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select the encryption algorithm you wish to use to best fit your needs, otherwise continue with the default option. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the elements used to secure your volume. The more number of options you select, the more you can secure your volume.&lt;br /&gt;
We have chosen to use the &amp;quot;Microsoft CryptoAPI&amp;quot; and &amp;quot;PKCS#11 token&amp;quot; options. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that you have selected the right UniToken device and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input a password for your encrypted volume. This password doesn’t have to be the same password used on your UniToken. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img11.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that the details for the new volume are correct and click on [Finish] to create the volume.&lt;br /&gt;
| [[Image:freeotfe img12.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create a Secret File within UniToken to Secure a Volume ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under FreeOTFE, select [Tools], [PKCS#11 token management].&lt;br /&gt;
| [[Image:freeotfe img28.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Security Token/Smartcard PIN&amp;quot; window, input your User PIN of your UniToken device and click on [OK].&lt;br /&gt;
| [[Image:freeotfe img29.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [Secret Keys] tab, click on [New]. In the [New PKCS#11 Secret Key] window, input a name for your Secret Key and click on [OK].&lt;br /&gt;
| [[Image:freeotfe img30.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | A confirmation window will appear confirming that the Secret Key was successfully created. Click on [OK] to close window.&lt;br /&gt;
| [[Image:freeotfe img31.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select the Secret File that you created and click on [Secure].&lt;br /&gt;
| [[Image:freeotfe img32.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on the icon corresponding to your type of volume (file or partition) and select the volume that you want to protect with the Secret Key. Click on [OK] to confirm.&lt;br /&gt;
| [[Image:freeotfe img33.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | A pop-up window will appear asking to confirm the volume you have selected to protect. Click on [Yes] to confirm the selected volume. A dialog pop will appear to confirm that the volume has been correctly protected.&lt;br /&gt;
| [[Image:freeotfe img34.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mount the Encrypted Volume ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under FreeOTFE, click on [Mount file] and select your volume.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:freeotfe img35.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Enter the password for the volume, then click on [Advanced].&lt;br /&gt;
| [[Image:freeotfe img36.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Security Token/Smartcard PIN&amp;quot; window, input your User PIN of your UniToken device and click on [OK].&lt;br /&gt;
| [[Image:freeotfe img37.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select the corresponding Secret Key for the volume and click on [OK] to mount the volume. If the incorrect password is entered or incorrect key is selected, you will not be able to access the volume. Both the corresponding password for the volume and the secret key stored within UniToken are required to access the volume.&lt;br /&gt;
| [[Image:freeotfe img38.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_FreeOTFE_Keyfile&amp;diff=219</id>
		<title>UniToken Integration Guide FreeOTFE Keyfile</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_FreeOTFE_Keyfile&amp;diff=219"/>
		<updated>2016-08-23T05:52:53Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
[[category:UniToken_FreeOTFE_Integration]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator].Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configure PKCS Support in FreeOTFE ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu, go to [Settings], [Security Tokens]. &lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:freeotfe img01.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [Options] window, under the [PKCS#11] tab, check [Enable PKCS#11 support] and locate and select the library file. By default, the PKI package will install this file in the Windows\System32\ directory. Choose where to save the settings in the field [Save above settings to] and click on [OK] to apply the settings.&lt;br /&gt;
| [[Image:freeotfe img02.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create an Encrypted Volume with FreeOTFE ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | To create a new encrypted volume under FreeOTFE, click on [New].&lt;br /&gt;
| [[Image:freeotfe img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the FreeOTFE Volume Creation Wizard welcome page, click on [Next] to begin the volume creation procedure.&lt;br /&gt;
&lt;br /&gt;
| [[Image:freeotfe img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | You can choose to store the encrypted volume as a file or to encrypt a whole partition/disk. Choose the option that best fits your purposes. In this example, we have chosen to store the encrypted volume as a file. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose where you want to store the volume and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the size of your encrypted volume and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img07.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select the encryption algorithm you wish to use to best fit your needs, otherwise continue with the default option. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the elements used to secure your volume. The more number of options you select, the more you can secure your volume.&lt;br /&gt;
We have chosen to use the &amp;quot;Microsoft CryptoAPI&amp;quot; and &amp;quot;PKCS#11 token&amp;quot; options. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that you have selected the right UniToken device and click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input a password for your encrypted volume. This password doesn’t have to be the same password used on your UniToken. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img11.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that the details for the new volume are correct and click on [Finish] to create the volume.&lt;br /&gt;
| [[Image:freeotfe img12.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Creating and Storing a Keyfile for the Encrypted Volume within UniToken ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu of FreeOTFE, click on [Tools], [Create keyfile…].&lt;br /&gt;
| [[Image:freeotfe img13.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the type of your encrypted volume, either a file or a partition. In this step, we have chosen &amp;quot;File&amp;quot;. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img14.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Indicate where your encrypted volume is located and click on [Next].&lt;br /&gt;
| [[Image:freeotfe img15.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the password of your volume and change the supplementary options if desired, then click on [Next].&lt;br /&gt;
| [[Image:freeotfe img16.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the directory where you wish to store the keyfile (At this step you cannot directly store the keyfile to the token. You must first save it to your computer and then import it onto your token later).&lt;br /&gt;
| [[Image:freeotfe img17.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input a password for your keyfile and change the supplementary options if desired. Click on [Next] to continue.&lt;br /&gt;
| [[Image:freeotfe img18.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the elements that you want to use for password salting and random padding data. We have decided to choose &amp;quot;Microsoft CrytoAPI&amp;quot; and &amp;quot;PKCS#11 Token&amp;quot;. Click on [Next].&lt;br /&gt;
| [[Image:freeotfe img19.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Check that the correct UniToken is selected and click on [Finish].&lt;br /&gt;
| [[Image:freeotfe img20.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the main menu, choose [Tools], [PKCS#11 token management].&lt;br /&gt;
| [[Image:freeotfe img21.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the PIN for the UniToken and click on [OK].&lt;br /&gt;
| [[Image:freeotfe img22.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;11&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the [Keyfiles] tab in the &amp;quot;Security Token/Smartcard Management&amp;quot; window, click on [Import] and select the keyfile that you just created.&lt;br /&gt;
| [[Image:freeotfe img23.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;12&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When the dialog box [Keyfile imported successfully as: (Name of the keyfile)] appears, importing of the keyfile has finished.&lt;br /&gt;
For improved security, you can choose to securely delete the keyfile stored on your computer and keep only the one inside the UniToken.&lt;br /&gt;
&lt;br /&gt;
| [[Image:freeotfe img24.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unlock the Encrypted Volume with the Keyfile stored in UniToken ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | You can now use your UniToken to access the encrypted data. Click on [Mount file] (or [Mount Partition] if you encrypted a whole partition) in FreeOTFE.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:freeotfe img25.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [PKCS#11] in the &amp;quot;FreeOTFE Key Entry&amp;quot; window, and under the &amp;quot;Security Token/SmartCard PIN&amp;quot; dialog box, input your PIN and click [OK].&lt;br /&gt;
| [[Image:freeotfe img26.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input the password for the keyfile in the &amp;quot;Password&amp;quot; field and select the correct keyfile in the PKCS#11 file. Click [OK] to confirm and access your encrypted volume.&lt;br /&gt;
| [[Image:freeotfe img27.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[PKI|Public Key Infrastructure (PKI)]]&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Excel_2003&amp;diff=668</id>
		<title>UniToken Integration Guide Excel 2003</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Excel_2003&amp;diff=668"/>
		<updated>2016-08-23T05:51:12Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI package  ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator]. Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypt a Microsoft Excel 2003 Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the Microsoft Excel 2003 document, click on [File], [Save As].&lt;br /&gt;
| [[Image:msexcel img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under the &amp;quot;Save  As&amp;quot; window, click on [Tools], [General Options].&lt;br /&gt;
| [[Image:msexcel img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under the &amp;quot;Save Options&amp;quot; window, input your password, then click on [Advanced]. The password for the document does not have to be the same as the UniToken PIN.&lt;br /&gt;
| [[Image:msexcel img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under the &amp;quot;Encryption Type&amp;quot; window, choose [RC4, UniToken PRO CSP v2.0] and click on [OK].&lt;br /&gt;
| [[Image:msexcel img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Save Options&amp;quot; window, click on [OK] and when you are asked to confirm your password, input your password a second time and click on [OK].&lt;br /&gt;
| [[Image:msexcel img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the &amp;quot;Save As&amp;quot; window, input a name for your protected file and click on [Save] to apply the settings.&lt;br /&gt;
| [[Image:msexcel img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open the Protected Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Insert the UniToken device into the computer and open the protected document. You will be asked to input the document&#039;s password. If the correct password in entered and the correct UniToken device plugged in to your computer, the protected document can be opened.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:msexcel img07.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If the corresponding UniToken device is not plugged into the computer, the error message “The encryption type used is not available” will appear.&lt;br /&gt;
| [[Image:msexcel img08.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Excel&#039;&#039;&#039;: a commercial spreadsheet application written and distributed by Microsoft for Microsoft Windows and Mac OS X. It features calculation, graphing tools, pivot tables, and a macro programming language called Visual Basic for Applications. It has almost completely become the industry standard for spreadsheets since version 5 in 1993.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;[[PKI|Public Key Infrastructure (PKI)]]&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_PKCS&amp;diff=559</id>
		<title>UniToken Integration PKCS</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_PKCS&amp;diff=559"/>
		<updated>2016-08-23T05:48:44Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
==PKCS Encrypt and Decrypt==&lt;br /&gt;
&lt;br /&gt;
Samples illustrating how to use UniToken with PKCS for encryption and decryption can be found in UniToken SDK under the directory &amp;lt;code&amp;gt;UniToken SDK/Samples/PKCS/EDcrypt/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PKCS Get Token Info==&lt;br /&gt;
&lt;br /&gt;
Samples illustrating how to fetch information using UniToken with PKCS can be found in the UniToken SDK under the directory &amp;lt;code&amp;gt;UniToken SDK/Samples/PKCS/TokenInfo/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PKCS Init Token==&lt;br /&gt;
&lt;br /&gt;
Samples illustrating how to initialize UniToken with PKCS can be found in the UniToken SDK under the directory &amp;lt;code&amp;gt;UniToken SDK/Samples/PKCS/InitToken&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PKCS Signature Verify==&lt;br /&gt;
&lt;br /&gt;
Samples illustrating how to verify digital signatures using UniToken with PKCS can be found in the UniToken SDK under the directory &amp;lt;code&amp;gt;UniToken SDK/Samples/PKCS/SignVerify/&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Web_Authentication_Windows_Server&amp;diff=2293</id>
		<title>UniToken Integration Web Authentication Windows Server</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Web_Authentication_Windows_Server&amp;diff=2293"/>
		<updated>2016-08-23T05:48:16Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Server Setup ==&lt;br /&gt;
&lt;br /&gt;
[[File:Video Tutorial for UniTokenLite Server.swf]]&lt;br /&gt;
&lt;br /&gt;
== Burn UniToken ==&lt;br /&gt;
&lt;br /&gt;
[[File:Video Tutorial for burning UniTokenLite.swf]]&lt;br /&gt;
&lt;br /&gt;
== Client Usage ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The password for the login page is 123456. The username is administrator.&lt;br /&gt;
&lt;br /&gt;
[[File:Video Tutorial for UniTokenLite Client.swf]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Web_Authentication_Linux_Server&amp;diff=2299</id>
		<title>UniToken Integration Web Authentication Linux Server</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Web_Authentication_Linux_Server&amp;diff=2299"/>
		<updated>2016-08-23T05:46:52Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
https://files.esecutech.com/videos/UniTokenPROWebAuthentication.flv&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_BitLocker_Drive_Encryption&amp;diff=157</id>
		<title>UniToken Integration Guide BitLocker Drive Encryption</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_BitLocker_Drive_Encryption&amp;diff=157"/>
		<updated>2016-08-23T05:46:30Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{Infobox&lt;br /&gt;
|title   = UniToken BitLocker Integration&lt;br /&gt;
|image   = [[Image:Flex.png|50px]]&lt;br /&gt;
|label1  = Models&lt;br /&gt;
|data1   = UniToken Pro, UniToken Drive&lt;br /&gt;
|label2  = Compatible Systems&lt;br /&gt;
|data2 = Windows 7, Windows Server 2008&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package  ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator]. Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create a Compatible Smartcard Certificate ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use a self-signed certificate to encrypt the disk with BitLocker. A smart card certificate signed by a Certificate Authority can also be used, but ensure it is supported by BitLocker. More information about the requirements for a compatible BitLocker certificate can be found on Microsoft&#039;s website.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;regedit&amp;quot;, without quotation marks, in the search field, then right-click on &amp;quot;regedit&amp;quot; and click [Run as administrator].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img07.jpg|370x259px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Navigate to &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE&amp;quot; and right click in the right pane. Choose [New] [DWORD(32-bit Value)].&lt;br /&gt;
| [[Image:Bitlocker img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Name the DWORD value as “SelfSignedCertificates”.&lt;br /&gt;
| [[Image:Bitlocker img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Double click on the value and set the field [Value data] to &amp;quot;1&amp;quot;. Click on [OK] to confirm and close regedit.&lt;br /&gt;
| [[Image:Bitlocker img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Copy and save the text to the right as &amp;quot;blcert.txt&amp;quot;.&lt;br /&gt;
| [NewRequest] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Subject = &amp;quot;CN=BitLocker&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeyLength = 2048 &lt;br /&gt;
&lt;br /&gt;
ProviderName = &amp;quot;UniToken PRO CSP v2.0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeySpec = &amp;quot;AT_KEYEXCHANGE&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeyUsage = &amp;quot;CERT_KEY_ENCIPHERMENT_KEY_USAGE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
KeyUsageProperty = &amp;quot;NCRYPT_ALLOW_DECRYPT_FLAG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RequestType = Cert&lt;br /&gt;
&lt;br /&gt;
SMIME = FALSE&lt;br /&gt;
&lt;br /&gt;
[EnhancedKeyUsageExtension]&lt;br /&gt;
&lt;br /&gt;
OID=1.3.6.1.4.1.311.67.1.1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;cmd.exe&amp;quot;, without quotation marks, in the search field, then right-click on &amp;quot;cmd&amp;quot; and click [Run as administrator].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img12.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Retrieve the path of the &amp;quot;blcert.txt&amp;quot; file saved earlier. To do so, navigate to where &amp;quot;blcert.txt&amp;quot; is saved, right-click on the file and select [Properties], search for the field [Location] and copy the path of your file.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img13.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the cmd console, type &amp;quot;cd &amp;quot; followed by the path of your file&amp;quot; to go to the directory where it is saved. For example &amp;quot;cd C:\Users\SecuTech\Desktop&amp;quot;, without quotation marks (, at this point, make sure that the corresponding UniToken is correctly plugged in before executing the following operation). Afterwards, type &amp;quot;certreq –new blcert.txt&amp;quot; to request the BitLocker certificate.&lt;br /&gt;
.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img14.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypt the Hard Disk with BitLocker ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;BitLocker&amp;quot;, and from the results that appear, choose [Manage BitLocker].&lt;br /&gt;
| [[Image:Bitlocker img15.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the disk that you wish to enable BitLocker on and click on [Turn on BitLocker].&lt;br /&gt;
| [[Image:Bitlocker img16.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;Choose how you want to unlock this drive&amp;quot;, check [Use my smart card to unlock the drive] and click on [Next].&lt;br /&gt;
&#039;&#039;Options differ depending if you encrypt a partition from an internal or an external disk. For now, UniToken cannot be used to encrypt the system partition.&#039;&#039;&lt;br /&gt;
| [[Image:Bitlocker img17.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;How do you want to store your recovery key?&amp;quot;, choose where you want to save the file containing the recovery key - you can also choose to print it. &#039;&#039;Be sure to keep the recovery key in a safe place. If you lose your smart card, it is the only way to decrypt the data on the encrypted drive: otherwise, all data will be lost.&#039;&#039;&lt;br /&gt;
| [[Image:Bitlocker img18.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;Are you ready to encrypt this drive&amp;quot;, click [Start Encrypting].&lt;br /&gt;
| [[Image:Bitlocker img19.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | The encryption process will take place. This may take a long time depending on the characteristics of your computer and the disk size to be encrypted. (On the tested configuration, encrypting a 8GB partition took approximately 30 minutes).&lt;br /&gt;
| [[Image:Bitlocker img20.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When the dialog window &amp;quot;Encryption of (disk) is complete&amp;quot; appears, the disk is now protected. Click on [Close] to finish.&lt;br /&gt;
| [[Image:Bitlocker img21.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Access to the Encrypted Disk ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When attempting to access the encrypted disk, the following window will appear (You can also choose to unlock the disk automatically when the smart card is inserted.&lt;br /&gt;
Insert your UniToken device and click on [Unlock].&lt;br /&gt;
&lt;br /&gt;
| [[Image:Bitlocker img22.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | You will be asked to type the User PIN for your UniToken to unlock the drive. The drive will be unlocked only if the correct password is entered. Enter the User PIN and click [OK] to access the encrypted drive.&lt;br /&gt;
| [[Image:Bitlocker img23.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smart Card&#039;&#039;&#039;: any pocket-sized card with embedded integrated circuits. There are two broad categories of ICCs. Memory cards contain only non-volatile memory storage components, and perhaps dedicated security logic. Microprocessor cards contain volatile memory and microprocessor components.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_BitLocker_Drive_Encryption&amp;diff=156</id>
		<title>UniToken Integration Guide BitLocker Drive Encryption</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_BitLocker_Drive_Encryption&amp;diff=156"/>
		<updated>2016-08-23T05:46:07Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
{{Infobox&lt;br /&gt;
|title   = UniToken BitLocker Integration&lt;br /&gt;
|image   = [[Image:Flex.png|50px]]&lt;br /&gt;
|label1  = Models&lt;br /&gt;
|data1   = UniToken Pro, UniToken Drive&lt;br /&gt;
|label2  = Compatible Systems&lt;br /&gt;
|data2 = Windows 7, Windows Server 2008&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Install the PKI Package  ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator]. Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Create a Compatible Smartcard Certificate ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will use a self-signed certificate to encrypt the disk with BitLocker. A smart card certificate signed by a Certificate Authority can also be used, but ensure it is supported by BitLocker. More information about the requirements for a compatible BitLocker certificate can be found on Microsoft&#039;s website.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;regedit&amp;quot;, without quotation marks, in the search field, then right-click on &amp;quot;regedit&amp;quot; and click [Run as administrator].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img07.jpg|370x259px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Navigate to &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE&amp;quot; and right click in the right pane. Choose [New] [DWORD(32-bit Value)].&lt;br /&gt;
| [[Image:Bitlocker img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Name the DWORD value as “SelfSignedCertificates”.&lt;br /&gt;
| [[Image:Bitlocker img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Double click on the value and set the field [Value data] to &amp;quot;1&amp;quot;. Click on [OK] to confirm and close regedit.&lt;br /&gt;
| [[Image:Bitlocker img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Copy and save the text to the right as &amp;quot;blcert.txt&amp;quot;.&lt;br /&gt;
| [NewRequest] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Subject = &amp;quot;CN=BitLocker&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeyLength = 2048 &lt;br /&gt;
&lt;br /&gt;
ProviderName = &amp;quot;UniToken PRO CSP v2.0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeySpec = &amp;quot;AT_KEYEXCHANGE&amp;quot; &lt;br /&gt;
&lt;br /&gt;
KeyUsage = &amp;quot;CERT_KEY_ENCIPHERMENT_KEY_USAGE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
KeyUsageProperty = &amp;quot;NCRYPT_ALLOW_DECRYPT_FLAG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RequestType = Cert&lt;br /&gt;
&lt;br /&gt;
SMIME = FALSE&lt;br /&gt;
&lt;br /&gt;
[EnhancedKeyUsageExtension]&lt;br /&gt;
&lt;br /&gt;
OID=1.3.6.1.4.1.311.67.1.1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;cmd.exe&amp;quot;, without quotation marks, in the search field, then right-click on &amp;quot;cmd&amp;quot; and click [Run as administrator].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img12.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Retrieve the path of the &amp;quot;blcert.txt&amp;quot; file saved earlier. To do so, navigate to where &amp;quot;blcert.txt&amp;quot; is saved, right-click on the file and select [Properties], search for the field [Location] and copy the path of your file.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img13.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the cmd console, type &amp;quot;cd &amp;quot; followed by the path of your file&amp;quot; to go to the directory where it is saved. For example &amp;quot;cd C:\Users\SecuTech\Desktop&amp;quot;, without quotation marks (, at this point, make sure that the corresponding UniToken is correctly plugged in before executing the following operation). Afterwards, type &amp;quot;certreq –new blcert.txt&amp;quot; to request the BitLocker certificate.&lt;br /&gt;
.&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:Bitlocker img14.jpg|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypt the Hard Disk with BitLocker ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | From the Start Menu, type &amp;quot;BitLocker&amp;quot;, and from the results that appear, choose [Manage BitLocker].&lt;br /&gt;
| [[Image:Bitlocker img15.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the disk that you wish to enable BitLocker on and click on [Turn on BitLocker].&lt;br /&gt;
| [[Image:Bitlocker img16.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;Choose how you want to unlock this drive&amp;quot;, check [Use my smart card to unlock the drive] and click on [Next].&lt;br /&gt;
&#039;&#039;Options differ depending if you encrypt a partition from an internal or an external disk. For now, UniToken cannot be used to encrypt the system partition.&#039;&#039;&lt;br /&gt;
| [[Image:Bitlocker img17.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;How do you want to store your recovery key?&amp;quot;, choose where you want to save the file containing the recovery key - you can also choose to print it. &#039;&#039;Be sure to keep the recovery key in a safe place. If you lose your smart card, it is the only way to decrypt the data on the encrypted drive: otherwise, all data will be lost.&#039;&#039;&lt;br /&gt;
| [[Image:Bitlocker img18.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | On the screen &amp;quot;Are you ready to encrypt this drive&amp;quot;, click [Start Encrypting].&lt;br /&gt;
| [[Image:Bitlocker img19.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | The encryption process will take place. This may take a long time depending on the characteristics of your computer and the disk size to be encrypted. (On the tested configuration, encrypting a 8GB partition took approximately 30 minutes).&lt;br /&gt;
| [[Image:Bitlocker img20.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When the dialog window &amp;quot;Encryption of (disk) is complete&amp;quot; appears, the disk is now protected. Click on [Close] to finish.&lt;br /&gt;
| [[Image:Bitlocker img21.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Access to the Encrypted Disk ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When attempting to access the encrypted disk, the following window will appear (You can also choose to unlock the disk automatically when the smart card is inserted.&lt;br /&gt;
Insert your UniToken device and click on [Unlock].&lt;br /&gt;
&lt;br /&gt;
| [[Image:Bitlocker img22.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | You will be asked to type the User PIN for your UniToken to unlock the drive. The drive will be unlocked only if the correct password is entered. Enter the User PIN and click [OK] to access the encrypted drive.&lt;br /&gt;
| [[Image:Bitlocker img23.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smart Card&#039;&#039;&#039;: any pocket-sized card with embedded integrated circuits. There are two broad categories of ICCs. Memory cards contain only non-volatile memory storage components, and perhaps dedicated security logic. Microprocessor cards contain volatile memory and microprocessor components.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Adobe_PDF&amp;diff=583</id>
		<title>UniToken Integration Guide Adobe PDF</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_Guide_Adobe_PDF&amp;diff=583"/>
		<updated>2016-08-23T05:43:11Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
== Install the PKI package  ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to install the PKI package that can be found inside the UniToken SDK. The End User package can be found inside the folder &amp;quot;Redist/Enduser/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Right-click on the PKI package installation file and choose [Run as administrator]. Execute the file with an account that has administrator rights on this computer.&lt;br /&gt;
| [[Image:Bitlocker img01.jpg|370x259px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Next] in the InstallShield Wizard welcome screen.&lt;br /&gt;
| [[Image:Bitlocker img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Input your User Name and Company Name and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Select [Complete] and click on [Next].&lt;br /&gt;
| [[Image:Bitlocker img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Install] to begin the installation of the PKI package.&lt;br /&gt;
| [[Image:Bitlocker img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify that the InstallShield Wizard completed successfully and click on [Finish].&lt;br /&gt;
| [[Image:Bitlocker img06.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Request a VeriSign Certificate ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Open your internet browser of your choice and navigate to the page https://digitalid.verisign.com/client/class1MS.htm With VeriSign, you have the option of either buying a digital certificate, or obtaining a free evaluation digital certificate usable for 60 days.&lt;br /&gt;
| [[Image:adobepdf img01.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the field &amp;quot;Cryptographic Service  Provider Name&amp;quot;, choose [UniToken PRO CSP v2.0].&lt;br /&gt;
&lt;br /&gt;
| [[Image:adobepdf img02.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [Accept] to request the certificate. &lt;br /&gt;
| [[Image:adobepdf img03.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Type the corresponding User PIN for the UniToken PRO device and click [OK].&lt;br /&gt;
| [[Image:adobepdf img04.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | An email containing a Digital ID PIN and explaining how to continue the request procedure will be sent to the email address specified earlier. Copy the Digital ID PIN from the email and navigate to the URL specified in the email: https://digitalid.verisign.com/enrollment/mspickup.htm.&lt;br /&gt;
| [[Image:adobepdf img05.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Paste the Digital ID PIN copied from the email in the corresponding field and click on [Submit].&lt;br /&gt;
| [[Image:adobepdf img06.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Click on [INSTALL] to import the certificate inside your UniToken PRO. If UniToken Monitor is running, a &amp;quot;Certificate Imported Successfully&amp;quot; message will appear. The request procedure is complete. You can now use this certificate to protect documents, sign and encrypt emails and related applications.&lt;br /&gt;
| [[Image:adobepdf img07.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypt a PDF Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | With Adobe Acrobat Pro, open the PDF document you wish to protect. &lt;br /&gt;
| [[Image:adobepdf img08.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | In the menu, click on [Advanced], [Security], [Encrypt with Certificate]. &#039;&#039;In Adobe Acrobat PRO X (version 10), this option can be found in [File], [Property], [Security] tab, [Protect with Certificate].&#039;&#039;&lt;br /&gt;
| [[Image:adobepdf img09.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Under &amp;quot;Select Document Components to Encrypt&amp;quot;, select the option best suited for your requirements; [Encrypt all document contents] is suggested for utmost security. Under &amp;quot;Encryption Algorithm&amp;quot;, choose the encryption algorithm to encrypt the document with. &#039;&#039;The greater the encryption strength, the greater the security of the document, at the expense of compatibility, however.&#039;&#039; Click [Next].&lt;br /&gt;
| [[Image:adobepdf img10.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Choose the certificate you wish to use to encrypt the document with, then click on [Next].&lt;br /&gt;
| [[Image:adobepdf img11.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | Verify the configured settings are correct, then click on [Finish].&lt;br /&gt;
| [[Image:adobepdf img12.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | A warning message will appear, stating that the document must be saved to apply the security settings. Click [OK] to acknowledge the warning, then proceed to save the file to apply changes.&lt;br /&gt;
| [[Image:adobepdf img13.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open an Encrypted PDF Document ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | When opening an encrypted PDF document, you will be prompted to type the UniToken User’s password. Input the password and click on [OK].&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:adobepdf img14.jpg|370px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | The appropriate UniToken device and corresponding password is required to open the document, otherwise, the document cannot be opened.&lt;br /&gt;
| [[Image:adobepdf img15.jpg|370px]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | If the token is absent whilst attempting to open the document, an error &amp;quot;You do not have access right to this encrypted document&amp;quot; will appear and will be unable to open the document.&lt;br /&gt;
| [[Image:adobepdf img16.jpg|370px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PDF&#039;&#039;&#039;: Portable document format&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Key Infrastructure (PKI)&#039;&#039;&#039;: a set of hardware, software, people, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft Cryptography API, MS-CAPI&#039;&#039;&#039;: an application programming interface included with Microsoft Windows operating systems that provides services to enable developers to secure Windows-based applications using cryptography.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKCS&#039;&#039;&#039;: refers to a group of public-key cryptography standards devised and published by RSA Security.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Integration_CAPI&amp;diff=564</id>
		<title>UniToken Integration CAPI</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Integration_CAPI&amp;diff=564"/>
		<updated>2016-08-23T05:36:12Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_Integration_Guide]]&lt;br /&gt;
&lt;br /&gt;
Samples illustrating how to integrate UniToken with CAPI can be found in the UniToken SDK under the directory &amp;lt;code&amp;gt;UniToken SDK/Samples/CAPI/&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1060</id>
		<title>UniToken API Reference</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1060"/>
		<updated>2016-08-23T05:35:29Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_API]]&lt;br /&gt;
&lt;br /&gt;
== UT_GetLibraryVersion  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unsigned long UT_API UT_GetLibraryVersion()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of the present library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library version&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the version of the current library&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
unsigned long ulLibraryVersion;&lt;br /&gt;
ulLibraryVersion = UT_GetLibraryVersion();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Initialize  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_Initialize()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To initialize the UniToken. This should be called before any other function, with the exception &amp;lt;code&amp;gt;UT_GetLibraryVersion&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ALREADY_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library already initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Initialize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Finalize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_Finalize()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Call this function to end any interaction with UniToken and free the memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Finalize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenList  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UT_RV UT_API UT_GetTokenList(UT_SLOT_ID* lpSlotID, unsigned long* lpTokenCount)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the list of Slot ID and the number of Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] slot ID list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpTokenCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
      * [in] size of buffer (0~32 bytes)&lt;br /&gt;
      * [out]number of token&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_SLOT_ID* lpSlotID = NULL;&lt;br /&gt;
unsigned long ulTokenCount = 0;&lt;br /&gt;
ret = UT_GetTokenList(lpSlotID, &amp;amp;ulTokenCount);&lt;br /&gt;
&lt;br /&gt;
if (ret == UT_BUFFER_TOO_SMALL)&lt;br /&gt;
{&lt;br /&gt;
   lpSlotID = new UT_SLOT_ID[ulTokenCount];&lt;br /&gt;
   ret = UT_GetTokenList(lpSlotID, &amp;amp;ulTokenCount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ret = UT_OpenDevice(lpSlotID[0], &amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetHandle(lpSlotID[0], &amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetSlotID(utHandle, &amp;amp;lpSlotID[0]);&lt;br /&gt;
ret = UT_CloseDevice(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_OpenDevice ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_OpenDevice(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open the device in the specified slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[in] the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_SLOT_ID_INVALUD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SlotID should be retrieved from &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt; instead manually entered. Therefore, this function cannot be called before &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_CloseDevice  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_CloseDevice(UT_HANDLE utHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHandle(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get device handle by Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get Slot ID by device handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALIDM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotStatus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotStatus(&lt;br /&gt;
  UT_STATUS* lpStatus,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the status of Slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpStatus [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the current status of slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpStatus can be:&lt;br /&gt;
&lt;br /&gt;
# Inserted, when UniToken is inserted into the slot;&lt;br /&gt;
# removed, when UniToken is removed from the slot;&lt;br /&gt;
# no change, when there’s no change to the status of slot. In this case, lpSlotID is undefined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV rv;&lt;br /&gt;
UT_STATUS status;&lt;br /&gt;
UT_SLOT_ID slotID;&lt;br /&gt;
rv = UT_GetSlotStatus(&amp;amp;status, &amp;amp; slotID);&lt;br /&gt;
if (rv == UT_OK)&lt;br /&gt;
{&lt;br /&gt;
  if (status == TOKEN_NO_EVENT)&lt;br /&gt;
  {&lt;br /&gt;
  // no change of status&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_INSERT)&lt;br /&gt;
  {&lt;br /&gt;
  // token inserted&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_REMOVE)&lt;br /&gt;
  {&lt;br /&gt;
  // token removed&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenType  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetTokenType(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszTokenType&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the type of the current device, e.g. UniToken STD, PRO.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszTokenType [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken type (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char TokenType[33] = {0};&lt;br /&gt;
ret = UT_GetTokenType(utHandle, (char *)TokenType);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetFirmwareVersion  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetFirmwareVersion(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpVersion&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of firmware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpVersion [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;firmware version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Version;&lt;br /&gt;
ret = UT_GetFirmwareVersion(utHandle, &amp;amp;Version);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logoff  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_Logoff(UT_HANDLE utHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To log off the specified Token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_Logon&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logon  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Logon(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long UserLevel,&lt;br /&gt;
  unsigned char* lpszPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To logon the specified token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;levels of permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding password with certain permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpszPin is made up with strings, and the minimum size is 1 byte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_PIN_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Wrong password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more sessions allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_LOCKED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Token locked&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken provides three levels of user permission: GUEST permission, USER permission and ADMIN permission. The default permission is GUEST. To log on as USER or ADMIN, the corresponding PINs are required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_GetCurrentUserLevel(utHandle, &amp;amp;UserLevel);&lt;br /&gt;
ret = UT_Logoff(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetCurrentUserLevel  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetCurrentUserLevel(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserLevel&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the current permission level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserLevel [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of UT_Logon.&lt;br /&gt;
&lt;br /&gt;
== UT_ChangePin  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_ChangePin(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char UserLevel,&lt;br /&gt;
  unsigned long ChangeMode,&lt;br /&gt;
  unsigned char* OldPin,&lt;br /&gt;
  unsigned char* NewPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the PIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ChangeMode [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;mode to change to&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;OldPIN [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;old PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;NewPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;new PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change Mode can be &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Operation not allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two ways of changing password:&lt;br /&gt;
&lt;br /&gt;
# User/Admin changes his own password. Log on as USER or ADMIN and type in the old password and the new one. Here, the mode of changing PIN is &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/code&amp;gt;&lt;br /&gt;
# Admin resets user password. Log on as ADMIN and type in new password of USER. Here, the mode of changing PIN is &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/code&amp;gt; In this case, OldPin is not required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned char NewPin[] = &amp;quot;1234&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_ChangePin(utHandle, UT_USER_LEVEL_USER, UT_CHANGE_PIN_MODE_BYSELF, (unsigned char*) Pin, (unsigned char*) newPin);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the token ID of specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_SetID&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the token ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char Id[33] = &amp;quot;UniTokenPRO&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_SetID(utHandle, Id);&lt;br /&gt;
ret = UT_GetID(utHandle, Id);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpHid&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Hardware ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpHid [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Hardware ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Hid;&lt;br /&gt;
ret = UT_GetHID(utHandle, &amp;amp;Hid);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpSoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Software ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_SetSoftID&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long SoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the Software ID of the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long SoftID = 0;&lt;br /&gt;
ret = UT_GetSoftID(utHandle, &amp;amp;SoftID);&lt;br /&gt;
ret = UT_SetSoftID(utHandle, SoftID);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_LED  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_LED(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char On&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To turn on/off LED.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;On [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the status of the LED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter On can be &amp;lt;code&amp;gt;LED_ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;LED_OFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_LED(utHandle, LED_ON);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long MaxAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the maximum times of PIN attempt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;MaxAttempt [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;maximum attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum times of attempt UniToken allows is 15 times. If a user types in wrong PIN consecutively for 15 times, the UniToken will be locked.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function is used for unlocking the token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_GetAttemptCount&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserAttempt,&lt;br /&gt;
  unsigned long* lpAdminAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count the number of failed login attempts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpAdminAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Admin PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UserAttempt;&lt;br /&gt;
unsigned long AdminAttempt;&lt;br /&gt;
ret = UT_SetAttemptCount(utHandle, 15);&lt;br /&gt;
ret = UT_GetAttemptCount(utHandle, &amp;amp;UserAttempt, &amp;amp;AdminAttempt);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Format  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_Format(UT_HANDLE utHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To format a UniToken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
After formatting, the PINs of User and Admin are set back to the default ones as well as the whole file system and all the keys inside.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_Format(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Rand  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Rand(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* lpOut,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate random numbers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of random number (in bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpOut [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;random number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for future use&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char OutRand[8];&lt;br /&gt;
ret = UT_Rand(utHandle, 8, OutRand, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated DES key is 8 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGenerateKey(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESEncryptZ(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;code&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DESEncrypt(utHandle,&lt;br /&gt;
                  keyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;code&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DESDecrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import a DES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES_KEY_LEN_8_BYTE];&lt;br /&gt;
ret = UT_DESImportKey(utHandle, Key, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DESGetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_DESGetNextKeyHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DESGetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated 3DES key is 24 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GenerateKey(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Encrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Encrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;code&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DES3Encrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   &amp;amp;EncryptedDataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Decrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Decrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;code&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DES3Decrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   &amp;amp;DataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import 3DES keys to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES3_KEY_LEN_24_BYTE];&lt;br /&gt;
ret = UT_DES3ImportKey(utHandle, Key, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3DeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count 3DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DES3GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the samples of &amp;lt;code&amp;gt;UT_DES3GetNextKeyHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DES3GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;code&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGenerateKey(utHandle, AES_KEY_LEN_128_BIT, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;code&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_AESEncrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESDecrypt(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;code&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_AESDecrypt(handle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESImportKey(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import AES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;code&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char key[AES_KEY_LEN_128_BIT];&lt;br /&gt;
Ret = UT_AESImportKey(utHandle, key, AES_KEY_LEN_128_BIT, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_AESDeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_AESGetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count AES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_AESGetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_AESGetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_AESGetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_AESGetNextKeyHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_AESGetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_AESGetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGenerateKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGenerateKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long ModulusBits,&lt;br /&gt;
  unsigned long PubExp,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ModulusBits [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubExp [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public exponent&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# UniToken device can store as many as 16 RSA key pairs&lt;br /&gt;
# ModulusBits can be &amp;lt;code&amp;gt;RSA_MODULUS_LEN_1024_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;RSA_MODULUS_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# PubExp is &amp;lt;code&amp;gt;RSA_PUBEXP_LEN_65537_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGenerateKeyPair(utHandle,&lt;br /&gt;
                          RSA_KEY_LEN_1024_BIT,&lt;br /&gt;
                          RSA_PUBEXP_LEN_65537_BIT,&lt;br /&gt;
                          &amp;amp;PubKeyHandle,&lt;br /&gt;
                          &amp;amp;PriKeyHandle&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;code&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;code&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/code&amp;gt; instead manually entered. A 1024-bit RSA public key can only encrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPubKeyEncrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;code&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;code&amp;gt;RSAGetPriKeyByPubKey&amp;lt;/code&amp;gt; instead of manually input. A 1024-bit RSA private key can only decrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPriKeyDecrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,Data,&lt;br /&gt;
                        &amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;code&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;code&amp;gt;UT_RSAGetPriKeyByPubKey&amp;lt;/code&amp;gt; instead manually entered. A 1024-bit RSA private key can only encrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPriKeyEncrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;code&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/code&amp;gt; instead manually entered. A 1024-bit RSA public key can only decrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPubKeyDecrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        &amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_RSAGetKeyPairCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count RSA keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of key pairs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of RSA key pairs is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_RSAGetKeyPairCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetFirstKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetFirstKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the first RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_RSAGetNextKeyPairHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetNextKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetNextKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the next RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetFirstKeyPairHandle(utHandle, &amp;amp;PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
ret = UT_RSAGetNextKeyPairHandle(utHandle, &amp;amp;PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA public key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PriKeyHandle can be the existing private key handle or &amp;lt;code&amp;gt;RSA_IMPORT_NEW&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the public key can be imported either by the corresponding private key handle or by creating a new key pair (if there’s enough memory). If the key pair already exists, import the public key and return the handle of the public key; if there’s no corresponding key pair in the device, return &amp;lt;code&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/code&amp;gt; If PriKeyHandle is &amp;lt;code&amp;gt;RSA_IMPORT_NEW&amp;lt;/code&amp;gt; create a new key pair and import the public key. The UniToken device can store up to 16 RSA key pairs; if there arere already 16 key pairs stored, calling this function will return &amp;lt;code&amp;gt;UT_KEY_FULL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;code&amp;gt;UT_RSAPriKeyImport&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA private key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PubKeyHandle can be the existing public key handle or &amp;lt;code&amp;gt;RSA_IMPORT_NEW&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAPubKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;RsaKey,&lt;br /&gt;
                       RSA_IMPORT_NEW,&lt;br /&gt;
                       &amp;amp;PubKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
ret = UT_RSAPriKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;RsaKey,&lt;br /&gt;
                       PubKeyHandle,&lt;br /&gt;
                       &amp;amp;PriKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyExport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyExport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits,&lt;br /&gt;
  UT_RSA* lpRsaKey&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To export RSA public key from UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpRsaKey [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RSA public key structure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAPubKeyExport(utHandle, PubKeyHandle, &amp;amp;ModulusBits, &amp;amp;RsaKey);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPubKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPubKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPubKeyHandle(utHandle, PriKeyHandle, &amp;amp;PubKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPriKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPriKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPriKeyHandle(utHandle, PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairModulus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetKeyPairModulus(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get RSA key pair modulus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAGetKeyPairModulus(utHandle, PubKeyHandle, &amp;amp;ModulusBits);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSADeleteKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSADeleteKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete the RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the handles of a key pair are required. If the handles belong to the keys from different key pairs, return &amp;lt;code&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/code&amp;gt; if only one key handle provided, the other key handle must be 0 to delete the key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSADeleteKeyPair(utHandle, PubKeyHandle, PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;= 128 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-MD5 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;code&amp;gt;UT_KEY_FULL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5HMACGenerateKey(utHandle, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_MD5GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-MD5 keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of MD5 keys is 8.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_MD5GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_MD5GetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_MD5GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the samples of &amp;lt;code&amp;gt;UT_MD5GetNextKeyHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_MD5GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_MD5GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_MD5DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-MD5 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_MD5ImportKey(utHandle, Key, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;=128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-SHA1 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;code&amp;gt;UT_KEY_FULL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1HMACGenerateKey(utHandle, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_SHA1GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-SHA1 keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_SHA1GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_SHA1GetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_SHA1GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_SHA1GetNextKeyHandle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_SHA1GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_SHA1GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_SHA1DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-SHA1 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SHA1 key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_SHA1ImportKey(utHandle, Key, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetSpace  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetSpace(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* UsedSpace,&lt;br /&gt;
  unsigned long* FreeSpace&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the size of the free memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UsedSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of used memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FreeSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of free memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UsedSpace;&lt;br /&gt;
unsigned long FreeSpace;&lt;br /&gt;
ret = UT_FS_GetSpace(utHandle, &amp;amp;UsedSpace, &amp;amp;FreeSpace);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_FS_GetFileCount(UT_HANDLE utHandle, unsigned long* lpFileCount);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the number of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of files&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long FileCount;&lt;br /&gt;
ret = UT_FS_GetFileCount(utHandle, &amp;amp;FileCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFirstFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_FS_GetFirstFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the name of the first file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;code&amp;gt;UT_GetNextFileName&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetNextFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_FS_GetNextFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
To get the name of the next file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_LIST_END&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;End of fire list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_GetFirstFileName(utHandle, FileName);&lt;br /&gt;
ret = UT_FS_GetNextFileName(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileSize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFileSize(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long* lpFileSize&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned long FileSize;&lt;br /&gt;
ret = UT_FS_GetFileSize(utHandle, FileName, &amp;amp;FileSize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFilePermission  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFilePermission(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned char* lpFilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file permission of the specified file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFilePermission [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned char FilePermission;&lt;br /&gt;
ret = UT_FS_GetFilePermission(utHandle, FileName, &amp;amp;FilePermission);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CreatFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_CreateFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long FileSize,&lt;br /&gt;
  unsigned char FilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FileSize [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FilePermission [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# The max. File size is 262112 bytes;&lt;br /&gt;
# FilePermission can be FILE_PERMISSION_GUEST, FILE_PERMISSION_USER or FILE_PERMISSION_ADMIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_FILE_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;The file already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
File permission types:&lt;br /&gt;
# FILE_PERMISSION_GUEST: With GUEST and higher permissions, reading the file is allowed; With USER and higher permissions, writing file is allowed.&lt;br /&gt;
# FILE_PERMISSION_USER: With USER and higher permissions, reading and writing file are allowed.&lt;br /&gt;
# FILE_PERMISSION_ADMIN: Only ADMIN is allowed to read and write the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_CreateFile(utHandle, FileName, 200, FILE_PERMISSION_GUEST);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_DeleteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_FS_DeleteFile(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_DeleteFile(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_OpenFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_OpenFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. Files can be read and written only when opened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_OpenFile(utHandle, FileName, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_WriteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_WriteFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write or modify a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NOSPACE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No room in file system&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. New function of appending is added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_WriteFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_ReadFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_ReadFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To read a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_DATA_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Out of range of data length&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_ReadFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CloseFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;UT_RV UT_API UT_FS_CloseFile(UT_HANDLE utHandle, void* lpReserve);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_FS_CloseFile(utHandle, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1059</id>
		<title>UniToken API Reference</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1059"/>
		<updated>2016-08-23T05:33:36Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_API]]&lt;br /&gt;
&lt;br /&gt;
== UT_GetLibraryVersion  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;unsigned long UT_API UT_GetLibraryVersion()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of the present library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library version&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the version of the current library&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
unsigned long ulLibraryVersion;&lt;br /&gt;
ulLibraryVersion = UT_GetLibraryVersion();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Initialize  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Initialize()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To initialize the UniToken. This should be called before any other function, with the exception &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetLibraryVersion&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ALREADY_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library already initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Initialize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Finalize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Finalize()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Call this function to end any interaction with UniToken and free the memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Finalize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenList  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UT_RV UT_API UT_GetTokenList(UT_SLOT_ID* lpSlotID, unsigned long* lpTokenCount)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the list of Slot ID and the number of Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] slot ID list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpTokenCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
      * [in] size of buffer (0~32 bytes)&lt;br /&gt;
      * [out]number of token&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_SLOT_ID* lpSlotID = NULL;&lt;br /&gt;
unsigned long ulTokenCount = 0;&lt;br /&gt;
ret = UT_GetTokenList(lpSlotID, &amp;amp;ulTokenCount);&lt;br /&gt;
&lt;br /&gt;
if (ret == UT_BUFFER_TOO_SMALL)&lt;br /&gt;
{&lt;br /&gt;
   lpSlotID = new UT_SLOT_ID[ulTokenCount];&lt;br /&gt;
   ret = UT_GetTokenList(lpSlotID, &amp;amp;ulTokenCount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ret = UT_OpenDevice(lpSlotID[0], &amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetHandle(lpSlotID[0], &amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetSlotID(utHandle, &amp;amp;lpSlotID[0]);&lt;br /&gt;
ret = UT_CloseDevice(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_OpenDevice ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_OpenDevice(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open the device in the specified slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[in] the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_SLOT_ID_INVALUD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SlotID should be retrieved from &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt; instead manually entered. Therefore, this function cannot be called before &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_CloseDevice  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_CloseDevice(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHandle(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get device handle by Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get Slot ID by device handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALIDM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotStatus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotStatus(&lt;br /&gt;
  UT_STATUS* lpStatus,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the status of Slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpStatus [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the current status of slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpStatus can be:&lt;br /&gt;
&lt;br /&gt;
# Inserted, when UniToken is inserted into the slot;&lt;br /&gt;
# removed, when UniToken is removed from the slot;&lt;br /&gt;
# no change, when there’s no change to the status of slot. In this case, lpSlotID is undefined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV rv;&lt;br /&gt;
UT_STATUS status;&lt;br /&gt;
UT_SLOT_ID slotID;&lt;br /&gt;
rv = UT_GetSlotStatus(&amp;amp;status, &amp;amp; slotID);&lt;br /&gt;
if (rv == UT_OK)&lt;br /&gt;
{&lt;br /&gt;
  if (status == TOKEN_NO_EVENT)&lt;br /&gt;
  {&lt;br /&gt;
  // no change of status&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_INSERT)&lt;br /&gt;
  {&lt;br /&gt;
  // token inserted&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_REMOVE)&lt;br /&gt;
  {&lt;br /&gt;
  // token removed&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenType  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetTokenType(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszTokenType&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the type of the current device, e.g. UniToken STD, PRO.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszTokenType [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken type (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char TokenType[33] = {0};&lt;br /&gt;
ret = UT_GetTokenType(utHandle, (char *)TokenType);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetFirmwareVersion  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetFirmwareVersion(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpVersion&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of firmware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpVersion [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;firmware version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Version;&lt;br /&gt;
ret = UT_GetFirmwareVersion(utHandle, &amp;amp;Version);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logoff  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Logoff(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To log off the specified Token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_Logon&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logon  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Logon(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long UserLevel,&lt;br /&gt;
  unsigned char* lpszPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To logon the specified token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;levels of permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding password with certain permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpszPin is made up with strings, and the minimum size is 1 byte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_PIN_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Wrong password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more sessions allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_LOCKED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Token locked&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken provides three levels of user permission: GUEST permission, USER permission and ADMIN permission. The default permission is GUEST. To log on as USER or ADMIN, the corresponding PINs are required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_GetCurrentUserLevel(utHandle, &amp;amp;UserLevel);&lt;br /&gt;
ret = UT_Logoff(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetCurrentUserLevel  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetCurrentUserLevel(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserLevel&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the current permission level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserLevel [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of UT_Logon.&lt;br /&gt;
&lt;br /&gt;
== UT_ChangePin  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_ChangePin(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char UserLevel,&lt;br /&gt;
  unsigned long ChangeMode,&lt;br /&gt;
  unsigned char* OldPin,&lt;br /&gt;
  unsigned char* NewPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the PIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ChangeMode [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;mode to change to&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;OldPIN [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;old PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;NewPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;new PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change Mode can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Operation not allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two ways of changing password:&lt;br /&gt;
&lt;br /&gt;
# User/Admin changes his own password. Log on as USER or ADMIN and type in the old password and the new one. Here, the mode of changing PIN is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/source&amp;gt;&lt;br /&gt;
# Admin resets user password. Log on as ADMIN and type in new password of USER. Here, the mode of changing PIN is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/source&amp;gt; In this case, OldPin is not required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned char NewPin[] = &amp;quot;1234&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_ChangePin(utHandle, UT_USER_LEVEL_USER, UT_CHANGE_PIN_MODE_BYSELF, (unsigned char*) Pin, (unsigned char*) newPin);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the token ID of specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SetID&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the token ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char Id[33] = &amp;quot;UniTokenPRO&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_SetID(utHandle, Id);&lt;br /&gt;
ret = UT_GetID(utHandle, Id);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpHid&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Hardware ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpHid [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Hardware ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Hid;&lt;br /&gt;
ret = UT_GetHID(utHandle, &amp;amp;Hid);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpSoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Software ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SetSoftID&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long SoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the Software ID of the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long SoftID = 0;&lt;br /&gt;
ret = UT_GetSoftID(utHandle, &amp;amp;SoftID);&lt;br /&gt;
ret = UT_SetSoftID(utHandle, SoftID);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_LED  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_LED(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char On&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To turn on/off LED.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;On [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the status of the LED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter On can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;LED_ON&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;LED_OFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_LED(utHandle, LED_ON);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long MaxAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the maximum times of PIN attempt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;MaxAttempt [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;maximum attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum times of attempt UniToken allows is 15 times. If a user types in wrong PIN consecutively for 15 times, the UniToken will be locked.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function is used for unlocking the token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetAttemptCount&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserAttempt,&lt;br /&gt;
  unsigned long* lpAdminAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count the number of failed login attempts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpAdminAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Admin PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UserAttempt;&lt;br /&gt;
unsigned long AdminAttempt;&lt;br /&gt;
ret = UT_SetAttemptCount(utHandle, 15);&lt;br /&gt;
ret = UT_GetAttemptCount(utHandle, &amp;amp;UserAttempt, &amp;amp;AdminAttempt);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Format  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Format(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To format a UniToken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
After formatting, the PINs of User and Admin are set back to the default ones as well as the whole file system and all the keys inside.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_Format(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Rand  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Rand(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* lpOut,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate random numbers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of random number (in bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpOut [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;random number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for future use&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char OutRand[8];&lt;br /&gt;
ret = UT_Rand(utHandle, 8, OutRand, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated DES key is 8 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGenerateKey(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESEncryptZ(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DESEncrypt(utHandle,&lt;br /&gt;
                  keyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DESDecrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import a DES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES_KEY_LEN_8_BYTE];&lt;br /&gt;
ret = UT_DESImportKey(utHandle, Key, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DESGetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_DESGetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DESGetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated 3DES key is 24 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GenerateKey(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Encrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Encrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DES3Encrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   &amp;amp;EncryptedDataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Decrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Decrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DES3Decrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   &amp;amp;DataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import 3DES keys to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES3_KEY_LEN_24_BYTE];&lt;br /&gt;
ret = UT_DES3ImportKey(utHandle, Key, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3DeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count 3DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DES3GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the samples of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_DES3GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DES3GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGenerateKey(utHandle, AES_KEY_LEN_128_BIT, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_AESEncrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESDecrypt(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_AESDecrypt(handle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESImportKey(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import AES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char key[AES_KEY_LEN_128_BIT];&lt;br /&gt;
Ret = UT_AESImportKey(utHandle, key, AES_KEY_LEN_128_BIT, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESDeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count AES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_AESGetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_AESGetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_AESGetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_AESGetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGenerateKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGenerateKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long ModulusBits,&lt;br /&gt;
  unsigned long PubExp,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ModulusBits [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubExp [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public exponent&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# UniToken device can store as many as 16 RSA key pairs&lt;br /&gt;
# ModulusBits can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_MODULUS_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;RSA_MODULUS_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# PubExp is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_PUBEXP_LEN_65537_BIT&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGenerateKeyPair(utHandle,&lt;br /&gt;
                          RSA_KEY_LEN_1024_BIT,&lt;br /&gt;
                          RSA_PUBEXP_LEN_65537_BIT,&lt;br /&gt;
                          &amp;amp;PubKeyHandle,&lt;br /&gt;
                          &amp;amp;PriKeyHandle&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA public key can only encrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPubKeyEncrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSAGetPriKeyByPubKey&amp;lt;/source&amp;gt; instead of manually input. A 1024-bit RSA private key can only decrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPriKeyDecrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,Data,&lt;br /&gt;
                        &amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPriKeyByPubKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA private key can only encrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPriKeyEncrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA public key can only decrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPubKeyDecrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        &amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_RSAGetKeyPairCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count RSA keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of key pairs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of RSA key pairs is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_RSAGetKeyPairCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetFirstKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetFirstKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the first RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetNextKeyPairHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetNextKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetNextKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the next RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetFirstKeyPairHandle(utHandle, &amp;amp;PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
ret = UT_RSAGetNextKeyPairHandle(utHandle, &amp;amp;PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA public key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PriKeyHandle can be the existing private key handle or &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_IMPORT_NEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the public key can be imported either by the corresponding private key handle or by creating a new key pair (if there’s enough memory). If the key pair already exists, import the public key and return the handle of the public key; if there’s no corresponding key pair in the device, return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/source&amp;gt; If PriKeyHandle is &amp;lt;code&amp;gt;RSA_IMPORT_NEW&amp;lt;/code&amp;gt; create a new key pair and import the public key. The UniToken device can store up to 16 RSA key pairs; if there arere already 16 key pairs stored, calling this function will return &amp;lt;code&amp;gt;UT_KEY_FULL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAPriKeyImport&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA private key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PubKeyHandle can be the existing public key handle or &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_IMPORT_NEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAPubKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;RsaKey,&lt;br /&gt;
                       RSA_IMPORT_NEW,&lt;br /&gt;
                       &amp;amp;PubKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
ret = UT_RSAPriKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;RsaKey,&lt;br /&gt;
                       PubKeyHandle,&lt;br /&gt;
                       &amp;amp;PriKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyExport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyExport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits,&lt;br /&gt;
  UT_RSA* lpRsaKey&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To export RSA public key from UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpRsaKey [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RSA public key structure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAPubKeyExport(utHandle, PubKeyHandle, &amp;amp;ModulusBits, &amp;amp;RsaKey);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPubKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPubKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPubKeyHandle(utHandle, PriKeyHandle, &amp;amp;PubKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPriKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPriKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPriKeyHandle(utHandle, PubKeyHandle, &amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairModulus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetKeyPairModulus(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get RSA key pair modulus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAGetKeyPairModulus(utHandle, PubKeyHandle, &amp;amp;ModulusBits);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSADeleteKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSADeleteKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete the RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the handles of a key pair are required. If the handles belong to the keys from different key pairs, return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/source&amp;gt; if only one key handle provided, the other key handle must be 0 to delete the key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSADeleteKeyPair(utHandle, PubKeyHandle, PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;= 128 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-MD5 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_FULL&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5HMACGenerateKey(utHandle, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-MD5 keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of MD5 keys is 8.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_MD5GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_MD5GetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the samples of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_MD5GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_MD5GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-MD5 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_MD5ImportKey(utHandle, Key, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;=128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-SHA1 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_FULL&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1HMACGenerateKey(utHandle, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-SHA1 keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_SHA1GetKeyCount(utHandle, &amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_SHA1GetKeyLen(utHandle, KeyHandle, &amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SHA1GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1GetFirstKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_SHA1GetNextKeyHandle(utHandle, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-SHA1 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SHA1 key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_SHA1ImportKey(utHandle, Key, 128, &amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetSpace  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetSpace(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* UsedSpace,&lt;br /&gt;
  unsigned long* FreeSpace&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the size of the free memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UsedSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of used memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FreeSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of free memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UsedSpace;&lt;br /&gt;
unsigned long FreeSpace;&lt;br /&gt;
ret = UT_FS_GetSpace(utHandle, &amp;amp;UsedSpace, &amp;amp;FreeSpace);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetFileCount(UT_HANDLE utHandle, unsigned long* lpFileCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the number of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of files&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long FileCount;&lt;br /&gt;
ret = UT_FS_GetFileCount(utHandle, &amp;amp;FileCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFirstFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetFirstFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the name of the first file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetNextFileName&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetNextFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetNextFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
To get the name of the next file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_LIST_END&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;End of fire list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_GetFirstFileName(utHandle, FileName);&lt;br /&gt;
ret = UT_FS_GetNextFileName(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileSize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFileSize(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long* lpFileSize&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned long FileSize;&lt;br /&gt;
ret = UT_FS_GetFileSize(utHandle, FileName, &amp;amp;FileSize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFilePermission  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFilePermission(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned char* lpFilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file permission of the specified file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFilePermission [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned char FilePermission;&lt;br /&gt;
ret = UT_FS_GetFilePermission(utHandle, FileName, &amp;amp;FilePermission);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CreatFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_CreateFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long FileSize,&lt;br /&gt;
  unsigned char FilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FileSize [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FilePermission [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# The max. File size is 262112 bytes;&lt;br /&gt;
# FilePermission can be FILE_PERMISSION_GUEST, FILE_PERMISSION_USER or FILE_PERMISSION_ADMIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_FILE_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;The file already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
File permission types:&lt;br /&gt;
# FILE_PERMISSION_GUEST: With GUEST and higher permissions, reading the file is allowed; With USER and higher permissions, writing file is allowed.&lt;br /&gt;
# FILE_PERMISSION_USER: With USER and higher permissions, reading and writing file are allowed.&lt;br /&gt;
# FILE_PERMISSION_ADMIN: Only ADMIN is allowed to read and write the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_CreateFile(utHandle, FileName, 200, FILE_PERMISSION_GUEST);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_DeleteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_DeleteFile(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_DeleteFile(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_OpenFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_OpenFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. Files can be read and written only when opened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_OpenFile(utHandle, FileName, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_WriteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_WriteFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write or modify a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NOSPACE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No room in file system&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. New function of appending is added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_WriteFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_ReadFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_ReadFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To read a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_DATA_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Out of range of data length&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_ReadFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CloseFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_CloseFile(UT_HANDLE utHandle, void* lpReserve);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_FS_CloseFile(utHandle, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1058</id>
		<title>UniToken API Reference</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_API_Reference&amp;diff=1058"/>
		<updated>2016-08-23T05:30:49Z</updated>

		<summary type="html">&lt;p&gt;Bao: Major rework of tables, everything&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_API]]&lt;br /&gt;
&lt;br /&gt;
== UT_GetLibraryVersion  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;unsigned long UT_API UT_GetLibraryVersion()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of the present library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library version&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the version of the current library&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
unsigned long ulLibraryVersion;&lt;br /&gt;
ulLibraryVersion = UT_GetLibraryVersion();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Initialize  ==&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Initialize()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To initialize the UniToken. This should be called before any other function, with the exception &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetLibraryVersion&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ALREADY_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library already initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Initialize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Finalize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Finalize()&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Call this function to end any interaction with UniToken and free the memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
ret = UT_Finalize();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenList  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;API Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UT_RV UT_API UT_GetTokenList(UT_SLOT_ID* lpSlotID, unsigned long* lpTokenCount)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the list of Slot ID and the number of Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] slot ID list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpTokenCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
      * [in] size of buffer (0~32 bytes)&lt;br /&gt;
      * [out]number of token&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_SLOT_ID* lpSlotID = NULL;&lt;br /&gt;
unsigned long ulTokenCount = 0;&lt;br /&gt;
ret = UT_GetTokenList(lpSlotID, &amp;amp;amp;ulTokenCount);&lt;br /&gt;
&lt;br /&gt;
if (ret == UT_BUFFER_TOO_SMALL)&lt;br /&gt;
{&lt;br /&gt;
   lpSlotID = new UT_SLOT_ID[ulTokenCount];&lt;br /&gt;
   ret = UT_GetTokenList(lpSlotID, &amp;amp;amp;ulTokenCount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ret = UT_OpenDevice(lpSlotID[0], &amp;amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetHandle(lpSlotID[0], &amp;amp;amp;utHandle);&lt;br /&gt;
ret = UT_GetSlotID(utHandle, &amp;amp;amp;lpSlotID[0]);&lt;br /&gt;
ret = UT_CloseDevice(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_OpenDevice ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_OpenDevice(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open the device in the specified slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[in] the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[out] device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_SLOT_ID_INVALUD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SlotID should be retrieved from &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt; instead manually entered. Therefore, this function cannot be called before &amp;lt;code&amp;gt;UT_GetTokenList&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_CloseDevice  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_CloseDevice(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
n/a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHandle(&lt;br /&gt;
  UT_SLOT_ID SlotID,&lt;br /&gt;
  UT_HANDLE* lputHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get device handle by Slot ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SlotID [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lputHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get Slot ID by device handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the specified handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALIDM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetTokenList&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSlotStatus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSlotStatus(&lt;br /&gt;
  UT_STATUS* lpStatus,&lt;br /&gt;
  UT_SLOT_ID* lpSlotID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the status of Slot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpStatus [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the current status of slot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSlotID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Slot ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpStatus can be:&lt;br /&gt;
&lt;br /&gt;
# Inserted, when UniToken is inserted into the slot;&lt;br /&gt;
# removed, when UniToken is removed from the slot;&lt;br /&gt;
# no change, when there’s no change to the status of slot. In this case, lpSlotID is undefined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV rv;&lt;br /&gt;
UT_STATUS status;&lt;br /&gt;
UT_SLOT_ID slotID;&lt;br /&gt;
rv = UT_GetSlotStatus(&amp;amp;amp;status, &amp;amp;amp; slotID);&lt;br /&gt;
if (rv == UT_OK)&lt;br /&gt;
{&lt;br /&gt;
  if (status == TOKEN_NO_EVENT)&lt;br /&gt;
  {&lt;br /&gt;
  // no change of status&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_INSERT)&lt;br /&gt;
  {&lt;br /&gt;
  // token inserted&lt;br /&gt;
  }&lt;br /&gt;
  else if (status == TOKEN_REMOVE)&lt;br /&gt;
  {&lt;br /&gt;
  // token removed&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetTokenType  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetTokenType(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszTokenType&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the type of the current device, e.g. UniToken STD, PRO.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszTokenType [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken type (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char TokenType[33] = {0};&lt;br /&gt;
ret = UT_GetTokenType(utHandle, (char *)TokenType);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetFirmwareVersion  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetFirmwareVersion(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpVersion&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the version of firmware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpVersion [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;firmware version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Version;&lt;br /&gt;
ret = UT_GetFirmwareVersion(utHandle, &amp;amp;amp;Version);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logoff  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Logoff(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To log off the specified Token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_Logon&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Logon  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Logon(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long UserLevel,&lt;br /&gt;
  unsigned char* lpszPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To logon the specified token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;levels of permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding password with certain permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lpszPin is made up with strings, and the minimum size is 1 byte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_PIN_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Wrong password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more sessions allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_USER_LOCKED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Token locked&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken provides three levels of user permission: GUEST permission, USER permission and ADMIN permission. The default permission is GUEST. To log on as USER or ADMIN, the corresponding PINs are required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_GetCurrentUserLevel(utHandle, &amp;amp;amp;UserLevel);&lt;br /&gt;
ret = UT_Logoff(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetCurrentUserLevel  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetCurrentUserLevel(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserLevel&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the current permission level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserLevel [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of UT_Logon.&lt;br /&gt;
&lt;br /&gt;
== UT_ChangePin  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_ChangePin(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char UserLevel,&lt;br /&gt;
  unsigned long ChangeMode,&lt;br /&gt;
  unsigned char* OldPin,&lt;br /&gt;
  unsigned char* NewPin&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the PIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UserLevel [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;permission level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ChangeMode [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;mode to change to&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;OldPIN [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;old PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;NewPin [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;new PIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change Mode can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Operation not allowed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two ways of changing password:&lt;br /&gt;
&lt;br /&gt;
# User/Admin changes his own password. Log on as USER or ADMIN and type in the old password and the new one. Here, the mode of changing PIN is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_BYSELF&amp;lt;/source&amp;gt;&lt;br /&gt;
# Admin resets user password. Log on as ADMIN and type in new password of USER. Here, the mode of changing PIN is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER&amp;lt;/source&amp;gt; In this case, OldPin is not required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Pin[] = UT_DEFAULT_USER;&lt;br /&gt;
unsigned char NewPin[] = &amp;quot;1234&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_Logon(utHandle, UT_USER_LEVEL_USER, (unsigned char*) Pin);&lt;br /&gt;
ret = UT_ChangePin(utHandle, UT_USER_LEVEL_USER, UT_CHANGE_PIN_MODE_BYSELF, (unsigned char*) Pin, (unsigned char*) newPin);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the token ID of specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SetID&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszId&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the token ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszId [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UniToken ID (string, 32 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char Id[33] = &amp;quot;UniTokenPRO&amp;quot;;&lt;br /&gt;
unsigned long UserLevel;&lt;br /&gt;
ret = UT_SetID(utHandle, Id);&lt;br /&gt;
ret = UT_GetID(utHandle, Id);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetHID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetHID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpHid&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Hardware ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpHid [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Hardware ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Hid;&lt;br /&gt;
ret = UT_GetHID(utHandle, &amp;amp;amp;Hid);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpSoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the Software ID of the specified device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SetSoftID&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetSoftID  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetSoftID(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long SoftID&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the Software ID of the specified device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpSoftID [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Software ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long SoftID = 0;&lt;br /&gt;
ret = UT_GetSoftID(utHandle, &amp;amp;amp;SoftID);&lt;br /&gt;
ret = UT_SetSoftID(utHandle, SoftID);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_LED  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_LED(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char On&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To turn on/off LED.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;On [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the status of the LED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter On can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;LED_ON&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;LED_OFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_LED(utHandle, LED_ON);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long MaxAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the maximum times of PIN attempt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;MaxAttempt [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;maximum attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum times of attempt UniToken allows is 15 times. If a user types in wrong PIN consecutively for 15 times, the UniToken will be locked.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function is used for unlocking the token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetAttemptCount&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_GetAttemptCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_GetAttemptCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpUserAttempt,&lt;br /&gt;
  unsigned long* lpAdminAttempt&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count the number of failed login attempts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpUserAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpAdminAttempt [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Admin PIN attempt times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UserAttempt;&lt;br /&gt;
unsigned long AdminAttempt;&lt;br /&gt;
ret = UT_SetAttemptCount(utHandle, 15);&lt;br /&gt;
ret = UT_GetAttemptCount(utHandle, &amp;amp;amp;UserAttempt, &amp;amp;amp;AdminAttempt);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Format  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_Format(UT_HANDLE utHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To format a UniToken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
After formatting, the PINs of User and Admin are set back to the default ones as well as the whole file system and all the keys inside.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_Format(utHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_Rand  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_Rand(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* lpOut,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate random numbers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of random number (in bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpOut [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;random number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for future use&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char OutRand[8];&lt;br /&gt;
ret = UT_Rand(utHandle, 8, OutRand, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated DES key is 8 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGenerateKey(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESEncryptZ(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DESEncrypt(utHandle,&lt;br /&gt;
                  keyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext in bytes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DESDecrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import a DES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES_KEY_LEN_8_BYTE];&lt;br /&gt;
ret = UT_DESImportKey(utHandle, Key, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESDeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DESGetKeyCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_DESGetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DESGetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DESGetFirstKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DESGetNextKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of generated 3DES key is 24 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;no more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GenerateKey(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Encrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Encrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_DES3Encrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   &amp;amp;amp;EncryptedDataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3Decrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3Decrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with 3DES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EncryptedDataLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;DES_DATA_LEN_8_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned char EncryptedData[DES_DATA_LEN_8_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_DES3Decrypt(utHandle,&lt;br /&gt;
                   keyHandle,&lt;br /&gt;
                   EncryptedData,&lt;br /&gt;
                   DES_DATA_LEN_8_BYTE,&lt;br /&gt;
                   Data,&lt;br /&gt;
                   &amp;amp;amp;DataLength&lt;br /&gt;
                   );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import 3DES keys to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3DES key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[DES3_KEY_LEN_24_BYTE];&lt;br /&gt;
ret = UT_DES3ImportKey(utHandle, Key, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3DeleteKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetKeyCount(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* lpKeyCount&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count 3DES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_DES3GetKeyCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetFirstKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the samples of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_DES3GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_DES3GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_DES3GetNextKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next 3DES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_DES3GetFirstKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_DES3GetNextKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGenerateKey(utHandle, AES_KEY_LEN_128_BIT, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_AESEncrypt(utHandle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  &amp;amp;amp;EncryptedDataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESDecrypt(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with AES.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DateLength is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_DATA_LEN_16_BYTE&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned char EncryptedData[AES_DATA_LEN_16_BYTE];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_AESDecrypt(handle,&lt;br /&gt;
                  KeyHandle,&lt;br /&gt;
                  EncryptedData,&lt;br /&gt;
                  AES_DATA_LEN_16_BYTE,&lt;br /&gt;
                  Data,&lt;br /&gt;
                  &amp;amp;amp;DataLength&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESImportKey(&lt;br /&gt;
  HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import AES key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;AES_KEY_LEN_128_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;AES_KEY_LEN_192_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char key[AES_KEY_LEN_128_BIT];&lt;br /&gt;
Ret = UT_AESImportKey(utHandle, key, AES_KEY_LEN_128_BIT, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESDeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESDeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete an AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESDeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count AES keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of 3DES keys is 32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_AESGetKeyCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_AESGetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_AESGetKeyLen(utHandle, KeyHandle, &amp;amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_AESGetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_AESGetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_AESGetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next AES key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_AESGetFirstKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_AESGetNextKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGenerateKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGenerateKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long ModulusBits,&lt;br /&gt;
  unsigned long PubExp,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ModulusBits [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubExp [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public exponent&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# UniToken device can store as many as 16 RSA key pairs&lt;br /&gt;
# ModulusBits can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_MODULUS_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;RSA_MODULUS_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
# PubExp is &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_PUBEXP_LEN_65537_BIT&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGenerateKeyPair(utHandle,&lt;br /&gt;
                          RSA_KEY_LEN_1024_BIT,&lt;br /&gt;
                          RSA_PUBEXP_LEN_65537_BIT,&lt;br /&gt;
                          &amp;amp;amp;PubKeyHandle,&lt;br /&gt;
                          &amp;amp;amp;PriKeyHandle&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA public key can only encrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPubKeyEncrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSAGetPriKeyByPubKey&amp;lt;/source&amp;gt; instead of manually input. A 1024-bit RSA private key can only decrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPriKeyDecrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,Data,&lt;br /&gt;
                        &amp;amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyEncrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyEncrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long* lpEncryptedDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To encrypt data with RSA private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength can be &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_DATA_LEN_1024_BIT&amp;lt;/source&amp;gt; or &amp;lt;code&amp;gt;SA_DATA_LEN_2048_BIT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of private key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPriKeyByPubKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA private key can only encrypt 1024-bit data. It is also true for 2048-bit RSA private keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long EncryptedDataLength;&lt;br /&gt;
ret = UT_RSAPriKeyEncrypt(utHandle,&lt;br /&gt;
                        PriKeyHandle,Data,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        &amp;amp;amp;EncryptedDataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyDecrypt  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyDecrypt(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned char* lpEncryptedData,&lt;br /&gt;
  unsigned long EncryptedDataLength,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long* lpDataLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To decrypt data with RSA public key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpEncryptedData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;EncryptedDataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of ciphertext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDataLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of plaintext&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The handle of public key should be retrieved with &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetPubKeyByPriKey&amp;lt;/source&amp;gt; instead manually entered. A 1024-bit RSA public key can only decrypt 1024-bit data. It is also true for 2048-bit RSA public keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned char Data[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned char EncryptedData[RSA_DATA_LEN_1024_BIT];&lt;br /&gt;
unsigned long DataLength;&lt;br /&gt;
ret = UT_RSAPubKeyDecrypt(utHandle,&lt;br /&gt;
                        PubKeyHandle,&lt;br /&gt;
                        EncryptedData,&lt;br /&gt;
                        RSA_DATA_LEN_1024_BIT,&lt;br /&gt;
                        Data,&lt;br /&gt;
                        &amp;amp;amp;DataLength&lt;br /&gt;
                        );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_RSAGetKeyPairCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count RSA keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of key pairs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of RSA key pairs is 16.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_RSAGetKeyPairCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetFirstKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetFirstKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the first RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAGetNextKeyPairHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetNextKeyPairHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetNextKeyPairHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handles of the next RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetFirstKeyPairHandle(utHandle, &amp;amp;amp;PubKeyHandle, &amp;amp;amp;PriKeyHandle);&lt;br /&gt;
ret = UT_RSAGetNextKeyPairHandle(utHandle, &amp;amp;amp;PubKeyHandle, &amp;amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA public key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PriKeyHandle can be the existing private key handle or &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_IMPORT_NEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the public key can be imported either by the corresponding private key handle or by creating a new key pair (if there’s enough memory). If the key pair already exists, import the public key and return the handle of the public key; if there’s no corresponding key pair in the device, return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/source&amp;gt; If PriKeyHandle is &amp;lt;code&amp;gt;RSA_IMPORT_NEW&amp;lt;/code&amp;gt; create a new key pair and import the public key. The UniToken device can store up to 16 RSA key pairs; if there arere already 16 key pairs stored, calling this function will return &amp;lt;code&amp;gt;UT_KEY_FULL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RSAPriKeyImport&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPriKeyImport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPriKeyImport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  UT_RSA* lpRsaKey,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import RSA private key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PubKeyHandle can be the existing public key handle or &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;RSA_IMPORT_NEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAPubKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;amp;RsaKey,&lt;br /&gt;
                       RSA_IMPORT_NEW,&lt;br /&gt;
                       &amp;amp;amp;PubKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
ret = UT_RSAPriKeyImport(utHandle,&lt;br /&gt;
                       &amp;amp;amp;RsaKey,&lt;br /&gt;
                       PubKeyHandle,&lt;br /&gt;
                       &amp;amp;amp;PriKeyHandle&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAPubKeyExport  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAPubKeyExport(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits,&lt;br /&gt;
  UT_RSA* lpRsaKey&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To export RSA public key from UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpRsaKey [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RSA public key structure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Key already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
UT_RSA RsaKey;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAPubKeyExport(utHandle, PubKeyHandle, &amp;amp;amp;ModulusBits, &amp;amp;amp;RsaKey);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPubKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPubKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPubKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPubKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPubKeyHandle(utHandle, PriKeyHandle, &amp;amp;amp;PubKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetPriKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetPriKeyHandle(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE_PTR lpPriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the public key handle by the corresponding private key handle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpPriKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the corresponding private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSAGetPriKeyHandle(utHandle, PubKeyHandle, &amp;amp;amp;PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSAGetKeyPairModulus  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSAGetKeyPairModulus(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  unsigned long* lpModulusBits&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get RSA key pair modulus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpModulusBits [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;modulus length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
unsigned long ModulusBits;&lt;br /&gt;
ret = UT_RSAGetKeyPairModulus(utHandle, PubKeyHandle, &amp;amp;amp;ModulusBits);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_RSADeleteKeyPair  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_RSADeleteKeyPair(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE PubKeyHandle,&lt;br /&gt;
  KEY_HANDLE PriKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete the RSA key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PubKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;public key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PriKeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;private key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this function, the handles of a key pair are required. If the handles belong to the keys from different key pairs, return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/source&amp;gt; if only one key handle provided, the other key handle must be 0 to delete the key pair.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE PubKeyHandle;&lt;br /&gt;
KEY_HANDLE PriKeyHandle;&lt;br /&gt;
ret = UT_RSADeleteKeyPair(utHandle, PubKeyHandle, PriKeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;= 128 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-MD5 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_FULL&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5HMACGenerateKey(utHandle, 128, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run MD5 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 16 bytes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[16];&lt;br /&gt;
ret = UT_MD5(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-MD5 keys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The maximum number of MD5 keys is 8.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_MD5GetKeyCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_MD5GetKeyLen(utHandle, KeyHandle, &amp;amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the samples of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_MD5GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5GetFirstKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_MD5GetNextKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_MD5DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-MD5 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_MD5DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_MD5ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_MD5ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-MD5 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_MD5ImportKey(utHandle, Key, 128, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMACGenerateKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMACGenerateKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To generate HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The length of key is &amp;amp;lt;=128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UniToken device can store as many as 8 HMAC-SHA1 keys. If there are already 8 keys in the device, calling the function will return &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_KEY_FULL&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1HMACGenerateKey(utHandle, 128, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1HMAC  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1HMAC(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run HMAC-SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1HMAC(utHandle, KeyHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpData,&lt;br /&gt;
  unsigned long DataLength,&lt;br /&gt;
  unsigned char* lpDigest&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run SHA1 algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpData [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to be digested&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DataLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpDigest [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;digested data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DataLength is 1~128 bytes. lpDigest is 20 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned char Data[128];&lt;br /&gt;
unsigned char Digest[20];&lt;br /&gt;
ret = UT_SHA1(utHandle, Data, 128, Digest);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetKeyCount(UT_HANDLE utHandle, unsigned long* lpKeyCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To count HMAC-SHA1 keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of keys&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long KeyCount;&lt;br /&gt;
ret = UT_SHA1GetKeyCount(utHandle, &amp;amp;amp;KeyCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetKeyLen  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1GetKeyLen(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  KEY_HANDLE KeyHandle,&lt;br /&gt;
  unsigned long* lpKeyLength&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the length of HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyLength [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned long KeyLength;&lt;br /&gt;
ret = UT_SHA1GetKeyLen(utHandle, KeyHandle, &amp;amp;amp;KeyLength);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetFirstKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetFirstKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the first HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_SHA1GetNextKeyHandle&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1GetNextKeyHandle  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1GetNextKeyHandle(UT_HANDLE utHandle, KEY_HANDLE_PTR lpKeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the handle of the next HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_KEY&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No key found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1GetFirstKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
ret = UT_SHA1GetNextKeyHandle(utHandle, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1DeleteKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_SHA1DeleteKey(UT_HANDLE utHandle, KEY_HANDLE KeyHandle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete HMAC-SHA1 key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
ret = UT_SHA1DeleteKey(utHandle, KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_SHA1ImportKey  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_SHA1ImportKey(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned char* lpKey,&lt;br /&gt;
  unsigned long KeyLength,&lt;br /&gt;
  KEY_HANDLE_PTR lpKeyHandle&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To import HMAC-SHA1 key to UniToken device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKey [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;SHA1 key&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;KeyLength [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key length&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpKeyHandle [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;key handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KeyLength is 1~128 bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_KEY_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No more keys can be generated&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
KEY_HANDLE KeyHandle;&lt;br /&gt;
unsigned char Key[128];&lt;br /&gt;
ret = UT_SHA1ImportKey(utHandle, Key, 128, &amp;amp;amp;KeyHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetSpace  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetSpace(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long* UsedSpace,&lt;br /&gt;
  unsigned long* FreeSpace&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the size of the free memory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UsedSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of used memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FreeSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of free memory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long UsedSpace;&lt;br /&gt;
unsigned long FreeSpace;&lt;br /&gt;
ret = UT_FS_GetSpace(utHandle, &amp;amp;amp;UsedSpace, &amp;amp;amp;FreeSpace);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileCount  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetFileCount(UT_HANDLE utHandle, unsigned long* lpFileCount);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the number of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileCount [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;the number of files&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long FileCount;&lt;br /&gt;
ret = UT_FS_GetFileCount(utHandle, &amp;amp;amp;FileCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFirstFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetFirstFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the name of the first file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also the sample of &amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_GetNextFileName&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetNextFileName  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_GetNextFileName(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
To get the name of the next file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_LIST_END&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;End of fire list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OPERATE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_GetFirstFileName(utHandle, FileName);&lt;br /&gt;
ret = UT_FS_GetNextFileName(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFileSize  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFileSize(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long* lpFileSize&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFileSize [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned long FileSize;&lt;br /&gt;
ret = UT_FS_GetFileSize(utHandle, FileName, &amp;amp;amp;FileSize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_GetFilePermission  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_GetFilePermission(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned char* lpFilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the file permission of the specified file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpFilePermission [out]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
unsigned char FilePermission;&lt;br /&gt;
ret = UT_FS_GetFilePermission(utHandle, FileName, &amp;amp;amp;FilePermission);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CreatFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_CreateFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  unsigned long FileSize,&lt;br /&gt;
  unsigned char FilePermission&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FileSize [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;size of file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FilePermission [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;file permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# The max. File size is 262112 bytes;&lt;br /&gt;
# FilePermission can be FILE_PERMISSION_GUEST, FILE_PERMISSION_USER or FILE_PERMISSION_ADMIN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_FILE_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;The file already exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
File permission types:&lt;br /&gt;
# FILE_PERMISSION_GUEST: With GUEST and higher permissions, reading the file is allowed; With USER and higher permissions, writing file is allowed.&lt;br /&gt;
# FILE_PERMISSION_USER: With USER and higher permissions, reading and writing file are allowed.&lt;br /&gt;
# FILE_PERMISSION_ADMIN: Only ADMIN is allowed to read and write the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_CreateFile(utHandle, FileName, 200, FILE_PERMISSION_GUEST);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_DeleteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_DeleteFile(UT_HANDLE utHandle, char* lpszFileName);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To delete a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_DeleteFile(utHandle, FileName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_OpenFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_OpenFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  char* lpszFileName,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To open a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpszFileName [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;filename (string, 16 bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NAME_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Filename too long&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. Files can be read and written only when opened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
char FileName[17];&lt;br /&gt;
ret = UT_FS_OpenFile(utHandle, FileName, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_WriteFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_WriteFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To write or modify a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NOSPACE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No room in file system&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file. New function of appending is added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_WriteFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_ReadFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV UT_API UT_FS_ReadFile(&lt;br /&gt;
  UT_HANDLE utHandle,&lt;br /&gt;
  unsigned long Offset,&lt;br /&gt;
  unsigned long Length,&lt;br /&gt;
  unsigned char* Buffer,&lt;br /&gt;
  void* lpReserve&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To read a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Offset [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;start position for writing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Length [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;length of data&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Buffer [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;data to write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_ARGUMENTS_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid argument&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_OFFSET_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid start point for specified file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_DATA_LEN_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Out of range of data length&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No file found&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
unsigned long Offset;&lt;br /&gt;
unsigned char Buffer[200];&lt;br /&gt;
ret = UT_FS_ReadFile(utHandle, 0, 200, Buffer, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UT_FS_CloseFile  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prototype&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;UT_RV UT_API UT_FS_CloseFile(UT_HANDLE utHandle, void* lpReserve);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To close a file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Parameters&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;PARAMETERS&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;utHandle [in]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;device handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lpReserve&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;reserved for further usage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Returned Value&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;RETURNED VALUE&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;DESCRIPTION&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_OK&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Successful operation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NOT_INITIALIZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Library not initialized&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_TOKEN_HANDLE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Invalid token handle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_NO_PERMISSION&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;No permission&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;UT_FS_NO_OPEN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cannot open file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Usage Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To call the function, it is required that the current permission be higher than or at the same level with the one of writing the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Sample&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
UT_RV ret;&lt;br /&gt;
UT_HANDLE utHandle;&lt;br /&gt;
ret = UT_FS_CloseFile(utHandle, NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=819</id>
		<title>UniKey Console Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=819"/>
		<updated>2016-08-23T00:22:32Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniKey Manuals]]&lt;br /&gt;
==&amp;lt;b&amp;gt;UniKey Console&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;User Guide&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Version 8.3&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Version&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;4.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;5.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;6.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.3&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Date&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.12&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2009.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.7&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
UniKey Console is a powerful tool to help software vendors manage their software development, license software and track their software sales performance. It can be integrated into your ERP, CRM and financial system seamlessly.&lt;br /&gt;
The UniKey Console is designed to follow the waterfall software development procedure, which helps software vendors manage their different products along its whole lifecycle. The feature based license management method is an innovative way to protect your software away from intruders and to license efficiently. &lt;br /&gt;
&lt;br /&gt;
To administrate all software, check the sales history and gather information to prepare for the following software development, UniKey Console employs a database to record information. It supports almost all database techniques available in todays market, such as SQL, MySQL, and Oracle.&lt;br /&gt;
Additionally, this Console supports multiple users logging in to the system. Different operators in different roles can logon and operate the Console utility within their personal level of permission. For example, employees from a product department can login to the Console system, and submit product orders, but they cannot see any other information about the sales department.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Deployment==&lt;br /&gt;
This section will introduce how to deploy the UniKey Console on your system. The Console has two parts, the front is a GUI which is green software and does not need any installation. Users simply copy the folder to their computer. The next step is to install a database and create tables. In the SDK we provide instructional pictures, follow the pictures to finish the MySQL installation. If no version of MySQL Server is included in the SDK, you can download the latest version from: https://dev.mysql.com/downloads/mysql/. After installing the database, click on Start, and open the MySQL Command Line Client.  Log in to the database by entering your password.&lt;br /&gt;
&lt;br /&gt;
[[File:MySQL console.png|left|500px|alt=MySQL command line client]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;Device mode does not support multiple users and will not keep operation records on the database&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
To create the required tables, input &amp;lt;code&amp;gt;&amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt; (if that does not work try the command: &amp;lt;code&amp;gt;source &amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt;) and press enter.  After the database has been successfully built, open the console GUI by double clicking on the Console icon (you may need to re-open the Console application to register any changes to the database).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UniKey Console Working Mode==&lt;br /&gt;
The UniKey Console provides two different modes for users, Manage Mode and Device Mode. The Manage Mode is mainly used to manage the whole lifecycle of your software, and allows multiple operators to logon the system to implement their operations with their own levels of permission. Device mode provides a quick way to configure parameters or generate an update file for a UniKey device.&lt;br /&gt;
&lt;br /&gt;
==Manage Mode==&lt;br /&gt;
The UniKey Console Manage Mode closely follows the software lifecycle, from the beginning of software design to the end of software development. At the design stage, software designers will separate the software into different blocks according to their functions. We highly recommend medium to large software vendors use Manage Mode to manage and license your software.&lt;br /&gt;
&lt;br /&gt;
===Login===&lt;br /&gt;
This system supports remote login. Users can set up the servers IP via the GUI, and log in to the server remotely to finish their operation. To start using the Console, double click on the UniKey Console. The login interface will pop up.&lt;br /&gt;
&lt;br /&gt;
[[File:console login.png|500px|alt=UniKey Console login page]]&lt;br /&gt;
&lt;br /&gt;
Input the user name and password to log in to the system.&lt;br /&gt;
* If this is the first time you are logging in to the system, the user name is administrator, and password is admin.&lt;br /&gt;
* The administrator should log in to the system and change their password first, and then he/she can create other accounts for different operators.&lt;br /&gt;
* If you try to log in to a server remotely, click on Network Setting and in the pop-up window, input the server IP address and port number.&lt;br /&gt;
&lt;br /&gt;
===Product===&lt;br /&gt;
The product panel provides a series of interfaces for product related operations, including creating license features and generating product license strategies by combining one or more license features together.&lt;br /&gt;
&lt;br /&gt;
====Feature Setting====&lt;br /&gt;
Feature setting is the most basic element to form a license for a product. For example, if the software requires a license based on expiration time, a time module shall be selected and the expiration time shall be set. This will form a license feature. If more license strategies are going to be used, more license features can be created.&lt;br /&gt;
&lt;br /&gt;
[[File:feature setting console.png|500px|alt=UniKey Console feature setting]]&lt;br /&gt;
&lt;br /&gt;
Click on Add to add a license feature in the pop-up window.&lt;br /&gt;
&lt;br /&gt;
[[File:add license feature.png|500px|alt=UniKey Console add license feature]]&lt;br /&gt;
&lt;br /&gt;
As you can see from the above picture, lots of license features can be used to build up a single product license, such as license module, memory, arithmetic, SID, max connections, partition information, etc.&lt;br /&gt;
&lt;br /&gt;
====License Module====&lt;br /&gt;
This feature limits access to the software based on rules. When the correct UniKey is connected, the software bound to the UniKey is activated.&lt;br /&gt;
&lt;br /&gt;
[[File:license module.png|thumb|left|500px|alt=UniKey Console add license feature perpetual|License Module is the most widely used feature on all UniKey devices]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
There are two ways to use the License Module. The first is to bind a module to the software, once the module is enabled, the software will start working. The second is to set the execute count, so every time when the software is started the count will decrement until the value reaches 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;A non-zero number must be set to enable the License Module. This number will not be changed unless Exe Count Mode has been selected.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Memory====&lt;br /&gt;
UniKey has 4KB of memory which allows developers to store any information, such as a software abstract, version information, buyers or developers information, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:console memory.png|500px|alt=UniKey Console writing into memory]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input the encoding in the left column.&lt;br /&gt;
* Input the start address, which refers to the start point where the content will be stored.&lt;br /&gt;
* Input the length, which refers the length of content that will be stored in memory.&lt;br /&gt;
&lt;br /&gt;
====Arithmetic ====&lt;br /&gt;
To protect your software safely, it is a good idea to write a block of code inside the UniKey device itself, therefore without the device, the software cannot run. The arithmetic option is designed for this purpose.&lt;br /&gt;
&lt;br /&gt;
[[File:console arithmetic.png|thumb|left|500px|alt=UniKey Console arithmetic feature|For the syntax and how to write an equation, please refer to the UniKey manual in the arithmetic section]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input your custom arithmetic.&lt;br /&gt;
* Input the start address, to set the start point of the arithmetic.&lt;br /&gt;
* Input the length, so that the arithmetic will end at the start address plus the length.&lt;br /&gt;
&lt;br /&gt;
====SID Range====&lt;br /&gt;
SID is another important property in UniKey that can provide effective license management and software protection. Developers can use this feature to set it so that only one key or several keys can launch a specific copy of software.&lt;br /&gt;
&lt;br /&gt;
[[File:console SID range.png|500px|alt=UniKey Console software ID generation rules]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Feature setting&amp;lt;/b&amp;gt; - In the SID generation mode, which will generate a rule for how UniKey SID codes are created, there are 4 different methods of generation:&lt;br /&gt;
* All the same: all SID burned to UniKey devices will be the same.&lt;br /&gt;
* Increment: the SID value of every UniKey device will add 1 from the initial value when burning.&lt;br /&gt;
* Decrement: the SID value of every UniKey device will decrease by 1&lt;br /&gt;
* Time/date: the SID value will be the produced from the current time/date&lt;br /&gt;
The initial value gives a starting SID value/position/number.&lt;br /&gt;
&lt;br /&gt;
====Update Tag====&lt;br /&gt;
The update tag is mainly used to update related issues. It can be used to record the number of times the software has been updated, or protect an update file from being used by other UniKey devices with a different update tag.&lt;br /&gt;
&lt;br /&gt;
[[File:console update tag.png|500px|alt=UniKey Console update tag]]&lt;br /&gt;
&lt;br /&gt;
====Max Connections====&lt;br /&gt;
Some software may employ a floating license strategy, where people on the network will share a license. The maximum number of connections can restrict the total number of users who share a license simultaneously on a local network.&lt;br /&gt;
&lt;br /&gt;
[[File:console max connections.png|500px|alt=UniKey Console number of max connections]]&lt;br /&gt;
&lt;br /&gt;
====Seed====&lt;br /&gt;
For every UniKey device, the password cannot be customized, but developers can generate their own passwords by themselves. Passwords can be generated by entering a seed value in the seed setting, and when a license is produced, the password of the device will be changed to the value calculated by the UniKey system based on this seed value.&lt;br /&gt;
&lt;br /&gt;
[[File:console seed.png|500px|alt=UniKey Console set seed]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting, input the seed value.&lt;br /&gt;
* Each UniKey dongle can only generate a new password TWICE! After this it cannot generate anymore passwords.&lt;br /&gt;
* When generating a new password, the dongle is formatted.&lt;br /&gt;
* &amp;lt;b&amp;gt;To reset the password for a 3rd time, the UniKey dongle must be sent back to SecuTech&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Partition information====&lt;br /&gt;
Each UniKey Drive device has four partitions:&lt;br /&gt;
* Virtual CD-ROM emulation drive&lt;br /&gt;
* Public partition&lt;br /&gt;
* Password protected partition&lt;br /&gt;
* Hidden partition&lt;br /&gt;
This page is used by customers to set the space for each partition on the UniKey Drive device.&lt;br /&gt;
&lt;br /&gt;
[[File:console partition information.png|500px|alt=UniKey Drive partition information]]&lt;br /&gt;
&lt;br /&gt;
====Files in hidden partition====&lt;br /&gt;
UniKey Drive has a unique hidden partition which allows users to store files. Each file stored on the hidden partition is invisible and inaccessible to end users. Vendors could integrate UniKey Drive APIs with their software and then that software will be able to access the files stored on the UniKey Drives hidden partition.&lt;br /&gt;
&lt;br /&gt;
[[File:console hidden partition files.png|500px|alt=UniKey Drive hidden partition files]]&lt;br /&gt;
&lt;br /&gt;
The files stored on the hidden partition should have the filename as an 8.3 format, for example, 12345678.123&lt;br /&gt;
&lt;br /&gt;
====Product setting====&lt;br /&gt;
Product setting is used to combine the basic license elements and features together to form a product license strategy, to help meet the different requirements of customers, businesses, and sales strategies. For each software package, decision makers can set several license strategies by selecting different license features which have been set in Feature setting, maximizing their market share and revenue. For some special requirements, a customized license can even be quickly generated.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting.png|500px|alt=UniKey Console product setting]]&lt;br /&gt;
&lt;br /&gt;
The above picture shows the Product setting panel, and to add a license for a product click on the Add button.&lt;br /&gt;
&lt;br /&gt;
After clicking on Add, this window is displayed&lt;br /&gt;
&lt;br /&gt;
[[File:console add product.png|thumb|left|500px|alt=UniKey Console add new product|The configuration will affect this product, and will not change previous Feature settings]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Input the product name; a comment can be added in the comment box, and please select the correct device type(s). In the Feature setting section, you can reset the update tag, max connections, seed, and SID generation mode by checking the respective item boxes. This provides a quick interface to modify the license settings. From the Feature list choose the preferred features from the list and click on &amp;amp;gt; to move them to the products desired features on the right. These features will combine together to form a product license.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting added.png|thumb|left|500px|alt=UniKey Console list product ID, name and any comments|Once an order has been placed on a product, this product will not be deleted]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Based on the current product, you can create a new license quickly by using the Customize function; you can then input a new name and reset values or add more features to create another license. This allows you to easily create another product with a new name and unique product ID that may share features with other products. A product can be changed by selecting the product and clicking on Edit, or can be deleted by clicking Delete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Sales===&lt;br /&gt;
The sale function will help vendors to manage their customers and orders. It contains two configurations: Customer Management and Order Setting.&lt;br /&gt;
&lt;br /&gt;
====Customer Management====&lt;br /&gt;
Customer Management will record all information about customers and their order history. If a customer wants to place an order, then this customer must be added to the customer list. Click the button Add to execute the corresponding operation.&lt;br /&gt;
&lt;br /&gt;
====Order Setting====&lt;br /&gt;
Order setting contains order related operations, such as place an order, update a product, append a new order to an existing order, edit, delete, submit and check status.&lt;br /&gt;
&lt;br /&gt;
[[File:console order management.png|500px|alt=UniKey Console order management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Production===&lt;br /&gt;
Production is mainly used for the production department, once an order has been submitted, the order will be passed to the production department, x and this order will be listed. The producer shall produce the order.&lt;br /&gt;
&lt;br /&gt;
[[File:console product management.png|500px|alt=UniKey Console production management]]&lt;br /&gt;
&lt;br /&gt;
Click on Production, and follow the instruction to finish the production procedure.&lt;br /&gt;
&lt;br /&gt;
[[File:console production progress.png|300px|alt=progress bar for production]]&lt;br /&gt;
&lt;br /&gt;
If there is an error or problem in the order, the producer shall decline the order by clicking on decline, and then the order will be sent back to sales.&lt;br /&gt;
&lt;br /&gt;
===Management===&lt;br /&gt;
Administrators shall use the Management tab to add, edit and delete users, including user name, password, and assign permission levels.&lt;br /&gt;
&lt;br /&gt;
[[File:console user management.png|500px|alt=UniKey Console user management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Device Mode==&lt;br /&gt;
Device Mode provides you a direct way to configure all parameters for your UniKey device locally or to generate a remote update file. It is suitable for altering UniKey hardware operations and property configurations directly.&lt;br /&gt;
&lt;br /&gt;
[[File:console device setting.png|500px|alt=UniKey Console device mode login screen]]&lt;br /&gt;
 &lt;br /&gt;
When you click on Check status, the status of the device connected to the local computer will be displayed in the message box. By entering the correct password, and then clicking on User logon or Vendor logon, you can log in to the device as a user or vendor to perform operations within your level of permission.&lt;br /&gt;
&lt;br /&gt;
===Configure===&lt;br /&gt;
Click on Configure on the left side of the control panel, all configuration options will be displayed in the dropdown menu:&lt;br /&gt;
* General information&lt;br /&gt;
* Memory&lt;br /&gt;
* Algorithm&lt;br /&gt;
* License and Time Module &amp;lt;em&amp;gt;(Time Module is not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* New password &amp;lt;em&amp;gt;(Available in General information when logged in as a vendor)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Encrypt/Decrypt&lt;br /&gt;
* Random number &amp;lt;em&amp;gt;(not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Format &amp;lt;em&amp;gt;(Under the Initialization tab for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Network&lt;br /&gt;
&lt;br /&gt;
[[File:console device configure.png|500px|alt=UniKey Console configure tab]]&lt;br /&gt;
&lt;br /&gt;
You can configure any properties according to your own desired licensing strategies. By clicking on the corresponding options, you can enter your required parameters.&lt;br /&gt;
&lt;br /&gt;
===General information===&lt;br /&gt;
&lt;br /&gt;
[[File:console device general information.png|500px|alt=UniKey Console general information (SID and Update Tag)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;The HID is a fixed serial number, and cannot be changed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In menu, the UniKey devices SID and Update Tag connected to your computer will show in the message box. You can change the SID and Update Tag value, by entering value in the respective input box and then clicking Write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
[[File:console device memory.png|500px|alt=UniKey Console device memory details]]&lt;br /&gt;
&lt;br /&gt;
In Memory, you can read, edit, and delete content stored in the UniKeys memory. By clicking on Read, you can read content from the UniKeys memory, and by clicking on Write, you can write all content edited by you into the UniKeys memory. To facilitate your editing, UniKey Console provides a load from file function. By clicking on Load from file, you can load content stored in a file to Console, and then write it to memory by clicking on Write. Alternatively, you can save the data which is read from the UniKeys memory to a file by clicking on Save to file.&lt;br /&gt;
&lt;br /&gt;
===Algorithm===&lt;br /&gt;
&lt;br /&gt;
[[File:console device algorithm.png|500px|UniKey Console write and run algorithms]]&lt;br /&gt;
&lt;br /&gt;
UniKey Algorithm is a very powerful method to protect your software, as this block of code is stored directly in UniKey, independent in memory from where software code is stored. Without the right permissions, this block of code cannot be written to or read by anyone. An algorithm can be typed into the Input algorithm field. You can input more than one statement in your algorithm and each statement is separated by comma.&lt;br /&gt;
&lt;br /&gt;
Input the start address to set the starting point for your algorithm, and input a length to set the end point. The end point address will be the start address plus length. Select a calculation mode, and then click on Write to write your configurations into the UniKey. If you want to run your algorithm for a test, you can initialize the variable, A, B, C, D, seed/module (depending on the selected calculation mode), and start address, and then click on Run. The result from A, B, C, and D will be displayed directly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===License Module===&lt;br /&gt;
&lt;br /&gt;
[[File:console device module.png|500px|alt=UniKey Console module settings]]&lt;br /&gt;
&lt;br /&gt;
License Module allows you to enable/disable specified modules and set the number of execution times. In the list on the right side of the console, you can see a list and module status. Click on the white triangle to check each corresponding modules parameters and status.&lt;br /&gt;
&lt;br /&gt;
[[File:Console device module options.png|thumb|left|500px|alt=UniKey Console greater module details|To enable a module, a positive number must be entered]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Click on Check to view the information and status of a device and click on Write to write your configurations.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable the auto-decrement function by toggling the check box next to Auto-decrement. To check the information in all modules, you can click on the Check All button; you can also set all modules by clicking on Write All to write all settings to device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Time Module (UniKey Time Only)===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module tab.PNG|500px|alt=UniKey Console time module selections]]&lt;br /&gt;
&lt;br /&gt;
The UniKey Time has 16 time modules to work with, and you can bind any time module with your whole software, or bind just a single piece of functionality, helping to achieve a time-based licensing strategy. Clicking on Read Time reads the current time from the dongle, and the time can be set by inputting the time in the Dongle Clock field (DD-MM-YYYY format) and pressing Write Time; otherwise you can synchronize your dongle&#039;s clock with your system time by pressing Write system time to device. Clicking on the white triangle icon to the right of any time module allows you to set the details for an individual time module.&lt;br /&gt;
&lt;br /&gt;
====Set Start Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module 0 start time.PNG|500px|alt=time module duration mode (days, hours)]]&lt;br /&gt;
&lt;br /&gt;
You can utilize the current devices time or system time by clicking on Use device time or Use system time respectively. UniKey provides two different methods; expiration and duration, for you to select from (the default being duration). Inputting Duration Time indicates how long the user can use the software after it the given Start Time. &lt;br /&gt;
&lt;br /&gt;
====Set Expiration Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module expiration method.PNG|500px|alt=time module expiration time (YYYY-MM-HH-MM)]]&lt;br /&gt;
&lt;br /&gt;
If a module will never be used, you can click on Write, but if the module has been set before, then to reset the module, you must either erase the module first or check the Re-write option box. You can set more than one module at once by selecting Write All to set your modules in-batch; make sure to click Check All afterwards to check the status of all modules. Clicking on Erase All removes all settings stored each time module, please note that all modules will be initialized, so be careful when using the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New Password===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console New Password tab.PNG|500px|alt=enter a seed value to generate four new passwords]]&lt;br /&gt;
&lt;br /&gt;
UniKey does not allow users to defined passwords by themselves. The only way to change passwords is by using the password generation mechanism embedded in the UniKey Console. Please input a seed (numbers only) and click on New Password, all new passwords will be displayed in the New Password output boxes and will be recorded into the UniKey Console folder. &amp;lt;b&amp;gt;The passwords of a UniKey dongle can only be changed twice, after which they cannot be changed again.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Encrypt/Decrypt===&lt;br /&gt;
&lt;br /&gt;
[[File:console device encrypt and decrypt.png|500px|alt=UniKey Console encrypt or decrypt text]]&lt;br /&gt;
&lt;br /&gt;
Each UniKey dongle has an encrypt/decrypt function, and can store 3 keys inside each device. In the encrypt/decrypt option, you can choose the encrypt/decrypt operation, generate keys and check output.&lt;br /&gt;
From the Select Operation drop-down menu, you can choose a specific operation. For example, choosing generate key, you can choose the key you want to use and click on Run to generate a secret key for your UniKey.&lt;br /&gt;
&lt;br /&gt;
Encryt/Decrypt: to check the encrypt/decrypt result, you can choose your desired operation from the Select Operation drop-down menu. Select the key, choose the encoding, input your content (the length must be an integer multiple of 16) in the input box and then click Run, you can then see the result in the output box. To reverse the operation, you can click on &amp;amp;lt; between the input and output boxes, choose the opposite operation, and then click on Run to check the result from the output box.&lt;br /&gt;
UniKey also provides an MD5 algorithm, for you to perform checksums. You can perform the MD5 calculation by following the same procedure.&lt;br /&gt;
&lt;br /&gt;
===Random Number===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Random Number tab.PNG|500px|alt=enter a seed to generate four distinct randomly generated numbers]]&lt;br /&gt;
&lt;br /&gt;
UniKey Console provides its own random number generator. By just entering a seed (numbers only) value and clicking Run you are provided with four random numbers in Result; the numbers generated are cryptographically random.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Network===&lt;br /&gt;
&lt;br /&gt;
[[File:console device network.png|500px|alt=UniKey Console network settings]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to configure your UniKey device (PRO, Time, and Drive) in a network environment. In the first line, you can set the maximum number of users who can connect to the server simultaneously.&lt;br /&gt;
&lt;br /&gt;
====Client setting====&lt;br /&gt;
* Server IP is the servers IP address in the network. This address will guide clients to find the server in the network.&lt;br /&gt;
* Server port is the port to build communications between client and server.&lt;br /&gt;
* Time-out defines the maximum waiting period. If the client sends a request to the server, but the server does not send a response back in the set time, then the client is denied access.&lt;br /&gt;
* The default time-out period is 5 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;You can use this to control the behavior of the NetUniKey Client&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
The access mode box shows how NetUniKey Clients access the NetUniKey Server. If you set it to access by IP, NetUniKey Server accepts only ONE client per IP. If this value is set to access by process, the NetUniKey client from the same process can only be accepted once. If it is set to access by thread, NetUniKey can be accepted in any thread. Access by shared IP means all requests from a single IP will be counted as 1. To facilitate setting other devices with the same configuration, you can save your configuration information into a file, or to update a device remotely, you can generate an update file.&lt;br /&gt;
&lt;br /&gt;
Working mode specifies how the UniKey Client will operate. If this value is set to local only, the NetUniKey Client will only work with a UniKey dongle attached to a local USB port.&lt;br /&gt;
If this value is local-&amp;amp;gt;network, the UniKey Client will check for a local UniKey dongle attached to a USB port first, if this fails, it will try to search for the UniKey dongle attached to the UniKey server in the network.&lt;br /&gt;
If you set it to network only, the NetUniKey Client will only work with the UniKey dongle attached to the UniKey server. When this value is set to network-&amp;amp;gt;local, the NetUniKey client will try to connect with the UniKey dongle attached to UniKey server first, and if it fails, it will try to load a local UniKey attached to a USB port.&lt;br /&gt;
&lt;br /&gt;
Search mode sets how UniKey clients will try to find a UniKey dongle on the network. Local only is used for connecting to the server by using the server IP set in the configuration file. If it is set to local-&amp;amp;gt;broadcast, the UniKey client will try to use the information in the configuration file first, if this fails, the UniKey clients will broadcast to the local network to find the UniKey. &lt;br /&gt;
If set to broadcast-&amp;amp;gt;local, the UniKey clients will broadcast to the network first, and will try to connect to the UniKey specified in NetUniKey configuration file when they cannot find any UniKey via the broadcast. You can save this configuration file by clicking on Save, or read the previous client settings file by clicking on Read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Server setting====&lt;br /&gt;
&lt;br /&gt;
[[File:console device network server.png|thumb|left|500px|alt=UniKey Console server settings|The default port is 5680]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In this panel, you can enter the server IP, desired server port, and timeout. Enable/Disable the black and white IP list. To add an IP address to the list, click on the corresponding Add button, in the pop-up window, enter the start and end IP addresses. Or you can move an IP from the black list to white list by clicking on the &amp;amp;gt;/&amp;amp;lt; buttons.&lt;br /&gt;
* If the white list is enabled, only IP addresses in this list can access the server. If the list is empty, then no clients can access the server.&lt;br /&gt;
* The black list always has the highest priority. When the server starts, it will always check the black list first. If an IP appears in both the black and white list, the IP will be blocked.&lt;br /&gt;
&lt;br /&gt;
===File System===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File System allows you to manage the hidden and secure partition of the UniKey Drive dongle.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console file system.png|500px|alt=UniKey Drive Console file system initial window]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Hidden Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console hidden partition.png|thumb|none|500px|alt=UniKey Drive Console hidden partition login screen|The default passwords to enter the hidden partition are 12345678]]&lt;br /&gt;
&lt;br /&gt;
To enter the hidden partition, please input all four passwords to the UniKey Drive file system, then press OK. All the data stored on both the hidden and secure partitions are encrypted using a 128-bit encryption algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:unikey drive hidden partition filesystem.png|500px|alt=UniKey Drive Console hidden partition filesystem]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Secure Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console secure partition login screen.png|thumb|none|500px|alt=UniKey Drive Console secure partition login screen|The default password to enter the secure partition is 123456]]&lt;br /&gt;
&lt;br /&gt;
The secure partition is also known as the password-protected partition; customers can access it by providing the correct password.&lt;br /&gt;
&lt;br /&gt;
===Initialization===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Initialization tab for the UniKey Drive contains two parts; format and partition device memory.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization.png|500px|alt=UniKey Drive Console Initialization tab]]&lt;br /&gt;
&lt;br /&gt;
====Format====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Drive Initialization Format.png|500px|alt=UniKey Drive Console Initialization Format tab]]&lt;br /&gt;
&lt;br /&gt;
By using the Format function, customers can format the UniKey Drive&#039;s 4KB memory, SID, license modules, algorithms and update tags.&lt;br /&gt;
&lt;br /&gt;
====Partition====&lt;br /&gt;
To partition the UniKey Drive, you need to input all four passwords to log in to the Drive&#039;s filesystem. Pressing Default Password loads the default passwords automatically for you.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization partition.png|thumb|none|500px|alt=UniKey Drive Console Initialization Partition tab|The four default passwords are 12345678]]&lt;br /&gt;
&lt;br /&gt;
Device capacity is the UniKey Drive&#039;s total memory; UniKey Drives are available in 2, 4, 8, 16, and 32GB variants. An image file (ISO) is used for UniKey Drive&#039;s virtual CD-ROM partition; a user can burn their own ISO files to the Drive&#039;s virtual CD-ROM. A vendor can modify the capacity of the hidden, normal, and secure partition. Vendors need to create a password for the secure partition, so that end users are able to open the password-protected partition.&lt;br /&gt;
&lt;br /&gt;
===Generate===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate unikey update.png|500px|alt=UniKey Console read update file]]&lt;br /&gt;
&lt;br /&gt;
====Generate UniKey File====&lt;br /&gt;
UniKey file is used by the UniKey Burner tool, when a customer wants to burn the dongles in a batch by using the same configurations and settings, this file will be loaded into the UniKey Burner tool.  Pressing the Read button will load the information stored on the .uky file to the Console tool. The Generate button will create the .uky file with the dongles information/settings from the Console tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generate Update File===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate update file.png|500px|alt=UniKey Console generate update file]]&lt;br /&gt;
&lt;br /&gt;
The Update File is used by the UniKey Drive Remote Updater; it does the same thing as the UniKey Remote Update Generator does. &lt;br /&gt;
&lt;br /&gt;
The Properties to be bound box will allow the customer to bind specific HID, SID, License Modules and Update Tags to the generated .upt2 file. After binding with a specific value, the .upt2 file will check if the values stored inside of the UniKey Drive dongle are the same or not. If they are not the same, the .upt2 file will not update the UniKey Drive.&lt;br /&gt;
&lt;br /&gt;
The Property to be written box allows the customer to use the .upt2 file for updating the settings and configurations of the target UniKey Drive.&lt;br /&gt;
File password will allow the customer to set an independent password for the generated .upt2 file, and then when the end user updates their UniKey Drive by using the corresponding .upt2 file, they will need to input this password in order to access/use the .upt2 file.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=818</id>
		<title>UniKey Console Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=818"/>
		<updated>2016-08-23T00:21:57Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniKey Manuals]]&lt;br /&gt;
==&amp;lt;b&amp;gt;UniKey Console&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;User Guide&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Version 8.3&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Version&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;4.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;5.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;6.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.3&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Date&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.12&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2009.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.7&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
UniKey Console is a powerful tool to help software vendors manage their software development, license software and track their software sales performance. It can be integrated into your ERP, CRM and financial system seamlessly.&lt;br /&gt;
The UniKey Console is designed to follow the waterfall software development procedure, which helps software vendors manage their different products along its whole lifecycle. The feature based license management method is an innovative way to protect your software away from intruders and to license efficiently. &lt;br /&gt;
&lt;br /&gt;
To administrate all software, check the sales history and gather information to prepare for the following software development, UniKey Console employs a database to record information. It supports almost all database techniques available in todays market, such as SQL, MySQL, and Oracle.&lt;br /&gt;
Additionally, this Console supports multiple users logging in to the system. Different operators in different roles can logon and operate the Console utility within their personal level of permission. For example, employees from a product department can login to the Console system, and submit product orders, but they cannot see any other information about the sales department.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Deployment==&lt;br /&gt;
This section will introduce how to deploy the UniKey Console on your system. The Console has two parts, the front is a GUI which is green software and does not need any installation. Users simply copy the folder to their computer. The next step is to install a database and create tables. In the SDK we provide instructional pictures, follow the pictures to finish the MySQL installation. If no version of MySQL Server is included in the SDK, you can download the latest version from: https://dev.mysql.com/downloads/mysql/. After installing the database, click on Start, and open the MySQL Command Line Client.  Log in to the database by entering your password.&lt;br /&gt;
&lt;br /&gt;
[[File:MySQL console.png|left|500px|alt=MySQL command line client]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;Device mode does not support multiple users and will not keep operation records on the database&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
To create the required tables, input &amp;lt;code&amp;gt;&amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt; (if that does not work try the command: &amp;lt;code&amp;gt;source &amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt;) and press enter.  After the database has been successfully built, open the console GUI by double clicking on the Console icon (you may need to re-open the Console application to register any changes to the database).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UniKey Console Working Mode==&lt;br /&gt;
The UniKey Console provides two different modes for users, Manage Mode and Device Mode. The Manage Mode is mainly used to manage the whole lifecycle of your software, and allows multiple operators to logon the system to implement their operations with their own levels of permission. Device mode provides a quick way to configure parameters or generate an update file for a UniKey device.&lt;br /&gt;
&lt;br /&gt;
==Manage Mode==&lt;br /&gt;
The UniKey Console Manage Mode closely follows the software lifecycle, from the beginning of software design to the end of software development. At the design stage, software designers will separate the software into different blocks according to their functions. We highly recommend medium to large software vendors use Manage Mode to manage and license your software.&lt;br /&gt;
&lt;br /&gt;
===Login===&lt;br /&gt;
This system supports remote login. Users can set up the servers IP via the GUI, and log in to the server remotely to finish their operation. To start using the Console, double click on the UniKey Console. The login interface will pop up.&lt;br /&gt;
&lt;br /&gt;
[[File:console login.png|500px|alt=UniKey Console login page]]&lt;br /&gt;
&lt;br /&gt;
Input the user name and password to log in to the system.&lt;br /&gt;
* If this is the first time you are logging in to the system, the user name is administrator, and password is admin.&lt;br /&gt;
* The administrator should log in to the system and change their password first, and then he/she can create other accounts for different operators.&lt;br /&gt;
* If you try to log in to a server remotely, click on Network Setting and in the pop-up window, input the server IP address and port number.&lt;br /&gt;
&lt;br /&gt;
===Product===&lt;br /&gt;
The product panel provides a series of interfaces for product related operations, including creating license features and generating product license strategies by combining one or more license features together.&lt;br /&gt;
&lt;br /&gt;
====Feature Setting====&lt;br /&gt;
Feature setting is the most basic element to form a license for a product. For example, if the software requires a license based on expiration time, a time module shall be selected and the expiration time shall be set. This will form a license feature. If more license strategies are going to be used, more license features can be created.&lt;br /&gt;
&lt;br /&gt;
[[File:feature setting console.png|500px|alt=UniKey Console feature setting]]&lt;br /&gt;
&lt;br /&gt;
Click on Add to add a license feature in the pop-up window.&lt;br /&gt;
&lt;br /&gt;
[[File:add license feature.png|500px|alt=UniKey Console add license feature]]&lt;br /&gt;
&lt;br /&gt;
As you can see from the above picture, lots of license features can be used to build up a single product license, such as license module, memory, arithmetic, SID, max connections, partition information, etc.&lt;br /&gt;
&lt;br /&gt;
====License Module====&lt;br /&gt;
This feature limits access to the software based on rules. When the correct UniKey is connected, the software bound to the UniKey is activated.&lt;br /&gt;
&lt;br /&gt;
[[File:license module.png|thumb|left|500px|alt=UniKey Console add license feature perpetual|License Module is the most widely used feature on all UniKey devices]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
There are two ways to use the License Module. The first is to bind a module to the software, once the module is enabled, the software will start working. The second is to set the execute count, so every time when the software is started the count will decrement until the value reaches 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;A non-zero number must be set to enable the License Module. This number will not be changed unless Exe Count Mode has been selected.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Memory====&lt;br /&gt;
UniKey has 4KB of memory which allows developers to store any information, such as a software abstract, version information, buyers or developers information, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:console memory.png|500px|alt=UniKey Console writing into memory]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input the encoding in the left column.&lt;br /&gt;
* Input the start address, which refers to the start point where the content will be stored.&lt;br /&gt;
* Input the length, which refers the length of content that will be stored in memory.&lt;br /&gt;
&lt;br /&gt;
====Arithmetic ====&lt;br /&gt;
To protect your software safely, it is a good idea to write a block of code inside the UniKey device itself, therefore without the device, the software cannot run. The arithmetic option is designed for this purpose.&lt;br /&gt;
&lt;br /&gt;
[[File:console arithmetic.png|thumb|left|500px|alt=UniKey Console arithmetic feature|For the syntax and how to write an equation, please refer to the UniKey manual in the arithmetic section]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input your custom arithmetic.&lt;br /&gt;
* Input the start address, to set the start point of the arithmetic.&lt;br /&gt;
* Input the length, so that the arithmetic will end at the start address plus the length.&lt;br /&gt;
&lt;br /&gt;
====SID Range====&lt;br /&gt;
SID is another important property in UniKey that can provide effective license management and software protection. Developers can use this feature to set it so that only one key or several keys can launch a specific copy of software.&lt;br /&gt;
&lt;br /&gt;
[[File:console SID range.png|500px|alt=UniKey Console software ID generation rules]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Feature setting&amp;lt;/b&amp;gt; - In the SID generation mode, which will generate a rule for how UniKey SID codes are created, there are 4 different methods of generation:&lt;br /&gt;
* All the same: all SID burned to UniKey devices will be the same.&lt;br /&gt;
* Increment: the SID value of every UniKey device will add 1 from the initial value when burning.&lt;br /&gt;
* Decrement: the SID value of every UniKey device will decrease by 1&lt;br /&gt;
* Time/date: the SID value will be the produced from the current time/date&lt;br /&gt;
The initial value gives a starting SID value/position/number.&lt;br /&gt;
&lt;br /&gt;
====Update Tag====&lt;br /&gt;
The update tag is mainly used to update related issues. It can be used to record the number of times the software has been updated, or protect an update file from being used by other UniKey devices with a different update tag.&lt;br /&gt;
&lt;br /&gt;
[[File:console update tag.png|500px|alt=UniKey Console update tag]]&lt;br /&gt;
&lt;br /&gt;
====Max Connections====&lt;br /&gt;
Some software may employ a floating license strategy, where people on the network will share a license. The maximum number of connections can restrict the total number of users who share a license simultaneously on a local network.&lt;br /&gt;
&lt;br /&gt;
[[File:console max connections.png|500px|alt=UniKey Console number of max connections]]&lt;br /&gt;
&lt;br /&gt;
====Seed====&lt;br /&gt;
For every UniKey device, the password cannot be customized, but developers can generate their own passwords by themselves. Passwords can be generated by entering a seed value in the seed setting, and when a license is produced, the password of the device will be changed to the value calculated by the UniKey system based on this seed value.&lt;br /&gt;
&lt;br /&gt;
[[File:console seed.png|500px|alt=UniKey Console set seed]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting, input the seed value.&lt;br /&gt;
* Each UniKey dongle can only generate a new password TWICE! After this it cannot generate anymore passwords.&lt;br /&gt;
* When generating a new password, the dongle is formatted.&lt;br /&gt;
* &amp;lt;b&amp;gt;To reset the password for a 3rd time, the UniKey dongle must be sent back to SecuTech&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Partition information====&lt;br /&gt;
Each UniKey Drive device has four partitions:&lt;br /&gt;
* Virtual CD-ROM emulation drive&lt;br /&gt;
* Public partition&lt;br /&gt;
* Password protected partition&lt;br /&gt;
* Hidden partition&lt;br /&gt;
This page is used by customers to set the space for each partition on the UniKey Drive device.&lt;br /&gt;
&lt;br /&gt;
[[File:console partition information.png|500px|alt=UniKey Drive partition information]]&lt;br /&gt;
&lt;br /&gt;
====Files in hidden partition====&lt;br /&gt;
UniKey Drive has a unique hidden partition which allows users to store files. Each file stored on the hidden partition is invisible and inaccessible to end users. Vendors could integrate UniKey Drive APIs with their software and then that software will be able to access the files stored on the UniKey Drives hidden partition.&lt;br /&gt;
&lt;br /&gt;
[[File:console hidden partition files.png|500px|alt=UniKey Drive hidden partition files]]&lt;br /&gt;
&lt;br /&gt;
The files stored on the hidden partition should have the filename as an 8.3 format, for example, 12345678.123&lt;br /&gt;
&lt;br /&gt;
====Product setting====&lt;br /&gt;
Product setting is used to combine the basic license elements and features together to form a product license strategy, to help meet the different requirements of customers, businesses, and sales strategies. For each software package, decision makers can set several license strategies by selecting different license features which have been set in Feature setting, maximizing their market share and revenue. For some special requirements, a customized license can even be quickly generated.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting.png|500px|alt=UniKey Console product setting]]&lt;br /&gt;
&lt;br /&gt;
The above picture shows the Product setting panel, and to add a license for a product click on the Add button.&lt;br /&gt;
&lt;br /&gt;
After clicking on Add, this window is displayed&lt;br /&gt;
&lt;br /&gt;
[[File:console add product.png|thumb|left|500px|alt=UniKey Console add new product|The configuration will affect this product, and will not change previous Feature settings]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Input the product name; a comment can be added in the comment box, and please select the correct device type(s). In the Feature setting section, you can reset the update tag, max connections, seed, and SID generation mode by checking the respective item boxes. This provides a quick interface to modify the license settings. From the Feature list choose the preferred features from the list and click on &amp;amp;gt; to move them to the products desired features on the right. These features will combine together to form a product license.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting added.png|thumb|left|500px|alt=UniKey Console list product ID, name and any comments|Once an order has been placed on a product, this product will not be deleted]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Based on the current product, you can create a new license quickly by using the Customize function; you can then input a new name and reset values or add more features to create another license. This allows you to easily create another product with a new name and unique product ID that may share features with other products. A product can be changed by selecting the product and clicking on Edit, or can be deleted by clicking Delete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Sales===&lt;br /&gt;
The sale function will help vendors to manage their customers and orders. It contains two configurations: Customer Management and Order Setting.&lt;br /&gt;
&lt;br /&gt;
====Customer Management====&lt;br /&gt;
Customer Management will record all information about customers and their order history. If a customer wants to place an order, then this customer must be added to the customer list. Click the button Add to execute the corresponding operation.&lt;br /&gt;
&lt;br /&gt;
====Order Setting====&lt;br /&gt;
Order setting contains order related operations, such as place an order, update a product, append a new order to an existing order, edit, delete, submit and check status.&lt;br /&gt;
&lt;br /&gt;
[[File:console order management.png|500px|alt=UniKey Console order management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Production===&lt;br /&gt;
Production is mainly used for the production department, once an order has been submitted, the order will be passed to the production department, x and this order will be listed. The producer shall produce the order.&lt;br /&gt;
&lt;br /&gt;
[[File:console product management.png|500px|alt=UniKey Console production management]]&lt;br /&gt;
&lt;br /&gt;
Click on Production, and follow the instruction to finish the production procedure.&lt;br /&gt;
&lt;br /&gt;
[[File:console production progress.png|300px|alt=progress bar for production]]&lt;br /&gt;
&lt;br /&gt;
If there is an error or problem in the order, the producer shall decline the order by clicking on decline, and then the order will be sent back to sales.&lt;br /&gt;
&lt;br /&gt;
===Management===&lt;br /&gt;
Administrators shall use the Management tab to add, edit and delete users, including user name, password, and assign permission levels.&lt;br /&gt;
&lt;br /&gt;
[[File:console user management.png|500px|alt=UniKey Console user management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Device Mode==&lt;br /&gt;
Device Mode provides you a direct way to configure all parameters for your UniKey device locally or to generate a remote update file. It is suitable for altering UniKey hardware operations and property configurations directly.&lt;br /&gt;
&lt;br /&gt;
[[File:console device setting.png|500px|alt=UniKey Console device mode login screen]]&lt;br /&gt;
 &lt;br /&gt;
When you click on Check status, the status of the device connected to the local computer will be displayed in the message box. By entering the correct password, and then clicking on User logon or Vendor logon, you can log in to the device as a user or vendor to perform operations within your level of permission.&lt;br /&gt;
&lt;br /&gt;
===Configure===&lt;br /&gt;
Click on Configure on the left side of the control panel, all configuration options will be displayed in the dropdown menu:&lt;br /&gt;
* General information&lt;br /&gt;
* Memory&lt;br /&gt;
* Algorithm&lt;br /&gt;
* License and Time Module &amp;lt;em&amp;gt;(Time Module is not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* New password &amp;lt;em&amp;gt;(Available in General information when logged in as a vendor)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Encrypt/Decrypt&lt;br /&gt;
* Random number &amp;lt;em&amp;gt;(not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Format &amp;lt;em&amp;gt;(Under the Initialization tab for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Network&lt;br /&gt;
&lt;br /&gt;
[[File:console device configure.png|500px|alt=UniKey Console configure tab]]&lt;br /&gt;
&lt;br /&gt;
You can configure any properties according to your own desired licensing strategies. By clicking on the corresponding options, you can enter your required parameters.&lt;br /&gt;
&lt;br /&gt;
===General information===&lt;br /&gt;
&lt;br /&gt;
[[File:console device general information.png|500px|alt=UniKey Console general information (SID and Update Tag)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;The HID is a fixed serial number, and cannot be changed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In menu, the UniKey devices SID and Update Tag connected to your computer will show in the message box. You can change the SID and Update Tag value, by entering value in the respective input box and then clicking Write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
[[File:console device memory.png|500px|alt=UniKey Console device memory details]]&lt;br /&gt;
&lt;br /&gt;
In Memory, you can read, edit, and delete content stored in the UniKeys memory. By clicking on Read, you can read content from the UniKeys memory, and by clicking on Write, you can write all content edited by you into the UniKeys memory. To facilitate your editing, UniKey Console provides a load from file function. By clicking on Load from file, you can load content stored in a file to Console, and then write it to memory by clicking on Write. Alternatively, you can save the data which is read from the UniKeys memory to a file by clicking on Save to file.&lt;br /&gt;
&lt;br /&gt;
===Algorithm===&lt;br /&gt;
&lt;br /&gt;
[[File:console device algorithm.png|500px|UniKey Console write and run algorithms]]&lt;br /&gt;
&lt;br /&gt;
UniKey Algorithm is a very powerful method to protect your software, as this block of code is stored directly in UniKey, independent in memory from where software code is stored. Without the right permissions, this block of code cannot be written to or read by anyone. An algorithm can be typed into the Input algorithm field. You can input more than one statement in your algorithm and each statement is separated by comma.&lt;br /&gt;
&lt;br /&gt;
Input the start address to set the starting point for your algorithm, and input a length to set the end point. The end point address will be the start address plus length. Select a calculation mode, and then click on Write to write your configurations into the UniKey. If you want to run your algorithm for a test, you can initialize the variable, A, B, C, D, seed/module (depending on the selected calculation mode), and start address, and then click on Run. The result from A, B, C, and D will be displayed directly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===License Module===&lt;br /&gt;
&lt;br /&gt;
[[File:console device module.png|500px|alt=UniKey Console module settings]]&lt;br /&gt;
&lt;br /&gt;
License Module allows you to enable/disable specified modules and set the number of execution times. In the list on the right side of the console, you can see a list and module status. Click on the white triangle to check each corresponding modules parameters and status.&lt;br /&gt;
&lt;br /&gt;
[[File:Console device module options.png|thumb|left|500px|alt=UniKey Console greater module details|To enable a module, a positive number must be entered]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Click on Check to view the information and status of a device and click on Write to write your configurations.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable the auto-decrement function by toggling the check box next to Auto-decrement. To check the information in all modules, you can click on the Check All button; you can also set all modules by clicking on Write All to write all settings to device.&lt;br /&gt;
&lt;br /&gt;
===Time Module (UniKey Time Only)===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module tab.PNG|500px|alt=UniKey Console time module selections]]&lt;br /&gt;
&lt;br /&gt;
The UniKey Time has 16 time modules to work with, and you can bind any time module with your whole software, or bind just a single piece of functionality, helping to achieve a time-based licensing strategy. Clicking on Read Time reads the current time from the dongle, and the time can be set by inputting the time in the Dongle Clock field (DD-MM-YYYY format) and pressing Write Time; otherwise you can synchronize your dongle&#039;s clock with your system time by pressing Write system time to device. Clicking on the white triangle icon to the right of any time module allows you to set the details for an individual time module.&lt;br /&gt;
&lt;br /&gt;
====Set Start Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module 0 start time.PNG|500px|alt=time module duration mode (days, hours)]]&lt;br /&gt;
&lt;br /&gt;
You can utilize the current devices time or system time by clicking on Use device time or Use system time respectively. UniKey provides two different methods; expiration and duration, for you to select from (the default being duration). Inputting Duration Time indicates how long the user can use the software after it the given Start Time. &lt;br /&gt;
&lt;br /&gt;
====Set Expiration Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module expiration method.PNG|500px|alt=time module expiration time (YYYY-MM-HH-MM)]]&lt;br /&gt;
&lt;br /&gt;
If a module will never be used, you can click on Write, but if the module has been set before, then to reset the module, you must either erase the module first or check the Re-write option box. You can set more than one module at once by selecting Write All to set your modules in-batch; make sure to click Check All afterwards to check the status of all modules. Clicking on Erase All removes all settings stored each time module, please note that all modules will be initialized, so be careful when using the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New Password===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console New Password tab.PNG|500px|alt=enter a seed value to generate four new passwords]]&lt;br /&gt;
&lt;br /&gt;
UniKey does not allow users to defined passwords by themselves. The only way to change passwords is by using the password generation mechanism embedded in the UniKey Console. Please input a seed (numbers only) and click on New Password, all new passwords will be displayed in the New Password output boxes and will be recorded into the UniKey Console folder. &amp;lt;b&amp;gt;The passwords of a UniKey dongle can only be changed twice, after which they cannot be changed again.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Encrypt/Decrypt===&lt;br /&gt;
&lt;br /&gt;
[[File:console device encrypt and decrypt.png|500px|alt=UniKey Console encrypt or decrypt text]]&lt;br /&gt;
&lt;br /&gt;
Each UniKey dongle has an encrypt/decrypt function, and can store 3 keys inside each device. In the encrypt/decrypt option, you can choose the encrypt/decrypt operation, generate keys and check output.&lt;br /&gt;
From the Select Operation drop-down menu, you can choose a specific operation. For example, choosing generate key, you can choose the key you want to use and click on Run to generate a secret key for your UniKey.&lt;br /&gt;
&lt;br /&gt;
Encryt/Decrypt: to check the encrypt/decrypt result, you can choose your desired operation from the Select Operation drop-down menu. Select the key, choose the encoding, input your content (the length must be an integer multiple of 16) in the input box and then click Run, you can then see the result in the output box. To reverse the operation, you can click on &amp;amp;lt; between the input and output boxes, choose the opposite operation, and then click on Run to check the result from the output box.&lt;br /&gt;
UniKey also provides an MD5 algorithm, for you to perform checksums. You can perform the MD5 calculation by following the same procedure.&lt;br /&gt;
&lt;br /&gt;
===Random Number===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Random Number tab.PNG|500px|alt=enter a seed to generate four distinct randomly generated numbers]]&lt;br /&gt;
&lt;br /&gt;
UniKey Console provides its own random number generator. By just entering a seed (numbers only) value and clicking Run you are provided with four random numbers in Result; the numbers generated are cryptographically random.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Network===&lt;br /&gt;
&lt;br /&gt;
[[File:console device network.png|500px|alt=UniKey Console network settings]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to configure your UniKey device (PRO, Time, and Drive) in a network environment. In the first line, you can set the maximum number of users who can connect to the server simultaneously.&lt;br /&gt;
&lt;br /&gt;
====Client setting====&lt;br /&gt;
* Server IP is the servers IP address in the network. This address will guide clients to find the server in the network.&lt;br /&gt;
* Server port is the port to build communications between client and server.&lt;br /&gt;
* Time-out defines the maximum waiting period. If the client sends a request to the server, but the server does not send a response back in the set time, then the client is denied access.&lt;br /&gt;
* The default time-out period is 5 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;You can use this to control the behavior of the NetUniKey Client&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
The access mode box shows how NetUniKey Clients access the NetUniKey Server. If you set it to access by IP, NetUniKey Server accepts only ONE client per IP. If this value is set to access by process, the NetUniKey client from the same process can only be accepted once. If it is set to access by thread, NetUniKey can be accepted in any thread. Access by shared IP means all requests from a single IP will be counted as 1. To facilitate setting other devices with the same configuration, you can save your configuration information into a file, or to update a device remotely, you can generate an update file.&lt;br /&gt;
&lt;br /&gt;
Working mode specifies how the UniKey Client will operate. If this value is set to local only, the NetUniKey Client will only work with a UniKey dongle attached to a local USB port.&lt;br /&gt;
If this value is local-&amp;amp;gt;network, the UniKey Client will check for a local UniKey dongle attached to a USB port first, if this fails, it will try to search for the UniKey dongle attached to the UniKey server in the network.&lt;br /&gt;
If you set it to network only, the NetUniKey Client will only work with the UniKey dongle attached to the UniKey server. When this value is set to network-&amp;amp;gt;local, the NetUniKey client will try to connect with the UniKey dongle attached to UniKey server first, and if it fails, it will try to load a local UniKey attached to a USB port.&lt;br /&gt;
&lt;br /&gt;
Search mode sets how UniKey clients will try to find a UniKey dongle on the network. Local only is used for connecting to the server by using the server IP set in the configuration file. If it is set to local-&amp;amp;gt;broadcast, the UniKey client will try to use the information in the configuration file first, if this fails, the UniKey clients will broadcast to the local network to find the UniKey. &lt;br /&gt;
If set to broadcast-&amp;amp;gt;local, the UniKey clients will broadcast to the network first, and will try to connect to the UniKey specified in NetUniKey configuration file when they cannot find any UniKey via the broadcast. You can save this configuration file by clicking on Save, or read the previous client settings file by clicking on Read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Server setting====&lt;br /&gt;
&lt;br /&gt;
[[File:console device network server.png|thumb|left|500px|alt=UniKey Console server settings|The default port is 5680]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In this panel, you can enter the server IP, desired server port, and timeout. Enable/Disable the black and white IP list. To add an IP address to the list, click on the corresponding Add button, in the pop-up window, enter the start and end IP addresses. Or you can move an IP from the black list to white list by clicking on the &amp;amp;gt;/&amp;amp;lt; buttons.&lt;br /&gt;
* If the white list is enabled, only IP addresses in this list can access the server. If the list is empty, then no clients can access the server.&lt;br /&gt;
* The black list always has the highest priority. When the server starts, it will always check the black list first. If an IP appears in both the black and white list, the IP will be blocked.&lt;br /&gt;
&lt;br /&gt;
===File System===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File System allows you to manage the hidden and secure partition of the UniKey Drive dongle.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console file system.png|500px|alt=UniKey Drive Console file system initial window]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Hidden Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console hidden partition.png|thumb|none|500px|alt=UniKey Drive Console hidden partition login screen|The default passwords to enter the hidden partition are 12345678]]&lt;br /&gt;
&lt;br /&gt;
To enter the hidden partition, please input all four passwords to the UniKey Drive file system, then press OK. All the data stored on both the hidden and secure partitions are encrypted using a 128-bit encryption algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:unikey drive hidden partition filesystem.png|500px|alt=UniKey Drive Console hidden partition filesystem]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Secure Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console secure partition login screen.png|thumb|none|500px|alt=UniKey Drive Console secure partition login screen|The default password to enter the secure partition is 123456]]&lt;br /&gt;
&lt;br /&gt;
The secure partition is also known as the password-protected partition; customers can access it by providing the correct password.&lt;br /&gt;
&lt;br /&gt;
===Initialization===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Initialization tab for the UniKey Drive contains two parts; format and partition device memory.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization.png|500px|alt=UniKey Drive Console Initialization tab]]&lt;br /&gt;
&lt;br /&gt;
====Format====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Drive Initialization Format.png|500px|alt=UniKey Drive Console Initialization Format tab]]&lt;br /&gt;
&lt;br /&gt;
By using the Format function, customers can format the UniKey Drive&#039;s 4KB memory, SID, license modules, algorithms and update tags.&lt;br /&gt;
&lt;br /&gt;
====Partition====&lt;br /&gt;
To partition the UniKey Drive, you need to input all four passwords to log in to the Drive&#039;s filesystem. Pressing Default Password loads the default passwords automatically for you.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization partition.png|thumb|none|500px|alt=UniKey Drive Console Initialization Partition tab|The four default passwords are 12345678]]&lt;br /&gt;
&lt;br /&gt;
Device capacity is the UniKey Drive&#039;s total memory; UniKey Drives are available in 2, 4, 8, 16, and 32GB variants. An image file (ISO) is used for UniKey Drive&#039;s virtual CD-ROM partition; a user can burn their own ISO files to the Drive&#039;s virtual CD-ROM. A vendor can modify the capacity of the hidden, normal, and secure partition. Vendors need to create a password for the secure partition, so that end users are able to open the password-protected partition.&lt;br /&gt;
&lt;br /&gt;
===Generate===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate unikey update.png|500px|alt=UniKey Console read update file]]&lt;br /&gt;
&lt;br /&gt;
====Generate UniKey File====&lt;br /&gt;
UniKey file is used by the UniKey Burner tool, when a customer wants to burn the dongles in a batch by using the same configurations and settings, this file will be loaded into the UniKey Burner tool.  Pressing the Read button will load the information stored on the .uky file to the Console tool. The Generate button will create the .uky file with the dongles information/settings from the Console tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generate Update File===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate update file.png|500px|alt=UniKey Console generate update file]]&lt;br /&gt;
&lt;br /&gt;
The Update File is used by the UniKey Drive Remote Updater; it does the same thing as the UniKey Remote Update Generator does. &lt;br /&gt;
&lt;br /&gt;
The Properties to be bound box will allow the customer to bind specific HID, SID, License Modules and Update Tags to the generated .upt2 file. After binding with a specific value, the .upt2 file will check if the values stored inside of the UniKey Drive dongle are the same or not. If they are not the same, the .upt2 file will not update the UniKey Drive.&lt;br /&gt;
&lt;br /&gt;
The Property to be written box allows the customer to use the .upt2 file for updating the settings and configurations of the target UniKey Drive.&lt;br /&gt;
File password will allow the customer to set an independent password for the generated .upt2 file, and then when the end user updates their UniKey Drive by using the corresponding .upt2 file, they will need to input this password in order to access/use the .upt2 file.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=817</id>
		<title>UniKey Console Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=817"/>
		<updated>2016-08-23T00:20:41Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniKey Manuals]]&lt;br /&gt;
==&amp;lt;b&amp;gt;UniKey Console&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;User Guide&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Version 8.3&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Version&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;4.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;5.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;6.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.3&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Date&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.12&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2009.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.7&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
UniKey Console is a powerful tool to help software vendors manage their software development, license software and track their software sales performance. It can be integrated into your ERP, CRM and financial system seamlessly.&lt;br /&gt;
The UniKey Console is designed to follow the waterfall software development procedure, which helps software vendors manage their different products along its whole lifecycle. The feature based license management method is an innovative way to protect your software away from intruders and to license efficiently. &lt;br /&gt;
&lt;br /&gt;
To administrate all software, check the sales history and gather information to prepare for the following software development, UniKey Console employs a database to record information. It supports almost all database techniques available in todays market, such as SQL, MySQL, and Oracle.&lt;br /&gt;
Additionally, this Console supports multiple users logging in to the system. Different operators in different roles can logon and operate the Console utility within their personal level of permission. For example, employees from a product department can login to the Console system, and submit product orders, but they cannot see any other information about the sales department.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Deployment==&lt;br /&gt;
This section will introduce how to deploy the UniKey Console on your system. The Console has two parts, the front is a GUI which is green software and does not need any installation. Users simply copy the folder to their computer. The next step is to install a database and create tables. In the SDK we provide instructional pictures, follow the pictures to finish the MySQL installation. If no version of MySQL Server is included in the SDK, you can download the latest version from: https://dev.mysql.com/downloads/mysql/. After installing the database, click on Start, and open the MySQL Command Line Client.  Log in to the database by entering your password.&lt;br /&gt;
&lt;br /&gt;
[[File:MySQL console.png|left|500px|alt=MySQL command line client]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;Device mode does not support multiple users and will not keep operation records on the database&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
To create the required tables, input &amp;lt;code&amp;gt;&amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt; (if that does not work try the command: &amp;lt;code&amp;gt;source &amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt;) and press enter.  After the database has been successfully built, open the console GUI by double clicking on the Console icon (you may need to re-open the Console application to register any changes to the database).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UniKey Console Working Mode==&lt;br /&gt;
The UniKey Console provides two different modes for users, Manage Mode and Device Mode. The Manage Mode is mainly used to manage the whole lifecycle of your software, and allows multiple operators to logon the system to implement their operations with their own levels of permission. Device mode provides a quick way to configure parameters or generate an update file for a UniKey device.&lt;br /&gt;
&lt;br /&gt;
==Manage Mode==&lt;br /&gt;
The UniKey Console Manage Mode closely follows the software lifecycle, from the beginning of software design to the end of software development. At the design stage, software designers will separate the software into different blocks according to their functions. We highly recommend medium to large software vendors use Manage Mode to manage and license your software.&lt;br /&gt;
&lt;br /&gt;
===Login===&lt;br /&gt;
This system supports remote login. Users can set up the servers IP via the GUI, and log in to the server remotely to finish their operation. To start using the Console, double click on the UniKey Console. The login interface will pop up.&lt;br /&gt;
&lt;br /&gt;
[[File:console login.png|500px|alt=UniKey Console login page]]&lt;br /&gt;
&lt;br /&gt;
Input the user name and password to log in to the system.&lt;br /&gt;
* If this is the first time you are logging in to the system, the user name is administrator, and password is admin.&lt;br /&gt;
* The administrator should log in to the system and change their password first, and then he/she can create other accounts for different operators.&lt;br /&gt;
* If you try to log in to a server remotely, click on Network Setting and in the pop-up window, input the server IP address and port number.&lt;br /&gt;
&lt;br /&gt;
===Product===&lt;br /&gt;
The product panel provides a series of interfaces for product related operations, including creating license features and generating product license strategies by combining one or more license features together.&lt;br /&gt;
&lt;br /&gt;
====Feature Setting====&lt;br /&gt;
Feature setting is the most basic element to form a license for a product. For example, if the software requires a license based on expiration time, a time module shall be selected and the expiration time shall be set. This will form a license feature. If more license strategies are going to be used, more license features can be created.&lt;br /&gt;
&lt;br /&gt;
[[File:feature setting console.png|500px|alt=UniKey Console feature setting]]&lt;br /&gt;
&lt;br /&gt;
Click on Add to add a license feature in the pop-up window.&lt;br /&gt;
&lt;br /&gt;
[[File:add license feature.png|500px|alt=UniKey Console add license feature]]&lt;br /&gt;
&lt;br /&gt;
As you can see from the above picture, lots of license features can be used to build up a single product license, such as license module, memory, arithmetic, SID, max connections, partition information, etc.&lt;br /&gt;
&lt;br /&gt;
====License Module====&lt;br /&gt;
This feature limits access to the software based on rules. When the correct UniKey is connected, the software bound to the UniKey is activated.&lt;br /&gt;
&lt;br /&gt;
[[File:license module.png|thumb|left|500px|alt=UniKey Console add license feature perpetual|License Module is the most widely used feature on all UniKey devices]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
There are two ways to use the License Module. The first is to bind a module to the software, once the module is enabled, the software will start working. The second is to set the execute count, so every time when the software is started the count will decrement until the value reaches 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;A non-zero number must be set to enable the License Module. This number will not be changed unless Exe Count Mode has been selected.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Memory====&lt;br /&gt;
UniKey has 4KB of memory which allows developers to store any information, such as a software abstract, version information, buyers or developers information, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:console memory.png|500px|alt=UniKey Console writing into memory]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input the encoding in the left column.&lt;br /&gt;
* Input the start address, which refers to the start point where the content will be stored.&lt;br /&gt;
* Input the length, which refers the length of content that will be stored in memory.&lt;br /&gt;
&lt;br /&gt;
====Arithmetic ====&lt;br /&gt;
To protect your software safely, it is a good idea to write a block of code inside the UniKey device itself, therefore without the device, the software cannot run. The arithmetic option is designed for this purpose.&lt;br /&gt;
&lt;br /&gt;
[[File:console arithmetic.png|thumb|left|500px|alt=UniKey Console arithmetic feature|For the syntax and how to write an equation, please refer to the UniKey manual in the arithmetic section]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input your custom arithmetic.&lt;br /&gt;
* Input the start address, to set the start point of the arithmetic.&lt;br /&gt;
* Input the length, so that the arithmetic will end at the start address plus the length.&lt;br /&gt;
&lt;br /&gt;
====SID Range====&lt;br /&gt;
SID is another important property in UniKey that can provide effective license management and software protection. Developers can use this feature to set it so that only one key or several keys can launch a specific copy of software.&lt;br /&gt;
&lt;br /&gt;
[[File:console SID range.png|500px|alt=UniKey Console software ID generation rules]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Feature setting&amp;lt;/b&amp;gt; - In the SID generation mode, which will generate a rule for how UniKey SID codes are created, there are 4 different methods of generation:&lt;br /&gt;
* All the same: all SID burned to UniKey devices will be the same.&lt;br /&gt;
* Increment: the SID value of every UniKey device will add 1 from the initial value when burning.&lt;br /&gt;
* Decrement: the SID value of every UniKey device will decrease by 1&lt;br /&gt;
* Time/date: the SID value will be the produced from the current time/date&lt;br /&gt;
The initial value gives a starting SID value/position/number.&lt;br /&gt;
&lt;br /&gt;
====Update Tag====&lt;br /&gt;
The update tag is mainly used to update related issues. It can be used to record the number of times the software has been updated, or protect an update file from being used by other UniKey devices with a different update tag.&lt;br /&gt;
&lt;br /&gt;
[[File:console update tag.png|500px|alt=UniKey Console update tag]]&lt;br /&gt;
&lt;br /&gt;
====Max Connections====&lt;br /&gt;
Some software may employ a floating license strategy, where people on the network will share a license. The maximum number of connections can restrict the total number of users who share a license simultaneously on a local network.&lt;br /&gt;
&lt;br /&gt;
[[File:console max connections.png|500px|alt=UniKey Console number of max connections]]&lt;br /&gt;
&lt;br /&gt;
====Seed====&lt;br /&gt;
For every UniKey device, the password cannot be customized, but developers can generate their own passwords by themselves. Passwords can be generated by entering a seed value in the seed setting, and when a license is produced, the password of the device will be changed to the value calculated by the UniKey system based on this seed value.&lt;br /&gt;
&lt;br /&gt;
[[File:console seed.png|500px|alt=UniKey Console set seed]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting, input the seed value.&lt;br /&gt;
* Each UniKey dongle can only generate a new password TWICE! After this it cannot generate anymore passwords.&lt;br /&gt;
* When generating a new password, the dongle is formatted.&lt;br /&gt;
* &amp;lt;b&amp;gt;To reset the password for a 3rd time, the UniKey dongle must be sent back to SecuTech&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Partition information====&lt;br /&gt;
Each UniKey Drive device has four partitions:&lt;br /&gt;
* Virtual CD-ROM emulation drive&lt;br /&gt;
* Public partition&lt;br /&gt;
* Password protected partition&lt;br /&gt;
* Hidden partition&lt;br /&gt;
This page is used by customers to set the space for each partition on the UniKey Drive device.&lt;br /&gt;
&lt;br /&gt;
[[File:console partition information.png|500px|alt=UniKey Drive partition information]]&lt;br /&gt;
&lt;br /&gt;
====Files in hidden partition====&lt;br /&gt;
UniKey Drive has a unique hidden partition which allows users to store files. Each file stored on the hidden partition is invisible and inaccessible to end users. Vendors could integrate UniKey Drive APIs with their software and then that software will be able to access the files stored on the UniKey Drives hidden partition.&lt;br /&gt;
&lt;br /&gt;
[[File:console hidden partition files.png|500px|alt=UniKey Drive hidden partition files]]&lt;br /&gt;
&lt;br /&gt;
The files stored on the hidden partition should have the filename as an 8.3 format, for example, 12345678.123&lt;br /&gt;
&lt;br /&gt;
====Product setting====&lt;br /&gt;
Product setting is used to combine the basic license elements and features together to form a product license strategy, to help meet the different requirements of customers, businesses, and sales strategies. For each software package, decision makers can set several license strategies by selecting different license features which have been set in Feature setting, maximizing their market share and revenue. For some special requirements, a customized license can even be quickly generated.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting.png|500px|alt=UniKey Console product setting]]&lt;br /&gt;
&lt;br /&gt;
The above picture shows the Product setting panel, and to add a license for a product click on the Add button.&lt;br /&gt;
&lt;br /&gt;
After clicking on Add, this window is displayed&lt;br /&gt;
&lt;br /&gt;
[[File:console add product.png|thumb|left|500px|alt=UniKey Console add new product|The configuration will affect this product, and will not change previous Feature settings]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Input the product name; a comment can be added in the comment box, and please select the correct device type(s). In the Feature setting section, you can reset the update tag, max connections, seed, and SID generation mode by checking the respective item boxes. This provides a quick interface to modify the license settings. From the Feature list choose the preferred features from the list and click on &amp;amp;gt; to move them to the products desired features on the right. These features will combine together to form a product license.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting added.png|thumb|left|500px|alt=UniKey Console list product ID, name and any comments|Once an order has been placed on a product, this product will not be deleted]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Based on the current product, you can create a new license quickly by using the Customize function; you can then input a new name and reset values or add more features to create another license. This allows you to easily create another product with a new name and unique product ID that may share features with other products. A product can be changed by selecting the product and clicking on Edit, or can be deleted by clicking Delete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Sales===&lt;br /&gt;
The sale function will help vendors to manage their customers and orders. It contains two configurations: Customer Management and Order Setting.&lt;br /&gt;
&lt;br /&gt;
====Customer Management====&lt;br /&gt;
Customer Management will record all information about customers and their order history. If a customer wants to place an order, then this customer must be added to the customer list. Click the button Add to execute the corresponding operation.&lt;br /&gt;
&lt;br /&gt;
====Order Setting====&lt;br /&gt;
Order setting contains order related operations, such as place an order, update a product, append a new order to an existing order, edit, delete, submit and check status.&lt;br /&gt;
&lt;br /&gt;
[[File:console order management.png|500px|alt=UniKey Console order management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Production===&lt;br /&gt;
Production is mainly used for the production department, once an order has been submitted, the order will be passed to the production department, x and this order will be listed. The producer shall produce the order.&lt;br /&gt;
&lt;br /&gt;
[[File:console product management.png|500px|alt=UniKey Console production management]]&lt;br /&gt;
&lt;br /&gt;
Click on Production, and follow the instruction to finish the production procedure.&lt;br /&gt;
&lt;br /&gt;
[[File:console production progress.png|300px|alt=progress bar for production]]&lt;br /&gt;
&lt;br /&gt;
If there is an error or problem in the order, the producer shall decline the order by clicking on decline, and then the order will be sent back to sales.&lt;br /&gt;
&lt;br /&gt;
===Management===&lt;br /&gt;
Administrators shall use the Management tab to add, edit and delete users, including user name, password, and assign permission levels.&lt;br /&gt;
&lt;br /&gt;
[[File:console user management.png|500px|alt=UniKey Console user management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Device Mode==&lt;br /&gt;
Device Mode provides you a direct way to configure all parameters for your UniKey device locally or to generate a remote update file. It is suitable for altering UniKey hardware operations and property configurations directly.&lt;br /&gt;
&lt;br /&gt;
[[File:console device setting.png|500px|alt=UniKey Console device mode login screen]]&lt;br /&gt;
 &lt;br /&gt;
When you click on Check status, the status of the device connected to the local computer will be displayed in the message box. By entering the correct password, and then clicking on User logon or Vendor logon, you can log in to the device as a user or vendor to perform operations within your level of permission.&lt;br /&gt;
&lt;br /&gt;
===Configure===&lt;br /&gt;
Click on Configure on the left side of the control panel, all configuration options will be displayed in the dropdown menu:&lt;br /&gt;
* General information&lt;br /&gt;
* Memory&lt;br /&gt;
* Algorithm&lt;br /&gt;
* License and Time Module &amp;lt;em&amp;gt;(Time Module is not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* New password &amp;lt;em&amp;gt;(Available in General information when logged in as a vendor)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Encrypt/Decrypt&lt;br /&gt;
* Random number &amp;lt;em&amp;gt;(not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Format &amp;lt;em&amp;gt;(Under the Initialization tab for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Network&lt;br /&gt;
&lt;br /&gt;
[[File:console device configure.png|500px|alt=UniKey Console configure tab]]&lt;br /&gt;
&lt;br /&gt;
You can configure any properties according to your own desired licensing strategies. By clicking on the corresponding options, you can enter your required parameters.&lt;br /&gt;
&lt;br /&gt;
===General information===&lt;br /&gt;
&lt;br /&gt;
[[File:console device general information.png|500px|alt=UniKey Console general information (SID and Update Tag)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;The HID is a fixed serial number, and cannot be changed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In menu, the UniKey devices SID and Update Tag connected to your computer will show in the message box. You can change the SID and Update Tag value, by entering value in the respective input box and then clicking Write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
[[File:console device memory.png|500px|alt=UniKey Console device memory details]]&lt;br /&gt;
&lt;br /&gt;
In Memory, you can read, edit, and delete content stored in the UniKeys memory. By clicking on Read, you can read content from the UniKeys memory, and by clicking on Write, you can write all content edited by you into the UniKeys memory. To facilitate your editing, UniKey Console provides a load from file function. By clicking on Load from file, you can load content stored in a file to Console, and then write it to memory by clicking on Write. Alternatively, you can save the data which is read from the UniKeys memory to a file by clicking on Save to file.&lt;br /&gt;
&lt;br /&gt;
===Algorithm===&lt;br /&gt;
&lt;br /&gt;
[[File:console device algorithm.png|500px|UniKey Console write and run algorithms]]&lt;br /&gt;
&lt;br /&gt;
UniKey Algorithm is a very powerful method to protect your software, as this block of code is stored directly in UniKey, independent in memory from where software code is stored. Without the right permissions, this block of code cannot be written to or read by anyone. An algorithm can be typed into the Input algorithm field. You can input more than one statement in your algorithm and each statement is separated by comma.&lt;br /&gt;
&lt;br /&gt;
Input the start address to set the starting point for your algorithm, and input a length to set the end point. The end point address will be the start address plus length. Select a calculation mode, and then click on Write to write your configurations into the UniKey. If you want to run your algorithm for a test, you can initialize the variable, A, B, C, D, seed/module (depending on the selected calculation mode), and start address, and then click on Run. The result from A, B, C, and D will be displayed directly.&lt;br /&gt;
&lt;br /&gt;
===License Module===&lt;br /&gt;
&lt;br /&gt;
[[File:console device module.png|500px|alt=UniKey Console module settings]]&lt;br /&gt;
&lt;br /&gt;
License Module allows you to enable/disable specified modules and set the number of execution times. In the list on the right side of the console, you can see a list and module status. Click on the white triangle to check each corresponding modules parameters and status.&lt;br /&gt;
&lt;br /&gt;
[[File:Console device module options.png|thumb|left|500px|alt=UniKey Console greater module details|To enable a module, a positive number must be entered]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Click on Check to view the information and status of a device and click on Write to write your configurations.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable the auto-decrement function by toggling the check box next to Auto-decrement. To check the information in all modules, you can click on the Check All button; you can also set all modules by clicking on Write All to write all settings to device.&lt;br /&gt;
&lt;br /&gt;
===Time Module (UniKey Time Only)===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module tab.PNG|500px|alt=UniKey Console time module selections]]&lt;br /&gt;
&lt;br /&gt;
The UniKey Time has 16 time modules to work with, and you can bind any time module with your whole software, or bind just a single piece of functionality, helping to achieve a time-based licensing strategy. Clicking on Read Time reads the current time from the dongle, and the time can be set by inputting the time in the Dongle Clock field (DD-MM-YYYY format) and pressing Write Time; otherwise you can synchronize your dongle&#039;s clock with your system time by pressing Write system time to device. Clicking on the white triangle icon to the right of any time module allows you to set the details for an individual time module.&lt;br /&gt;
&lt;br /&gt;
====Set Start Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module 0 start time.PNG|500px|alt=time module duration mode (days, hours)]]&lt;br /&gt;
&lt;br /&gt;
You can utilize the current devices time or system time by clicking on Use device time or Use system time respectively. UniKey provides two different methods; expiration and duration, for you to select from (the default being duration). Inputting Duration Time indicates how long the user can use the software after it the given Start Time. &lt;br /&gt;
&lt;br /&gt;
====Set Expiration Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module expiration method.PNG|500px|alt=time module expiration time (YYYY-MM-HH-MM)]]&lt;br /&gt;
&lt;br /&gt;
If a module will never be used, you can click on Write, but if the module has been set before, then to reset the module, you must either erase the module first or check the Re-write option box. You can set more than one module at once by selecting Write All to set your modules in-batch; make sure to click Check All afterwards to check the status of all modules. Clicking on Erase All removes all settings stored each time module, please note that all modules will be initialized, so be careful when using the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New Password===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console New Password tab.PNG|500px|alt=enter a seed value to generate four new passwords]]&lt;br /&gt;
&lt;br /&gt;
UniKey does not allow users to defined passwords by themselves. The only way to change passwords is by using the password generation mechanism embedded in the UniKey Console. Please input a seed (numbers only) and click on New Password, all new passwords will be displayed in the New Password output boxes and will be recorded into the UniKey Console folder. &amp;lt;b&amp;gt;The passwords of a UniKey dongle can only be changed twice, after which they cannot be changed again.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Encrypt/Decrypt===&lt;br /&gt;
&lt;br /&gt;
[[File:console device encrypt and decrypt.png|500px|alt=UniKey Console encrypt or decrypt text]]&lt;br /&gt;
&lt;br /&gt;
Each UniKey dongle has an encrypt/decrypt function, and can store 3 keys inside each device. In the encrypt/decrypt option, you can choose the encrypt/decrypt operation, generate keys and check output.&lt;br /&gt;
From the Select Operation drop-down menu, you can choose a specific operation. For example, choosing generate key, you can choose the key you want to use and click on Run to generate a secret key for your UniKey.&lt;br /&gt;
&lt;br /&gt;
Encryt/Decrypt: to check the encrypt/decrypt result, you can choose your desired operation from the Select Operation drop-down menu. Select the key, choose the encoding, input your content (the length must be an integer multiple of 16) in the input box and then click Run, you can then see the result in the output box. To reverse the operation, you can click on &amp;amp;lt; between the input and output boxes, choose the opposite operation, and then click on Run to check the result from the output box.&lt;br /&gt;
UniKey also provides an MD5 algorithm, for you to perform checksums. You can perform the MD5 calculation by following the same procedure.&lt;br /&gt;
&lt;br /&gt;
===Random Number===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Random Number tab.PNG|500px|alt=enter a seed to generate four distinct randomly generated numbers]]&lt;br /&gt;
&lt;br /&gt;
UniKey Console provides its own random number generator. By just entering a seed (numbers only) value and clicking Run you are provided with four random numbers in Result; the numbers generated are cryptographically random.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Network===&lt;br /&gt;
&lt;br /&gt;
[[File:console device network.png|500px|alt=UniKey Console network settings]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to configure your UniKey device (PRO, Time, and Drive) in a network environment. In the first line, you can set the maximum number of users who can connect to the server simultaneously.&lt;br /&gt;
&lt;br /&gt;
====Client setting====&lt;br /&gt;
* Server IP is the servers IP address in the network. This address will guide clients to find the server in the network.&lt;br /&gt;
* Server port is the port to build communications between client and server.&lt;br /&gt;
* Time-out defines the maximum waiting period. If the client sends a request to the server, but the server does not send a response back in the set time, then the client is denied access.&lt;br /&gt;
* The default time-out period is 5 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;You can use this to control the behavior of the NetUniKey Client&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
The access mode box shows how NetUniKey Clients access the NetUniKey Server. If you set it to access by IP, NetUniKey Server accepts only ONE client per IP. If this value is set to access by process, the NetUniKey client from the same process can only be accepted once. If it is set to access by thread, NetUniKey can be accepted in any thread. Access by shared IP means all requests from a single IP will be counted as 1. To facilitate setting other devices with the same configuration, you can save your configuration information into a file, or to update a device remotely, you can generate an update file.&lt;br /&gt;
&lt;br /&gt;
Working mode specifies how the UniKey Client will operate. If this value is set to local only, the NetUniKey Client will only work with a UniKey dongle attached to a local USB port.&lt;br /&gt;
If this value is local-&amp;amp;gt;network, the UniKey Client will check for a local UniKey dongle attached to a USB port first, if this fails, it will try to search for the UniKey dongle attached to the UniKey server in the network.&lt;br /&gt;
If you set it to network only, the NetUniKey Client will only work with the UniKey dongle attached to the UniKey server. When this value is set to network-&amp;amp;gt;local, the NetUniKey client will try to connect with the UniKey dongle attached to UniKey server first, and if it fails, it will try to load a local UniKey attached to a USB port.&lt;br /&gt;
&lt;br /&gt;
Search mode sets how UniKey clients will try to find a UniKey dongle on the network. Local only is used for connecting to the server by using the server IP set in the configuration file. If it is set to local-&amp;amp;gt;broadcast, the UniKey client will try to use the information in the configuration file first, if this fails, the UniKey clients will broadcast to the local network to find the UniKey. &lt;br /&gt;
If set to broadcast-&amp;amp;gt;local, the UniKey clients will broadcast to the network first, and will try to connect to the UniKey specified in NetUniKey configuration file when they cannot find any UniKey via the broadcast. You can save this configuration file by clicking on Save, or read the previous client settings file by clicking on Read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Server setting====&lt;br /&gt;
&lt;br /&gt;
[[File:console device network server.png|thumb|left|500px|alt=UniKey Console server settings|The default port is 5680]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In this panel, you can enter the server IP, desired server port, and timeout. Enable/Disable the black and white IP list. To add an IP address to the list, click on the corresponding Add button, in the pop-up window, enter the start and end IP addresses. Or you can move an IP from the black list to white list by clicking on the &amp;amp;gt;/&amp;amp;lt; buttons.&lt;br /&gt;
* If the white list is enabled, only IP addresses in this list can access the server. If the list is empty, then no clients can access the server.&lt;br /&gt;
* The black list always has the highest priority. When the server starts, it will always check the black list first. If an IP appears in both the black and white list, the IP will be blocked.&lt;br /&gt;
&lt;br /&gt;
===File System===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File System allows you to manage the hidden and secure partition of the UniKey Drive dongle.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console file system.png|500px|alt=UniKey Drive Console file system initial window]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Hidden Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console hidden partition.png|thumb|none|500px|alt=UniKey Drive Console hidden partition login screen|The default passwords to enter the hidden partition are 12345678]]&lt;br /&gt;
&lt;br /&gt;
To enter the hidden partition, please input all four passwords to the UniKey Drive file system, then press OK. All the data stored on both the hidden and secure partitions are encrypted using a 128-bit encryption algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:unikey drive hidden partition filesystem.png|500px|alt=UniKey Drive Console hidden partition filesystem]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Secure Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console secure partition login screen.png|thumb|none|500px|alt=UniKey Drive Console secure partition login screen|The default password to enter the secure partition is 123456]]&lt;br /&gt;
&lt;br /&gt;
The secure partition is also known as the password-protected partition; customers can access it by providing the correct password.&lt;br /&gt;
&lt;br /&gt;
===Initialization===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Initialization tab for the UniKey Drive contains two parts; format and partition device memory.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization.png|500px|alt=UniKey Drive Console Initialization tab]]&lt;br /&gt;
&lt;br /&gt;
====Format====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Drive Initialization Format.png|500px|alt=UniKey Drive Console Initialization Format tab]]&lt;br /&gt;
&lt;br /&gt;
By using the Format function, customers can format the UniKey Drive&#039;s 4KB memory, SID, license modules, algorithms and update tags.&lt;br /&gt;
&lt;br /&gt;
====Partition====&lt;br /&gt;
To partition the UniKey Drive, you need to input all four passwords to log in to the Drive&#039;s filesystem. Pressing Default Password loads the default passwords automatically for you.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization partition.png|thumb|none|500px|alt=UniKey Drive Console Initialization Partition tab|The four default passwords are 12345678]]&lt;br /&gt;
&lt;br /&gt;
Device capacity is the UniKey Drive&#039;s total memory; UniKey Drives are available in 2, 4, 8, 16, and 32GB variants. An image file (ISO) is used for UniKey Drive&#039;s virtual CD-ROM partition; a user can burn their own ISO files to the Drive&#039;s virtual CD-ROM. A vendor can modify the capacity of the hidden, normal, and secure partition. Vendors need to create a password for the secure partition, so that end users are able to open the password-protected partition.&lt;br /&gt;
&lt;br /&gt;
===Generate===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate unikey update.png|500px|alt=UniKey Console read update file]]&lt;br /&gt;
&lt;br /&gt;
====Generate UniKey File====&lt;br /&gt;
UniKey file is used by the UniKey Burner tool, when a customer wants to burn the dongles in a batch by using the same configurations and settings, this file will be loaded into the UniKey Burner tool.  Pressing the Read button will load the information stored on the .uky file to the Console tool. The Generate button will create the .uky file with the dongles information/settings from the Console tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generate Update File===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate update file.png|500px|alt=UniKey Console generate update file]]&lt;br /&gt;
&lt;br /&gt;
The Update File is used by the UniKey Drive Remote Updater; it does the same thing as the UniKey Remote Update Generator does. &lt;br /&gt;
&lt;br /&gt;
The Properties to be bound box will allow the customer to bind specific HID, SID, License Modules and Update Tags to the generated .upt2 file. After binding with a specific value, the .upt2 file will check if the values stored inside of the UniKey Drive dongle are the same or not. If they are not the same, the .upt2 file will not update the UniKey Drive.&lt;br /&gt;
&lt;br /&gt;
The Property to be written box allows the customer to use the .upt2 file for updating the settings and configurations of the target UniKey Drive.&lt;br /&gt;
File password will allow the customer to set an independent password for the generated .upt2 file, and then when the end user updates their UniKey Drive by using the corresponding .upt2 file, they will need to input this password in order to access/use the .upt2 file.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=816</id>
		<title>UniKey Console Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniKey_Console_Tool&amp;diff=816"/>
		<updated>2016-08-23T00:18:10Z</updated>

		<summary type="html">&lt;p&gt;Bao: /* Device Mode */  Added Time Module, New Password and Random Number&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniKey Manuals]]&lt;br /&gt;
==&amp;lt;b&amp;gt;UniKey Console&amp;lt;/b&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;User Guide&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Version 8.3&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Version&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;4.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;5.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;6.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;7.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;8.3&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;background-color: red;&amp;quot;&amp;gt;&amp;lt;b style=&amp;quot;color: #fff;&amp;quot;&amp;gt;Date&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2006.12&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2007.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2008.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2009.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2010.9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.3&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2012.4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2016.7&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
UniKey Console is a powerful tool to help software vendors manage their software development, license software and track their software sales performance. It can be integrated into your ERP, CRM and financial system seamlessly.&lt;br /&gt;
The UniKey Console is designed to follow the waterfall software development procedure, which helps software vendors manage their different products along its whole lifecycle. The feature based license management method is an innovative way to protect your software away from intruders and to license efficiently. &lt;br /&gt;
&lt;br /&gt;
To administrate all software, check the sales history and gather information to prepare for the following software development, UniKey Console employs a database to record information. It supports almost all database techniques available in todays market, such as SQL, MySQL, and Oracle.&lt;br /&gt;
Additionally, this Console supports multiple users logging in to the system. Different operators in different roles can logon and operate the Console utility within their personal level of permission. For example, employees from a product department can login to the Console system, and submit product orders, but they cannot see any other information about the sales department.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Deployment==&lt;br /&gt;
This section will introduce how to deploy the UniKey Console on your system. The Console has two parts, the front is a GUI which is green software and does not need any installation. Users simply copy the folder to their computer. The next step is to install a database and create tables. In the SDK we provide instructional pictures, follow the pictures to finish the MySQL installation. If no version of MySQL Server is included in the SDK, you can download the latest version from: https://dev.mysql.com/downloads/mysql/. After installing the database, click on Start, and open the MySQL Command Line Client.  Log in to the database by entering your password.&lt;br /&gt;
&lt;br /&gt;
[[File:MySQL console.png|left|500px|alt=MySQL command line client]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;Device mode does not support multiple users and will not keep operation records on the database&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
To create the required tables, input &amp;lt;code&amp;gt;&amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt; (if that does not work try the command: &amp;lt;code&amp;gt;source &amp;quot;source file directory&amp;quot;\createconsoletables.sql&amp;lt;/code&amp;gt;) and press enter.  After the database has been successfully built, open the console GUI by double clicking on the Console icon (you may need to re-open the Console application to register any changes to the database).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UniKey Console Working Mode==&lt;br /&gt;
The UniKey Console provides two different modes for users, Manage Mode and Device Mode. The Manage Mode is mainly used to manage the whole lifecycle of your software, and allows multiple operators to logon the system to implement their operations with their own levels of permission. Device mode provides a quick way to configure parameters or generate an update file for a UniKey device.&lt;br /&gt;
&lt;br /&gt;
==Manage Mode==&lt;br /&gt;
The UniKey Console Manage Mode closely follows the software lifecycle, from the beginning of software design to the end of software development. At the design stage, software designers will separate the software into different blocks according to their functions. We highly recommend medium to large software vendors use Manage Mode to manage and license your software.&lt;br /&gt;
&lt;br /&gt;
===Login===&lt;br /&gt;
This system supports remote login. Users can set up the servers IP via the GUI, and log in to the server remotely to finish their operation. To start using the Console, double click on the UniKey Console. The login interface will pop up.&lt;br /&gt;
&lt;br /&gt;
[[File:console login.png|500px|alt=UniKey Console login page]]&lt;br /&gt;
&lt;br /&gt;
Input the user name and password to log in to the system.&lt;br /&gt;
* If this is the first time you are logging in to the system, the user name is administrator, and password is admin.&lt;br /&gt;
* The administrator should log in to the system and change their password first, and then he/she can create other accounts for different operators.&lt;br /&gt;
* If you try to log in to a server remotely, click on Network Setting and in the pop-up window, input the server IP address and port number.&lt;br /&gt;
&lt;br /&gt;
===Product===&lt;br /&gt;
The product panel provides a series of interfaces for product related operations, including creating license features and generating product license strategies by combining one or more license features together.&lt;br /&gt;
&lt;br /&gt;
====Feature Setting====&lt;br /&gt;
Feature setting is the most basic element to form a license for a product. For example, if the software requires a license based on expiration time, a time module shall be selected and the expiration time shall be set. This will form a license feature. If more license strategies are going to be used, more license features can be created.&lt;br /&gt;
&lt;br /&gt;
[[File:feature setting console.png|500px|alt=UniKey Console feature setting]]&lt;br /&gt;
&lt;br /&gt;
Click on Add to add a license feature in the pop-up window.&lt;br /&gt;
&lt;br /&gt;
[[File:add license feature.png|500px|alt=UniKey Console add license feature]]&lt;br /&gt;
&lt;br /&gt;
As you can see from the above picture, lots of license features can be used to build up a single product license, such as license module, memory, arithmetic, SID, max connections, partition information, etc.&lt;br /&gt;
&lt;br /&gt;
====License Module====&lt;br /&gt;
This feature limits access to the software based on rules. When the correct UniKey is connected, the software bound to the UniKey is activated.&lt;br /&gt;
&lt;br /&gt;
[[File:license module.png|thumb|left|500px|alt=UniKey Console add license feature perpetual|License Module is the most widely used feature on all UniKey devices]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
There are two ways to use the License Module. The first is to bind a module to the software, once the module is enabled, the software will start working. The second is to set the execute count, so every time when the software is started the count will decrement until the value reaches 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;A non-zero number must be set to enable the License Module. This number will not be changed unless Exe Count Mode has been selected.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Memory====&lt;br /&gt;
UniKey has 4KB of memory which allows developers to store any information, such as a software abstract, version information, buyers or developers information, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:console memory.png|500px|alt=UniKey Console writing into memory]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input the encoding in the left column.&lt;br /&gt;
* Input the start address, which refers to the start point where the content will be stored.&lt;br /&gt;
* Input the length, which refers the length of content that will be stored in memory.&lt;br /&gt;
&lt;br /&gt;
====Arithmetic ====&lt;br /&gt;
To protect your software safely, it is a good idea to write a block of code inside the UniKey device itself, therefore without the device, the software cannot run. The arithmetic option is designed for this purpose.&lt;br /&gt;
&lt;br /&gt;
[[File:console arithmetic.png|thumb|left|500px|alt=UniKey Console arithmetic feature|For the syntax and how to write an equation, please refer to the UniKey manual in the arithmetic section]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In the feature setting:&lt;br /&gt;
* Input your custom arithmetic.&lt;br /&gt;
* Input the start address, to set the start point of the arithmetic.&lt;br /&gt;
* Input the length, so that the arithmetic will end at the start address plus the length.&lt;br /&gt;
&lt;br /&gt;
====SID Range====&lt;br /&gt;
SID is another important property in UniKey that can provide effective license management and software protection. Developers can use this feature to set it so that only one key or several keys can launch a specific copy of software.&lt;br /&gt;
&lt;br /&gt;
[[File:console SID range.png|500px|alt=UniKey Console software ID generation rules]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Feature setting&amp;lt;/b&amp;gt; - In the SID generation mode, which will generate a rule for how UniKey SID codes are created, there are 4 different methods of generation:&lt;br /&gt;
* All the same: all SID burned to UniKey devices will be the same.&lt;br /&gt;
* Increment: the SID value of every UniKey device will add 1 from the initial value when burning.&lt;br /&gt;
* Decrement: the SID value of every UniKey device will decrease by 1&lt;br /&gt;
* Time/date: the SID value will be the produced from the current time/date&lt;br /&gt;
The initial value gives a starting SID value/position/number.&lt;br /&gt;
&lt;br /&gt;
====Update Tag====&lt;br /&gt;
The update tag is mainly used to update related issues. It can be used to record the number of times the software has been updated, or protect an update file from being used by other UniKey devices with a different update tag.&lt;br /&gt;
&lt;br /&gt;
[[File:console update tag.png|500px|alt=UniKey Console update tag]]&lt;br /&gt;
&lt;br /&gt;
====Max Connections====&lt;br /&gt;
Some software may employ a floating license strategy, where people on the network will share a license. The maximum number of connections can restrict the total number of users who share a license simultaneously on a local network.&lt;br /&gt;
&lt;br /&gt;
[[File:console max connections.png|500px|alt=UniKey Console number of max connections]]&lt;br /&gt;
&lt;br /&gt;
====Seed====&lt;br /&gt;
For every UniKey device, the password cannot be customized, but developers can generate their own passwords by themselves. Passwords can be generated by entering a seed value in the seed setting, and when a license is produced, the password of the device will be changed to the value calculated by the UniKey system based on this seed value.&lt;br /&gt;
&lt;br /&gt;
[[File:console seed.png|500px|alt=UniKey Console set seed]]&lt;br /&gt;
&lt;br /&gt;
In the feature setting, input the seed value.&lt;br /&gt;
* Each UniKey dongle can only generate a new password TWICE! After this it cannot generate anymore passwords.&lt;br /&gt;
* When generating a new password, the dongle is formatted.&lt;br /&gt;
* &amp;lt;b&amp;gt;To reset the password for a 3rd time, the UniKey dongle must be sent back to SecuTech&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Partition information====&lt;br /&gt;
Each UniKey Drive device has four partitions:&lt;br /&gt;
* Virtual CD-ROM emulation drive&lt;br /&gt;
* Public partition&lt;br /&gt;
* Password protected partition&lt;br /&gt;
* Hidden partition&lt;br /&gt;
This page is used by customers to set the space for each partition on the UniKey Drive device.&lt;br /&gt;
&lt;br /&gt;
[[File:console partition information.png|500px|alt=UniKey Drive partition information]]&lt;br /&gt;
&lt;br /&gt;
====Files in hidden partition====&lt;br /&gt;
UniKey Drive has a unique hidden partition which allows users to store files. Each file stored on the hidden partition is invisible and inaccessible to end users. Vendors could integrate UniKey Drive APIs with their software and then that software will be able to access the files stored on the UniKey Drives hidden partition.&lt;br /&gt;
&lt;br /&gt;
[[File:console hidden partition files.png|500px|alt=UniKey Drive hidden partition files]]&lt;br /&gt;
&lt;br /&gt;
The files stored on the hidden partition should have the filename as an 8.3 format, for example, 12345678.123&lt;br /&gt;
&lt;br /&gt;
====Product setting====&lt;br /&gt;
Product setting is used to combine the basic license elements and features together to form a product license strategy, to help meet the different requirements of customers, businesses, and sales strategies. For each software package, decision makers can set several license strategies by selecting different license features which have been set in Feature setting, maximizing their market share and revenue. For some special requirements, a customized license can even be quickly generated.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting.png|500px|alt=UniKey Console product setting]]&lt;br /&gt;
&lt;br /&gt;
The above picture shows the Product setting panel, and to add a license for a product click on the Add button.&lt;br /&gt;
&lt;br /&gt;
After clicking on Add, this window is displayed&lt;br /&gt;
&lt;br /&gt;
[[File:console add product.png|thumb|left|500px|alt=UniKey Console add new product|The configuration will affect this product, and will not change previous Feature settings]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Input the product name; a comment can be added in the comment box, and please select the correct device type(s). In the Feature setting section, you can reset the update tag, max connections, seed, and SID generation mode by checking the respective item boxes. This provides a quick interface to modify the license settings. From the Feature list choose the preferred features from the list and click on &amp;amp;gt; to move them to the products desired features on the right. These features will combine together to form a product license.&lt;br /&gt;
&lt;br /&gt;
[[File:console product setting added.png|thumb|left|500px|alt=UniKey Console list product ID, name and any comments|Once an order has been placed on a product, this product will not be deleted]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Based on the current product, you can create a new license quickly by using the Customize function; you can then input a new name and reset values or add more features to create another license. This allows you to easily create another product with a new name and unique product ID that may share features with other products. A product can be changed by selecting the product and clicking on Edit, or can be deleted by clicking Delete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;page-break-before:always&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Sales===&lt;br /&gt;
The sale function will help vendors to manage their customers and orders. It contains two configurations: Customer Management and Order Setting.&lt;br /&gt;
&lt;br /&gt;
====Customer Management====&lt;br /&gt;
Customer Management will record all information about customers and their order history. If a customer wants to place an order, then this customer must be added to the customer list. Click the button Add to execute the corresponding operation.&lt;br /&gt;
&lt;br /&gt;
====Order Setting====&lt;br /&gt;
Order setting contains order related operations, such as place an order, update a product, append a new order to an existing order, edit, delete, submit and check status.&lt;br /&gt;
&lt;br /&gt;
[[File:console order management.png|500px|alt=UniKey Console order management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Production===&lt;br /&gt;
Production is mainly used for the production department, once an order has been submitted, the order will be passed to the production department, x and this order will be listed. The producer shall produce the order.&lt;br /&gt;
&lt;br /&gt;
[[File:console product management.png|500px|alt=UniKey Console production management]]&lt;br /&gt;
&lt;br /&gt;
Click on Production, and follow the instruction to finish the production procedure.&lt;br /&gt;
&lt;br /&gt;
[[File:console production progress.png|300px|alt=progress bar for production]]&lt;br /&gt;
&lt;br /&gt;
If there is an error or problem in the order, the producer shall decline the order by clicking on decline, and then the order will be sent back to sales.&lt;br /&gt;
&lt;br /&gt;
===Management===&lt;br /&gt;
Administrators shall use the Management tab to add, edit and delete users, including user name, password, and assign permission levels.&lt;br /&gt;
&lt;br /&gt;
[[File:console user management.png|500px|alt=UniKey Console user management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Device Mode==&lt;br /&gt;
Device Mode provides you a direct way to configure all parameters for your UniKey device locally or to generate a remote update file. It is suitable for altering UniKey hardware operations and property configurations directly.&lt;br /&gt;
&lt;br /&gt;
[[File:console device setting.png|500px|alt=UniKey Console device mode login screen]]&lt;br /&gt;
 &lt;br /&gt;
When you click on Check status, the status of the device connected to the local computer will be displayed in the message box. By entering the correct password, and then clicking on User logon or Vendor logon, you can log in to the device as a user or vendor to perform operations within your level of permission.&lt;br /&gt;
&lt;br /&gt;
===Configure===&lt;br /&gt;
Click on Configure on the left side of the control panel, all configuration options will be displayed in the dropdown menu:&lt;br /&gt;
* General information&lt;br /&gt;
* Memory&lt;br /&gt;
* Algorithm&lt;br /&gt;
* License and Time Module &amp;lt;em&amp;gt;(Time Module is not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* New password &amp;lt;em&amp;gt;(Available in General information when logged in as a vendor)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Encrypt/Decrypt&lt;br /&gt;
* Random number &amp;lt;em&amp;gt;(not available for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Format &amp;lt;em&amp;gt;(Under the Initialization tab for UniKey Drive)&amp;lt;/em&amp;gt;&lt;br /&gt;
* Network&lt;br /&gt;
&lt;br /&gt;
[[File:console device configure.png|500px|alt=UniKey Console configure tab]]&lt;br /&gt;
&lt;br /&gt;
You can configure any properties according to your own desired licensing strategies. By clicking on the corresponding options, you can enter your required parameters.&lt;br /&gt;
&lt;br /&gt;
===General information===&lt;br /&gt;
&lt;br /&gt;
[[File:console device general information.png|500px|alt=UniKey Console general information (SID and Update Tag)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;The HID is a fixed serial number, and cannot be changed.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In menu, the UniKey devices SID and Update Tag connected to your computer will show in the message box. You can change the SID and Update Tag value, by entering value in the respective input box and then clicking Write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
[[File:console device memory.png|500px|alt=UniKey Console device memory details]]&lt;br /&gt;
&lt;br /&gt;
In Memory, you can read, edit, and delete content stored in the UniKeys memory. By clicking on Read, you can read content from the UniKeys memory, and by clicking on Write, you can write all content edited by you into the UniKeys memory. To facilitate your editing, UniKey Console provides a load from file function. By clicking on Load from file, you can load content stored in a file to Console, and then write it to memory by clicking on Write. Alternatively, you can save the data which is read from the UniKeys memory to a file by clicking on Save to file.&lt;br /&gt;
&lt;br /&gt;
===Algorithm===&lt;br /&gt;
&lt;br /&gt;
[[File:console device algorithm.png|500px|UniKey Console write and run algorithms]]&lt;br /&gt;
&lt;br /&gt;
UniKey Algorithm is a very powerful method to protect your software, as this block of code is stored directly in UniKey, independent in memory from where software code is stored. Without the right permissions, this block of code cannot be written to or read by anyone. An algorithm can be typed into the Input algorithm field. You can input more than one statement in your algorithm and each statement is separated by comma.&lt;br /&gt;
&lt;br /&gt;
Input the start address to set the starting point for your algorithm, and input a length to set the end point. The end point address will be the start address plus length. Select a calculation mode, and then click on Write to write your configurations into the UniKey. If you want to run your algorithm for a test, you can initialize the variable, A, B, C, D, seed/module (depending on the selected calculation mode), and start address, and then click on Run. The result from A, B, C, and D will be displayed directly.&lt;br /&gt;
&lt;br /&gt;
===License Module===&lt;br /&gt;
&lt;br /&gt;
[[File:console device module.png|500px|alt=UniKey Console module settings]]&lt;br /&gt;
&lt;br /&gt;
License Module allows you to enable/disable specified modules and set the number of execution times. In the list on the right side of the console, you can see a list and module status. Click on the white triangle to check each corresponding modules parameters and status.&lt;br /&gt;
&lt;br /&gt;
[[File:Console device module options.png|thumb|left|500px|alt=UniKey Console greater module details|To enable a module, a positive number must be entered]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Click on Check to view the information and status of a device and click on Write to write your configurations.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable the auto-decrement function by toggling the check box next to Auto-decrement. To check the information in all modules, you can click on the Check All button; you can also set all modules by clicking on Write All to write all settings to device.&lt;br /&gt;
&lt;br /&gt;
===Time Module (UniKey Time Only)===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module tab.PNG|500px|alt=UniKey Console time module selections]]&lt;br /&gt;
&lt;br /&gt;
The UniKey Time has 16 time modules to work with, and you can bind any time module with your whole software, or bind just a single piece of functionality, helping to achieve a time-based licensing strategy. Clicking on Read Time reads the current time from the dongle, and the time can be set by inputting the time in the Dongle Clock field (DD-MM-YYYY format) and pressing Write Time; otherwise you can synchronize your dongle&#039;s clock with your system time by pressing Write system time to device. Clicking on the white triangle icon to the right of any time module allows you to set the details for an individual time module.&lt;br /&gt;
&lt;br /&gt;
====Set Start Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module 0 start time.PNG|500px|alt=time module duration mode (days, hours)]]&lt;br /&gt;
&lt;br /&gt;
You can utilize the current devices time or system time by clicking on Use device time or Use system time respectively. UniKey provides two different methods; expiration and duration, for you to select from (the default being duration). Inputting Duration Time indicates how long the user can use the software after it the given Start Time. &lt;br /&gt;
&lt;br /&gt;
====Set Expiration Time====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Time Module expiration method.PNG|500px|alt=time module expiration time (YYYY-MM-HH-MM)]]&lt;br /&gt;
&lt;br /&gt;
If a module will never be used, you can click on Write, but if the module has been set before, then to reset the module, you must either erase the module first or check the Re-write option box. You can set more than one module at once by selecting Write All to set your modules in-batch; make sure to click Check All afterwards to check the status of all modules. Clicking on Erase All removes all settings stored each time module, please note that all modules will be initialized, so be careful when using the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New Password===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console New Password tab.PNG|500px|alt=enter a seed value to generate four new passwords]]&lt;br /&gt;
&lt;br /&gt;
UniKey does not allow users to defined passwords by themselves. The only way to change passwords is by using the password generation mechanism embedded in the UniKey Console. Please input a seed (numbers only) and click on New Password, all new passwords will be displayed in the New Password output boxes and will be recorded into the UniKey Console folder. &amp;lt;b&amp;gt;The passwords of a UniKey dongle can only be changed twice, after which they cannot be changed again.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Encrypt/Decrypt===&lt;br /&gt;
&lt;br /&gt;
[[File:console device encrypt and decrypt.png|500px|alt=UniKey Console encrypt or decrypt text]]&lt;br /&gt;
&lt;br /&gt;
Each UniKey dongle has an encrypt/decrypt function, and can store 3 keys inside each device. In the encrypt/decrypt option, you can choose the encrypt/decrypt operation, generate keys and check output.&lt;br /&gt;
From the Select Operation drop-down menu, you can choose a specific operation. For example, choosing generate key, you can choose the key you want to use and click on Run to generate a secret key for your UniKey.&lt;br /&gt;
&lt;br /&gt;
Encryt/Decrypt: to check the encrypt/decrypt result, you can choose your desired operation from the Select Operation drop-down menu. Select the key, choose the encoding, input your content (the length must be an integer multiple of 16) in the input box and then click Run, you can then see the result in the output box. To reverse the operation, you can click on &amp;amp;lt; between the input and output boxes, choose the opposite operation, and then click on Run to check the result from the output box.&lt;br /&gt;
UniKey also provides an MD5 algorithm, for you to perform checksums. You can perform the MD5 calculation by following the same procedure.&lt;br /&gt;
&lt;br /&gt;
===Random Number===&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Console Random Number tab.PNG|500px|alt=enter a seed to generate four distinct randomly generated numbers]]&lt;br /&gt;
&lt;br /&gt;
UniKey Console provides its own random number generator. By just entering a seed (numbers only) value and clicking Run you are provided with four random numbers in Result; the numbers generated are cryptographically random.&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
&lt;br /&gt;
[[File:console device network.png|500px|alt=UniKey Console network settings]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to configure your UniKey device (PRO, Time, and Drive) in a network environment. In the first line, you can set the maximum number of users who can connect to the server simultaneously.&lt;br /&gt;
&lt;br /&gt;
====Client setting====&lt;br /&gt;
* Server IP is the servers IP address in the network. This address will guide clients to find the server in the network.&lt;br /&gt;
* Server port is the port to build communications between client and server.&lt;br /&gt;
* Time-out defines the maximum waiting period. If the client sends a request to the server, but the server does not send a response back in the set time, then the client is denied access.&lt;br /&gt;
* The default time-out period is 5 seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;i&amp;gt;You can use this to control the behavior of the NetUniKey Client&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
The access mode box shows how NetUniKey Clients access the NetUniKey Server. If you set it to access by IP, NetUniKey Server accepts only ONE client per IP. If this value is set to access by process, the NetUniKey client from the same process can only be accepted once. If it is set to access by thread, NetUniKey can be accepted in any thread. Access by shared IP means all requests from a single IP will be counted as 1. To facilitate setting other devices with the same configuration, you can save your configuration information into a file, or to update a device remotely, you can generate an update file.&lt;br /&gt;
&lt;br /&gt;
Working mode specifies how the UniKey Client will operate. If this value is set to local only, the NetUniKey Client will only work with a UniKey dongle attached to a local USB port.&lt;br /&gt;
If this value is local-&amp;amp;gt;network, the UniKey Client will check for a local UniKey dongle attached to a USB port first, if this fails, it will try to search for the UniKey dongle attached to the UniKey server in the network.&lt;br /&gt;
If you set it to network only, the NetUniKey Client will only work with the UniKey dongle attached to the UniKey server. When this value is set to network-&amp;amp;gt;local, the NetUniKey client will try to connect with the UniKey dongle attached to UniKey server first, and if it fails, it will try to load a local UniKey attached to a USB port.&lt;br /&gt;
&lt;br /&gt;
Search mode sets how UniKey clients will try to find a UniKey dongle on the network. Local only is used for connecting to the server by using the server IP set in the configuration file. If it is set to local-&amp;amp;gt;broadcast, the UniKey client will try to use the information in the configuration file first, if this fails, the UniKey clients will broadcast to the local network to find the UniKey. &lt;br /&gt;
If set to broadcast-&amp;amp;gt;local, the UniKey clients will broadcast to the network first, and will try to connect to the UniKey specified in NetUniKey configuration file when they cannot find any UniKey via the broadcast. You can save this configuration file by clicking on Save, or read the previous client settings file by clicking on Read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Server setting====&lt;br /&gt;
&lt;br /&gt;
[[File:console device network server.png|thumb|left|500px|alt=UniKey Console server settings|The default port is 5680]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
In this panel, you can enter the server IP, desired server port, and timeout. Enable/Disable the black and white IP list. To add an IP address to the list, click on the corresponding Add button, in the pop-up window, enter the start and end IP addresses. Or you can move an IP from the black list to white list by clicking on the &amp;amp;gt;/&amp;amp;lt; buttons.&lt;br /&gt;
* If the white list is enabled, only IP addresses in this list can access the server. If the list is empty, then no clients can access the server.&lt;br /&gt;
* The black list always has the highest priority. When the server starts, it will always check the black list first. If an IP appears in both the black and white list, the IP will be blocked.&lt;br /&gt;
&lt;br /&gt;
===File System===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File System allows you to manage the hidden and secure partition of the UniKey Drive dongle.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console file system.png|500px|alt=UniKey Drive Console file system initial window]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Hidden Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console hidden partition.png|thumb|none|500px|alt=UniKey Drive Console hidden partition login screen|The default passwords to enter the hidden partition are 12345678]]&lt;br /&gt;
&lt;br /&gt;
To enter the hidden partition, please input all four passwords to the UniKey Drive file system, then press OK. All the data stored on both the hidden and secure partitions are encrypted using a 128-bit encryption algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:unikey drive hidden partition filesystem.png|500px|alt=UniKey Drive Console hidden partition filesystem]]&lt;br /&gt;
&lt;br /&gt;
====Entering the Secure Partition====&lt;br /&gt;
&lt;br /&gt;
[[File:drive console secure partition login screen.png|thumb|none|500px|alt=UniKey Drive Console secure partition login screen|The default password to enter the secure partition is 123456]]&lt;br /&gt;
&lt;br /&gt;
The secure partition is also known as the password-protected partition; customers can access it by providing the correct password.&lt;br /&gt;
&lt;br /&gt;
===Initialization===&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;em&amp;gt;Please note that this section is only for the UniKey Drive Console.&amp;lt;/em&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Initialization tab for the UniKey Drive contains two parts; format and partition device memory.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization.png|500px|alt=UniKey Drive Console Initialization tab]]&lt;br /&gt;
&lt;br /&gt;
====Format====&lt;br /&gt;
&lt;br /&gt;
[[File:UniKey Drive Initialization Format.png|500px|alt=UniKey Drive Console Initialization Format tab]]&lt;br /&gt;
&lt;br /&gt;
By using the Format function, customers can format the UniKey Drive&#039;s 4KB memory, SID, license modules, algorithms and update tags.&lt;br /&gt;
&lt;br /&gt;
====Partition====&lt;br /&gt;
To partition the UniKey Drive, you need to input all four passwords to log in to the Drive&#039;s filesystem. Pressing Default Password loads the default passwords automatically for you.&lt;br /&gt;
&lt;br /&gt;
[[File:drive console initialization partition.png|thumb|none|500px|alt=UniKey Drive Console Initialization Partition tab|The four default passwords are 12345678]]&lt;br /&gt;
&lt;br /&gt;
Device capacity is the UniKey Drive&#039;s total memory; UniKey Drives are available in 2, 4, 8, 16, and 32GB variants. An image file (ISO) is used for UniKey Drive&#039;s virtual CD-ROM partition; a user can burn their own ISO files to the Drive&#039;s virtual CD-ROM. A vendor can modify the capacity of the hidden, normal, and secure partition. Vendors need to create a password for the secure partition, so that end users are able to open the password-protected partition.&lt;br /&gt;
&lt;br /&gt;
===Generate===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate unikey update.png|500px|alt=UniKey Console read update file]]&lt;br /&gt;
&lt;br /&gt;
====Generate UniKey File====&lt;br /&gt;
UniKey file is used by the UniKey Burner tool, when a customer wants to burn the dongles in a batch by using the same configurations and settings, this file will be loaded into the UniKey Burner tool.  Pressing the Read button will load the information stored on the .uky file to the Console tool. The Generate button will create the .uky file with the dongles information/settings from the Console tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generate Update File===&lt;br /&gt;
&lt;br /&gt;
[[File:console generate update file.png|500px|alt=UniKey Console generate update file]]&lt;br /&gt;
&lt;br /&gt;
The Update File is used by the UniKey Drive Remote Updater; it does the same thing as the UniKey Remote Update Generator does. &lt;br /&gt;
&lt;br /&gt;
The Properties to be bound box will allow the customer to bind specific HID, SID, License Modules and Update Tags to the generated .upt2 file. After binding with a specific value, the .upt2 file will check if the values stored inside of the UniKey Drive dongle are the same or not. If they are not the same, the .upt2 file will not update the UniKey Drive.&lt;br /&gt;
&lt;br /&gt;
The Property to be written box allows the customer to use the .upt2 file for updating the settings and configurations of the target UniKey Drive.&lt;br /&gt;
File password will allow the customer to set an independent password for the generated .upt2 file, and then when the end user updates their UniKey Drive by using the corresponding .upt2 file, they will need to input this password in order to access/use the .upt2 file.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Random_Number_tab.PNG&amp;diff=3210</id>
		<title>File:UniKey Console Random Number tab.PNG</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Random_Number_tab.PNG&amp;diff=3210"/>
		<updated>2016-08-23T00:16:00Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=File:UniKey_Console_New_Password_tab.PNG&amp;diff=3209</id>
		<title>File:UniKey Console New Password tab.PNG</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=File:UniKey_Console_New_Password_tab.PNG&amp;diff=3209"/>
		<updated>2016-08-23T00:15:13Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_expiration_method.PNG&amp;diff=3208</id>
		<title>File:UniKey Console Time Module expiration method.PNG</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_expiration_method.PNG&amp;diff=3208"/>
		<updated>2016-08-23T00:14:00Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_0_start_time.PNG&amp;diff=3207</id>
		<title>File:UniKey Console Time Module 0 start time.PNG</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_0_start_time.PNG&amp;diff=3207"/>
		<updated>2016-08-23T00:12:54Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_tab.PNG&amp;diff=3206</id>
		<title>File:UniKey Console Time Module tab.PNG</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=File:UniKey_Console_Time_Module_tab.PNG&amp;diff=3206"/>
		<updated>2016-08-23T00:11:37Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_API_Usage&amp;diff=1072</id>
		<title>UniToken API Usage</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_API_Usage&amp;diff=1072"/>
		<updated>2016-08-17T05:36:31Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken_API]]&lt;br /&gt;
&lt;br /&gt;
UniToken provides a set of UniToken APIs to manage the secure file system for general usage, apart from PKI applications. Please install the UniToken API package or the UniToken full package to enable features.&lt;br /&gt;
The UniToken API package installs UniToken.dll for general UniToken API implementation and UniTokenAx.dll for ActiveX usage.&lt;br /&gt;
&lt;br /&gt;
==API Usage==&lt;br /&gt;
Initialize the library to release resources by calling UT_Initialize and UT_Finalize. UT_Initialize needs to be called before using the library and UT_Finalize needs to be called by end of the operation. Both functions need to be called only once. Calling UT_GetTokenList and UT_OpenDevice will get device and open it to obtain the device handle. Get all the slots having devices by calling UT_GetTokenList. Open the device of the specified slot to obtain the device handle. Start operating the device.&lt;br /&gt;
&lt;br /&gt;
==Prototype Specification==&lt;br /&gt;
&lt;br /&gt;
===UT_HANDLE===&lt;br /&gt;
UT_HANDLE is specified by UniToken library and used for detecting devices. It is defined as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;typedef unsigned long UT_HANDLE;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; KEY_HANDLE, KEY_HANDLE_PTR&lt;br /&gt;
: KEY_HANDLE is specified by UniToken library and used for detecting keys. It is defined as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;typedef unsigned long KEY_HANDLE;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KEY_HANDLE_PTR is the pointer of KEY_HANDLE.&lt;br /&gt;
&lt;br /&gt;
===UT_RV===&lt;br /&gt;
UT_RV is specified by UniToken library and used for identifying the return value of library. It is defined as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;typedef unsigned long UT_RV;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UT_SLOT_ID===&lt;br /&gt;
UT_SLOT_ID is specified by UniToken library and used for identifying slots. It is defined as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;typedef unsigned long UT_SLOT_ID;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UT_STATUS===&lt;br /&gt;
UT_STATUS is specified by UniToken library and used for identifying the status of slot. It is defined as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;typedef unsigned long UT_STATUS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We defined some values for this UniToken library version.&lt;br /&gt;
&lt;br /&gt;
* define TOKEN_NO_EVENT 0&lt;br /&gt;
* define TOKEN_INSERT 1&lt;br /&gt;
* define TOKEN_REMOVE 2&lt;br /&gt;
&lt;br /&gt;
==About Macro==&lt;br /&gt;
&lt;br /&gt;
===Size===&lt;br /&gt;
* define UT_MAX_PIN_LEN 128&lt;br /&gt;
* define UT_MAX_ID_LEN 32&lt;br /&gt;
* define MAX_SLOT_NUMBER 32&lt;br /&gt;
* define FS_MEMORY (256*1024)&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* UT_MAX_PIN_LEN the maximum password length&lt;br /&gt;
* UT_MAX_ID_LEN the maximum UniToken ID length&lt;br /&gt;
* MAX_SLOT_NUMBER the maximum volume of slot&lt;br /&gt;
* FS_MEMORY the maximum capacity of file system&lt;br /&gt;
&lt;br /&gt;
===Password===&lt;br /&gt;
* define UT_DEFAULT_SO &amp;quot;admin&amp;quot;&lt;br /&gt;
* define UT_DEFAULT_USER &amp;quot;user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* UT_DEFAULT_SO the admin default password of UniToken&lt;br /&gt;
* T_DEFAULT_USER the user default password of UniToken&lt;br /&gt;
&lt;br /&gt;
===Slot Status===&lt;br /&gt;
* define TOKEN_NO_EVENT 0&lt;br /&gt;
* define TOKEN_INSERT 1&lt;br /&gt;
* define TOKEN_REMOVE 2&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* TOKEN_NO_EVENT No slot status has changed&lt;br /&gt;
* TOKEN_INSERT A device is inserted in a slot&lt;br /&gt;
* TOKEN_REMOVE The device in the slot is removed&lt;br /&gt;
&lt;br /&gt;
===User Level===&lt;br /&gt;
* define UT_USER_LEVEL_GUEST 0x0&lt;br /&gt;
* define UT_USER_LEVEL_USER 0x1&lt;br /&gt;
* define UT_USER_LEVEL_ADMIN 0x2&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* UT_USER_LEVEL_GUEST GUEST Level&lt;br /&gt;
* UT_USER_LEVEL_USER USER Level&lt;br /&gt;
* UT_USER_LEVEL_ADMIN ADMIN ADMIN Level&lt;br /&gt;
&lt;br /&gt;
===Modes of Changing Passwords===&lt;br /&gt;
* define UT_CHANGE_PIN_MODE_BYSELF 0x1&lt;br /&gt;
* define UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER 0x2&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* UT_CHANGE_PIN_MODE_BYSELF Current user changes his password&lt;br /&gt;
* UT_CHANGE_PIN_MODE_ADMIN_CHANGE_USER Changing user password requires admin permission&lt;br /&gt;
&lt;br /&gt;
===LED On-off===&lt;br /&gt;
* define LED_ON 1&lt;br /&gt;
* define LED_OFF 0&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* LED_ON turn on LED&lt;br /&gt;
* LED_OFF turn off LED&lt;br /&gt;
&lt;br /&gt;
===DES Key Length===&lt;br /&gt;
* define DES_KEY_LEN_8_BYTE 8&lt;br /&gt;
* define DES3_KEY_LEN_24_BYTE 24&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* DES_KEY_LEN_8_BYTE DES key length&lt;br /&gt;
* DES3_KEY_LEN_24_BYTE DES3 key length&lt;br /&gt;
&lt;br /&gt;
===DES Data Length===&lt;br /&gt;
* define DES_DATA_LEN_8_BYTE 8&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* DES_DATA_LEN_8_BYTE BYTE DES en/decrypt data length&lt;br /&gt;
&lt;br /&gt;
===AES Key Length===&lt;br /&gt;
* define AES_KEY_LEN_128_BIT 16&lt;br /&gt;
* define AES_KEY_LEN_192_BIT 24&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* AES_KEY_LEN_128_BIT default key length&lt;br /&gt;
* AES_KEY_LEN_192_BIT maximum key length&lt;br /&gt;
&lt;br /&gt;
===AES Data Length===&lt;br /&gt;
* define AES_DATA_LEN_16_BYTE 16&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* AES_DATA_LEN_16_BYTE AES en/decrypt data length&lt;br /&gt;
&lt;br /&gt;
===RSA Modulus Length===&lt;br /&gt;
* define RSA_MODULUS_LEN_1024_BIT 128&lt;br /&gt;
* define RSA_MODULUS_LEN_2048_BIT 256&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* RSA_MODULUS_LEN_1024_BIT default modulus length&lt;br /&gt;
* RSA_MODULUS_LEN_2048_BIT Maximum modulus length&lt;br /&gt;
&lt;br /&gt;
===RSA Public Exponent===&lt;br /&gt;
* define RSA_PUBEXP_LEN_65537_BIT 65537&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* RSA_PUBEXP_LEN_65537_BIT RSA public exponent&lt;br /&gt;
&lt;br /&gt;
===RSA Data Length===&lt;br /&gt;
* define RSA_DATA_LEN_1024_BIT 128&lt;br /&gt;
* define RSA_DATA_LEN_2048_BIT 256&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* RSA_DATA_LEN_1024_BIT default data length&lt;br /&gt;
* RSA_DATA_LEN_2048_BIT maximum data length&lt;br /&gt;
&lt;br /&gt;
===RSA Import New Key Pair===&lt;br /&gt;
* define RSA_IMPORT_NEW 0&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* RSA_IMPORT_NEW newly imported key pair&lt;br /&gt;
&lt;br /&gt;
===File Name Length===&lt;br /&gt;
* define UT_FILE_NAME_LENGTH 16&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* UT_FILE_NAME_LENGTH file name maximum length not including string terminator&lt;br /&gt;
&lt;br /&gt;
===File Permission===&lt;br /&gt;
* define FILE_PERMISSION_GUEST 0x0&lt;br /&gt;
* define FILE_PERMISSION_USER 0x1&lt;br /&gt;
* define FILE_PERMISSION_ADMIN 0x2&lt;br /&gt;
&lt;br /&gt;
; Parameter Meaning&lt;br /&gt;
* FILE_PERMISSION_GUEST GUEST permission file&lt;br /&gt;
* FILE_PERMISSION_USER USER permission file&lt;br /&gt;
* FILE_PERMISSION_ADMIN ADMIN permission file&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Agent_APIs&amp;diff=1510</id>
		<title>UniOTP Agent APIs</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Agent_APIs&amp;diff=1510"/>
		<updated>2016-08-17T04:49:55Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_API]]&lt;br /&gt;
&lt;br /&gt;
== Chapter 1: C/C++  ==&lt;br /&gt;
&lt;br /&gt;
=== Installation and usage  ===&lt;br /&gt;
&lt;br /&gt;
# Please copy the Securepass_auth.h header file and the radclt.lib library file into your project. &lt;br /&gt;
# Please perform authentication through the SecuAuth interface. For detailed instructions, please see the demo project.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to integrate with the C++ environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Please add the RadiusClt1.h header file and radclt.lib library file to the project.&lt;br /&gt;
# When you need to perform authentication, instantiate the RadiusClt class.&lt;br /&gt;
# Use the initrad member function inside the RadiusClt class to initialize authentication information.&lt;br /&gt;
# Use the “parase” member function inside the RadiusClt class in order to set the username and OTP PIN for authentication. Use the “auth” member function inside the RadiusClt class to terminate the authentication process.&lt;br /&gt;
&lt;br /&gt;
=== API  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
int secuauth(&lt;br /&gt;
    char *phost,&lt;br /&gt;
    char *pshare,&lt;br /&gt;
    int nsharelen,&lt;br /&gt;
    char *pszusername,&lt;br /&gt;
    int nusernamelen,&lt;br /&gt;
    char *pszpassword,&lt;br /&gt;
    int npasswordlen,&lt;br /&gt;
    int *pnchallenge,&lt;br /&gt;
    int *pbvalidresponse,&lt;br /&gt;
    char *presponse /* = NULL*/,&lt;br /&gt;
    int nmaxbuflen /* = 0*/,&lt;br /&gt;
    unsigned short uport /* = 1812*/,&lt;br /&gt;
    int nwaittime /* = 3*/&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Char *phost&lt;br /&gt;
| [IN] authentication server main address (IP address)&lt;br /&gt;
|-&lt;br /&gt;
| Char *pshare&lt;br /&gt;
| [IN] shared key used by authentication server and dynamic password token&lt;br /&gt;
|-&lt;br /&gt;
| Int nsharelen&lt;br /&gt;
| [IN] shared key length&lt;br /&gt;
|-&lt;br /&gt;
| char *pszusername&lt;br /&gt;
| [IN] The username waiting for authentication&lt;br /&gt;
|-&lt;br /&gt;
| int nusernamelen&lt;br /&gt;
| [IN] username length&lt;br /&gt;
|-&lt;br /&gt;
| char *pszpassword&lt;br /&gt;
| [IN] Password for this time (OTP[PIN] PIN is optional, but it is compulsory to choose a PIN for challenge/response type)&lt;br /&gt;
|-&lt;br /&gt;
| int npasswordlen&lt;br /&gt;
| [IN] password length&lt;br /&gt;
|-&lt;br /&gt;
| int *pnchallenge&lt;br /&gt;
| [OUT] The challenge code returned from the server. If the function return value is RD_ERROR_CHALLENGENEED, pnchallenge will be used as the challenge code&lt;br /&gt;
|-&lt;br /&gt;
| int *pbvalidresponse&lt;br /&gt;
| [OUT] whether Challenge information returned or not(please don’t try to set this parameter to NULL)&lt;br /&gt;
|-&lt;br /&gt;
| char *presponse&lt;br /&gt;
| [OUT] Buffer used for receiving challenge information. If the buffer length is smaller than the challenge information length, challenge information will not be returned. Challenge information length cannot exceed 256 bytes&lt;br /&gt;
|-&lt;br /&gt;
| int nmaxbuflen&lt;br /&gt;
| [IN] response buffer maximum size (byte)&lt;br /&gt;
|-&lt;br /&gt;
| unsigned short uport&lt;br /&gt;
| [IN] Authentication server port number, the default port for standard Radius is 1812&lt;br /&gt;
|-&lt;br /&gt;
| int nwaittime&lt;br /&gt;
| [IN] Maximum waiting time (second), if waiting time exceeds this value, the client will stop waiting for server response&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Return value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_SUCCESS&lt;br /&gt;
| Authentication succeeded&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_CHALLENGENEED&lt;br /&gt;
| The function received successfully the challenge information returned from the server&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INVALID_USERNAMERD_ERROR_INVALID&lt;br /&gt;
| Cannot use this username&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INVALID_PWD&lt;br /&gt;
| Cannot use this password (wrong format, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INVALIDHOST&lt;br /&gt;
| Cannot use this authentication server (this error is also returned when the IP address field is empty)&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INVALIDPCNAME&lt;br /&gt;
| Cannot read Computer name&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_GENRAFAILED&lt;br /&gt;
| Failed to generate authenticator request, an error might have occurred when requesting certification package&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_GENPWDFAILED&lt;br /&gt;
| Failed to encrypt the password submitted by the user, this error might have occurred when organizing the packets&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_CREATEPKTFAILED&lt;br /&gt;
| Failed to generate the authentication packets&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_CREATESOCKETFAILED&lt;br /&gt;
| Socket initialization failed&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_SENDDATAFAILED&lt;br /&gt;
| Failed to send packets&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_RECVDATAFAILED&lt;br /&gt;
| Failed to receive data&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INVALIDPKT&lt;br /&gt;
| Data received are invalid&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_NORESPONSE&lt;br /&gt;
| The server doesn’t respond&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_AUTHFAILED&lt;br /&gt;
| Authentication failed (wrong password, etc)&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_GETCHALLENGEFAILED&lt;br /&gt;
| The server sent challenge information but an error occurred when receiving data&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_REMOTESOCKETCLOSED&lt;br /&gt;
| Server socket closed&lt;br /&gt;
|-&lt;br /&gt;
| RD_ERROR_INITSOCKFAILED&lt;br /&gt;
| Under Windows, error when executing WSAStartup function&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chapter 2: C# ==&lt;br /&gt;
&lt;br /&gt;
=== Installation and usage  ===&lt;br /&gt;
&lt;br /&gt;
# Please add the UniOTP_Clt.dll dynamic library to your project.&lt;br /&gt;
# Instantiate the SecuRadClts_Client constructor class in your source code where you want to authenticate the user.&lt;br /&gt;
# Use the Authenticate method inside the SecuRadClts_Client class to perform the authentication&lt;br /&gt;
&lt;br /&gt;
For further details about the source code, please see the sample folder. SecuRadClts_Client class performs Radius client functions. By calling the member class function interfaces below, you can perform standard Radius authentication.&lt;br /&gt;
&lt;br /&gt;
=== API: SECURADCLTS_CLIENT()  ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C#&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
SecuRadClts_Client (&lt;br /&gt;
    string Server,&lt;br /&gt;
    string SharedSecret,&lt;br /&gt;
    string Username,&lt;br /&gt;
    string Password,&lt;br /&gt;
    int nport&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Class object instantiation, completes the initialization process&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| String Server&lt;br /&gt;
| Authentication server address&lt;br /&gt;
|-&lt;br /&gt;
| String SharedSecret&lt;br /&gt;
| Shared key&lt;br /&gt;
|-&lt;br /&gt;
| String Username&lt;br /&gt;
| Username for the authentication&lt;br /&gt;
|-&lt;br /&gt;
| String Password&lt;br /&gt;
| Password for the authentication&lt;br /&gt;
|-&lt;br /&gt;
| Int nport&lt;br /&gt;
| Authentication server port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Return Value&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Authentication Succeeded&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Authentication request failed (impossible to connect to the server or wrong shared key)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| authentication server response time out&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| returned packets are invalid (length shorter than the packet shortest length)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Authentication failed (password error)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Invalid packets (Identification code error)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| packet length error&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| invalid challenge information&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| invalid packets&lt;br /&gt;
|-&lt;br /&gt;
| 100&lt;br /&gt;
| The server sent a challenge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Performing method&lt;br /&gt;
|-&lt;br /&gt;
| Shared Secret&lt;br /&gt;
| String&lt;br /&gt;
| Shared Key&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| UserName&lt;br /&gt;
| String&lt;br /&gt;
| Username waiting to be authenticated&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| Password&lt;br /&gt;
| String&lt;br /&gt;
| Authentication password&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| Server&lt;br /&gt;
| String&lt;br /&gt;
| Authentication server address&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| Port&lt;br /&gt;
| String&lt;br /&gt;
| Authentication server port (Standard Radius authentication protocol users 1812 for authentication)&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| UDPTimeout&lt;br /&gt;
| String&lt;br /&gt;
| Server longest waiting time&lt;br /&gt;
| Set get&lt;br /&gt;
|-&lt;br /&gt;
| pChallenge&lt;br /&gt;
| String&lt;br /&gt;
| Server Challenge message&lt;br /&gt;
| Set get&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chapter 3: Java  ==&lt;br /&gt;
&lt;br /&gt;
=== Installation and Usage  ===&lt;br /&gt;
&lt;br /&gt;
# Add the secuotp_jradiust.jar file inside your project.&lt;br /&gt;
# When you need to authenticate, Use RadientClient to create a client instance.&lt;br /&gt;
# Use “authenticate” to complete the authentication.&lt;br /&gt;
&lt;br /&gt;
For further details about the source code, please see the sample folder.&lt;br /&gt;
&lt;br /&gt;
=== API: RadiusCLIENT()  ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
RadiusClient (&lt;br /&gt;
    String hostname,&lt;br /&gt;
    String sharedSecret,&lt;br /&gt;
    String username&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create an object from the RadiusClient class&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| String hostname&lt;br /&gt;
| Authentication server address&lt;br /&gt;
|-&lt;br /&gt;
| String shareSecret&lt;br /&gt;
| Shared key&lt;br /&gt;
|-&lt;br /&gt;
| String username&lt;br /&gt;
| Username for user waiting to be authenticated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
RadiusClient (&lt;br /&gt;
    String hostname,&lt;br /&gt;
    int authPort,&lt;br /&gt;
    String sharedSecret,&lt;br /&gt;
    String username&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| String hostname&lt;br /&gt;
| Authentication server address&lt;br /&gt;
|-&lt;br /&gt;
| int authPort&lt;br /&gt;
| Authentication service port (standard Radius authentication port is 1812)&lt;br /&gt;
|-&lt;br /&gt;
| String shareSecret&lt;br /&gt;
| Shared key&lt;br /&gt;
|-&lt;br /&gt;
| String username&lt;br /&gt;
| Username for user waiting to be authenticated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype 3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
RadiusClient (&lt;br /&gt;
    String hostname,&lt;br /&gt;
    int authPort,&lt;br /&gt;
    String sharedSecret,&lt;br /&gt;
    String userName,&lt;br /&gt;
    int sockTimeout&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create an object from the RadiusClient class.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| String hostname&lt;br /&gt;
| Authentication server address&lt;br /&gt;
|-&lt;br /&gt;
| int authPort&lt;br /&gt;
| Authentication service port (standard Radius authentication port is 1812)&lt;br /&gt;
|-&lt;br /&gt;
| String shareSecret&lt;br /&gt;
| Shared key&lt;br /&gt;
|-&lt;br /&gt;
| String username&lt;br /&gt;
| Username for user waiting to be authenticated&lt;br /&gt;
|-&lt;br /&gt;
| int sockTimeout&lt;br /&gt;
| Longest waiting time for the server response&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== API: AUTHENTICATE() ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
int authenticate (&lt;br /&gt;
    String userPass&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Perform authentication&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Sting userPass&lt;br /&gt;
| User authentication password for this time (OTP only or OTP + PIN)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Return Value&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_ACCEPT&lt;br /&gt;
| Authentication succeeded&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_REJECT&lt;br /&gt;
| Authentication failed&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_CHALLENGE&lt;br /&gt;
| The server sent challenge information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== API: GETCHALLENGEMESSAGE()  ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;String getChallengeMessage();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the authentication server sends a challenge, this function is used to retrieve the challenge information returned by the authentication service.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A Challenge information returned by the server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static data definition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Static data&lt;br /&gt;
! Value&lt;br /&gt;
! Meaning &lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_ACCEPT&lt;br /&gt;
| 2&lt;br /&gt;
| Radius packet type, this packet shows that the authentication succeeded&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_REJECT&lt;br /&gt;
| 3&lt;br /&gt;
| Radius packet type, this packet shows that the authentication failed&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_CHALLENGE&lt;br /&gt;
| 11&lt;br /&gt;
| Radius packet type, this packet showsthat the authentication emitted a challenge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 4: PHP  ==&lt;br /&gt;
&lt;br /&gt;
=== Installation and Usage ===&lt;br /&gt;
&lt;br /&gt;
# Copy the 2 files, radius.class.php and radius_config.php into the project directory.&lt;br /&gt;
# Change the radius_config.php file contents so that it matches your authentication server parameters.&lt;br /&gt;
# When you need to authenticate, create an instance of Radius class&lt;br /&gt;
# Use the AccessRequest member function to complete the authentication procedure.&lt;br /&gt;
&lt;br /&gt;
For further details about the source code, please see the sample folder.&lt;br /&gt;
&lt;br /&gt;
Class Radius is used for Radius on the client side, by using the following functions of the class, you can get the configuration data from the authentication server, the authentication information configuration data of the authentication user, user ID authentication, the server additional information, etc.&lt;br /&gt;
&lt;br /&gt;
=== API: RADIUS()  ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
Radius (&lt;br /&gt;
    $ip_radius_server = &#039;127.0.0.1&#039;,&lt;br /&gt;
    $shared_secret = &amp;amp;lt;i&amp;amp;gt;, &amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
    $udp_timeout = 5,&lt;br /&gt;
    $authentication_port = 1812&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Function to create an object from Radius class. Call this function to instantiate Radius class and in the same time configure server address, shared key and longest waiting time for server response.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| $ip_radius_server&lt;br /&gt;
| Authentication server address or server domain name, if empty, local computer will be chosen as default.&lt;br /&gt;
|-&lt;br /&gt;
| $shared_secret&lt;br /&gt;
| shared key, if empty, no shared key will be used&lt;br /&gt;
|-&lt;br /&gt;
| $udp_timeout&lt;br /&gt;
| Server response waiting time, if empty, time out will be 5&lt;br /&gt;
|-&lt;br /&gt;
| $authentication_port&lt;br /&gt;
| Authentication server port, if empty, the value will be 1812&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
=== API:ACCESSREQUEST() ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; collapse=&amp;quot;true&amp;quot; first-line=&amp;quot;2&amp;quot; highlight=&amp;quot;[4,6]&amp;quot; title=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
AccessRequest (&lt;br /&gt;
    $username = &amp;amp;lt;i&amp;amp;gt;, &amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
    $password = &amp;amp;lt;i&amp;amp;gt;, &amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
    $udp_timeout = 0&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Perform user authentication&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;120&amp;quot; | $username&lt;br /&gt;
| Username for the user waiting to be authenticated&lt;br /&gt;
|-&lt;br /&gt;
| $password&lt;br /&gt;
| Authentication password for this time’s authentication, depending on the authentication method, this can either be OTP or OTP+PIN&lt;br /&gt;
|-&lt;br /&gt;
| $udp_timeout&lt;br /&gt;
| Longest server response waiting time. If you don’t set this parameter, the value will be the default value defined in the class when instantiating.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return value &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Return Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;120&amp;quot; | ACCESS_ACCEPT&lt;br /&gt;
| Authentication succeeded&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_REJECT&lt;br /&gt;
| Authentication failed&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_CHALLENGE&lt;br /&gt;
| Challenge sent by the authentication server for this time’s authentication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== API: GETCHALLENGEMSG()  ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GetChallengeMsg();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When the AccessRequest function returns ACCESS_CHALLENGE, call this function to get the challenge code returned by the authentication server, which is used for the current ID authentication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Challenge information returned by the authentication server for this time’s authentication&lt;br /&gt;
&lt;br /&gt;
=== API:GETLASTERROR() ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GetLastError();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get information about last error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Character string, last abnormal error message&lt;br /&gt;
&lt;br /&gt;
=== API:CLEARLASTERROR() ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototype&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ClearLastError();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Clears error information&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Return Value&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Static data definition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Static data&lt;br /&gt;
! Value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_ACCEPT&lt;br /&gt;
| 2&lt;br /&gt;
| Radius packet type, this packet shows that the authentication succeeded&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_REJECT&lt;br /&gt;
| 3&lt;br /&gt;
| Radius packet type, this packet shows that the authentication failed&lt;br /&gt;
|-&lt;br /&gt;
| ACCESS_CHALLENGE&lt;br /&gt;
| 11&lt;br /&gt;
| Radius packet type, this packet shows that the authentication emitted a challenge&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Business_Solution&amp;diff=1276</id>
		<title>UniOTP Business Solution</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Business_Solution&amp;diff=1276"/>
		<updated>2016-08-17T04:02:30Z</updated>

		<summary type="html">&lt;p&gt;Bao: /* UniOTP Dynamic password protection for each type of transaction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Integration_Solutions]]&lt;br /&gt;
&lt;br /&gt;
== About This Guide ==&lt;br /&gt;
&lt;br /&gt;
This document is intended for use by management. UniOTP dynamic password authentication system is a dynamic password authentication product designed by SecuTech Solution Inc. The company is committed to providing superior software protection and authentication experience for the user&#039;s personal data and intellectual property. &lt;br /&gt;
&lt;br /&gt;
E-commerce requires that each party cooperates closely in order to provide to the consumer a safer environment and a more comfortable and appropriate consuming platform. It will become one of the most important business models in the future. But, while having brought convenience to people’s life, e-commerce also brings several hidden security risks. Attacks are becoming more sophisticated and diverse, and cases where a consumers’ profit has been infringed are rapidly increasing. Security is one of the most important obstacles to e-commerce development.&lt;br /&gt;
&lt;br /&gt;
Financial industry refers to those enterprises operating specialized financial products, including banking, insurance, trusts, securities industry, leasing industry, mortgage industry etc. With the application of network technology in the financial industry, people can enjoy convenience brought by the computer network, such as online banking and online security trading. But with this convenience, user information security is facing more serious challenges. Various network attack technologies result in economic losses to customers. As the first user information security shield, if authentication is not strong enough, it can cause severe security problem and economic loss.&lt;br /&gt;
&lt;br /&gt;
Authentication is the first step in assuring safety. This safety is directly related to the consumers’ personal benefits. Dynamic authentication is a technology that provides a strong authentication method to users and is considered to be a method that can solve today’s authentication related problems. The combination of dynamic password with e-commerce greatly raises the security level of electronic transactions, and better protects consumers’ benefits. Enterprise application refers to all kinds of information management systems which is applied by different enterprises, such as E-commerce, Enterprise resource planning (ERP), custom relationship management (CRM), etc. It will greatly improve enterprise management and manufacture efficiency by using enterprise applications to process cumbersome information.&lt;br /&gt;
&lt;br /&gt;
Some of the information maintained by enterprise applications contains confidential information which may involve the core enterprises interests, so security of this information is very important. Enterprise information security can be achieved by building a defense system, including anti-virus, firewall network monitors and etc.&lt;br /&gt;
&lt;br /&gt;
== Current Situation of Financial Transactions ==&lt;br /&gt;
&lt;br /&gt;
=== Transaction mode ===&lt;br /&gt;
&lt;br /&gt;
; OCT (Order confirmation transaction)&lt;br /&gt;
: When a customer goes to the counter and talks a teller to do their business directly, customers have to present their ID and bank card to tellers and provide password to complete authentication and do business.&lt;br /&gt;
&lt;br /&gt;
; Dedicated terminal&lt;br /&gt;
: Customers use a dedicated terminal provided by a financial institutions (ATM and POS) to process their transactions. Customers need to present credential card (bank card), customer ID and customer password to start independent transactions.&lt;br /&gt;
&lt;br /&gt;
; Online transaction&lt;br /&gt;
: Customers log in to financial institution websites to process business. In online transactions, customers normally provide an account name and password to complete the authentication process. After successfully logging on, customers can process their business online. &lt;br /&gt;
&lt;br /&gt;
; Telephone transaction&lt;br /&gt;
: Customers can process their business through calling the financial institutions hotline. Customers need to provide user credentials and password to complete authentication.&lt;br /&gt;
&lt;br /&gt;
=== Transaction security ===&lt;br /&gt;
&lt;br /&gt;
A variety of transaction modes provide different trading experiences to customers along with different security risk. &lt;br /&gt;
&lt;br /&gt;
; OCT security&lt;br /&gt;
: When customers provide their account number and passwords, there is a risk that criminals may peek at their passwords. After stealing the passwords, a criminal can log into customer accounts and perform illegal operations.&lt;br /&gt;
&lt;br /&gt;
; Dedicated terminal security&lt;br /&gt;
: When a user inputs their account number and password, there is a risk that criminals may record their password. Because dedicated terminals are for public use without any special protection, it is easy for criminals to steal a users’ identification information.&lt;br /&gt;
&lt;br /&gt;
; Online transaction security&lt;br /&gt;
: There is risk that online transaction user accounts and passwords are stolen by criminals, through listening, installing Trojans on a target computer, network hijacking, etc. &lt;br /&gt;
&lt;br /&gt;
; Telephone transaction security&lt;br /&gt;
: There is risk that user accounts and passwords are stolen by recording and eavesdropping. &lt;br /&gt;
&lt;br /&gt;
=== Common account security risks ===&lt;br /&gt;
&lt;br /&gt;
; Plagiarism leak&lt;br /&gt;
: Attackers steal customer account information by eye, and fake a user&#039;s customer ID to operate that customer&#039;s account illegally. This kind of risk usually occurs when customers do their business in public. &lt;br /&gt;
&lt;br /&gt;
; Install Trojans&lt;br /&gt;
: Attackers install Trojans on a target computer, and steal user accounts and passwords remotely. This security risk usually exists when users perform their business online by PC.&lt;br /&gt;
&lt;br /&gt;
; Network sniffing&lt;br /&gt;
: Attackers extract a user’s confidential information through eavesdropping on the data transmission network. &lt;br /&gt;
&lt;br /&gt;
; Replay attack&lt;br /&gt;
: Attackers simulate a user login, through sending authentication request data packages which were intercepted and recorded via network, to gain access to a user account.&lt;br /&gt;
&lt;br /&gt;
; User password guess&lt;br /&gt;
: If a user&#039;s password is too simple, using characters such as date of birth, anniversary and name, attackers can obtain user passwords by guessing these details easily.&lt;br /&gt;
&lt;br /&gt;
; Records leak&lt;br /&gt;
: If a password is too complicated and a user records it on paper, there is the risk of someone else seeing it.&lt;br /&gt;
&lt;br /&gt;
; Brute force&lt;br /&gt;
: Attackers can obtain passwords by an enumerating method, and just attempting different combinations.&lt;br /&gt;
&lt;br /&gt;
; Password sharing&lt;br /&gt;
: To remember various passwords for many different accounts, users will sometimes use the same password. If one password is stolen, criminals can try it on other accounts.&lt;br /&gt;
&lt;br /&gt;
== Security Analysis ==&lt;br /&gt;
&lt;br /&gt;
A general overview of the hidden security risks with e-commerce:&lt;br /&gt;
&lt;br /&gt;
; Falsification&lt;br /&gt;
: Business related information is falsified as it is been transferred over a network.&lt;br /&gt;
&lt;br /&gt;
; Information destruction&lt;br /&gt;
: Due to network devices or software malfunctioning, some data loss can happen.&lt;br /&gt;
&lt;br /&gt;
; Identification&lt;br /&gt;
: A third party who uses weak methods of identification could be used to gain another party’s identity and achieve illegal operations.&lt;br /&gt;
&lt;br /&gt;
; Information leaking&lt;br /&gt;
: Information of a transaction between two parties is read by a third party.&lt;br /&gt;
&lt;br /&gt;
UniOTP&#039;s dynamic authentication system helps solve identification related risks. Below are common patterns of identification security risks:&lt;br /&gt;
&lt;br /&gt;
* Consumer’s account name and password are stolen. &lt;br /&gt;
* The attacker installs a Trojan horse on a user’s computer to steal personal information such as bank account numbers.&lt;br /&gt;
* The attacker listens on the network, intercepts user information and gets the bank account number.&lt;br /&gt;
* For greater convenience, a consumer chooses an easy password such as their birth date, wedding anniversary, name, etc. making the password easy to guess for the attacker.&lt;br /&gt;
* The consumer stores password information in a certain place (file or notebook), that might lead to it being leaked.&lt;br /&gt;
* The attacker uses a brute force attack. &lt;br /&gt;
* The consumer uses the same password for different accounts.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Password Technology ==&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password overview ===&lt;br /&gt;
&lt;br /&gt;
Dynamic passwords, also called one time passwords, are considered to be one method capable of solving existing authentication security problems. It is widely used for many situations and users such as Banks, Bourse, e-commerce. A dynamic password generation algorithm, user’s private key and dynamic elements constitute the 3 elements used to generate the dynamic password. When you authenticate yourself, besides your account name and your password, you have to provide the dynamic password to be able to pass the authentication process. Time based dynamic password generation creates a new unpredictable random password automatically every 60 seconds. This password can only be used once. Event based dynamic password generates a new unpredictable random password every time you press its button. This password can only be used once. Challenge response dynamic password uses a challenge code to generate a new unpredictable password. When the user requests authentication, the server will return a challenge code, this challenge code will be used to generate this time’s password.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password characteristics ===&lt;br /&gt;
&lt;br /&gt;
; Dynamic&lt;br /&gt;
: Depending on the dynamic factor changes, the password generated by dynamic password token will change. Every password generated is different from each other.&lt;br /&gt;
&lt;br /&gt;
; Valid only one time&lt;br /&gt;
: Password generated by the dynamic password token can only be used one time, after that it will become invalid.&lt;br /&gt;
&lt;br /&gt;
; Random&lt;br /&gt;
: Passwords are randomly generated, and cannot be predicted based on statistics. &lt;br /&gt;
&lt;br /&gt;
; Easy to use&lt;br /&gt;
: Dynamic password is easy to use, no need for the user to remember the password, he only needs to read the password from the token at authentication time.&lt;br /&gt;
&lt;br /&gt;
; Loss report&lt;br /&gt;
: As the user always keeps the token with him, he can notice the loss of the device immediately and report it as lost to the administrator who will disable the token, reducing risks caused by loss.&lt;br /&gt;
&lt;br /&gt;
; Protection against Trojans/Network interception&lt;br /&gt;
: As the password is only valid one time, it is a way to protect oneself from peeking, Trojans, network interception. &lt;br /&gt;
&lt;br /&gt;
; Protection against brute force attack&lt;br /&gt;
: The fact that the password is dynamic, and so, that it always changes every time is a good protection against a brute force attack (The attacker has less than 60 seconds to crack the password and use it before it becomes invalid or before the user himself uses it).&lt;br /&gt;
&lt;br /&gt;
; Economic&lt;br /&gt;
: One token can be used for more than 3 years, thus saving on continual costs.&lt;br /&gt;
&lt;br /&gt;
; Computer-independent&lt;br /&gt;
: The dynamic password Token has a LED display, you do not need to connect it to your computer through the USB port. In this case, it is very safe to use, as there is no connection with the computer as it doesn’t have the same security risks as USB based token products and certificate based products (In the case of USB products, there is still some risk of getting infected by Trojans).  &lt;br /&gt;
&lt;br /&gt;
=== Static password weak points ===&lt;br /&gt;
&lt;br /&gt;
* In order to make a password easier to remember, users may often use birth date, phone number, etc. as a password. Hackers can use a dictionary attack in order to crack the password.&lt;br /&gt;
* If a password is used many times, hackers can calculate the password easily, by identifying the encrypted authentication information transmitted through network by using a interception and reply technique, causing critical information to be leaked.&lt;br /&gt;
* Because most current authentication information transmitted through a network is unencrypted, hackers can obtain important information about users through eavesdropping on the network data stream. They identify authentication information and intercept passwords from the network or telephone line.&lt;br /&gt;
* Hackers may even intercept a user’s password by using spies, social engineering or other methods.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password usage procedure ===&lt;br /&gt;
&lt;br /&gt;
* User requests connection to the web server&lt;br /&gt;
* Web server asks the user to authenticate&lt;br /&gt;
* User’s computer displays a login interface, asking user to input account name, password and dynamic password.&lt;br /&gt;
* User’s computer sends user authentication information to the web server&lt;br /&gt;
* Web server requests the Authentication Server to authenticate user’s identity.&lt;br /&gt;
* Authentication server returns authentication information to the web server. &lt;br /&gt;
* Web Server decides if the user can log in or not based on authentication results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UniOTP Dynamic Password Authentication ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic password authentication system is a dynamic password product developed by SecuTech Solution Inc. UniOTP dynamic password authentication products can efficiently reduce losses caused by password leaks, and offer a powerful protection for user information and intellectual property. UniOTP dynamic password authentication system can be integrated with many kinds of systems, providing a dynamic password authentication service fitting any users’ needs. The enterprise server uses Agent SDK to perform the integration with UniOTP dynamic password authentication system and unify user authentication service. UniOTP dynamic password system open architecture and module-based structure provides convenience for UniOTP dynamic password system and enterprise server integration. UniOTP dynamic password authentication system robustness, flexibility, high availability and easy maintenance provide the best dynamic password authentication experience to the user.&lt;br /&gt;
&lt;br /&gt;
=== Solution Description ===&lt;br /&gt;
&lt;br /&gt;
E-commerce’s web structure mainly uses a server/browser setup. UniOTP dynamic password system provides two integration methods:&lt;br /&gt;
&lt;br /&gt;
====First Solution====&lt;br /&gt;
&lt;br /&gt;
Use Agent SDK (or Agent software) to perform integration of Web server and UniOTP dynamic password authentication systems, providing a unified authentication for the consumer. UniOTP’s dynamic password system open architecture, high stability and user-friendly interactivity provides the best dynamic password authentication and user experience possible.&lt;br /&gt;
&lt;br /&gt;
[[Image:bussol img01.jpg|600px|Alt=user browser -&amp;gt; web server &amp;lt;-&amp;gt; UniOTP Agent &amp;lt;-&amp;gt; UniOTP Authentication server]]&lt;br /&gt;
&lt;br /&gt;
; Authentication process&lt;br /&gt;
: After having integrated the dynamic password authentication as above, the consumer login process is the following:&lt;br /&gt;
:* The consumer uses their browser to display the login page&lt;br /&gt;
:* The consumer fills in their username, password, dynamic password and sends the login request&lt;br /&gt;
:* The web server authentication module receives the data submitted by the user and uses UniOTP Agent to send this data to the UniOTP authentication server.&lt;br /&gt;
:* UniOTP authentication server processes user authentication information to complete the authentication, and returns authentication results to UniOTP Agent.&lt;br /&gt;
:* UniOTP Agent returns the authentication results to the Web server authentication module.&lt;br /&gt;
:* The web server decides if the user can login or not depending on the authentication results sent by UniOTP Agent. &lt;br /&gt;
:* The consumer is able to log in, or receives a log in error message if the authentication failed. &lt;br /&gt;
&lt;br /&gt;
====Second solution====&lt;br /&gt;
Use Server SDK to add dynamic password authentication function to the web server and perform integration of the Web Server System and UniOTP dynamic password authentication system. By using Server SDK integration to perform web application dynamic password authentication, you don’t need to rely on a UniOTP authentication server, but, compared to the previous method, this method requires the user to have strong development skills.&lt;br /&gt;
&lt;br /&gt;
[[Image:bussol img02.jpg|500px|alt=user browser &amp;lt;-&amp;gt; web server &amp;lt;-&amp;gt; UniOTP Authentication server]]&lt;br /&gt;
&lt;br /&gt;
; Authentication process&lt;br /&gt;
: Once you’ve integrated UniOTP dynamic password authentication according to the picture above, the authentication process is the following:&lt;br /&gt;
:* The consumer opens the login page in their browser.&lt;br /&gt;
:* The consumer fills in their username, password, dynamic password and sends the login request.&lt;br /&gt;
:* The Web server receives authentication information submitted by the user and calls UniOTP Authentication Module to complete user authentication.&lt;br /&gt;
:* The Web server decides to allow or deny consumer login depending on authentication results. &lt;br /&gt;
:* Consumer is allowed to log in, or receives an error message if authentication fails.&lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password protection for each type of transaction ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Transaction method &lt;br /&gt;
! UniOTP protection&lt;br /&gt;
|-&lt;br /&gt;
| OTC transaction&lt;br /&gt;
| The main security risk of OTC transaction is from plagiarism. The UniOTP dynamic password authentication system uses one-time valid passwords. After the password is used, it is disabled. Therefore UniOTP system can protect user information security effectively.&lt;br /&gt;
|-&lt;br /&gt;
| Dedicated terminal transaction&lt;br /&gt;
| The one time validity of UniOTP dynamic password provides excellent anti-peek feature. No matter what means exploited by an attacker to steal user information, the information is no longer valid, therefore UniOTP dynamic password authentication system can eliminate risk from dedicated terminal transaction. &lt;br /&gt;
|-&lt;br /&gt;
| Online transaction&lt;br /&gt;
| Online transactions are easily attacked. With features of one-time validity, randomness and unpredictability, UniOTP dynamic password protects user information from Trojans, network sniffing and replay attacks. &lt;br /&gt;
|-&lt;br /&gt;
| Telephone transaction&lt;br /&gt;
| The one-time validity feature enables UniOTP to eliminate password leakage caused by stealing password via telephone transaction. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password increases user authentication security ===&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic passwords are only valid once and cannot be predicted by any statistical mean, the attacker cannot deduce what will be the next password from the previous ones, and moreover already used passwords will immediately be disabled after being used once. By using dynamic passwords, you can avoid potential safety problems which are caused by plagiarism, Trojans, network monitoring and password leakage by consumers.&lt;br /&gt;
&lt;br /&gt;
=== UniOTP dynamic password authentication solution analysis ===&lt;br /&gt;
&lt;br /&gt;
* UniOTP dynamic password authentication helps financial institutions provide customers with a secure authentication service, and satisfy customers who require higher account security.&lt;br /&gt;
* Easy integration and maintenance reduce costs. &lt;br /&gt;
* Better account protection helps to improve the reputation of financial institutions.&lt;br /&gt;
* Secure transaction environments will attract more customers.&lt;br /&gt;
* Reduce administrative cost caused by password theft. &lt;br /&gt;
* Easy to use, does not need require any software or connection to a computer by using an interface.&lt;br /&gt;
* Reduce user costs; every UniOTP can be used for 3-5 years. &lt;br /&gt;
* Improve account security and reduce customer economic risk. &lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password authentication benefits analysis ===&lt;br /&gt;
&lt;br /&gt;
* UniOTP Dynamic authentication system helps financial organizations to strengthen its authentication method in order to satisfy consumer security needs.&lt;br /&gt;
* UniOTP dynamic password authentication system can be integrated simply and maintained easily, thus it reducing costs. &lt;br /&gt;
* UniOTP dynamic password authentication system assists e-business service providers to build a more secure platform for consumers and increase the credit and reputation of the e-business operator. &lt;br /&gt;
* UniOTP Dynamic password authentication protects consumer information from being stolen, and increases your users’ feeling of security.&lt;br /&gt;
* One token can be used from 3 to 5 years, reducing initial cost for the consumer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About UniOTP ==&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic password authentication system is a dynamic password authentication product designed by SecuTech Solution Inc. The company is committed to providing superior software protection and authentication experience for the user&#039;s personal data and intellectual property. Financial sector activities require that each party cooperates closely in order to provide the consumer a safer commercial environment and a more comfortable and appropriate consumer platform.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Business_Solution&amp;diff=1275</id>
		<title>UniOTP Business Solution</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Business_Solution&amp;diff=1275"/>
		<updated>2016-08-17T03:57:28Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Integration_Solutions]]&lt;br /&gt;
&lt;br /&gt;
== About This Guide ==&lt;br /&gt;
&lt;br /&gt;
This document is intended for use by management. UniOTP dynamic password authentication system is a dynamic password authentication product designed by SecuTech Solution Inc. The company is committed to providing superior software protection and authentication experience for the user&#039;s personal data and intellectual property. &lt;br /&gt;
&lt;br /&gt;
E-commerce requires that each party cooperates closely in order to provide to the consumer a safer environment and a more comfortable and appropriate consuming platform. It will become one of the most important business models in the future. But, while having brought convenience to people’s life, e-commerce also brings several hidden security risks. Attacks are becoming more sophisticated and diverse, and cases where a consumers’ profit has been infringed are rapidly increasing. Security is one of the most important obstacles to e-commerce development.&lt;br /&gt;
&lt;br /&gt;
Financial industry refers to those enterprises operating specialized financial products, including banking, insurance, trusts, securities industry, leasing industry, mortgage industry etc. With the application of network technology in the financial industry, people can enjoy convenience brought by the computer network, such as online banking and online security trading. But with this convenience, user information security is facing more serious challenges. Various network attack technologies result in economic losses to customers. As the first user information security shield, if authentication is not strong enough, it can cause severe security problem and economic loss.&lt;br /&gt;
&lt;br /&gt;
Authentication is the first step in assuring safety. This safety is directly related to the consumers’ personal benefits. Dynamic authentication is a technology that provides a strong authentication method to users and is considered to be a method that can solve today’s authentication related problems. The combination of dynamic password with e-commerce greatly raises the security level of electronic transactions, and better protects consumers’ benefits. Enterprise application refers to all kinds of information management systems which is applied by different enterprises, such as E-commerce, Enterprise resource planning (ERP), custom relationship management (CRM), etc. It will greatly improve enterprise management and manufacture efficiency by using enterprise applications to process cumbersome information.&lt;br /&gt;
&lt;br /&gt;
Some of the information maintained by enterprise applications contains confidential information which may involve the core enterprises interests, so security of this information is very important. Enterprise information security can be achieved by building a defense system, including anti-virus, firewall network monitors and etc.&lt;br /&gt;
&lt;br /&gt;
== Current Situation of Financial Transactions ==&lt;br /&gt;
&lt;br /&gt;
=== Transaction mode ===&lt;br /&gt;
&lt;br /&gt;
; OCT (Order confirmation transaction)&lt;br /&gt;
: When a customer goes to the counter and talks a teller to do their business directly, customers have to present their ID and bank card to tellers and provide password to complete authentication and do business.&lt;br /&gt;
&lt;br /&gt;
; Dedicated terminal&lt;br /&gt;
: Customers use a dedicated terminal provided by a financial institutions (ATM and POS) to process their transactions. Customers need to present credential card (bank card), customer ID and customer password to start independent transactions.&lt;br /&gt;
&lt;br /&gt;
; Online transaction&lt;br /&gt;
: Customers log in to financial institution websites to process business. In online transactions, customers normally provide an account name and password to complete the authentication process. After successfully logging on, customers can process their business online. &lt;br /&gt;
&lt;br /&gt;
; Telephone transaction&lt;br /&gt;
: Customers can process their business through calling the financial institutions hotline. Customers need to provide user credentials and password to complete authentication.&lt;br /&gt;
&lt;br /&gt;
=== Transaction security ===&lt;br /&gt;
&lt;br /&gt;
A variety of transaction modes provide different trading experiences to customers along with different security risk. &lt;br /&gt;
&lt;br /&gt;
; OCT security&lt;br /&gt;
: When customers provide their account number and passwords, there is a risk that criminals may peek at their passwords. After stealing the passwords, a criminal can log into customer accounts and perform illegal operations.&lt;br /&gt;
&lt;br /&gt;
; Dedicated terminal security&lt;br /&gt;
: When a user inputs their account number and password, there is a risk that criminals may record their password. Because dedicated terminals are for public use without any special protection, it is easy for criminals to steal a users’ identification information.&lt;br /&gt;
&lt;br /&gt;
; Online transaction security&lt;br /&gt;
: There is risk that online transaction user accounts and passwords are stolen by criminals, through listening, installing Trojans on a target computer, network hijacking, etc. &lt;br /&gt;
&lt;br /&gt;
; Telephone transaction security&lt;br /&gt;
: There is risk that user accounts and passwords are stolen by recording and eavesdropping. &lt;br /&gt;
&lt;br /&gt;
=== Common account security risks ===&lt;br /&gt;
&lt;br /&gt;
; Plagiarism leak&lt;br /&gt;
: Attackers steal customer account information by eye, and fake a user&#039;s customer ID to operate that customer&#039;s account illegally. This kind of risk usually occurs when customers do their business in public. &lt;br /&gt;
&lt;br /&gt;
; Install Trojans&lt;br /&gt;
: Attackers install Trojans on a target computer, and steal user accounts and passwords remotely. This security risk usually exists when users perform their business online by PC.&lt;br /&gt;
&lt;br /&gt;
; Network sniffing&lt;br /&gt;
: Attackers extract a user’s confidential information through eavesdropping on the data transmission network. &lt;br /&gt;
&lt;br /&gt;
; Replay attack&lt;br /&gt;
: Attackers simulate a user login, through sending authentication request data packages which were intercepted and recorded via network, to gain access to a user account.&lt;br /&gt;
&lt;br /&gt;
; User password guess&lt;br /&gt;
: If a user&#039;s password is too simple, using characters such as date of birth, anniversary and name, attackers can obtain user passwords by guessing these details easily.&lt;br /&gt;
&lt;br /&gt;
; Records leak&lt;br /&gt;
: If a password is too complicated and a user records it on paper, there is the risk of someone else seeing it.&lt;br /&gt;
&lt;br /&gt;
; Brute force&lt;br /&gt;
: Attackers can obtain passwords by an enumerating method, and just attempting different combinations.&lt;br /&gt;
&lt;br /&gt;
; Password sharing&lt;br /&gt;
: To remember various passwords for many different accounts, users will sometimes use the same password. If one password is stolen, criminals can try it on other accounts.&lt;br /&gt;
&lt;br /&gt;
== Security Analysis ==&lt;br /&gt;
&lt;br /&gt;
A general overview of the hidden security risks with e-commerce:&lt;br /&gt;
&lt;br /&gt;
; Falsification&lt;br /&gt;
: Business related information is falsified as it is been transferred over a network.&lt;br /&gt;
&lt;br /&gt;
; Information destruction&lt;br /&gt;
: Due to network devices or software malfunctioning, some data loss can happen.&lt;br /&gt;
&lt;br /&gt;
; Identification&lt;br /&gt;
: A third party who uses weak methods of identification could be used to gain another party’s identity and achieve illegal operations.&lt;br /&gt;
&lt;br /&gt;
; Information leaking&lt;br /&gt;
: Information of a transaction between two parties is read by a third party.&lt;br /&gt;
&lt;br /&gt;
UniOTP&#039;s dynamic authentication system helps solve identification related risks. Below are common patterns of identification security risks:&lt;br /&gt;
&lt;br /&gt;
* Consumer’s account name and password are stolen. &lt;br /&gt;
* The attacker installs a Trojan horse on a user’s computer to steal personal information such as bank account numbers.&lt;br /&gt;
* The attacker listens on the network, intercepts user information and gets the bank account number.&lt;br /&gt;
* For greater convenience, a consumer chooses an easy password such as their birth date, wedding anniversary, name, etc. making the password easy to guess for the attacker.&lt;br /&gt;
* The consumer stores password information in a certain place (file or notebook), that might lead to it being leaked.&lt;br /&gt;
* The attacker uses a brute force attack. &lt;br /&gt;
* The consumer uses the same password for different accounts.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Password Technology ==&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password overview ===&lt;br /&gt;
&lt;br /&gt;
Dynamic passwords, also called one time passwords, are considered to be one method capable of solving existing authentication security problems. It is widely used for many situations and users such as Banks, Bourse, e-commerce. A dynamic password generation algorithm, user’s private key and dynamic elements constitute the 3 elements used to generate the dynamic password. When you authenticate yourself, besides your account name and your password, you have to provide the dynamic password to be able to pass the authentication process. Time based dynamic password generation creates a new unpredictable random password automatically every 60 seconds. This password can only be used once. Event based dynamic password generates a new unpredictable random password every time you press its button. This password can only be used once. Challenge response dynamic password uses a challenge code to generate a new unpredictable password. When the user requests authentication, the server will return a challenge code, this challenge code will be used to generate this time’s password.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password characteristics ===&lt;br /&gt;
&lt;br /&gt;
; Dynamic&lt;br /&gt;
: Depending on the dynamic factor changes, the password generated by dynamic password token will change. Every password generated is different from each other.&lt;br /&gt;
&lt;br /&gt;
; Valid only one time&lt;br /&gt;
: Password generated by the dynamic password token can only be used one time, after that it will become invalid.&lt;br /&gt;
&lt;br /&gt;
; Random&lt;br /&gt;
: Passwords are randomly generated, and cannot be predicted based on statistics. &lt;br /&gt;
&lt;br /&gt;
; Easy to use&lt;br /&gt;
: Dynamic password is easy to use, no need for the user to remember the password, he only needs to read the password from the token at authentication time.&lt;br /&gt;
&lt;br /&gt;
; Loss report&lt;br /&gt;
: As the user always keeps the token with him, he can notice the loss of the device immediately and report it as lost to the administrator who will disable the token, reducing risks caused by loss.&lt;br /&gt;
&lt;br /&gt;
; Protection against Trojans/Network interception&lt;br /&gt;
: As the password is only valid one time, it is a way to protect oneself from peeking, Trojans, network interception. &lt;br /&gt;
&lt;br /&gt;
; Protection against brute force attack&lt;br /&gt;
: The fact that the password is dynamic, and so, that it always changes every time is a good protection against a brute force attack (The attacker has less than 60 seconds to crack the password and use it before it becomes invalid or before the user himself uses it).&lt;br /&gt;
&lt;br /&gt;
; Economic&lt;br /&gt;
: One token can be used for more than 3 years, thus saving on continual costs.&lt;br /&gt;
&lt;br /&gt;
; Computer-independent&lt;br /&gt;
: The dynamic password Token has a LED display, you do not need to connect it to your computer through the USB port. In this case, it is very safe to use, as there is no connection with the computer as it doesn’t have the same security risks as USB based token products and certificate based products (In the case of USB products, there is still some risk of getting infected by Trojans).  &lt;br /&gt;
&lt;br /&gt;
=== Static password weak points ===&lt;br /&gt;
&lt;br /&gt;
* In order to make a password easier to remember, users may often use birth date, phone number, etc. as a password. Hackers can use a dictionary attack in order to crack the password.&lt;br /&gt;
* If a password is used many times, hackers can calculate the password easily, by identifying the encrypted authentication information transmitted through network by using a interception and reply technique, causing critical information to be leaked.&lt;br /&gt;
* Because most current authentication information transmitted through a network is unencrypted, hackers can obtain important information about users through eavesdropping on the network data stream. They identify authentication information and intercept passwords from the network or telephone line.&lt;br /&gt;
* Hackers may even intercept a user’s password by using spies, social engineering or other methods.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic password usage procedure ===&lt;br /&gt;
&lt;br /&gt;
* User requests connection to the web server&lt;br /&gt;
* Web server asks the user to authenticate&lt;br /&gt;
* User’s computer displays a login interface, asking user to input account name, password and dynamic password.&lt;br /&gt;
* User’s computer sends user authentication information to the web server&lt;br /&gt;
* Web server requests the Authentication Server to authenticate user’s identity.&lt;br /&gt;
* Authentication server returns authentication information to the web server. &lt;br /&gt;
* Web Server decides if the user can log in or not based on authentication results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UniOTP Dynamic Password Authentication ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic password authentication system is a dynamic password product developed by SecuTech Solution Inc. UniOTP dynamic password authentication products can efficiently reduce losses caused by password leaks, and offer a powerful protection for user information and intellectual property. UniOTP dynamic password authentication system can be integrated with many kinds of systems, providing a dynamic password authentication service fitting any users’ needs. The enterprise server uses Agent SDK to perform the integration with UniOTP dynamic password authentication system and unify user authentication service. UniOTP dynamic password system open architecture and module-based structure provides convenience for UniOTP dynamic password system and enterprise server integration. UniOTP dynamic password authentication system robustness, flexibility, high availability and easy maintenance provide the best dynamic password authentication experience to the user.&lt;br /&gt;
&lt;br /&gt;
=== Solution Description ===&lt;br /&gt;
&lt;br /&gt;
E-commerce’s web structure mainly uses a server/browser setup. UniOTP dynamic password system provides two integration methods:&lt;br /&gt;
&lt;br /&gt;
====First Solution====&lt;br /&gt;
&lt;br /&gt;
Use Agent SDK (or Agent software) to perform integration of Web server and UniOTP dynamic password authentication systems, providing a unified authentication for the consumer. UniOTP’s dynamic password system open architecture, high stability and user-friendly interactivity provides the best dynamic password authentication and user experience possible.&lt;br /&gt;
&lt;br /&gt;
[[Image:bussol img01.jpg|600px|Alt=user browser -&amp;gt; web server &amp;lt;-&amp;gt; UniOTP Agent &amp;lt;-&amp;gt; UniOTP Authentication server]]&lt;br /&gt;
&lt;br /&gt;
; Authentication process&lt;br /&gt;
: After having integrated the dynamic password authentication as above, the consumer login process is the following:&lt;br /&gt;
:* The consumer uses their browser to display the login page&lt;br /&gt;
:* The consumer fills in their username, password, dynamic password and sends the login request&lt;br /&gt;
:* The web server authentication module receives the data submitted by the user and uses UniOTP Agent to send this data to the UniOTP authentication server.&lt;br /&gt;
:* UniOTP authentication server processes user authentication information to complete the authentication, and returns authentication results to UniOTP Agent.&lt;br /&gt;
:* UniOTP Agent returns the authentication results to the Web server authentication module.&lt;br /&gt;
:* The web server decides if the user can login or not depending on the authentication results sent by UniOTP Agent. &lt;br /&gt;
:* The consumer is able to log in, or receives a log in error message if the authentication failed. &lt;br /&gt;
&lt;br /&gt;
====Second solution====&lt;br /&gt;
Use Server SDK to add dynamic password authentication function to the web server and perform integration of the Web Server System and UniOTP dynamic password authentication system. By using Server SDK integration to perform web application dynamic password authentication, you don’t need to rely on a UniOTP authentication server, but, compared to the previous method, this method requires the user to have strong development skills.&lt;br /&gt;
&lt;br /&gt;
[[Image:bussol img02.jpg|500px|alt=user browser &amp;lt;-&amp;gt; web server &amp;lt;-&amp;gt; UniOTP Authentication server]]&lt;br /&gt;
&lt;br /&gt;
; Authentication process&lt;br /&gt;
: Once you’ve integrated UniOTP dynamic password authentication according to the picture above, the authentication process is the following:&lt;br /&gt;
:* The consumer opens the login page in their browser.&lt;br /&gt;
:* The consumer fills in their username, password, dynamic password and sends the login request.&lt;br /&gt;
:* The Web server receives authentication information submitted by the user and calls UniOTP Authentication Module to complete user authentication.&lt;br /&gt;
:* The Web server decides to allow or deny consumer login depending on authentication results. &lt;br /&gt;
:* Consumer is allowed to log in, or receives an error message if authentication fails.&lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password protection for each type of transaction ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Transaction method &lt;br /&gt;
| UniOTP protection&lt;br /&gt;
|-&lt;br /&gt;
| OTC transaction&lt;br /&gt;
| The main security risk of OTC transaction is from plagiarism. The UniOTP dynamic password authentication system uses one-time valid passwords. After the password is used, it is disabled. Therefore UniOTP system can protect user information security effectively.&lt;br /&gt;
|-&lt;br /&gt;
| Dedicated terminal transaction&lt;br /&gt;
| The one time validity of UniOTP dynamic password provides excellent anti-peek feature. No matter what means exploited by an attacker to steal user information, the information is no longer valid, therefore UniOTP dynamic password authentication system can eliminate risk from dedicated terminal transaction. &lt;br /&gt;
|-&lt;br /&gt;
| Online transaction&lt;br /&gt;
| Online transactions are easily attacked. With features of one-time validity, randomness and unpredictability, UniOTP dynamic password protects user information from Trojans, network sniffing and replay attacks. &lt;br /&gt;
|-&lt;br /&gt;
| Telephone transaction&lt;br /&gt;
| The one-time validity feature enables UniOTP to eliminate password leakage caused by stealing password via telephone transaction. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password increases user authentication security ===&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic passwords are only valid once and cannot be predicted by any statistical mean, the attacker cannot deduce what will be the next password from the previous ones, and moreover already used passwords will immediately be disabled after being used once. By using dynamic passwords, you can avoid potential safety problems which are caused by plagiarism, Trojans, network monitoring and password leakage by consumers.&lt;br /&gt;
&lt;br /&gt;
=== UniOTP dynamic password authentication solution analysis ===&lt;br /&gt;
&lt;br /&gt;
* UniOTP dynamic password authentication helps financial institutions provide customers with a secure authentication service, and satisfy customers who require higher account security.&lt;br /&gt;
* Easy integration and maintenance reduce costs. &lt;br /&gt;
* Better account protection helps to improve the reputation of financial institutions.&lt;br /&gt;
* Secure transaction environments will attract more customers.&lt;br /&gt;
* Reduce administrative cost caused by password theft. &lt;br /&gt;
* Easy to use, does not need require any software or connection to a computer by using an interface.&lt;br /&gt;
* Reduce user costs; every UniOTP can be used for 3-5 years. &lt;br /&gt;
* Improve account security and reduce customer economic risk. &lt;br /&gt;
&lt;br /&gt;
=== UniOTP Dynamic password authentication benefits analysis ===&lt;br /&gt;
&lt;br /&gt;
* UniOTP Dynamic authentication system helps financial organizations to strengthen its authentication method in order to satisfy consumer security needs.&lt;br /&gt;
* UniOTP dynamic password authentication system can be integrated simply and maintained easily, thus it reducing costs. &lt;br /&gt;
* UniOTP dynamic password authentication system assists e-business service providers to build a more secure platform for consumers and increase the credit and reputation of the e-business operator. &lt;br /&gt;
* UniOTP Dynamic password authentication protects consumer information from being stolen, and increases your users’ feeling of security.&lt;br /&gt;
* One token can be used from 3 to 5 years, reducing initial cost for the consumer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About UniOTP ==&lt;br /&gt;
&lt;br /&gt;
UniOTP dynamic password authentication system is a dynamic password authentication product designed by SecuTech Solution Inc. The company is committed to providing superior software protection and authentication experience for the user&#039;s personal data and intellectual property. Financial sector activities require that each party cooperates closely in order to provide the consumer a safer commercial environment and a more comfortable and appropriate consumer platform.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Console_Tool&amp;diff=1015</id>
		<title>UniToken Console Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Console_Tool&amp;diff=1015"/>
		<updated>2016-08-17T02:18:58Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Tools]]&lt;br /&gt;
&lt;br /&gt;
UniToken Console is used for the management of devices, including specifying user permissions and maintaining certificates and the file system.&lt;br /&gt;
&lt;br /&gt;
== Device Management ==&lt;br /&gt;
&lt;br /&gt;
=== Logon ===&lt;br /&gt;
To log onto the device:&lt;br /&gt;
&lt;br /&gt;
# Select the corresponding UniToken from the UniToken icon in the device list.  &lt;br /&gt;
# Input the corresponding PIN in PIN.&lt;br /&gt;
# Click Logon.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img01.jpg|500px|alt=&#039;logged on successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img02.jpg|500px|alt=UniToken Console device list]]&lt;br /&gt;
&lt;br /&gt;
After successfully logging on, the current user will be granted corresponding permissions.&lt;br /&gt;
&lt;br /&gt;
=== Logoff ===&lt;br /&gt;
&lt;br /&gt;
To log off the device:&lt;br /&gt;
&lt;br /&gt;
# Select the UniToken in the device list.&lt;br /&gt;
# Click Logoff.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img03.jpg|500px|alt=admin permissions reverting to guest permissions after log off]]&lt;br /&gt;
&lt;br /&gt;
Once logged off, the Console will revert back to Guest permissions. When the UniToken device is initially connected to the computer, the device automatically defaults to the &amp;quot;Guest&amp;quot; permission. If an incorrect User PIN is entered over 15 times in succession (this number, known as the Maximal Attempt Times, by default 15, but may be changed by the administrator), the UniToken device will automatically lock itself to prevent any further login attempts as a security measure, regardless if the correct PIN is entered afterwards. The administrator must log in to unlock the UniToken device.&lt;br /&gt;
&lt;br /&gt;
== User Management ==&lt;br /&gt;
&lt;br /&gt;
Information about the UniToken device, such as UniToken ID, number of stored files, Current Permission, Used and Remaining Space, can be found under the User tab, as shown below. Functions that can be performed under the User tab depend on the permissions of the current user, and include Edit UniToken ID, Reset User PIN, Unlock, Edit SID and Change Admin PIN. &lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img04.jpg|500px|alt=UniToken Console user management tab]]&lt;br /&gt;
&lt;br /&gt;
=== Edit UniToken ID (Admin, User) ===&lt;br /&gt;
&lt;br /&gt;
The UniToken ID is the label assigned to the UniToken device to facilitate quick and easy identification of the token. To modify the UniToken ID:&lt;br /&gt;
&lt;br /&gt;
# Enter a UniToken ID (maximum 32 characters).&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img05.jpg|500px|alt=inputting a new UniToken ID]]&lt;br /&gt;
&lt;br /&gt;
=== Reset User PIN (Admin) ===&lt;br /&gt;
&lt;br /&gt;
Under Reset User PIN, the Admin can reset the User PIN. To reset the PIN:&lt;br /&gt;
&lt;br /&gt;
# Enter a new User PIN under New PIN.&lt;br /&gt;
# Re-enter the new User PIN under Verify PIN.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img06.jpg|500px|alt=resetting a user PIN]]&lt;br /&gt;
&lt;br /&gt;
=== Unlock (Admin) ===&lt;br /&gt;
&lt;br /&gt;
If the maximum number of incorrect login attempts has been reached and, as a result, the UniToken device has locked itself, the Administrator must unlock the UniToken device to continue using the UniToken. To do so, the Administrator must log in, navigate to Unlock found under User, and complete the following steps:&lt;br /&gt;
&lt;br /&gt;
# Enter a new User PIN user under New User PIN.&lt;br /&gt;
# Re-enter the new User PIN under Verify User PIN.&lt;br /&gt;
# Set the maximum number of incorrect PIN login attempts, between 0 and 15, under Pin attempts limit (0 - 15).&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img07.jpg|500px|alt=unlocking the admin account]]&lt;br /&gt;
&lt;br /&gt;
=== Edit SID (Admin, User) ===&lt;br /&gt;
&lt;br /&gt;
Software ID (SID) is a modifiable 32-bit unsigned integer that can be used a secondary form of identification for UniToken devices. The SID can be set to identify devices either through a software product’s individual serial number, or any unique or shared number to identify a batch of tokens which share some common feature(s). &lt;br /&gt;
 &lt;br /&gt;
To change the SID:&lt;br /&gt;
&lt;br /&gt;
# Enter the new SID.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img08.jpg|500px|alt=inputting a new SID between 0 and 4,294,967,295]]&lt;br /&gt;
&lt;br /&gt;
=== Change Admin PIN (Admin) ===&lt;br /&gt;
&lt;br /&gt;
Logged in as the admin, to change the admin PIN:&lt;br /&gt;
&lt;br /&gt;
# Enter the old Admin PIN under Old PIN.&lt;br /&gt;
# Enter the new Admin PIN under New PIN.&lt;br /&gt;
# Re-enter the new Admin PIN under Verify PIN.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
=== Change User PIN (User) ===&lt;br /&gt;
&lt;br /&gt;
When logged into the UniToken device under the User permissions, the User has access to: Edit UniToken ID, and Change User PIN.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img10.jpg|500px|alt=changing user PIN]]&lt;br /&gt;
&lt;br /&gt;
=== Disconnection ===&lt;br /&gt;
&lt;br /&gt;
If the UniToken device is removed from the computer at any point in time, the console will display a warning message to reconnect the UniToken device.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img11.jpg|500px|alt=&#039;please insert UniToken&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== File System Management ==&lt;br /&gt;
&lt;br /&gt;
UniToken provides a secure file system for the storage of digital credentials and files using the three-level permission system. Under the File tab, a list of the files stored on the device can be viewed, including their respective number, name, size and file permission, as well as the ability to delete files and view the remaining space.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img12.jpg|500px|alt=UniToken Console file system tab]]&lt;br /&gt;
&lt;br /&gt;
=== Create a file ===&lt;br /&gt;
&lt;br /&gt;
When creating a file, the filename, file size and file permission of the file to be created are required.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img13.jpg|500px|alt=filename; file size; file permissiosn (guest r/w, user r/w, admin r/w)]]&lt;br /&gt;
&lt;br /&gt;
=== Delete a file ===&lt;br /&gt;
&lt;br /&gt;
To delete a file:&lt;br /&gt;
&lt;br /&gt;
# Select the file from the File List under the File tab that you wish to delete.&lt;br /&gt;
# Click Delete.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img14.jpg|500px|alt=displaying current file list]]&lt;br /&gt;
&lt;br /&gt;
A pop-up message will appear if the file was deleted successfully.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img15.jpg|500px|alt=&#039;file deleted successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
&lt;br /&gt;
Formatting the UniToken device resets the UniToken’s ID, User PIN, and Certifictate Container, located under Format as shown below. Notably, when formatting the token, the option to either enable or disable the Certificate Container is available. If the Certificate Container is created, Users can import and use certificates on the device. Without the Certificate Container, Users will not be able to do so. &#039;&#039;&#039;Note: Formatting the UniToken device irreversibly deletes all data on the device! Ensure formatting the UniToken device is required before continuing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img16.jpg|500px|alt=UniToken Console format tab]]&lt;br /&gt;
&lt;br /&gt;
== Certificate Management ==&lt;br /&gt;
&lt;br /&gt;
In the Certificate tab, a summary of certificates on the token can be viewed. Functions available to Users include viewing and importing certificates.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img17.jpg|500px|alt=UniToken Console certificate tab]] &lt;br /&gt;
&lt;br /&gt;
=== View ===&lt;br /&gt;
&lt;br /&gt;
To view a specific digital certificate:&lt;br /&gt;
&lt;br /&gt;
# Select a certificate from the list under the Certificate tab.&lt;br /&gt;
# Click View.&lt;br /&gt;
&lt;br /&gt;
A window will appear displaying all related information of the selected certificate.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img18.jpg|500px|alt=certificate: issued; issuer; validity; signature algorithm; serial number; public key; version]] &lt;br /&gt;
&lt;br /&gt;
=== Import  ===&lt;br /&gt;
&lt;br /&gt;
To import a digital certificate:&lt;br /&gt;
&lt;br /&gt;
# Click Import.&lt;br /&gt;
# Browse to the directory of the certificate.&lt;br /&gt;
# With the chosen certificate selected, click Open.&lt;br /&gt;
# Input a password for the imported certificate.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenconsole img19.jpg|500px|alt=&#039;please input certificate password&#039; message]]&lt;br /&gt;
&lt;br /&gt;
After importing the certificate, the certificate will appear in the list of stored digital certificates on the token.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_VPN_Solution&amp;diff=1206</id>
		<title>UniOTP VPN Solution</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_VPN_Solution&amp;diff=1206"/>
		<updated>2016-08-17T01:47:48Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Integration_Solutions]]&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
&lt;br /&gt;
The following steps apply to Windows Server 2003 and Windows XP where relevant. For recent versions of Windows, the steps below may differ slightly.&lt;br /&gt;
&lt;br /&gt;
== About This Guide ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Check server-client noun--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VPN (Virtual Private Network) refers to a computer and firewall with VPN capability that can establish a secure tunnel between the server and a client over the Internet. In the tunnel initiator (server), the user&#039;s private data is encapsulated and encrypted and then transmitted through the Internet; on the receiver side (client), the received data is unpacked and decrypted. VPN services are installed with Windows 2000/2003. This manual is based on the installed VPN service, named &amp;quot;Routing and Remote Access&amp;quot;. This service can be found from &amp;lt;code&amp;gt;Start Menu - All Programs - Administrative Tools - Services&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Routing and Remote Access Configuration ==&lt;br /&gt;
&lt;br /&gt;
From &amp;lt;code&amp;gt;Start Menu - All Programs - Administrative Tools - [Routing and Remote Access]&amp;lt;/code&amp;gt; open the Routing and Remote Access control panel. Right-Click on Routing and Remote Access on the left-side of the panel, then select Add server to add a VPN server.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img01.jpg|500px|alt=routing and remote access main window]]&lt;br /&gt;
&lt;br /&gt;
Right click on the newly-added server and select Configure and Enable Routing and Remote Access. If the Windows Firewall/Internet Connection Sharing (ICS) service is enabled, the Routing and Remote Access service cannot be turned on, and an ICS service warning message will appear. Configure the ICS service to allow the above operation, then redo the above steps. After Routing and Remote Access is enabled, the following configuration wizard will appear. In the Routing and Remote Access Server Setup Wizard window, under the Configuration step, select Remote access (dial-up or VPN) then click Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img02.jpg|500px|alt=choose remote access (dial-up or VPN)]]&lt;br /&gt;
&lt;br /&gt;
On the Remote Access step, select VPN then click Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img03.jpg|500px|alt=choose VPN then next]]&lt;br /&gt;
&lt;br /&gt;
Click Finish after completing the remainder of the wizard to complete the VPN installation.&lt;br /&gt;
&lt;br /&gt;
== Configuring the VPN Server with UniOTP ==&lt;br /&gt;
&lt;br /&gt;
After successfully setting up and configuring the VPN Server, open &amp;lt;code&amp;gt;Start Menu - All Programs - Administrative Tools&amp;lt;/code&amp;gt; and open the Routing and Remote Access control panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img06.jpg|500px|alt=routing and remot access control panel]]&lt;br /&gt;
&lt;br /&gt;
In the Routing and Remote Access window, right-click on the respective server from the directory list and select Properties.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img07.jpg|500px|alt=selecting properties option]]&lt;br /&gt;
&lt;br /&gt;
In the Properties window, select the Security tab, and under Authentication provider, select RADIUS Authentication from the drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img08.jpg|500px|alt=RADIUS authentication selection]]&lt;br /&gt;
&lt;br /&gt;
Click on Configure to configure the RADIUS Authentication server. In the configuration panel, click on Add to add a Radius authentication server.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img09.jpg|500px|alt=adding a RADIUS authentication server]]&lt;br /&gt;
&lt;br /&gt;
Under the Add RADIUS Server window, fill in the UniOTP authentication server name and server details. Afterwards, click on Change next to Secret to change the RADIUS communication shared key.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img10.jpg|500px|alt=server name; secret; time-out (s); initial score; port]]&lt;br /&gt;
&lt;br /&gt;
In the Change Secret window, configure the communication shared key, then click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img11.jpg|500px|alt=changing secret value]]&lt;br /&gt;
&lt;br /&gt;
The RADIUS Authentication window should now a indicate a Radius server has been added. Click on OK to save the authentication server configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img12.jpg|500px|alt=added server 192.168.1.225 with initial score 30]]&lt;br /&gt;
&lt;br /&gt;
Returning to the Properties window, click on Authentication Methods.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img13.jpg|500px|alt=certificate properties tab]]&lt;br /&gt;
&lt;br /&gt;
In the Authentication Methods window, check the check-boxes: Extensible authentication protocol (EAP); Encrypted authentication (CHAP); and Unencrypted password (PAP). &#039;&#039;Please Note: Authentication methods Microsoft encrypted authentication version 2 (MS-CHAP v2); Microsoft encrypted authentication (MS-CHAP); and Shiva Password Authentication Protocol (SPAP) are not supported.&#039;&#039; Click on OK to apply settings and exit the window.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img14.jpg|500px|alt=authentication methods window]]&lt;br /&gt;
&lt;br /&gt;
To apply configuration changes, restart the VPN server by right-clicking the server, selecting All Tasks, Restart.&lt;br /&gt;
&lt;br /&gt;
[[Image:vpnsol img15.jpg|500px|alt=restarting the VPN server]]&lt;br /&gt;
&lt;br /&gt;
== Add VPN Client ==&lt;br /&gt;
&lt;br /&gt;
Open the Network Connections control panel found in the Control Panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img16.jpg|500px|alt=network connections control panel]]&lt;br /&gt;
&lt;br /&gt;
On the left-hand side, under Network Tasks, click on Create a new connection.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img17.jpg|500px|alt=&#039;connect to the network at my workplace&#039; option]]&lt;br /&gt;
&lt;br /&gt;
A New Connection Wizard window will appear. On the Network Connection Type step, select Connect to the network at my workplace, then click Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img18.jpg|500px|alt=&#039;virtual private network connection&#039; option]]&lt;br /&gt;
&lt;br /&gt;
On the Network Connection step, select Virtual Private Network connection, then click Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img19.jpg|500px|alt=enter host name or IP address]]&lt;br /&gt;
&lt;br /&gt;
On the VPN Server Selection step, enter the host name or IP address of the VPN to connect to, then click Next. If you wish, you can choose to Add a shortcut to this connection to my desktop on the final step, then click Finish to complete the wizard.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img21.jpg|500px|adding a desktop shortcut option]]&lt;br /&gt;
&lt;br /&gt;
When attempting to connect to the VPN server, a connection window similar to the window below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img22.jpg|500px|alt=VPN connection window]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Check--&amp;gt;&lt;br /&gt;
If you have added a VPN access user, and bound this user to a dynamic token, you can use that dynamic password and PIN (if OTP+PIN authentication method has been selected) to connect to the VPN. When following this manual, a Guest account has been added to VPN Server and to the UniOTP dynamic password authentication system, therefore Guest and OTP + PIN (for Guest account the authentication method is OTP + PIN) need to be filled into this window. Please Click Connect. &lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img23.jpg|500px|alt=VPN connection window with details entered]]&lt;br /&gt;
&lt;br /&gt;
The following error may happen:&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img24.jpg|500px|alt=&#039;local computer does not support required encryption&#039; message]]&lt;br /&gt;
&lt;br /&gt;
To solve this error, please click Properties.&lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img25.jpg|500px|alt=properties is located at the bottom of the connection window]]&lt;br /&gt;
&lt;br /&gt;
Deselect Require data encryption, click on OK, and click Connect to start the connection again. &lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img26.jpg|500px|alt=&#039;require data encryption (disconnect if none)&#039; option in security]]&lt;br /&gt;
&lt;br /&gt;
After connecting to the VPN server successfully, on the lower-right corner of the screen, the following information will appear indicating that the configuration of VPN with UniOTP authentication has been completed successfully. &lt;br /&gt;
&lt;br /&gt;
[[Image:Vpnsol img27.jpg|300px|alt=&#039;user is now connected&#039; pop-up]]&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
===Common errors upon VPN clients connecting to the server===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Error Code&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Reason&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 800&lt;br /&gt;
| Unable to establish VPN connection. The VPN server may be un-reachable, or security parameters may not be configured properly for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 619&lt;br /&gt;
| In most cases, it is caused by the NAT-T function, used for clients to connect to the Internet, has been turned off, or a VPN that does not support NAT-T in GRE and PPTP protocol. To solve this problem, you can turn on the gateway’s NAT-T. If this error happens frequently, please change the gateway equipment.&lt;br /&gt;
|-&lt;br /&gt;
| 721&lt;br /&gt;
| In most cases, this problem is caused by the client system. If users are using Windows XP SP2, this problem may happen, and you can solve it through modifying the registry entry: &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\&amp;amp;lt;000x&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;amp;lt;000x&amp;amp;gt; is the network adapter of the Satellite WAN port (PPTP) driver. In this key, create a new DWORD value, name ValidataAddress with value 0. If the configuration of the PPP protocol on the server is not correct, it will cause this problem as well.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 718&lt;br /&gt;
| Wrong user name or password when connecting, or authentication service error occurs on authentication server.&lt;br /&gt;
|-&lt;br /&gt;
| 734&lt;br /&gt;
| Normally caused by VPN configuration problems, such as PPP configuration, unsupported or poorly supported MPPE.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Management_System&amp;diff=1825</id>
		<title>UniOTP Management System</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Management_System&amp;diff=1825"/>
		<updated>2016-08-17T01:11:08Z</updated>

		<summary type="html">&lt;p&gt;Bao: /* Search Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The UniOTP Management System is a web-based management system. Administration and maintenance operations concerning dynamic password system configuration such as user information, token information, operator information and log information can be performed with this system. The system employs different levels of privileges for compartmentalization of information and tasks.&lt;br /&gt;
&lt;br /&gt;
== Operator Login ==&lt;br /&gt;
&lt;br /&gt;
On the login page of the UniOTP Management System, input the Operator ID in the OperatorID field and enter the corresponding password in the Password field. Click Submit to log in. The default Operator ID for the Super Operator is &amp;quot;1000000001&amp;quot; with the corresponding default password &amp;quot;123456&amp;quot;, both without quotation marks.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img01.jpg|350px|alt=UniOTP Management login screen]]&lt;br /&gt;
&lt;br /&gt;
If Operator login was successful, the administration interface will be accessible on the main page, otherwise an error message will appear if the login credentials are incorrect. From the administration interface, actions to perform can be chosen from the menu on the left or from the shortcut icons in the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img02.jpg|500px|alt=UniOtp Management system main window]]&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&lt;br /&gt;
To log out of the system, click Exit System located at the top-right corner of the window, as shown in the screenshot above. For security purposes, please always use this method to log out of the system.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img03.jpg|500px|alt=UniOTP Management logged out of system]]&lt;br /&gt;
&lt;br /&gt;
== Change Password ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Change Password from either under the Operator Management menu on the left or the Change Password shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img04.jpg|500px|alt=UniOTP Management changing passwords icon]]&lt;br /&gt;
&lt;br /&gt;
In the Change Password interface, input the current password in the Old Password field, and enter the new password in both the New Password and Confirm fields, enter the new password. Click Submit to apply changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img05.jpg|500px|alt=UniOTP Management change password screen]]&lt;br /&gt;
&lt;br /&gt;
A message will appear indicating if the password change was successful or unsuccessful.&lt;br /&gt;
&lt;br /&gt;
== Search User ==&lt;br /&gt;
&amp;lt;!--Check - Cloud--&amp;gt;&lt;br /&gt;
From the administration interface, click on User Search from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img08.jpg|500px|alt=UniOTP Management user search icon]]&lt;br /&gt;
&lt;br /&gt;
Users can be searched by either User ID or Username. Fill either field then click Search.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img09.jpg|500px|alt=UniOTP Management user search screen]]&lt;br /&gt;
&lt;br /&gt;
For example, if searching User ID &amp;quot;US20110127002&amp;quot;, without quotation marks.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img10.jpg|500px|alt=searching user ID US20110127002]]&lt;br /&gt;
&lt;br /&gt;
If you enter &amp;quot;t&amp;quot; in the Username field, you will see information about all users whose username contains the character &#039;t&#039;, you can choose the user you want to manage, modify or delete.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img11.jpg|500px|alt=selecting a user to modify]]&lt;br /&gt;
&lt;br /&gt;
== Add a User ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Add User from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img12.jpg|500px|alt=UniOTP Management add user icon]]&lt;br /&gt;
&lt;br /&gt;
In the Add User interface, fill in the corresponding fields: username (unique) in Username; user ID (unique) in UserID; contact number in Tel; the serial ID of the corresponding UniOTP device for the user in Serial; email address in Email; the user PIN; and authentication method (OTP+PIN, generated one-time password with the user PIN, is recommended for maximum security). Either username or user ID can be used interchangeably when authenticating.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img13.jpg|500px|alt=UniOTP Management adding user window]]&lt;br /&gt;
&lt;br /&gt;
If an invalid token serial number is entered, the error message below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img14.jpg|500px|alt=&#039;invalid token&#039; message]]&lt;br /&gt;
&lt;br /&gt;
After inputting valid user information, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img15.jpg|500px|alt=user fields filled]]&lt;br /&gt;
&lt;br /&gt;
The notification below will appear if the user has been added successfully.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img16.jpg|500px|alt=&#039;user xxx added successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Change User State ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Add User from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img17.jpg|500px|alt=UniOTP Management change user state icon]]&lt;br /&gt;
&lt;br /&gt;
Under the Change User State interface, functions such as flagging a token as lost/stolen, unflagging lost/stolen tokens and permanently removing tokens can be performed. Functions are performed on users based on the user&#039;s User ID.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img18.jpg|500px|alt=UniOTP Management changing user state window]]&lt;br /&gt;
&lt;br /&gt;
== Resynchronize Token ==&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, a token may desynchronize with the server. In this case, the token must be resynchronized with the server to be able to authenticate with it. This can be done from the Token Reparation interface. From the administration interface, click on Token Reparation from either under the User Management menu on the left or the Token Reparation shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img19.jpg|500px|alt=UniOTP Management token repair icon]]&lt;br /&gt;
&lt;br /&gt;
To resynchronize the token, the User ID of the user whom the token is assigned under and the token itself is needed. Input the User ID in UserID. Afterwards, generate a one-time password from the token device, then input the generated OTP in First OTP. Generate a second OTP immediately after the previously generated OTP, and input the generated OTP in Second OTP. Two consecutive one-time passwords are needed in order for the the server and the token to be synchronized. When done, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img20.jpg|500px|alt=UniOTP Management token repair window]]&lt;br /&gt;
&lt;br /&gt;
The message below will appear if synchronization is successful.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img21.jpg|500px|alt=&#039;token repair successful&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the two generated one-time passwords are not consecutive with one another, or if the generated OTPs exceeds a certain generation range, synchronization will fail, and an error message similar to the one below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img22.jpg|500px|alt=&#039;token repair failed&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Add Operator ==&lt;br /&gt;
&lt;br /&gt;
Under the Add Operator interface, new operators can be added into the system. The user to be added should not be one with a higher privilege level than the operator privilege level, otherwise the operation will be denied. From the administration interface, click on Add Operator from either under the Operator Management menu on the left or the Add Operator shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img23.jpg|500px|alt=UniOTP Management add operator icon]]&lt;br /&gt;
&lt;br /&gt;
In the Add Operator interface, input the Name, Password and Confirm password, and select the privilege level in the Level list, then click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img24.jpg|500px|alt=UniOTP Management add operator window]]&lt;br /&gt;
&lt;br /&gt;
If the operation is successful, the following message will be returned. The Operator ID of newly added operator will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img25.jpg|500px|alt=&#039;operator added successfully, operator ID is: ...&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the privileges of the new user is higher than the operator&#039;s, or that of the current user, the following error message will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img26.jpg|500px|alt=&#039;insufficient rights to add new operator&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Delete Operator ==&lt;br /&gt;
&lt;br /&gt;
The Delete Operator interface provides removal of an operator from the database. An operator can only be deleted if the privilege level of the current user is higher than the privilege level of the operator to be deleted. From the administration interface, click on Delete Operator from either under the Operator Management menu on the left or the Delete Operator shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img27.jpg|500px|alt=UniOTP Management delete operator icon]]&lt;br /&gt;
&lt;br /&gt;
In the Delete Operator interface, operators can be removed in one of two methods: An individual operator account can be deleted by Operator ID; multiple operator accounts can be deleted by a range of Operator IDs, specifying the starting Operator ID under BeginID and last Operator ID range under EndID. All operators in this specified range, inclusive, will be deleted. Input the corresponding data into either forms, then click Submit or Execute.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img28.jpg|500px|alt=UniOTP Management delete operator window]]&lt;br /&gt;
&lt;br /&gt;
If the current user does not possess sufficient privileges to delete the specified or affected operator, the following error message will be returned.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img29.jpg|500px|alt=&#039;insufficient rights to delete this operator&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If deletion was successful, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img30.jpg|500px|alt=&#039;operation succeeded&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Search Operator ==&lt;br /&gt;
&lt;br /&gt;
Under the Operator Search interface, information concerning operator accounts can be searched and viewed. Only operator accounts whose privilege level is less than the current user can be searched. From the administration interface, click on Operator Search from either under the Operator Management menu on the left or the Operator Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img31.jpg|500px|alt=UniOTP Management operator search icon]]&lt;br /&gt;
&lt;br /&gt;
In the Operator Information Search interface, operators can be searched in one of two methods: An individual operator account can be searched by Operator ID; multiple operator accounts can be searched by a range of Operator IDs, specifying the start Operator ID under BeginID and end Operator ID range under EndID, and, in addition, by name. All found operators in this specified range, inclusive, will be returned. Input the corresponding data into either form, then click Submit or Execute.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img32.jpg|500px|alt=UniOTP Management operator information search window]]&lt;br /&gt;
&lt;br /&gt;
To illustrate, if &amp;quot;1000000001&amp;quot;, without quotation marks, as the Operator ID was entered under OperatorID then submitted, information about the operator account whose Operator ID is 1000000001 will be returned. However, as 1000000001 is, by default, the Super Operator ID, only the Super Operator has sufficient privileges to view the specified search criteria, and hence is the only operator who can perform and view this search. Returned operators can be deleted by clicking the icon to the right of the operator in the returned list. Deletion of operators adhere to the requirements in the subsection above, in that operators can only be deleted if the privilege level of the current user is higher the the privilege level of the operator to be deleted. Searching by Operator ID will yield a results page similar to the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img33.jpg|500px|alt=operator ID; password; operator index; operator name; domain]]&lt;br /&gt;
&lt;br /&gt;
Searching operators in a specific range will yield a results page similar to the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img34.jpg|500px|alt=multiple operators listed in search results]]&lt;br /&gt;
&lt;br /&gt;
== Batch Import Token/User==&lt;br /&gt;
&amp;lt;!--Check--&amp;gt;&lt;br /&gt;
The Token/User Batch Import interface allows the service provider to import multiple tokens in the database. It also can import many users bound to a token at once inside the database. Refer to the picture below to enter the corresponding interface.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img35.jpg|500px|alt=UniOTP Management token import icon]]&lt;br /&gt;
&lt;br /&gt;
In order to import Token files, you need to provide decryption keys for those files, there is no decryption key function for user import. The extension for token files and user information files is .unif.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img36.png|500px|alt=UniOTP Management token/user import window]]&lt;br /&gt;
&lt;br /&gt;
If there is an error with the secret key or if the file is corrupted, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img37.png|500px|alt=&#039;bad file&#039; message]]&lt;br /&gt;
&lt;br /&gt;
The token file part will successfully prompt an error for the token, there is no line in front of the failure of the token serial number corresponding to the record, you can export the information to the service provider to determine the cause of the error (duplicate imports should be excluded due to errors)&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img38.png|500px|alt=&#039;please send information to provider&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the token import succeeds, a message will be displayed specifying the number of token imported&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img39.png|500px|alt=&#039;1 line affected&#039; message; one line per token]]&lt;br /&gt;
&lt;br /&gt;
In the case user import has failed, the following error message, containing the details about the concerned users, will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img40.png|500px|alt=SQL user details; invalid token error being displayed]]&lt;br /&gt;
&amp;lt;!--/Check--&amp;gt;&lt;br /&gt;
== Search Log ==&lt;br /&gt;
&lt;br /&gt;
The log search function provides an interface for searching and viewing logs from the UniOTP Management System, including regular operation and user authentication logs. From the administration interface, click on Log Search from either under the Database Management menu on the left or the Log Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img41.png|500px|alt=UniOTP Management search log icon]]&lt;br /&gt;
&lt;br /&gt;
In the Log Search interface, various search criteria is provided to narrow search of logs. Under LogDomain, Syslog refers to system task logs, and Commonlog refers to user authentication logs. Under Search Mode, logs can be optionally filtered by specific operators by selecting Specific Operator, otherwise all logs from all operators will be returned with All. In the QueryMode field you can choose logs for a specific operator, once you have specified an operator, the logs information displayed are only for the specified operator (If you specify username, the&lt;br /&gt;
authentication logs information for this user only will be displayed).&lt;br /&gt;
&lt;br /&gt;
Under OperatorID, an Operator ID or username must be entered if Specific Operator was selected in Search Mode. All logs for the specified operator will be returned. Under Begin Date and End Date, logs can be filtered between two time periods. Set the two fields of logs from Begin Date to End Date to return, in order of year, month, day and hour. After specifying search criteria, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img42.png|500px|alt=UniOTP Management search log window]]&lt;br /&gt;
&lt;br /&gt;
Logs that correlate with specified criteria will be returned, similar to the screen below. &lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img43.png|500px|alt=log search results]]&lt;br /&gt;
&lt;br /&gt;
If no results matching the requested search criteria has been found, the following screen will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img44.png|500px|alt=&#039;no related info&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Export Log ==&lt;br /&gt;
&lt;br /&gt;
Exports logs to a text file. From the administration interface, click on Export Log from either under the Database Management menu on the left or the Export Log shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img45.png|500px|alt=UniOTP Management export log icon]]&lt;br /&gt;
&lt;br /&gt;
Under LogDomain, Syslog refers to system task logs, and Commonlog refers to user authentication logs. Under Begin Date and End Date, logs can be filtered between two time periods. Set the two fields of logs from Begin Date to End Date to return, in order of year, month, day and hour. Under Compress, select the type of compression to compress the exported file. After specifying criteria, click Submit to backup the selected logs.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img46.png|500px|alt=|alt=UniOTP Management export log window]]&lt;br /&gt;
&lt;br /&gt;
== Clear Logs ==&lt;br /&gt;
&lt;br /&gt;
All specified logs can be deleted from the Export Log interface. From the administration interface, click on Empty log records from under the Database Management menu on the left.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img47.png|500px|alt=UniOTP Management empty log records sidebar selection]]&lt;br /&gt;
&lt;br /&gt;
In the Empty log records interface, two categories of logs can be cleared. Syslog refers to system task logs, and Commonlog refers to user authentication logs.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img48.png|500px|alt=UniOTP Management empty log records window]]&lt;br /&gt;
&lt;br /&gt;
Click Execute to clear selected logs. If deletion of logs was successful, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img49.png|500px|alt=&#039;operation succeeded&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Backup Database ==&lt;br /&gt;
&amp;lt;!--Check Description--&amp;gt;&lt;br /&gt;
The database backup feature is used to restore all needed information.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img50.png|500px|alt=UniOTP Management backup database sidebar selection]]&lt;br /&gt;
&lt;br /&gt;
In Backup Mode choose the backup mode. You can choose to backup the whole database, including the table structure and the data contained inside (You can specify which data you want to backup in the Log Backup field). You can also choose to backup only the table structure. In this case, the data contained inside the database will not be backed up.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img51.png|500px|alt=UniOTP Management backup database window]]&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
&amp;lt;!--Check--&amp;gt;&lt;br /&gt;
From the Statistics interface, You can see temporal and spatial repartition, make statistics, analyze about authentication strength, repartition and operation repartition.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img52.png|500px|alt=UniOTP Management statistics icon]]&lt;br /&gt;
&lt;br /&gt;
In the Statistics interface, two types of analysis can be performed. In Load Analysis, two  you can perform load statistics. In Operation statistics, you can perform operation statistics. You can choose a scale for these two parts (Year or month). In the Display Mode field, you can choose the display method, there are three kinds: histograms, line charts, and pie charts.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img53.png|500px|alt=UniOTP Management statistics window]]&lt;br /&gt;
&lt;br /&gt;
The picture below shows the histogram of operation type analysis.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img54.png|500px|alt=histogram of empty log with one authentication]]&lt;br /&gt;
&lt;br /&gt;
== System Information ==&lt;br /&gt;
&lt;br /&gt;
Click the home icon in the left menu to show system information and the system configuration page, this page displays system information and the current settings list.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img55.png|500px|alt=UniOTP Management system information sidebar icon]]&lt;br /&gt;
&lt;br /&gt;
== System configuration ==&lt;br /&gt;
&lt;br /&gt;
Using the system configuration page you can change system settings. Click Config Database to configure the database.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img56.png|500px|alt=UniOTP Management systems configuration sidebar icon]]&lt;br /&gt;
&lt;br /&gt;
Once you’ve entered the database settings page, you can change database settings such as database host, database name, port, login username, login password. You can also test the connection to the database, after you have submitted these changes, a new configuration file will be created.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img57.png|500px|alt=UniOTP Management change database configuration window]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Management_System&amp;diff=1824</id>
		<title>UniOTP Management System</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Management_System&amp;diff=1824"/>
		<updated>2016-08-17T01:10:26Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The UniOTP Management System is a web-based management system. Administration and maintenance operations concerning dynamic password system configuration such as user information, token information, operator information and log information can be performed with this system. The system employs different levels of privileges for compartmentalization of information and tasks.&lt;br /&gt;
&lt;br /&gt;
== Operator Login ==&lt;br /&gt;
&lt;br /&gt;
On the login page of the UniOTP Management System, input the Operator ID in the OperatorID field and enter the corresponding password in the Password field. Click Submit to log in. The default Operator ID for the Super Operator is &amp;quot;1000000001&amp;quot; with the corresponding default password &amp;quot;123456&amp;quot;, both without quotation marks.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img01.jpg|350px|alt=UniOTP Management login screen]]&lt;br /&gt;
&lt;br /&gt;
If Operator login was successful, the administration interface will be accessible on the main page, otherwise an error message will appear if the login credentials are incorrect. From the administration interface, actions to perform can be chosen from the menu on the left or from the shortcut icons in the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img02.jpg|500px|alt=UniOtp Management system main window]]&lt;br /&gt;
&lt;br /&gt;
== Logout ==&lt;br /&gt;
&lt;br /&gt;
To log out of the system, click Exit System located at the top-right corner of the window, as shown in the screenshot above. For security purposes, please always use this method to log out of the system.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img03.jpg|500px|alt=UniOTP Management logged out of system]]&lt;br /&gt;
&lt;br /&gt;
== Change Password ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Change Password from either under the Operator Management menu on the left or the Change Password shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img04.jpg|500px|alt=UniOTP Management changing passwords icon]]&lt;br /&gt;
&lt;br /&gt;
In the Change Password interface, input the current password in the Old Password field, and enter the new password in both the New Password and Confirm fields, enter the new password. Click Submit to apply changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img05.jpg|500px|alt=UniOTP Management change password screen]]&lt;br /&gt;
&lt;br /&gt;
A message will appear indicating if the password change was successful or unsuccessful.&lt;br /&gt;
&lt;br /&gt;
== Search User ==&lt;br /&gt;
&amp;lt;!--Check - Cloud--&amp;gt;&lt;br /&gt;
From the administration interface, click on User Search from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img08.jpg|500px|alt=UniOTP Management user search icon]]&lt;br /&gt;
&lt;br /&gt;
Users can be searched by either User ID or Username. Fill either field then click Search.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img09.jpg|500px|alt=UniOTP Management user search screen]]&lt;br /&gt;
&lt;br /&gt;
For example, if searching User ID &amp;quot;US20110127002&amp;quot;, without quotation marks.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img10.jpg|500px|alt=searching user ID US20110127002]]&lt;br /&gt;
&lt;br /&gt;
If you enter &amp;quot;t&amp;quot; in the Username field, you will see information about all users whose username contains the character &#039;t&#039;, you can choose the user you want to manage, modify or delete.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img11.jpg|500px|alt=selecting a user to modify]]&lt;br /&gt;
&lt;br /&gt;
== Add a User ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Add User from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img12.jpg|500px|alt=UniOTP Management add user icon]]&lt;br /&gt;
&lt;br /&gt;
In the Add User interface, fill in the corresponding fields: username (unique) in Username; user ID (unique) in UserID; contact number in Tel; the serial ID of the corresponding UniOTP device for the user in Serial; email address in Email; the user PIN; and authentication method (OTP+PIN, generated one-time password with the user PIN, is recommended for maximum security). Either username or user ID can be used interchangeably when authenticating.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img13.jpg|500px|alt=UniOTP Management adding user window]]&lt;br /&gt;
&lt;br /&gt;
If an invalid token serial number is entered, the error message below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img14.jpg|500px|alt=&#039;invalid token&#039; message]]&lt;br /&gt;
&lt;br /&gt;
After inputting valid user information, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img15.jpg|500px|alt=user fields filled]]&lt;br /&gt;
&lt;br /&gt;
The notification below will appear if the user has been added successfully.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img16.jpg|500px|alt=&#039;user xxx added successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Change User State ==&lt;br /&gt;
&lt;br /&gt;
From the administration interface, click on Add User from either under the User Management menu on the left or the User Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img17.jpg|500px|alt=UniOTP Management change user state icon]]&lt;br /&gt;
&lt;br /&gt;
Under the Change User State interface, functions such as flagging a token as lost/stolen, unflagging lost/stolen tokens and permanently removing tokens can be performed. Functions are performed on users based on the user&#039;s User ID.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img18.jpg|500px|alt=UniOTP Management changing user state window]]&lt;br /&gt;
&lt;br /&gt;
== Resynchronize Token ==&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, a token may desynchronize with the server. In this case, the token must be resynchronized with the server to be able to authenticate with it. This can be done from the Token Reparation interface. From the administration interface, click on Token Reparation from either under the User Management menu on the left or the Token Reparation shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img19.jpg|500px|alt=UniOTP Management token repair icon]]&lt;br /&gt;
&lt;br /&gt;
To resynchronize the token, the User ID of the user whom the token is assigned under and the token itself is needed. Input the User ID in UserID. Afterwards, generate a one-time password from the token device, then input the generated OTP in First OTP. Generate a second OTP immediately after the previously generated OTP, and input the generated OTP in Second OTP. Two consecutive one-time passwords are needed in order for the the server and the token to be synchronized. When done, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img20.jpg|500px|alt=UniOTP Management token repair window]]&lt;br /&gt;
&lt;br /&gt;
The message below will appear if synchronization is successful.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img21.jpg|500px|alt=&#039;token repair successful&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the two generated one-time passwords are not consecutive with one another, or if the generated OTPs exceeds a certain generation range, synchronization will fail, and an error message similar to the one below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img22.jpg|500px|alt=&#039;token repair failed&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Add Operator ==&lt;br /&gt;
&lt;br /&gt;
Under the Add Operator interface, new operators can be added into the system. The user to be added should not be one with a higher privilege level than the operator privilege level, otherwise the operation will be denied. From the administration interface, click on Add Operator from either under the Operator Management menu on the left or the Add Operator shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img23.jpg|500px|alt=UniOTP Management add operator icon]]&lt;br /&gt;
&lt;br /&gt;
In the Add Operator interface, input the Name, Password and Confirm password, and select the privilege level in the Level list, then click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img24.jpg|500px|alt=UniOTP Management add operator window]]&lt;br /&gt;
&lt;br /&gt;
If the operation is successful, the following message will be returned. The Operator ID of newly added operator will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img25.jpg|500px|alt=&#039;operator added successfully, operator ID is: ...&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the privileges of the new user is higher than the operator&#039;s, or that of the current user, the following error message will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img26.jpg|500px|alt=&#039;insufficient rights to add new operator&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Delete Operator ==&lt;br /&gt;
&lt;br /&gt;
The Delete Operator interface provides removal of an operator from the database. An operator can only be deleted if the privilege level of the current user is higher than the privilege level of the operator to be deleted. From the administration interface, click on Delete Operator from either under the Operator Management menu on the left or the Delete Operator shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img27.jpg|500px|alt=UniOTP Management delete operator icon]]&lt;br /&gt;
&lt;br /&gt;
In the Delete Operator interface, operators can be removed in one of two methods: An individual operator account can be deleted by Operator ID; multiple operator accounts can be deleted by a range of Operator IDs, specifying the starting Operator ID under BeginID and last Operator ID range under EndID. All operators in this specified range, inclusive, will be deleted. Input the corresponding data into either forms, then click Submit or Execute.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img28.jpg|500px|alt=UniOTP Management delete operator window]]&lt;br /&gt;
&lt;br /&gt;
If the current user does not possess sufficient privileges to delete the specified or affected operator, the following error message will be returned.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img29.jpg|500px|alt=&#039;insufficient rights to delete this operator&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If deletion was successful, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img30.jpg|500px|alt=&#039;operation succeeded&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Search Operator ==&lt;br /&gt;
&lt;br /&gt;
Under the Operator Search interface, information concerning operator accounts can be searched and viewed. Only operator accounts whose privilege level is less than the current user can be searched. From the administration interface, click on Operator Search from either under the Operator Management menu on the left or the Operator Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img31.jpg|500px|alt=UniOTP Management operator search icon]]&lt;br /&gt;
&lt;br /&gt;
In the Operator Information Search interface, operators can be searched in one of two methods: An individual operator account can be searched by Operator ID; multiple operator accounts can be searched by a range of Operator IDs, specifying the start Operator ID under BeginID and end Operator ID range under EndID, and, in addition, by name. All found operators in this specified range, inclusive, will be returned. Input the corresponding data into either form, then click Submit or Execute.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img32.jpg|500px|alt=UniOTP Management operator information search window]]&lt;br /&gt;
&lt;br /&gt;
To illustrate, if &amp;quot;1000000001&amp;quot;, without quotation marks, as the Operator ID was entered under OperatorID then submitted, information about the operator account whose Operator ID is 1000000001 will be returned. However, as 1000000001 is, by default, the Super Operator ID, only the Super Operator has sufficient privileges to view the specified search criteria, and hence is the only operator who can perform and view this search. Returned operators can be deleted by clicking the icon to the right of the operator in the returned list. Deletion of operators adhere to the requirements in the subsection above, in that operators can only be deleted if the privilege level of the current user is higher the the privilege level of the operator to be deleted. Searching by Operator ID will yield a results page similar to the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img33.jpg|500px|alt=operator ID; password; operator index; operator name; domain]]&lt;br /&gt;
&lt;br /&gt;
Searching operators in a specific range will yield a results page similar to the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img34.jpg|500px|alt=multiple operators listed in search results]]&lt;br /&gt;
&lt;br /&gt;
== Batch Import Token/User==&lt;br /&gt;
&amp;lt;!--Check--&amp;gt;&lt;br /&gt;
The Token/User Batch Import interface allows the service provider to import multiple tokens in the database. It also can import many users bound to a token at once inside the database. Refer to the picture below to enter the corresponding interface.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img35.jpg|500px|alt=UniOTP Management token import icon]]&lt;br /&gt;
&lt;br /&gt;
In order to import Token files, you need to provide decryption keys for those files, there is no decryption key function for user import. The extension for token files and user information files is .unif.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img36.png|500px|alt=UniOTP Management token/user import window]]&lt;br /&gt;
&lt;br /&gt;
If there is an error with the secret key or if the file is corrupted, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img37.png|500px|alt=&#039;bad file&#039; message]]&lt;br /&gt;
&lt;br /&gt;
The token file part will successfully prompt an error for the token, there is no line in front of the failure of the token serial number corresponding to the record, you can export the information to the service provider to determine the cause of the error (duplicate imports should be excluded due to errors)&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img38.png|500px|alt=&#039;please send information to provider&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the token import succeeds, a message will be displayed specifying the number of token imported&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img39.png|500px|alt=&#039;1 line affected&#039; message; one line per token]]&lt;br /&gt;
&lt;br /&gt;
In the case user import has failed, the following error message, containing the details about the concerned users, will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img40.png|500px|alt=SQL user details; invalid token error being displayed]]&lt;br /&gt;
&amp;lt;!--/Check--&amp;gt;&lt;br /&gt;
== Search Log ==&lt;br /&gt;
&lt;br /&gt;
The log search function provides an interface for searching and viewing logs from the UniOTP Management System, including regular operation and user authentication logs. From the administration interface, click on Log Search from either under the Database Management menu on the left or the Log Search shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img41.png|500px|alt=UniOTP Management search log icon]]&lt;br /&gt;
&lt;br /&gt;
In the Log Search interface, various search criteria is provided to narrow search of logs. Under LogDomain, Syslog refers to system task logs, and Commonlog refers to user authentication logs. Under Search Mode, logs can be optionally filtered by specific operators by selecting Specific Operator, otherwise all logs from all operators will be returned with All. In the QueryMode field you can choose logs for a specific operator, once you have specified an operator, the logs information displayed are only for the specified operator (If you specify username, the&lt;br /&gt;
authentication logs information for this user only will be displayed.) Under OperatorID, an Operator ID or username must be entered if Specific Operator was selected in Search Mode. All logs for the specified operator will be returned. Under Begin Date and End Date, logs can be filtered between two time periods. Set the two fields of logs from Begin Date to End Date to return, in order of year, month, day and hour. After specifying search criteria, click Submit.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img42.png|500px|alt=UniOTP Management search log window]]&lt;br /&gt;
&lt;br /&gt;
Logs that correlate with specified criteria will be returned, similar to the screen below. &lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img43.png|500px|alt=log search results]]&lt;br /&gt;
&lt;br /&gt;
If no results matching the requested search criteria has been found, the following screen will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img44.png|500px|alt=&#039;no related info&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Export Log ==&lt;br /&gt;
&lt;br /&gt;
Exports logs to a text file. From the administration interface, click on Export Log from either under the Database Management menu on the left or the Export Log shortcut on the main panel.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img45.png|500px|alt=UniOTP Management export log icon]]&lt;br /&gt;
&lt;br /&gt;
Under LogDomain, Syslog refers to system task logs, and Commonlog refers to user authentication logs. Under Begin Date and End Date, logs can be filtered between two time periods. Set the two fields of logs from Begin Date to End Date to return, in order of year, month, day and hour. Under Compress, select the type of compression to compress the exported file. After specifying criteria, click Submit to backup the selected logs.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img46.png|500px|alt=|alt=UniOTP Management export log window]]&lt;br /&gt;
&lt;br /&gt;
== Clear Logs ==&lt;br /&gt;
&lt;br /&gt;
All specified logs can be deleted from the Export Log interface. From the administration interface, click on Empty log records from under the Database Management menu on the left.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img47.png|500px|alt=UniOTP Management empty log records sidebar selection]]&lt;br /&gt;
&lt;br /&gt;
In the Empty log records interface, two categories of logs can be cleared. Syslog refers to system task logs, and Commonlog refers to user authentication logs.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img48.png|500px|alt=UniOTP Management empty log records window]]&lt;br /&gt;
&lt;br /&gt;
Click Execute to clear selected logs. If deletion of logs was successful, the following message will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img49.png|500px|alt=&#039;operation succeeded&#039; message]]&lt;br /&gt;
&lt;br /&gt;
== Backup Database ==&lt;br /&gt;
&amp;lt;!--Check Description--&amp;gt;&lt;br /&gt;
The database backup feature is used to restore all needed information.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img50.png|500px|alt=UniOTP Management backup database sidebar selection]]&lt;br /&gt;
&lt;br /&gt;
In Backup Mode choose the backup mode. You can choose to backup the whole database, including the table structure and the data contained inside (You can specify which data you want to backup in the Log Backup field). You can also choose to backup only the table structure. In this case, the data contained inside the database will not be backed up.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img51.png|500px|alt=UniOTP Management backup database window]]&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
&amp;lt;!--Check--&amp;gt;&lt;br /&gt;
From the Statistics interface, You can see temporal and spatial repartition, make statistics, analyze about authentication strength, repartition and operation repartition.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img52.png|500px|alt=UniOTP Management statistics icon]]&lt;br /&gt;
&lt;br /&gt;
In the Statistics interface, two types of analysis can be performed. In Load Analysis, two  you can perform load statistics. In Operation statistics, you can perform operation statistics. You can choose a scale for these two parts (Year or month). In the Display Mode field, you can choose the display method, there are three kinds: histograms, line charts, and pie charts.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img53.png|500px|alt=UniOTP Management statistics window]]&lt;br /&gt;
&lt;br /&gt;
The picture below shows the histogram of operation type analysis.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img54.png|500px|alt=histogram of empty log with one authentication]]&lt;br /&gt;
&lt;br /&gt;
== System Information ==&lt;br /&gt;
&lt;br /&gt;
Click the home icon in the left menu to show system information and the system configuration page, this page displays system information and the current settings list.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img55.png|500px|alt=UniOTP Management system information sidebar icon]]&lt;br /&gt;
&lt;br /&gt;
== System configuration ==&lt;br /&gt;
&lt;br /&gt;
Using the system configuration page you can change system settings. Click Config Database to configure the database.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img56.png|500px|alt=UniOTP Management systems configuration sidebar icon]]&lt;br /&gt;
&lt;br /&gt;
Once you’ve entered the database settings page, you can change database settings such as database host, database name, port, login username, login password. You can also test the connection to the database, after you have submitted these changes, a new configuration file will be created.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpmgs img57.png|500px|alt=UniOTP Management change database configuration window]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Server_Control_Tool&amp;diff=1789</id>
		<title>UniOTP Server Control Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Server_Control_Tool&amp;diff=1789"/>
		<updated>2016-08-16T05:37:19Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
== About this tool ==&lt;br /&gt;
&lt;br /&gt;
UniOTP Server Control is a desktop tool used to configure and manage UniOTP&lt;br /&gt;
authentication service. By using this tool, you can check and control the status of UniOTP authentication service, and check and reconfigure the configuration information of the UniOTP authentication service.&lt;br /&gt;
&lt;br /&gt;
== Launch the tool ==&lt;br /&gt;
&lt;br /&gt;
* Double click on UniOTPSCRControl desktop shortcut to launch the service control program.&lt;br /&gt;
* Launch the service control program through &amp;lt;code&amp;gt;Start Menu - Programs - UniOTPSCRControl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Service status control ===&lt;br /&gt;
&lt;br /&gt;
After the program is started, the interface of the service status will appear.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ServiceName&#039;&#039;&#039;: name of service&lt;br /&gt;
* &#039;&#039;&#039;DisplayName&#039;&#039;&#039;: the display name of service&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: the description information of the service&lt;br /&gt;
* &#039;&#039;&#039;Executeable File Path&#039;&#039;&#039;: the absolute path of the executable program corresponding to the service&lt;br /&gt;
* &#039;&#039;&#039;StartType&#039;&#039;&#039;: the start type of the service. It can be set to automatic, manual and disable&lt;br /&gt;
* &#039;&#039;&#039;Service Status&#039;&#039;&#039;: the service current status&lt;br /&gt;
&lt;br /&gt;
After the service configuration has been changed, the Apply button will become available, click on Apply to apply the new configuration. Click on Start or Stop to start and stop the service&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img01.jpg|370px|alt=OTPServer control settings]]&lt;br /&gt;
&lt;br /&gt;
=== Database configuration ===&lt;br /&gt;
&lt;br /&gt;
Click on the Settings tab to get into more service configuration interfaces, such as the database configuration interface, as displayed in the following picture.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DSN&#039;&#039;&#039;: information is used to configure the data source&lt;br /&gt;
* &#039;&#039;&#039;Database Source Name&#039;&#039;&#039;: select the suitable database source&lt;br /&gt;
* &#039;&#039;&#039;Description&#039;&#039;&#039;: description of the database source&lt;br /&gt;
* &#039;&#039;&#039;DataBase Type&#039;&#039;&#039;: the type of database&lt;br /&gt;
&lt;br /&gt;
Connection Parameters is used to configure the database link parameters.&lt;br /&gt;
* &#039;&#039;&#039;User&#039;&#039;&#039;: the username used to connect to the database&lt;br /&gt;
* &#039;&#039;&#039;Password&#039;&#039;&#039;: the database login password corresponding to the user&lt;br /&gt;
&lt;br /&gt;
After configuring all parameters, click on Test Connection button to test the connection.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img02.jpg|370px|alt=OTPServer database configuration panel]]&lt;br /&gt;
&lt;br /&gt;
Note: If running the server on a 64-bit machine, use &amp;lt;code&amp;gt;C:\Windows\SysWOW64\odbcad32.exe&amp;lt;/code&amp;gt; and a 32-bit connector. If all the information is valid, the connection has succeeded, as shown in the following picture.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img03.jpg|370px|alt=successful connection to server]]&lt;br /&gt;
&lt;br /&gt;
If the information is incorrect, the connection will fail, as shown in the following picture.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img04.jpg|370px|alt=connection to database failed]]&lt;br /&gt;
&lt;br /&gt;
=== Authentication service configuration ===&lt;br /&gt;
&lt;br /&gt;
Click on the Server Setting tab to switch to service configuration interface, as displayed in the following picture. The Server Information column contains configuration information about service network and performance.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Port (Radius Server)&#039;&#039;&#039;: the port number of the authentication service, following the Radius authentication protocol. The default port is 1812.&lt;br /&gt;
* &#039;&#039;&#039;Request Interval&#039;&#039;&#039;: the period of time between requests&lt;br /&gt;
* &#039;&#039;&#039;Max idle time&#039;&#039;&#039;: the maximum idle time of the certified thread&lt;br /&gt;
* &#039;&#039;&#039;Max Threads Num&#039;&#039;&#039;: the maximum number of worker threads.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img05.jpg|370px|alt=OTPServer authentication service configuration panel]]&lt;br /&gt;
&lt;br /&gt;
=== Login and authentication parameters configuration ===&lt;br /&gt;
&lt;br /&gt;
Select the Options tab to access the login and authentication parameters configuration. &lt;br /&gt;
&lt;br /&gt;
In the Authentication Option column, we have.&lt;br /&gt;
* &#039;&#039;&#039;Authentication Wnd&#039;&#039;&#039;: authentication window, the default value is 30 (for safety reasons the window should not be set to big)&lt;br /&gt;
* &#039;&#039;&#039;Key Length&#039;&#039;&#039;: the length of user secret keys (please change this value carefully)&lt;br /&gt;
* &#039;&#039;&#039;Max Failed-Try&#039;&#039;&#039;: the maximum number of failure attempts&lt;br /&gt;
&lt;br /&gt;
In the Log Options column, we have.&lt;br /&gt;
* &#039;&#039;&#039;Log Mode&#039;&#039;&#039;: log mode (store the log in log file or database)&lt;br /&gt;
* &#039;&#039;&#039;Log Condition&#039;&#039;&#039;: the condition of log generation&lt;br /&gt;
* &#039;&#039;&#039;Log File Size&#039;&#039;&#039;: the maximum log file size when you choose to store a log in log file&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img06.jpg|370px|alt=OTPServer login and authentication configuration panel]]&lt;br /&gt;
&lt;br /&gt;
=== The configuration of the shared secret key for the authentication service and clients ===&lt;br /&gt;
&lt;br /&gt;
Click on the Share tab to enter shared secret key configuration interface. In this panel, configure the shared secret key of the authentication client (application server), and enable and disable each status.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img07.jpg|370px|alt=OTPServer client and blacklist]]&lt;br /&gt;
&lt;br /&gt;
In the Client List, the IP address shows the current authorized authentication clients, and shared Key displays the shared secret key for the service and this authentication client. Click on Add button to add a new authentication client. And enter a new client IP address and shared key. Afterwards add a new authentication client, click on Apply to save and apply these new changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img08.jpg|370px|alt=add client to client list]]&lt;br /&gt;
&lt;br /&gt;
Click on Delete button to delete an authentication client. After clicking on delete, the selected client will be deleted. During the delete operation, a confirmation dialogue will pop up (after confirming the delete operation, the client configuration file will be deleted).&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img09.jpg|370px|alt=&#039;delete client ADDRESS?&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If no client is selected, the following message will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img10.jpg|370px|alt=&#039;no client is selected&#039; message]]&lt;br /&gt;
&lt;br /&gt;
Click on the Edit button to modify the configuration of the selected client. The client&#039;s IP address will not be modified, and only the shared key can be changed. For example, if the client (IP address 127.0.0.1) is selected, after clicking on Edit, a dialogue window will pop up. Enter the new shared key in the dialogue window, and then the Apply button will become available. Click Apply to enable all the new configurations.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img11.jpg|370px|alt=edit client IP address and shared key]]&lt;br /&gt;
&lt;br /&gt;
Click on Add Black button to add an authentication client to the blacklist. Clients in the blacklist will not request authentication, but the authentication system will save the relative shared key information, so the authentication function can be recovered by removing the client from the blacklist. The blacklist, the IP address displays all the authentication clients&#039; IP address&#039; added into the blacklist, and shared key displays the shared key for the client and the authentication service. Clicking Delete to delete an authentication client from the blacklist. After the user confirms the delete operation, the client will be permanently deleted from the system. Click Remove to remove the client from the blacklist, to recover the authentication. After executing the remove operation, click Apply to apply changes. After clicking on Apply, the following dialogue will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img12.jpg|370px|alt=&#039;update configuration successful&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Email parameters configuration ===&lt;br /&gt;
&lt;br /&gt;
Click on the Mail tab to enter Email configuration interface. This panel contains configurations about the Email server.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img13.jpg|370px|alt=OPTServer email configuration panel]]&lt;br /&gt;
&lt;br /&gt;
Use Email Service select box to decide whether to use the email reminder function. After using the email reminder function, the SMTP server must be configured.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SMTP Server&#039;&#039;&#039;: the SMTP server name or IP address&lt;br /&gt;
* &#039;&#039;&#039;SMTP Port&#039;&#039;&#039;: SMTP server Port (the default port is 25)&lt;br /&gt;
* &#039;&#039;&#039;Mail Subject&#039;&#039;&#039;: the mail subject sent by the system&lt;br /&gt;
* &#039;&#039;&#039;Email From&#039;&#039;&#039;: the email address displays in email recipients&lt;br /&gt;
* &#039;&#039;&#039;SMTP Server authentication&#039;&#039;&#039;: select if the email server needs authentication&lt;br /&gt;
* &#039;&#039;&#039;User Name&#039;&#039;&#039;: the username used for SMTP authentication.&lt;br /&gt;
* &#039;&#039;&#039;Password&#039;&#039;&#039;: the password corresponding to the username.&lt;br /&gt;
&lt;br /&gt;
After finishing the configuration , click Apply to apply configurations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exit the tool ==&lt;br /&gt;
&lt;br /&gt;
The tool will not exit by clicking on the close button in the interface. The tool will just be minimized to the tray. Right click on the icon in the tray, and click on Exit to close the program, as shown in the following picture.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpservercontrol img14.jpg|370px|alt=clicking exit on the tray icon to close the program]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_Monitor_Tool&amp;diff=1022</id>
		<title>UniToken Monitor Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_Monitor_Tool&amp;diff=1022"/>
		<updated>2016-08-16T03:19:42Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Tools]]&lt;br /&gt;
&lt;br /&gt;
The UniToken Monitor utility offers a variety of functions, including the ability to view details on imported certificates, register or unregister certificates, change PINs and check the status of registrations. Upon running, UniToken Monitor will appear in the taskbar’s notification area and continue to run in the background. To open the UniToken interface, double-click the icon and the Monitor interface will appear.&lt;br /&gt;
&lt;br /&gt;
== UniToken Information ==&lt;br /&gt;
&lt;br /&gt;
In the UniToken Information tab, specifics of the UniToken device, such as Type, Name, Current Permission, Firmware Version, Free Memory and Total Memory, can be viewed.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img01.jpg|370px|alt=UniToken Monitor tool UniToken Information tab]]&lt;br /&gt;
&lt;br /&gt;
== Admin Tool ==&lt;br /&gt;
&lt;br /&gt;
The Admin Tool tab provides numerous functions available to the Administrator for operation and maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img02.jpg|370px|alt=UniToken Monitor tool Admin Tool tab]]&lt;br /&gt;
&lt;br /&gt;
=== Change Admin PIN ===&lt;br /&gt;
&lt;br /&gt;
To change the Admin PIN:&lt;br /&gt;
&lt;br /&gt;
# Click on Change Admin PIN.&lt;br /&gt;
# Enter the old Admin PIN under Old PIN.&lt;br /&gt;
# Enter the new Admin PIN under New PIN.&lt;br /&gt;
# Re-enter the new Admin PIN under Verify PIN.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img03.jpg|370px|alt=change Admin PIN window]]&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
&lt;br /&gt;
To format the UniToken device:&lt;br /&gt;
&lt;br /&gt;
# Click on Format.&lt;br /&gt;
# To confirm the format of the UniToken device, click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img04.jpg|370px|alt=&#039;are you sure you want to format this device&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Set Token Name ===&lt;br /&gt;
&lt;br /&gt;
To set the name of the token:&lt;br /&gt;
&lt;br /&gt;
# Click on Set Token Name.&lt;br /&gt;
# Enter the name of the UniToken device.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img05.jpg|370px|alt=type in token name]]&lt;br /&gt;
&lt;br /&gt;
=== Reset User PIN ===&lt;br /&gt;
&lt;br /&gt;
To reset the User PIN:&lt;br /&gt;
&lt;br /&gt;
# Click Reset User PIN.&lt;br /&gt;
# Enter a new User PIN under New PIN.&lt;br /&gt;
# Re-enter the new User PIN under Verify PIN.&lt;br /&gt;
# Click OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img06.jpg|370px|alt=reset user PIN window]]&lt;br /&gt;
&lt;br /&gt;
=== Unlock UniToken ===&lt;br /&gt;
&lt;br /&gt;
To unlock the UniToken:&lt;br /&gt;
&lt;br /&gt;
# Click on Unlock UniToken.&lt;br /&gt;
# Set the maximum number of incorrect PIN login attempts, between 0 and 15.&lt;br /&gt;
# Click &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img07.jpg|370px|alt=unlock a UniToken]]&lt;br /&gt;
&lt;br /&gt;
== User Tools ==&lt;br /&gt;
&lt;br /&gt;
This tab provides an interface to perform all the operations by User. &lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img08.jpg|370px|alt=UniToken Monitor User Tool tab]]&lt;br /&gt;
[[Image:unitokenmonitor img09.jpg|370px|alt=&#039;user logged in successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Change User PIN ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img10.jpg|370px|alt=change user PIN]]&lt;br /&gt;
&lt;br /&gt;
=== Import Certificate ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img11.jpg|370px|alt=&#039;type in password for private key&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Certificate Management ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img12.jpg|370px|alt=displaying certificate details]]&lt;br /&gt;
&lt;br /&gt;
=== View Certificate Information ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img13.jpg|370px|alt=viewing more detailed information about the certificate]]&lt;br /&gt;
&lt;br /&gt;
=== Register/Unregister Certificate ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img14.jpg|370px|alt=&#039;please select a certificate&#039; message]]&lt;br /&gt;
[[Image:unitokenmonitor img15.jpg|370px|alt=&#039;certificate unregistered successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
=== Set Reminder Date ===&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokenmonitor img16.jpg|370px|alt=set reminder date in days]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_PAM_Agent&amp;diff=1936</id>
		<title>UniOTP PAM Agent</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_PAM_Agent&amp;diff=1936"/>
		<updated>2016-08-16T02:25:46Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Use with other Linux operating systems--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This document details how to install and configure the UniOTP PAM Authentication Agent in the Red Hat Enterprise Linux 5 operating system, and how to use UniOTP&#039;s authentication system as an additional factor in user authentication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Environment &#039;&#039;&#039;: Operating System: Red Hat Enterprise 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: Please note that currently there is no ability to safely test if a user account bound with UniOTP authenticates successfully on Linux after installation and configuration. Backup all important data and proceed diligently.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Extract pam_secu.tar.gz ===&lt;br /&gt;
&lt;br /&gt;
Navigate to the directory where the setup package &amp;quot;pam_secu.tar.gz&amp;quot; is located. In the example screenshot below, the setup package is located in &amp;lt;code&amp;gt;/tmp/Desktop&amp;lt;/code&amp;gt; Type &amp;quot;cd&amp;quot; to navigate to folder, and &amp;quot;tar zxvf&amp;quot; to extract the setup package, as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img01.jpg|alt=command line cd and tar command]]&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;tar&amp;quot; command, the extracted files will be extracted to the same directory as the archive file &amp;quot;pam_secure.tar.gz&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img02.jpg|alt=extraction output]]&lt;br /&gt;
&lt;br /&gt;
=== Install the PAM Authentication Agent ===&lt;br /&gt;
&lt;br /&gt;
To be able to install the PAM Agent, you must be logged in as root. Once logged in as root, in the directory of the extracted file, input &amp;quot;./install&amp;quot; to install the PAM Agent.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img03.jpg|alt=running install]]&lt;br /&gt;
&lt;br /&gt;
The below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img04.jpg|alt=install output]]&lt;br /&gt;
&amp;lt;!--J--&amp;gt;&lt;br /&gt;
After installation has completed, the system will prompt &amp;quot;Change configuration file now? [y/n]&amp;quot;. If you want to change the configuration file now, input y and press enter, otherwise, input n and press enter. Here, input n and press enter, we can change the configuration file later. The following information will be display. Please make sure the configuration file has been configured correctly, before restarting your computer, otherwise it may cause log in failures next time.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img05.jpg|alt=installation finished output]]&lt;br /&gt;
&lt;br /&gt;
=== Verify PAM Agent Installation ===&lt;br /&gt;
&lt;br /&gt;
You can check if the PAM agent has been installed successfully, by the following method.&lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;code&amp;gt;/lib/security&amp;lt;/code&amp;gt; to check the pam_secu.so file.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img06.jpg|alt=security file directory]]&lt;br /&gt;
&lt;br /&gt;
2. Go to &amp;lt;code&amp;gt;/user/lib&amp;lt;/code&amp;gt; to check the libuniotp_agent_c.so file.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img07.jpg|alt=lib file directory]]&lt;br /&gt;
&lt;br /&gt;
3. Go to &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; to check the secu_pam_agent.conf file.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img08.jpg|alt=etc file directory]]&lt;br /&gt;
&lt;br /&gt;
If all these files can be found in the corresponding directory, the PAM Agent has been installed successfully, and the next step is to configure the PAM Agent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PAM Agent Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Configure secu_pam_agent.conf ===&lt;br /&gt;
&lt;br /&gt;
This file contains settings about the system account, mapping of the dynamic password name for the system account, authentication server IP address shared key and authentication server port. For more details, please read the introduction in secu_pam_agent.conf.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img09.jpg|alt=opening secu_pam_agent.conf with vi]]&lt;br /&gt;
&lt;br /&gt;
The following file will be opened. Add a system user and other corresponding parameters as shown in the picture below.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img10.jpg|alt=uniotp_account=newtest authserver=192.168.1.225 share=hello port=1812 maxwait=3]]&lt;br /&gt;
&lt;br /&gt;
* [user name]: a valid system account name (example: [root])&lt;br /&gt;
* uniotp_account: the mapping account name of dynamic password for [user name]&lt;br /&gt;
* authserver: authentication server IP address&lt;br /&gt;
* share: shared secret key (obtained from authentication service administrator)&lt;br /&gt;
* port: authentication server connection port&lt;br /&gt;
* maxwait: the maximum time waiting for authentication server response&lt;br /&gt;
&lt;br /&gt;
=== Configure the PAM Authentication Agent ===&lt;br /&gt;
&lt;br /&gt;
The PAM authentication agent configuration is adding the OTP Server PAM authentication agent program to the authentication module service, which is in &amp;lt;code&amp;gt;/etc/pam.d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img11.jpg|alt=cd /etc/pam.d]]&lt;br /&gt;
&lt;br /&gt;
=== Configure Command Line Login Authentication ===&lt;br /&gt;
&lt;br /&gt;
Open the login file in directory &amp;lt;code&amp;gt;/etc/pam.d&amp;lt;/code&amp;gt; and add &amp;quot;auth required pam_secu.so&amp;quot; in the row.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img12.jpg|alt=vi /etc/pam.d/login]]&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img13.jpg|alt=auth required /lib/security/pam_secu.so]]&lt;br /&gt;
&lt;br /&gt;
Save and quit. Now you have finished all PAM agent configurations for command line login authentication. There are five control-flag keywords: required, requisite, sufficient, optional and include.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;required:&#039;&#039;&#039; this indicates that the success of the module is required for the module-type facility to succeed. Failure of this module will not be apparent to the user until all of the remaining modules (of the same module-type) have been executed.&lt;br /&gt;
* &#039;&#039;&#039;requisite:&#039;&#039;&#039; like required, however, in the case that such a module returns a failure, control is directly returned to the application. The return value is that associated with the first required or requisite module to fail. Note, this flag can be used to protect against the possibility of a user getting the opportunity to enter a password over an unsafe medium. It is conceivable that such behavior might inform an attacker of valid accounts on a system. This possibility should be weighed against the not insignificant concerns of exposing a sensitive password in a hostile environment.&lt;br /&gt;
* &#039;&#039;&#039;sufficient:&#039;&#039;&#039; the success of this module is deemed `sufficient&#039; to satisfy the Linux-PAM library that this module-type has succeeded in its purpose. In the event that no previous required module has failed, no more `stacked&#039; modules of this type are invoked. (Note, in this case subsequent required modules are not invoked.). A failure of this module is not deemed as fatal to satisfying the application that this module-type has succeeded.&lt;br /&gt;
* &#039;&#039;&#039;optional:&#039;&#039;&#039; as its name suggests, this control-flag marks the module as not being critical to the success or failure of the user&#039;s application for service. In general, Linux-PAM ignores such a module when determining if the module stack will succeed or fail. However, in the absence of any definite successes or failures of previous or subsequent stacked modules this module will determine the nature of the response to the application. One example of this latter case, is when the other modules return something like PAM_IGNORE.&lt;br /&gt;
* &#039;&#039;&#039;include:&#039;&#039;&#039; this tells PAM to include all lines of given type from the configuration file specified as an argument to this control. The whole idea is to create few &amp;quot;systemwide&amp;quot; pam configs and include parts of them in application pam configs. pam_secu.so support debug function. If you input debug following pam_secu.so the debug information will be added to the system log file (like: auth sufficient pam_secu.so debug). And you can specify the configuration file by using conf –directory (like: &amp;lt;code&amp;gt;auth sufficient pam_secu.so conf –/etc/secu_pam_agent.conf&amp;lt;/code&amp;gt; the agent will find configuration file from the specified directory, instead of the default one).&lt;br /&gt;
&lt;br /&gt;
=== Configure Desktop Login Authentication ===&lt;br /&gt;
&lt;br /&gt;
Open the PAM configuration file for gdm in directory &amp;lt;code&amp;gt;/etc/pam.d&amp;lt;/code&amp;gt; and add &amp;quot;auth required pam_secu.so&amp;quot; in the first row.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img14.jpg|alt=vi /etc/pam.d/gdm_]]&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img15.jpg|alt=auth required pam_secu.so]]&lt;br /&gt;
&lt;br /&gt;
Save and quit. Now you have finished all PAM agent configurations for desktop login authentication. Please make sure the configuration file has been configured correctly, before restarting your computer, otherwise it may cause login failures on next boot.&lt;br /&gt;
&lt;br /&gt;
=== Configure Remote Terminal Login Authentication ===&lt;br /&gt;
&lt;br /&gt;
Open the sshd file in directory &amp;lt;code&amp;gt;/etc/pam.d&amp;lt;/code&amp;gt; and add &amp;quot;auth sufficient pam_secu.so sshd&amp;quot; in the row.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img16.jpg|alt=vi sshd]]&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img17.jpg|alt=auth sufficient pam_secu.so sshd]]&lt;br /&gt;
&lt;br /&gt;
For remote login authentication configuration, you can only use sufficient. Save and quit. Now you have finished all PAM agent configurations for remote terminal login authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing PAM Authentication Agent ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Command Line Authentication ===&lt;br /&gt;
&lt;br /&gt;
Input user name [root] and press enter. Now the system will ask for OTP[PIN]. Just input the dynamic password generated by your OTP device and your PIN following OTP in this line and press enter. In the next Password line, input your static password and press enter. You will login as root, if you see [root@localhost ~]#.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img18.jpg|370px|alt=command line authentication logging in as root]]&lt;br /&gt;
&lt;br /&gt;
=== Testing Desktop Login Authentication ===&lt;br /&gt;
&lt;br /&gt;
After configuring the gdm file, you can login the system by using the GUI, input the user name when the following login interface appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img19.jpg|370px|alt=Red Hat login screen, username: root]]&lt;br /&gt;
&lt;br /&gt;
Input user name [root], and then the password interface will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img20.jpg|370px|alt=Red Hat login screen, OTP[PIN]: enter]]&lt;br /&gt;
&lt;br /&gt;
Please Input OTP and PIN, and then press enter. If you can log in to the system, you have successfully configured the PAM agent for desktop login authentication.&lt;br /&gt;
&lt;br /&gt;
=== Testing Remote Login Authentication ===&lt;br /&gt;
&lt;br /&gt;
We use SecureCRT as the remote login tool. After UniOTP protection is enabled for remote login authentication. You must input OTP+PIN in the password field to log in to the host computer, and click on OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img21.jpg|370px|alt=enter secure shell password]]&lt;br /&gt;
&lt;br /&gt;
Once logged in successfully, the following picture is displayed:&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotppam img22.jpg|370px|alt=SecureCRT main window]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_Credential_Provider_Agent&amp;diff=1972</id>
		<title>UniOTP Credential Provider Agent</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_Credential_Provider_Agent&amp;diff=1972"/>
		<updated>2016-08-16T01:12:05Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
This document details how to install and use the UniOTP Windows Logon Agent, intended for end users who want to use UniOTP authentication to log onto their system. The UniOTP Windows Logon Agent is used to integrate the UniOTP dynamic password authentication system with Windows. There are two versions of the UniOTP Windows Agent: GINA (Windows 2000, XP); and Credential Provider (Windows Vista, 7, Windows Server 2008). Both use two different Windows logon architecture models. This document covers the installation and usage of the Credential Provider agent.&lt;br /&gt;
&lt;br /&gt;
Note: UniOTP MGS Win Logon currently does not work with Windows 7 Home Premium and Pro.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
Before implementing the UniOTP Windows Logon Agent, please verify the following requirements:&lt;br /&gt;
* The UniOTP authentication server is already configured and running.&lt;br /&gt;
* The administrator has and is already using an active account for the agent on the server&lt;br /&gt;
* The aforementioned account has been bound to the UniOTP device used.&lt;br /&gt;
&lt;br /&gt;
==== UniOTP Windows Logon Agent Installation ====&lt;br /&gt;
&lt;br /&gt;
1. Once the UniOTP Windows Distributable Package has been downloaded and installed, find the installation file setup.exe inside the package and double-click it to launch the installation process.&lt;br /&gt;
&lt;br /&gt;
2. Click on Next in the InstallShield Wizard welcome screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img01.jpg|500px|alt=installation wizard initial screen]]&lt;br /&gt;
&lt;br /&gt;
3. Input your User Name and Company Name and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img02.jpg|500px|alt=inputting user and company name]]&lt;br /&gt;
&lt;br /&gt;
4. Select Complete and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img03.jpg|500px|alt=selecting installation type]]&lt;br /&gt;
&lt;br /&gt;
5. Click on Install to begin the installation of the PKI package. After verifying the InstallShield Wizard has completed successfully then click Finish. Once the installation completed, the User Management Tool UniOTPManager will open automatically.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img04.jpg|500px|alt=UniOTPManager main window]]&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Important:&#039;&#039;&#039; It is strongly advised that a user account is added for this machine at this point. A new user account must be created before exiting this tool.  If a functioning user account is not configured and added on the computer, users will &#039;&#039;&#039;not&#039;&#039;&#039; be able to log into the machine. &#039;&#039;&#039;Uninstall the UniOTP Windows Logon Agent immediately if any unresolvable errors appear in the following steps.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img05.jpg|500px|alt=&#039;it is dangerous if you do not add a UniOTP account for this computer&#039; message]]&lt;br /&gt;
&lt;br /&gt;
7. In the UniOTPManager window, click Add to add a UniOTP account to be authenticated with on the computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img06.jpg|500px|alt=adding new account]]&lt;br /&gt;
&lt;br /&gt;
8. Under the Add Account window, in the fields:&lt;br /&gt;
* Account, input a valid UniOTP account name;&lt;br /&gt;
* Auth Server, input the IP address of the UniOTP authentication server;&lt;br /&gt;
* Port, input the service port of the above server (default is 1812);&lt;br /&gt;
* Share, input the shared key (used by the UniOTP authentication server);&lt;br /&gt;
* and Max Wait Time, input the number of seconds the computer should wait for the server response.&lt;br /&gt;
&lt;br /&gt;
9. After the account has been added, and any other additional modifications made, click Apply. The Apply button must be clicked to submit and apply user information.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img07.jpg|500px|alt=UniOTPManager new account and authentication server added]]&lt;br /&gt;
&lt;br /&gt;
10. The dialog box below will appear if updating account information was successful.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img08.jpg|250px|alt=&#039;update account information successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
11. After successfully installing the UniOTP Windows Authentication Agent and adding a new user, performing a two-factor user logon can be done to ensure all processes are functioning correctly. Choose a user in the account list then click Test to perform an authentication test.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img09.jpg|500px|alt=authentication test on a user account]]&lt;br /&gt;
&lt;br /&gt;
12. Input the OTP password generated from the corresponding OTP device (If the authentication method is set to OTP+PIN, input the PIN directly after the OTP password in the same field), then click OK. If the password entered is correct, the following dialog will be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img10.jpg|250px|alt=&#039;authenticated successfully&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the password entered is incorrect, the following dialog will instead be displayed.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img11.jpg|250px|alt=&#039;authentication failed&#039; message]]&lt;br /&gt;
&lt;br /&gt;
13. A popup message indicating the result of the UniOTP authentication test will appear. If unsuccessful, refer to the displayed message to solve the error. &#039;&#039;&#039;Do not log off, switch user, lock, shutdown, reboot, or otherwise interact with Windows user credentials until successfully completing the authentication test. If an encountered error cannot be resolved, please uninstall the UniOTP Windows Logon Agent immediately.&#039;&#039;&#039; Failure to do so will result in the user being unable to log back into Windows. It is recommended to uninstall the UniOTP Windows Logon Agent until the error, if present, has been identified and rectified.&lt;br /&gt;
&lt;br /&gt;
14. After verifying the two-factor authentication test has completed successful, the user account is now secured with UniOTP authentication. All user accounts identified with UniOTP require the corresponding OTP to successfully authenticate with the user account. To add additional users, repeat the above steps from step 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img12.jpg|750px|alt=Windows user select screen]]&lt;br /&gt;
&lt;br /&gt;
1. In the Windows login screen, select a user to log into with.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img13.jpg|750px|alt=Windows user login screen]]&lt;br /&gt;
&lt;br /&gt;
2. In the password field, input the Windows password for the user account to log onto Windows.&lt;br /&gt;
&lt;br /&gt;
3. In the UniOTP Account drop-down list, select the corresponding UniOTP account. In the OTP[PIN] password field, input the generated one-time password (if the authentication method is set to OTP+PIN, by default, input your dynamic password followed by your PIN immediately afterwards in the field. Refer to your administrator as to how OTP+PIN authentication is set up).&lt;br /&gt;
&lt;br /&gt;
4. Press Enter or click the arrow button to authenticate.&lt;br /&gt;
&lt;br /&gt;
If the OTP[PIN] password entered is incorrect, the following error will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img14.jpg|750px|alt=&#039;error code 13&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If the OTP[PIN] entered is correct, but the Windows user account password is incorrect, the following error message will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:uniotpcp img15.jpg|750px|alt=&#039;incorrect password or username&#039; message]]&lt;br /&gt;
&lt;br /&gt;
If authentication was successful, the Windows user account is secured with UniOTP dynamic password authentication.&lt;br /&gt;
&lt;br /&gt;
== Important Remarks ==&lt;br /&gt;
&lt;br /&gt;
# After installing the UniOTP Windows Authentication Agent, if none of the UniOTP user accounts pass the authentication test, uninstall the UniOTP Windows Authentication Agent &#039;&#039;&#039;without delay&#039;&#039;&#039;, otherwise no user account on the computer will be able to log in.&lt;br /&gt;
# If authentication has failed numerous times in succession (, more than five consecutive attempts, refer to the administrator to inspect configuration settings), wait ten minutes before attempting to authenticate again. If authentication is still unsuccessful, refer to the administrator to repair your device.&lt;br /&gt;
# Do not modify or delete the &amp;quot;%SYSTEMROOT%\secuagt_cp.conf&amp;quot; file as this is the configuration file for the UniOTP Windows Authentication Agent. Deletion or modification of this file may result in a locked operating system.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=Mobile_UniOTP_Solution&amp;diff=1316</id>
		<title>Mobile UniOTP Solution</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=Mobile_UniOTP_Solution&amp;diff=1316"/>
		<updated>2016-08-16T00:56:31Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniOTP_Integration_Solutions]]&lt;br /&gt;
[[Category:UniOTP Mobile Solution]]&lt;br /&gt;
&lt;br /&gt;
== Mobile UniOTP First Launch and Configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &lt;br /&gt;
* This is the screen shown the first time the Mobile UniOTP application is lauched.&lt;br /&gt;
* At this step, you must set the password needed to access the application.&lt;br /&gt;
* Fill in the fields Password and Confirm Password and tap the Confirm button.&lt;br /&gt;
* The next time the application is launched, this password will be requested.&lt;br /&gt;
* If you forgot this password, delete and reinstall the application on your device.&lt;br /&gt;
* If this is the case, you will need to resynchronize your One Time Password application with the server.&lt;br /&gt;
| [[Image:mobotp img01.jpg|270px|alt=Mobile UniOTP login screen]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; |&lt;br /&gt;
* After setting the application password, you will be redirected automatically to the main screen.&lt;br /&gt;
* From the main screen, tap Synchronize at the bottom of the screen to access to the synchronization interface.&lt;br /&gt;
| [[Image:mobotp img02.jpg|270px|alt=&#039;password set successfully&#039; message]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; |&lt;br /&gt;
* Select the type of One Time Password from the synchronization interface. You can choose among Event-Based, Time-Based and Challenge/Response.&lt;br /&gt;
* Depending on the type of OTP chosen, information needed for synchronization is different. For reasons of security, Mobile UniOTP operates independently from use of network communication. Hence, please communicate to your administrator the information displayed on the screen.&lt;br /&gt;
* If you decide to use Mobile UniOTP with OTP MGS, you will need a token file. Please send your synchronization information to [mailto:support@esecutech.com support@esecutech.com] to receive the token file corresponding to your device within 24 hours.&lt;br /&gt;
* If you decide to use UniOTP API (included in UniOTP SDK), the information displayed here can be used directly.&lt;br /&gt;
| [[Image:mobotp img03.jpg|270px|alt=UniOTP synchronization information]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; |&lt;br /&gt;
* Once information has been communicated to your administrator, tap Synchronize to apply changes.&lt;br /&gt;
* If returning to the main screen without synchronizing, synchronization information will not be saved and the application will not be able to generate correct One Time Passwords. Be sure to tap Synchronize before returning to the main screen.&lt;br /&gt;
* A message will be displayed if the synchronization succeeded.&lt;br /&gt;
* Every time you open the Synchronization interface, new synchronization information is generated but is only saved if the Synchronize button tapped.&lt;br /&gt;
| [[Image:mobotp img04.jpg|270px|alt=synchronized successfully]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039; &lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &lt;br /&gt;
* Once back to the main screen, tap the icon corresponding to your type of generated OTP to access to the OTP generation interface.&lt;br /&gt;
| [[Image:mobotp img05.jpg|270px|alt=OTP generation interface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Event-Based OTP Generation==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &lt;br /&gt;
* Each time the Event-Based OTP generation interface is accessed, a new password is automatically generated.&lt;br /&gt;
* The Generate button can be tapped to generate a new password.&lt;br /&gt;
* &#039;&#039;Note: If you switch back and forth between the main screen and OTP generation screen, or if you generate a new OTP excessively in a short period of time, the OTP application may become desynchronized and would need to be synchronized again.&#039;&#039;&lt;br /&gt;
| [[Image:mobotp img06.jpg|270px|alt=OTP 699391 being displayed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Time-Based OTP Generation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &lt;br /&gt;
* In the time-based OTP generation interface, a new password is generated every 60 seconds. Users cannot force the generation of a new password. For every time-based password generated, if 60 seconds have not lapsed, the password will remain the same, and thus only every 60 seconds a new password generated.&lt;br /&gt;
* &#039;&#039;Note: If the device time desynchronizes from the server time more than permitted, the device may become desynchronized. Please take note of this, and make sure to not change the time of your device after you have synchronized it with the server.&#039;&#039;&lt;br /&gt;
| [[Image:mobotp img07.jpg|270px|alt=displaying time-based OTP]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Challenge/Response Password Generation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;400&amp;quot; | &lt;br /&gt;
* In order to generate a OTP using the Challenge and Response system, inputting a challenge code received from the server is required. Authentication will be determined by the correct response generated from the given challenge.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of Use:&#039;&#039;&#039;&lt;br /&gt;
* After a user has logged onto a website, the server will display a challenge code to the user, requesting the user to input the corresponding OTP generated from this code. The user inputs the challenge code in the Challenge/Response interface to generate a OTP. This generated response is used to authenticate to the server and, hence, only the correct response can be used to successfully authenticate.&lt;br /&gt;
| [[Image:mobotp img08.jpg|270px|alt=Enter challenge received and display current OTP]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other Settings ==&lt;br /&gt;
&lt;br /&gt;
From the Settings screen, you can perform the operations listed below.&lt;br /&gt;
* Change the password for accessing the application.&lt;br /&gt;
* Display the S/N (Serial Number).&lt;br /&gt;
* Display the device time.&lt;br /&gt;
&lt;br /&gt;
[[Image:mobotp img09.jpg|270px|alt=settings screen]]&lt;br /&gt;
[[Image:mobotp img10.jpg|270px|alt=change password screen]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_GINA_Agent&amp;diff=1961</id>
		<title>UniOTP GINA Agent</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_GINA_Agent&amp;diff=1961"/>
		<updated>2016-08-16T00:32:49Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Check&lt;br /&gt;
Broken Image links&lt;br /&gt;
http://www.esecutech.com/wiki/index.php?limit=50&amp;amp;ilsearch=gina&amp;amp;user=&amp;amp;title=Special%3AListFiles&lt;br /&gt;
Relevant SDK files--&amp;gt;&lt;br /&gt;
[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
This document details how to install and use the UniOTP Windows Logon Agent, intended for end users who want to use UniOTP authentication to log onto their system. The UniOTP Windows Logon Agent is used to integrate the UniOTP dynamic password authentication system with Windows. There are two versions of the UniOTP Windows Agent: GINA (Windows 2000, XP); and Credential Provider (Windows Vista, 7, Windows Server 2008). Both use two different Windows login architecture models. This document covers the installation and usage of the GINA agent.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
Before implementing the UniOTP Windows Logon Agent, please verify the following requirements:&lt;br /&gt;
* The UniOTP authentication server is already configured and running.&lt;br /&gt;
* The administrator has and is already using an active account for the agent on the server&lt;br /&gt;
* The aforementioned account has been bound to the UniOTP device used.&lt;br /&gt;
&lt;br /&gt;
==== UniOTP Windows Logon Agent implementation ====&lt;br /&gt;
&lt;br /&gt;
1. Once the UniOTP Windows Distributable Package has been downloaded, locate and execute the installation file &amp;quot;setup.exe&amp;quot; to launch the installation process.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img01.jpg|370px|alt=locating setup executable]]&lt;br /&gt;
&lt;br /&gt;
2. Click on Next in the InstallShield Wizard welcome screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img02.jpg|370px|alt=Install Wizard screen]]&lt;br /&gt;
&lt;br /&gt;
3. Input your User Name and Company Name and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img03.jpg|370px|alt=input user and company name]]&lt;br /&gt;
&lt;br /&gt;
4. Select Complete and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img04.jpg|370px|alt=finished WinLogon installation]]&lt;br /&gt;
&lt;br /&gt;
Now that you have finished UniOTP WinLogon Agent installation, you now need to add a UniOTP account. If you try to close this tool without adding an account, you will get the following error message.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img05.jpg|370px|alt=error message for not adding an account]]&lt;br /&gt;
&lt;br /&gt;
5. Click the Add button in order to add an account for this computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img06.jpg|370px|alt=adding new user account]]&lt;br /&gt;
&lt;br /&gt;
Type in a valid UniOTP account name and the dynamic password displayed by UniOTP at this time (If you chose OTP+PIN as your authentication method, you need to input the static PIN just after the dynamic password in this same field). Check that the server address and port are correct and click on OK. If for a certain reason, you failed to add the account, the following message will appear:&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img07.jpg|370px|alt=failure message]]&lt;br /&gt;
&lt;br /&gt;
If the account was added successfully, you will get the following message (In order to enable the account, don’t forget to click on the Apply button).&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img08.jpg|370px|alt=success message]]&lt;br /&gt;
&lt;br /&gt;
6. When you finish adding a UniOTP user for this computer, restart the computer and enjoy the dynamic password authentication experience provided by UniOTP.&lt;br /&gt;
&lt;br /&gt;
==== UniOTP Dynamic Password Authentication Experience ====&lt;br /&gt;
&lt;br /&gt;
Once the installation has been completed, restart the computer and try to log on.&lt;br /&gt;
&lt;br /&gt;
1. After restarting, the first thing we see is the usual login screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img09.jpg|370px|alt=user login window]]&lt;br /&gt;
&lt;br /&gt;
2. After entering username, password and Windows authentication, we also need to provide UniOTP authentication.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img10.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
3. Let’s fill in the username and dynamic password (depending on your settings OTP or OTP+PIN) for the account added in UniOTP management tool and you’ll be able to access the operating system. If username is wrong, you’ll get the following message. If the password is wrong, you’ll be redirected to the Windows Login screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img11.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In safe mode, as the computer uses the local backup of user data to perform the user dynamic authentication, and often the data stored locally is not synchronized with the server, the dynamic password authentication will take a very long time in safe mode. We don’t recommend using safe mode when UniOTP authentication is installed on the computer. The picture below is the UniOTP dynamic password authentication screenshot in safe mode.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img12.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img13.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Important points ==&lt;br /&gt;
&lt;br /&gt;
# When you finish installing UniOTP Windows Authentication Agent, if you cannot pass the authentication test, uninstall the software immediately to avoid being unable to log onto the operating system and the inconvenience brought with it.&lt;br /&gt;
# If failing to authenticate consecutively, please wait 10 minutes before attempting to authenticate again, if you still cannot authenticate, you need to ask an administrator to repair your device.&lt;br /&gt;
# In safe mode, UniOTP Authentication usually takes a very long time.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniOTP_GINA_Agent&amp;diff=1960</id>
		<title>UniOTP GINA Agent</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniOTP_GINA_Agent&amp;diff=1960"/>
		<updated>2016-08-16T00:32:25Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Check&lt;br /&gt;
Broken Image links&lt;br /&gt;
http://www.esecutech.com/wiki/index.php?limit=50&amp;amp;ilsearch=gina&amp;amp;user=&amp;amp;title=Special%3AListFiles&lt;br /&gt;
Relevant SDK files--&amp;gt;&lt;br /&gt;
[[Category:UniOTP_Tools]]&lt;br /&gt;
&lt;br /&gt;
This document details how to install and use the UniOTP Windows Logon Agent, intended for end users who want to use UniOTP authentication to log onto their system. The UniOTP Windows Logon Agent is used to integrate the UniOTP dynamic password authentication system with Windows. There are two versions of the UniOTP Windows Agent: GINA (Windows 2000, XP); and Credential Provider (Windows Vista, 7, Windows Server 2008). Both use two different Windows login architecture models. This document covers the installation and usage of the GINA agent.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
Before implementing the UniOTP Windows Logon Agent, please verify the following requirements:&lt;br /&gt;
* The UniOTP authentication server is already configured and running.&lt;br /&gt;
* The administrator has and is already using an active account for the agent on the server&lt;br /&gt;
* The aforementioned account has been bound to the UniOTP device used.&lt;br /&gt;
&lt;br /&gt;
==== UniOTP Windows Logon Agent implementation ====&lt;br /&gt;
&lt;br /&gt;
1. Once the UniOTP Windows Distributable Package has been downloaded, locate and execute the installation file &amp;quot;setup.exe&amp;quot; to launch the installation process.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img01.jpg|370px|alt=locating setup executable]]&lt;br /&gt;
&lt;br /&gt;
2. Click on Next in the InstallShield Wizard welcome screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img02.jpg|370px|alt=Install Wizard screen]]&lt;br /&gt;
&lt;br /&gt;
3. Input your User Name and Company Name and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img03.jpg|370px|alt=input user and company name]]&lt;br /&gt;
&lt;br /&gt;
4. Select Complete and click on Next.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img04.jpg|370px|alt=finished WinLogon installation]]&lt;br /&gt;
&lt;br /&gt;
Now that you have finished UniOTP WinLogon Agent installation, you now need to add a UniOTP account. If you try to close this tool without adding an account, you will get the following error message.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img05.jpg|370px|alt=error message for not adding an account]]&lt;br /&gt;
&lt;br /&gt;
5. Click the Add button in order to add an account for this computer.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img06.jpg|370px|alt=adding new user account]]&lt;br /&gt;
&lt;br /&gt;
Type in a valid UniOTP account name and the dynamic password displayed by UniOTP at this time (If you chose OTP+PIN as your authentication method, you need to input the static PIN just after the dynamic password in this same field). Check that the server address and port are correct and click on OK. If for a certain reason, you failed to add the account, the following message will appear:&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img07.jpg|370px|alt=failure message]]&lt;br /&gt;
&lt;br /&gt;
If the account was added successfully, you will get the following message (In order to enable the account, don’t forget to click on the Apply button).&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img08.jpg|370px|alt=success message]]&lt;br /&gt;
&lt;br /&gt;
6. When you finish adding a UniOTP user for this computer, restart the computer and enjoy the dynamic password authentication experience provided by UniOTP.&lt;br /&gt;
&lt;br /&gt;
==== UniOTP Dynamic Password Authentication Experience ====&lt;br /&gt;
&lt;br /&gt;
Once the installation has been completed, restart the computer and try to log on.&lt;br /&gt;
&lt;br /&gt;
1. After restarting, the first thing we see is the usual login screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img09.jpg|370px|alt=user login window]]&lt;br /&gt;
&lt;br /&gt;
2. After entering username, password and Windows authentication, we also need to provide UniOTP authentication.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img10.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
3. Let’s fill in the username and dynamic password (depending on your settings OTP or OTP+PIN) for the account added in UniOTP management tool and you’ll be able to access the operating system. If username is wrong, you’ll get the following message. If the password is wrong, you’ll be redirected to the Windows Login screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img11.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
In safe mode, as the computer uses the local backup of user data to perform the user dynamic authentication, and often the data stored locally is not synchronized with the server, the dynamic password authentication will take a very long time in safe mode. We don’t recommend using safe mode when UniOTP authentication is installed on the computer. The picture below is the UniOTP dynamic password authentication screenshot in safe mode.&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img12.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:GINA img13.jpg|370px]]&lt;br /&gt;
&lt;br /&gt;
== Important points ==&lt;br /&gt;
&lt;br /&gt;
1. When you finish installing UniOTP Windows Authentication Agent, if you cannot pass the authentication test, uninstall the software immediately to avoid being unable to log onto the operating system and the inconvenience brought with it.&lt;br /&gt;
2. If failing to authenticate consecutively, please wait 10 minutes before attempting to authenticate again, if you still cannot authenticate, you need to ask an administrator to repair your device.&lt;br /&gt;
3. In safe mode, UniOTP Authentication usually takes a very long time.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_WebAuthentication_Init_Tool&amp;diff=1034</id>
		<title>UniToken WebAuthentication Init Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_WebAuthentication_Init_Tool&amp;diff=1034"/>
		<updated>2016-08-16T00:15:16Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Tools]]&lt;br /&gt;
&lt;br /&gt;
== About This Guide ==&lt;br /&gt;
&lt;br /&gt;
UniToken Init is a graphical user interface (GUI) tool that assists software developers to configure UniToken parameters for web use.&lt;br /&gt;
&lt;br /&gt;
== UniToken Init ==&lt;br /&gt;
&lt;br /&gt;
Note: Please select the appropriate UniToken Init application according to your server-side scripting language. At present, UniToken supports ASP, ASP.NET and PHP. Launching the UniToken Init application, will bring up the window below.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokeninit img01.jpg|370px|alt=UniToken Init login window]]&lt;br /&gt;
&lt;br /&gt;
* Enter the User ID in UserID (less than 16 characters).&lt;br /&gt;
* Check the Auto check-box to automatically generate credentials, otherwise define the credentials in Credential.&lt;br /&gt;
* Enter the User PIN used by users to log onto the UniToken Pro token in UserPIN, or check the Default check-box for the factory default User PIN &amp;quot;user&amp;quot;, without quotation marks.&lt;br /&gt;
* Enter the URL of the server in Server URL.&lt;br /&gt;
&lt;br /&gt;
The UniToken Init tool can also be used to change a User&#039;s PIN. To do so, check the Change User PIN check-box, and enter the new user PIN twice to confirm. Click the Burn button to begin applying changes to the UniToken.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokeninit img02.jpg|270px|alt=&#039;succesfully burned the UniToken&#039; message]]&lt;br /&gt;
&lt;br /&gt;
You have burnt your UniToken successfully if you see the above pop-up window. An insert SQL command will be added into the ImportSql.sql file which is in the same folder where UniToken Init tool is located. Open this file with a text editor, and you can add new records into the SQL database used to store user information. For more information, please refer to the Video Tutorial Guides.&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_WebAuthentication_Daemon_Tool&amp;diff=1030</id>
		<title>UniToken WebAuthentication Daemon Tool</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_WebAuthentication_Daemon_Tool&amp;diff=1030"/>
		<updated>2016-08-16T00:10:23Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UniToken_Tools]]&lt;br /&gt;
&lt;br /&gt;
The UniToken Daemon tool is a GUI application run on the users&#039; computer, and provides functions including logging onto the token, modifying settings and resetting user passwords. This tool is distributed together with UniToken PRO to users.&lt;br /&gt;
&lt;br /&gt;
== Launching the UniToken Daemon Tool ==&lt;br /&gt;
&lt;br /&gt;
After launching the UniToken Daemon tool, the User Logon window below will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokendaemon img01.jpg|370px|alt=UniToken Daemon Tool login window]]&lt;br /&gt;
&lt;br /&gt;
Enter the User PIN to log onto the device. &#039;&#039;&#039;Note:&#039;&#039;&#039; The User ID displayed in the above window is the UniToken ID. If logging onto the UniToken device was successful, an icon will appear in the notification area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assign an Internet Browser for use by UniToken ==&lt;br /&gt;
&lt;br /&gt;
In the System Settings tab, select the browser you would like to use, then click Apply.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokendaemon img02.jpg|370px|alt=UniToken System Settings, choosing a browser]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reset User PIN ==&lt;br /&gt;
&lt;br /&gt;
In the Change PIN tab, input fields Old PIN, New PIN and Confirm respectively. Click Submit to reset the User PIN.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokendaemon img03.jpg|370px|alt=UniToken Daemon changing PIN]]&lt;br /&gt;
&lt;br /&gt;
If resetting the User&#039;s PIN was successful, this message will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:unitokendaemon img04.jpg|250px|alt=&#039;new password successfully set&#039;]]&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
	<entry>
		<id>https://esecutech.com/wiki/index.php?title=UniToken_FAQ&amp;diff=1082</id>
		<title>UniToken FAQ</title>
		<link rel="alternate" type="text/html" href="https://esecutech.com/wiki/index.php?title=UniToken_FAQ&amp;diff=1082"/>
		<updated>2016-08-16T00:03:46Z</updated>

		<summary type="html">&lt;p&gt;Bao: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:UniToken FAQ]]&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
=== What is UniToken? ===&lt;br /&gt;
&lt;br /&gt;
UniToken is a USB two-factor authentication token. UniToken utilizes PKI technology, and can be employed for user authentication for [[:Category:UniKey_Application_Solutions|a variety of applications]].&lt;br /&gt;
&lt;br /&gt;
=== What is UniToken&#039;s three level password system? ===&lt;br /&gt;
&lt;br /&gt;
To log onto a UniToken device, a PIN (Personal Identification Number; note that the PIN used is not restricted to solely numbers) is used for user management on the device. UniToken implements three separate levels of security, each using separate passwords for the different permission levels. Below is a list of the user permissions on UniToken, from lowest to highest:&lt;br /&gt;
&lt;br /&gt;
* Without Login: Guest permissions&lt;br /&gt;
* User Login: User permissions (&#039;user&#039;)&lt;br /&gt;
* Admin Login: Administrator permissions (&#039;admin&#039;)&lt;br /&gt;
&lt;br /&gt;
=== What is UniToken&#039;s secure file system? ===&lt;br /&gt;
&lt;br /&gt;
The UniToken Secure File System allows the management of files to be utilized by the three-level permission system. Operations on files with certain restrictions require certain permissions. There are three different levels of file permissions:&lt;br /&gt;
&lt;br /&gt;
* Guest: All users are able to read the file. Only Users and Admins can modify the file.&lt;br /&gt;
* User: Guests cannot read the file. Users and Admins can read and modify the file.&lt;br /&gt;
* Admin: Only Admins can read and write to the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;User Actions&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Guest&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Admin&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;3&amp;quot;&amp;gt;File Permission&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Guest&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read/Write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read/Write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read/Write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read/Write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Admin&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read/Write&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What is UniToken&#039;s auto-lock feature? ===&lt;br /&gt;
&lt;br /&gt;
UniToken&#039;s auto-lock feature automatically locks the device to prevent any further log in attempts as a security measure after an incorrect PIN has been entered in succession more than the &amp;quot;Maximal Attempt Times&amp;quot; number. &lt;br /&gt;
&lt;br /&gt;
=== Can I use UniToken for smart card authentication? ===&lt;br /&gt;
&lt;br /&gt;
Yes. Installing the PKI redistribution package allows you to perform Windows Smart Card Authentication with UniToken. Please see the appropriate documentation.&amp;lt;!--TODO: Update--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How many digital certificates can be stored in a single UniToken device? ===&lt;br /&gt;
&lt;br /&gt;
Digital certificates are securely stored in what is known as a certificate container. Generally speaking, a single UniToken device can store up to two certificates in its certificate container.&lt;br /&gt;
&lt;br /&gt;
=== What are the differences between the UniToken models? ===&lt;br /&gt;
&lt;br /&gt;
Please see [http://www.esecutech.com/usb-authentication/unitoken-compare-features.html UniToken Compare Features].&lt;br /&gt;
&lt;br /&gt;
=== How can I begin using UniToken? ===&lt;br /&gt;
&lt;br /&gt;
Please see the [https://files.esecutech.com/marketing-materials/ProductsDoc/UniToken/UniToken_quickstart-130827EN.pdf UniToken Quick Start Guide].&lt;br /&gt;
&lt;br /&gt;
=== What is the default Administrator and User PIN? ===&lt;br /&gt;
&lt;br /&gt;
The factory default PIN for Administrator is &amp;quot;admin&amp;quot;, and the default for User is &amp;quot;user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Where can I receive resources or assistance? ===&lt;br /&gt;
&lt;br /&gt;
Please see [[#Additional resources|Additional resources]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== What does &amp;quot;driverless&amp;quot; mean? ===&lt;br /&gt;
&lt;br /&gt;
The UniToken authentication dongle is driverless, meaning UniToken requires no installation of drivers or additional software. Supported operating systems already possess the drivers needed by UniToken to operate and are automatically installed upon the first connection of the UniToken device, significantly reducing the problems associated with driver-dependent devices.&lt;br /&gt;
&lt;br /&gt;
=== What steps does SecuTech take to ensure UniToken is environmentally sustainable? ===&lt;br /&gt;
&lt;br /&gt;
SecuTech is committed to supplying products that are environmentally friendly. All parts and production processes of UniToken are lead-free and ROHS-compliant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
=== Which redistribution package should I use? ===&lt;br /&gt;
&lt;br /&gt;
For full PKI application support, please install the developer’s package which provides support for PKCS#11 and MS-CAPI. For non-PKI application support, please install the end user’s package which enables UniToken API support.&lt;br /&gt;
&lt;br /&gt;
=== What programming interfaces does UniToken support? ===&lt;br /&gt;
&lt;br /&gt;
UniToken supports three sets of APIs: PKCS#11, MS-CAPI, and UniToken APIs.&lt;br /&gt;
&lt;br /&gt;
=== What encryption algorithms does UniToken support? ===&lt;br /&gt;
&lt;br /&gt;
UniToken supports RSA, 3DES, AES encryption algorithms and MD5 and SHA-1 hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== What does the light on the UniToken dongle indicate? ===&lt;br /&gt;
&lt;br /&gt;
The UniToken Status Indicator Light is the LED light on the UniToken device which displays the status of the device. If the LED light on the UniToken device is continually on, it is recognized by the computer and should be functioning correctly. If the LED light on the UniToken device is flashing, then the UniToken device has not been recognized by the computer. If this is the case, reconnect the UniToken device to the computer, otherwise contact SecuTech Technical Support at https://www.esecutech.com/support or [mailto:support@eSecuTech.com support@esecutech.com].&lt;br /&gt;
&lt;br /&gt;
=== My UniToken device is locked. What should I do? ===&lt;br /&gt;
&lt;br /&gt;
If the UniToken device has locked itself, only the Administrator can unlock the device. To do so, the Administrator must log in and unlock the device through the Unlock button, found under User.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additional resources ==&lt;br /&gt;
&lt;br /&gt;
=== Where can I receive further assistance? ===&lt;br /&gt;
&lt;br /&gt;
We, at SecuTech, are dedicated to providing high-quality technical support to our customers. If you have any questions, please feel free to contact us at https://www.esecutech.com/support or [mailto:support@eSecuTech.com support@esecutech.com].&lt;/div&gt;</summary>
		<author><name>Bao</name></author>
	</entry>
</feed>