﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-David.Turing's Security Blog-文章分类-PKCS标准</title><link>http://www.blogjava.net/security/category/11802.html</link><description>Java Security, CAPICOM, CryptoAPI/CSP, BouncyCastle, Openssl, JCE/JCA, SSO, CAS, Tivoli, CA, PKI
&lt;br&gt;
&lt;font color="#00f100"&gt;本站内容只兼容IE浏览器&lt;/font&gt;
&lt;br&gt;
&lt;font color="#00f100"&gt;重要的文章包均含本人的PGP签名，本人愿意对自己的言论负责&lt;/font&gt;
&lt;br&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:29:16 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:29:16 GMT</pubDate><ttl>60</ttl><item><title>PKCS #11 Function List [From RSA]</title><link>http://www.blogjava.net/security/articles/PKCS11_Function_List.html</link><dc:creator>david.turing</dc:creator><author>david.turing</author><pubDate>Thu, 13 Jul 2006 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/security/articles/PKCS11_Function_List.html</guid><wfw:comment>http://www.blogjava.net/security/comments/57927.html</wfw:comment><comments>http://www.blogjava.net/security/articles/PKCS11_Function_List.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/security/comments/commentRss/57927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/security/services/trackbacks/57927.html</trackback:ping><description><![CDATA[<h2 class="sol">PKCS #11 Function List</h2>
		<a name="">
		</a>
		<p>
				<a name="indexterm-485">
				</a>The following list shows the categories of PKCS #11 functions that are supported by <kbd>pkcs11_softtoken.so</kbd> in the Solaris cryptographic framework with the associated functions: </p>
		<ul>
				<li>
						<p>
								<strong>General purpose</strong> – <kbd><b>C_Initialize()</b></kbd>, <kbd><b>C_Finalize()</b></kbd>, <kbd><b>C_GetInfo()</b></kbd>, <kbd><b>C_GetFunctionList()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Session management</strong> – <kbd><b>C_OpenSession()</b></kbd>, <kbd><b>C_CloseSession()</b></kbd>, <kbd><b>C_GetSessionInfo()</b></kbd>, <kbd><b>C_CloseAllSessions()</b></kbd>, <kbd><b>C_Login()</b></kbd>, <kbd><b>C_Logout()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Slot and token management</strong> – <kbd><b>C_GetSlotList()</b></kbd>, <kbd><b>C_GetSlotInfo()</b></kbd>, <kbd><b>C_GetMechanismList()</b></kbd>, <kbd><b>C_GetMechanismInfo()</b></kbd>, <kbd><b>C_SetPIN()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Encryption and decryption</strong> – <kbd><b>C_EncryptInit()</b></kbd>, <kbd><b>C_Encrypt()</b></kbd>, <kbd><b>C_EncryptUpdate()</b></kbd>, <kbd><b>C_EncryptFinal()</b></kbd>, <kbd><b>C_DecryptInit()</b></kbd>, <kbd><b>C_Decrypt()</b></kbd>, <kbd><b>C_DecryptUpdate()</b></kbd>, <kbd><b>C_DecryptFinal()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Message digesting</strong> – <kbd><b>C_DigestInit()</b></kbd>, <kbd><b>C_Digest()</b></kbd>, <kbd><b>C_DigestKey()</b></kbd>, <kbd><b>C_DigestUpdate()</b></kbd>, <kbd><b>C_DigestFinal()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Signing and applying MAC</strong> – <kbd><b>C_Sign()</b></kbd>, <kbd><b>C_SignInit()</b></kbd>, <kbd><b>C_SignUpdate()</b></kbd>, <kbd><b>C_SignFinal()</b></kbd>, <kbd><b>C_SignRecoverInit()</b></kbd>, <kbd><b>C_SignRecover()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Signature verification</strong> – <kbd><b>C_Verify()</b></kbd>, <kbd><b>C_VerifyInit()</b></kbd>, <kbd><b>C_VerifyUpdate()</b></kbd>, <kbd><b>C_VerifyFinal()</b></kbd>, <kbd><b>C_VerifyRecoverInit()</b></kbd>, <kbd><b>C_VerifyRecover()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Dual-purpose cryptographic functions</strong> – <kbd><b>C_DigestEncryptUpdate()</b></kbd>, <kbd><b>C_DecryptDigestUpdate()</b></kbd>, <kbd><b>C_SignEncryptUpdate()</b></kbd>, <kbd><b>C_DecryptVerifyUpdate()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Random number generation</strong> – <kbd><b>C_SeedRandom()</b></kbd>, <kbd><b>C_GenerateRandom()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Object management</strong> – <kbd><b>C_CreateObject()</b></kbd>, <kbd><b>C_DestroyObject()</b></kbd>, <kbd><b>C_CopyObject()</b></kbd>, <kbd><b>C_FindObjects()</b></kbd>, <kbd><b>C_FindObjectsInit()</b></kbd>, <kbd><b>C_FindObjectsFinal()</b></kbd>, <kbd><b>C_GetAttributeValue()</b></kbd>, <kbd><b>C_SetAttributeValue()</b></kbd></p>
				</li>
				<li>
						<p>
								<strong>Key management</strong> – <kbd><b>C_GenerateKey()</b></kbd>, <kbd><b>C_GenerateKeyPair()</b></kbd>, <kbd><b>C_DeriveKey()</b></kbd></p>
				</li>
		</ul>
		<a name="chapter2-13">
		</a>
		<h2 class="sol">Functions for Using PKCS #11</h2>
		<p>This section provides descriptions of the following functions for using PKCS #11:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-9d">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_Initialize()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-7">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_GetInfo()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-9">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_GetSlotList()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-9a">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_GetTokenInfo()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-9f">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_OpenSession()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#chapter2-9b">
										<font color="#002c99">PKCS #11 Functions: <kbd><b>C_GetMechanismList()</b></kbd></font>
								</a>
						</p>
				</li>
		</ul>
		<hr />
		<p>
				<b>Note – </b>
		</p>
		<p>All the PKCS #11 functions are available from <kbd>libpkcs11.so</kbd> library. You do not have to use the <kbd><b>C_GetFunctionList()</b></kbd> function to get the list of functions available. </p>
		<hr />
		<a name="chapter2-9d">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_Initialize()</b></kbd></h3>
		<p>
				<a name="indexterm-486">
				</a>
				<a name="indexterm-487">
				</a>
				<kbd>
						<b>C_Initialize()</b>
				</kbd>initializes the PKCS #11 library. <kbd><b>C_Initialize()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_Initialize(CK_VOID_PTR <var>pInitArgs</var>);</pre>
		<p>
				<var>pInitArgs</var> is either the null value <tt>NULL_PTR</tt> or else a pointer to a <kbd>CK_C_INITIALIZE_ARGS</kbd> structure. With <tt>NULL_PTR</tt>, the library uses the Solaris mutexes as locking primitives to arbitrate the access to internal shared structures between multiple threads. Note that the Solaris cryptographic framework does not accept mutexes. Because this implementation of the <tt>cryptoki</tt> library handles multithreading safely and efficiently, using <tt>NULL_PTR</tt> is recommended. An application can also use <var>pInitArgs</var> to set flags such as CKF_LIBRARY_CANT_CREATE_OS_THREADS. <kbd><b>C_Finalize()</b></kbd> signals that the application is through with the PKCS #11 library.</p>
		<hr />
		<p>
				<b>Note – </b>
		</p>
		<p>
				<kbd>
						<b>C_Finalize()</b>
				</kbd>should never be called by libraries. By convention, applications are responsible for calling <kbd><b>C_Finalize()</b></kbd> to close out a session.</p>
		<hr />
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_Initialize()</b></kbd> uses the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CANT_LOCK</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_ALREADY_INITIALIZED</tt> – This error is nonfatal.</p>
				</li>
		</ul>
		<a name="chapter2-7">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_GetInfo()</b></kbd></h3>
		<p>
				<a name="indexterm-488">
				</a>
				<a name="indexterm-489">
				</a>
				<kbd>
						<b>C_GetInfo()</b>
				</kbd>uses manufacturer and version information about the <tt>cryptoki</tt> library. <kbd><b>C_GetInfo()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_GetInfo(CK_INFO_PTR <var>pInfo</var>);</pre>
		<p>
				<kbd>
						<b>C_GetInfo()</b>
				</kbd>returns the following values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>cryptokiVersion = 2, 11</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>manufacturerID = Sun Microsystems, Inc.</tt>
						</p>
				</li>
		</ul>
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_GetInfo()</b></kbd> gets the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_NOT_INITIALIZED</tt>
						</p>
				</li>
		</ul>
		<a name="chapter2-9">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_GetSlotList()</b></kbd></h3>
		<p>
				<a name="indexterm-490">
				</a>
				<a name="indexterm-491">
				</a>
				<kbd>
						<b>C_GetSlotList()</b>
				</kbd>uses a list of available slots. If no additional cryptographic providers have been installed other than <kbd>pkcs11_softtoken.so</kbd>, then <kbd><b>C_GetSlotList()</b></kbd> returns the default slot only. <kbd><b>C_GetSlotList()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_GetSlotList(CK_BBOOL <var>tokenPresent</var>, CK_SLOT_ID_PTR <var>pSlotList</var>, 
CK_ULONG_PTR <var>pulCount</var>);</pre>
		<p>When set to TRUE, <var>tokenPresent</var> limits the search to those slots whose tokens are present. </p>
		<p>When <var>pSlotList</var> is set to NULL_PTR, <kbd><b>C_GetSlotlist()</b></kbd> returns the number of slots only. <var>pulCount</var> is a pointer to the location to receive the slot count. </p>
		<p>When <var>pSlotList</var> points to the buffer to receive the slots, <var>*pulCount</var> is set to the maximum expected number of CK_SLOT_ID elements. On return, <var>*pulCount</var> is set to the actual number of CK_SLOT_ID elements.</p>
		<p>Typically, PKCS #11 applications call <kbd><b>C_GetSlotList()</b></kbd> twice. The first time, <kbd><b>C_GetSlotList()</b></kbd> is called to get the number of slots for memory allocation. The second time, <kbd><b>C_GetSlotList()</b></kbd> is called to retrieve the slots.</p>
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_GetSlotlist()</b></kbd> gets the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_BUFFER_TOO_SMALL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_NOT_INITIALIZED</tt>
						</p>
				</li>
		</ul>
		<a name="chapter2-9a">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_GetTokenInfo()</b></kbd></h3>
		<p>
				<a name="indexterm-492">
				</a>
				<kbd>
						<b>C_GetTokenInfo()</b>
				</kbd>gets information about a specific token. <kbd><b>C_GetTokenInfo()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_GetTokenInfo(CK_SLOT_ID <var>slotID</var>, CK_TOKEN_INFO_PTR <var>pInfo</var>);</pre>
		<p>
				<var>slotID</var> identifies the slot for the token. <var>slotID</var> has to be a valid ID that was returned by <kbd><b>C_GetSlotList()</b></kbd>. <var>pInfo</var> is a pointer to the location to receive the token information.</p>
		<p>If <kbd>pkcs11_softtoken.so</kbd> is the only installed provider, then <kbd><b>C_GetTokenInfo()</b></kbd> returns the following fields and values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>label – Sun Software PKCS#11 softtoken.</p>
				</li>
				<li>
						<p>flags – <tt>CKF_DUAL_CRYPTO_OPERATIONS</tt>, <tt>CKF_TOKEN_INITIALIZED</tt>, <tt>CKF_RNG</tt>, <tt>CKF_USER_PIN_INITIALIZED</tt>, and <tt>CKF_LOGIN_REQUIRED</tt>, which are set to 1.</p>
				</li>
				<li>
						<p>ulMaxSessionCount – Set to <tt>CK_EFFECTIVELY_INFINITE</tt>.</p>
				</li>
				<li>
						<p>ulMaxRwSessionCount - Set to <tt>CK_EFFECTIVELY_INFINITE</tt>.</p>
				</li>
				<li>
						<p>ulMaxPinLen – Set to 256.</p>
				</li>
				<li>
						<p>ulMinPinLen – Set to 1.</p>
				</li>
				<li>
						<p>ulTotalPublicMemory set to <tt>CK_UNAVAILABLE_INFORMATION</tt></p>
				</li>
				<li>
						<p>ulFreePublicMemory set to <tt>CK_UNAVAILABLE_INFORMATION</tt></p>
				</li>
				<li>
						<p>ulTotalPrivateMemory set to <tt>CK_UNAVAILABLE_INFORMATION</tt></p>
				</li>
				<li>
						<p>ulFreePrivateMemory set to <tt>CK_UNAVAILABLE_INFORMATION</tt></p>
				</li>
		</ul>
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_GetSlotlist()</b></kbd> gets the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_BUFFER_TOO_SMALL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_NOT_INITIALIZED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SLOT_ID_INVALID</tt>
						</p>
				</li>
		</ul>
		<p>The following return values are relevant for plug-ins with hardware tokens:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_DEVICE_ERROR</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_MEMORY</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_REMOVED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_PRESENT</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_RECOGNIZED</tt>
						</p>
				</li>
		</ul>
		<a name="chapter2-9f">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_OpenSession()</b></kbd></h3>
		<p>
				<a name="indexterm-493">
				</a>
				<a name="indexterm-494">
				</a>
				<kbd>
						<b>C_OpenSession()</b>
				</kbd>enables an application to start a cryptographic session with a specific token in a specific slot. <kbd><b>C_OpenSession()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_OpenSession(CK_SLOT_ID <var>slotID</var>, CK_FLAGS <var>flags</var>, CK_VOID_PTR <var>pApplication</var>, 
CK_NOTIFY <var>Notify</var>, CK_SESSION_HANDLE_PTR <var>phSession</var>);</pre>
		<p>
				<var>slotID</var> identifies the slot. <var>flags</var> indicates whether the session is read-write or read-only. <var>pApplication</var> is a pointer that is defined by the application for use in callbacks. <var>Notify</var> holds the address of an optional callback function. <var>phSession</var> is a pointer to the location of the session handle.</p>
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_OpenSession()</b></kbd> gets the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_NOT_INITIALIZED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SLOT_ID_INVALID</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_WRITE_PROTECTED</tt> – Occurs with write-protected tokens.</p>
				</li>
		</ul>
		<p>The following return values are relevant for plug-ins with hardware tokens:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_DEVICE_ERROR</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_MEMORY</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_REMOVED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SESSION_COUNT</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SESSION_PARALLEL_NOT_SUPPORTED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SESSION_READ_WRITE_SO_EXISTS</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_PRESENT</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_RECOGNIZED</tt>
						</p>
				</li>
		</ul>
		<a name="chapter2-9b">
		</a>
		<h3 class="sol">PKCS #11 Functions: <kbd><b>C_GetMechanismList()</b></kbd></h3>
		<p>
				<a name="indexterm-495">
				</a>
				<a name="indexterm-496">
				</a>
				<kbd>
						<b>C_GetMechanismList()</b>
				</kbd>gets a list of mechanism types that are supported by the specified token. <kbd><b>C_GetMechanismList()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>C_GetMechanismList(CK_SLOT_ID <var>slotID</var>, CK_MECHANISM_TYPE_PTR <var>pMechanismList</var>, 
CK_ULONG_PTR <var>pulCount</var>);</pre>
		<p>
				<var>slotID</var> identifies the slot for the token. <var>pulCount</var> is a pointer to the location to receive the number of mechanisms. When <var>pMechanismList</var> is set to NULL_PTR, the number of mechanisms is returned in <var>*pulCount</var>. Otherwise, <var>*pulCount</var> must be set to the size of the list and <var>pMechanismList</var> points to the buffer to hold the list.</p>
		<p>When PKCS #11 Soft Token is plugged in, <kbd><b>C_GetMechanismList()</b></kbd> returns the following list of supported mechanisms:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKM_AES_CBC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_AES_CBC_PAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_AES_ECB</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_AES_KEY_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_CBC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_CBC_PAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_ECB</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_KEY_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_MAC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES_MAC_GENERAL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES3_CBC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES3_CBC_PAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES3_ECB</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DES3_KEY_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DH_PKCS_DERIVE</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DH_PKCS_KEY_PAIR_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DSA</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DSA_KEY_PAIR_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_DSA_SHA_1</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_MD5</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_MD5_KEY_DERIVATION</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_MD5_RSA_PKCS</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_MD5_HMAC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_MD5_HMAC_GENERAL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_PBE_SHA1_RC4_128</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_PKCS5_PBKD2</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_RC4</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_RC4_KEY_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_RSA_PKCS</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_RSA_X_509</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_RSA_PKCS_KEY_PAIR_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SHA_1</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SHA_1_HMAC_GENERAL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SHA_1_HMAC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SHA_1_KEY_DERIVATION</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SHA_1_RSA_PKCS</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_KEY_AND_MAC_DERIVE</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_MASTER_KEY_DERIVE</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_MASTER_KEY_DERIVE_DH</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_MD5_MAC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_PRE_MASTER_KEY_GEN</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_SSL3_SHA1_MAC</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_TLS_KEY_AND_MAC_DERIVE</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_TLS_MASTER_KEY_DERIVE</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_TLS_MASTER_KEY_DERIVE_DH</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKM_TLS_PRE_MASTER_KEY_GEN</tt>
						</p>
				</li>
		</ul>
		<p>In addition to CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, and CKR_OK, <kbd><b>C_GetSlotlist()</b></kbd> uses the following return values:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_ARGUMENTS_BAD</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_BUFFER_TOO_SMALL</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_CRYPTOKI_NOT_INITIALIZED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_SLOT_ID_INVALID</tt>
						</p>
				</li>
		</ul>
		<p>The following return values are relevant for plug-ins with hardware tokens:</p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<tt>CKR_DEVICE_ERROR</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_MEMORY</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_DEVICE_REMOVED</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_PRESENT</tt>
						</p>
				</li>
				<li>
						<p>
								<tt>CKR_TOKEN_NOT_RECOGNIZED</tt>
						</p>
				</li>
		</ul>
		<a name="efuser-4">
		</a>
		<h2 class="sol">Extended PKCS #11 Functions</h2>
		<p>In addition to the standard PKCS #11 functions, two convenience functions are supplied with the Solaris cryptographic framework: </p>
		<a name="">
		</a>
		<ul>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#efuser-5">
										<font color="#002c99">Extended PKCS #11 Functions: <kbd><b>SUNW_C_GetMechSession()</b></kbd></font>
								</a>
						</p>
				</li>
				<li>
						<p>
								<a href="http://docs.sun.com/app/docs/doc/816-4863/6mb20lvgv?a=view#efuser-6">
										<font color="#002c99">Extended PKCS #11 Functions: SUNW_C_KeyToObject</font>
								</a>
						</p>
				</li>
		</ul>
		<a name="efuser-5">
		</a>
		<h3 class="sol">Extended PKCS #11 Functions: <kbd><b>SUNW_C_GetMechSession()</b></kbd></h3>
		<p>
				<a name="indexterm-497">
				</a>
				<a name="indexterm-498">
				</a>
				<kbd>
						<b>SUNW_C_GetMechSession()</b>
				</kbd>is a convenience function that initializes the Solaris cryptographic framework. The function then starts a session with the specified mechanism. <kbd><b>SUNW_C_GetMechSession()</b></kbd> uses the following syntax:</p>
		<a name="">
		</a>
		<pre>SUNW_C_GetMechSession(CK_MECHANISM_TYPE <var>mech</var>, C\
K_SESSION_HANDLE_PTR <var>hSession</var>)</pre>
		<p>The <var>mech</var> parameter is used to specify the mechanism to be used. <var>hSession</var> is a pointer to the session location. </p>
		<p>Internally, <kbd><b>SUNW_C_GetMechSession()</b></kbd> calls <kbd><b>C_Initialize()</b></kbd> to initialize the <tt>cryptoki</tt> library. <kbd><b>SUNW_C_GetMechSession()</b></kbd> next calls <kbd><b>C_GetSlotList()</b></kbd> and <kbd><b>C_GetMechanismInfo()</b></kbd> to search through the available slots for a token with the specified mechanism. When the mechanism is found, <kbd><b>SUNW_C_GetMechSession()</b></kbd> calls <kbd><b>C_OpenSession()</b></kbd> to open a session. </p>
		<p>The <kbd><b>SUNW_C_GetMechSession()</b></kbd> only needs to be called once. However, calling <kbd><b>SUNW_C_GetMechSession()</b></kbd> multiple times does not cause any problems.</p>
		<a name="efuser-6">
		</a>
		<h3 class="sol">Extended PKCS #11 Functions: SUNW_C_KeyToObject</h3>
		<p>
				<a name="indexterm-499">
				</a>
				<a name="indexterm-500">
				</a>
				<kbd>
						<b>SUNW_C_KeyToObject()</b>
				</kbd>creates a secret key object. The calling program must specify the mechanism to be used and raw key data. Internally, <kbd><b>SUNW_C_KeyToObject()</b></kbd> determines the type of key for the specified mechanism. A generic key object is created through <kbd><b>C_CreateObject()</b></kbd>. <kbd><b>SUNW_C_KeyToObject()</b></kbd> next calls <kbd><b>C_GetSessionInfo()</b></kbd> and <kbd><b>C_GetMechanismInfo()</b></kbd> to get the slot and mechanism. <kbd><b>C_SetAttributeValue()</b></kbd> then sets the attribute flag for the key object according to the type of mechanism.</p><img src ="http://www.blogjava.net/security/aggbug/57927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/security/" target="_blank">david.turing</a> 2006-07-13 11:13 <a href="http://www.blogjava.net/security/articles/PKCS11_Function_List.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>