xref: /onnv-gate/usr/src/lib/pkcs11/pkcs11_tpm/common/globals.c (revision 9453:f0534026bc38)
19126SWyllys.Ingersoll@Sun.COM /* (C) COPYRIGHT International Business Machines Corp. 2001, 2002, 2005 */
29126SWyllys.Ingersoll@Sun.COM /*
39126SWyllys.Ingersoll@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
49126SWyllys.Ingersoll@Sun.COM  * Use is subject to license terms.
59126SWyllys.Ingersoll@Sun.COM  */
69126SWyllys.Ingersoll@Sun.COM 
79126SWyllys.Ingersoll@Sun.COM #include "tpmtok_int.h"
89126SWyllys.Ingersoll@Sun.COM 
99126SWyllys.Ingersoll@Sun.COM CK_BBOOL	initialized = FALSE;
109126SWyllys.Ingersoll@Sun.COM 
119126SWyllys.Ingersoll@Sun.COM pthread_mutex_t  native_mutex;
129126SWyllys.Ingersoll@Sun.COM pthread_mutex_t   pkcs_mutex, obj_list_mutex,
139126SWyllys.Ingersoll@Sun.COM 	sess_list_mutex, login_mutex;
149126SWyllys.Ingersoll@Sun.COM 
159126SWyllys.Ingersoll@Sun.COM void *xproclock;
169126SWyllys.Ingersoll@Sun.COM 
179126SWyllys.Ingersoll@Sun.COM DL_NODE  *sess_list	= NULL;
189126SWyllys.Ingersoll@Sun.COM DL_NODE  *sess_obj_list  = NULL;
199126SWyllys.Ingersoll@Sun.COM DL_NODE  *publ_token_obj_list = NULL;
209126SWyllys.Ingersoll@Sun.COM DL_NODE  *priv_token_obj_list = NULL;
219126SWyllys.Ingersoll@Sun.COM DL_NODE  *object_map	= NULL;
229126SWyllys.Ingersoll@Sun.COM 
239126SWyllys.Ingersoll@Sun.COM CK_STATE  global_login_state = 0;
249126SWyllys.Ingersoll@Sun.COM 
259126SWyllys.Ingersoll@Sun.COM LW_SHM_TYPE *global_shm;
269126SWyllys.Ingersoll@Sun.COM 
279126SWyllys.Ingersoll@Sun.COM CK_ULONG next_session_handle = 1;
289126SWyllys.Ingersoll@Sun.COM CK_ULONG next_object_handle = 1;
299126SWyllys.Ingersoll@Sun.COM 
309126SWyllys.Ingersoll@Sun.COM TOKEN_DATA  *nv_token_data = NULL;
319126SWyllys.Ingersoll@Sun.COM 
329126SWyllys.Ingersoll@Sun.COM extern CK_RV LW_Initialize();
339126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetFunctionList();
349126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetTokenInfo();
359126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetMechanismList();
369126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetMechanismInfo();
379126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_InitToken();
389126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_InitPIN();
399126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SetPIN();
409126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_OpenSession();
419126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_CloseSession();
429126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_CloseAllSessions();
439126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetSessionInfo();
449126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetOperationState();
459126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SetOperationState();
469126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Login();
479126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Logout();
489126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_CreateObject();
499126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_CopyObject();
509126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DestroyObject();
519126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetObjectSize();
529126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetAttributeValue();
539126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SetAttributeValue();
549126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_FindObjectsInit();
559126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_FindObjects();
569126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_FindObjectsFinal();
579126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_EncryptInit();
589126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Encrypt();
599126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_EncryptUpdate();
609126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_EncryptFinal();
619126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DecryptInit();
629126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Decrypt();
639126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DecryptUpdate();
649126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DecryptFinal();
659126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DigestInit();
669126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Digest();
679126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DigestUpdate();
689126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DigestKey();
699126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DigestFinal();
709126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignInit();
719126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Sign();
729126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignUpdate();
739126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignFinal();
749126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignRecoverInit();
759126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignRecover();
769126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_VerifyInit();
779126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_Verify();
789126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_VerifyUpdate();
799126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_VerifyFinal();
809126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_VerifyRecoverInit();
819126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_VerifyRecover();
829126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DigestEncryptUpdate();
839126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DecryptDigestUpdate();
849126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SignEncryptUpdate();
859126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DecryptVerifyUpdate();
869126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GenerateKey();
879126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GenerateKeyPair();
889126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_WrapKey();
899126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_UnwrapKey();
909126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_DeriveKey();
919126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_SeedRandom();
929126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GenerateRandom();
939126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_GetFunctionStatus();
949126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_CancelFunction();
959126SWyllys.Ingersoll@Sun.COM extern CK_RV SC_WaitForSlotEvent();
969126SWyllys.Ingersoll@Sun.COM 
979126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_rsaEncryption[] = {
989126SWyllys.Ingersoll@Sun.COM     0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01
999126SWyllys.Ingersoll@Sun.COM };
1009126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_md5WithRSAEncryption[] = {
1019126SWyllys.Ingersoll@Sun.COM     0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x04
1029126SWyllys.Ingersoll@Sun.COM };
1039126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_sha1WithRSAEncryption[] = {
1049126SWyllys.Ingersoll@Sun.COM     0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05
1059126SWyllys.Ingersoll@Sun.COM };
1069126SWyllys.Ingersoll@Sun.COM 
1079126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_AlgMd5[] =    {
1089126SWyllys.Ingersoll@Sun.COM     0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
1099126SWyllys.Ingersoll@Sun.COM     0x02, 0x05, 0x05, 0x00
1109126SWyllys.Ingersoll@Sun.COM };
1119126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_AlgSha1[] =   {
1129126SWyllys.Ingersoll@Sun.COM     0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05,
1139126SWyllys.Ingersoll@Sun.COM     0x00
1149126SWyllys.Ingersoll@Sun.COM };
1159126SWyllys.Ingersoll@Sun.COM CK_BYTE  ber_AlgIdRSAEncryption[] = {
1169126SWyllys.Ingersoll@Sun.COM     0x30, 0x0D, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
1179126SWyllys.Ingersoll@Sun.COM     0x01, 0x01, 0x01, 0x05, 0x00
1189126SWyllys.Ingersoll@Sun.COM };
1199126SWyllys.Ingersoll@Sun.COM 
1209126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_rsaEncryptionLen = sizeof (ber_rsaEncryption);
1219126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_md5WithRSAEncryptionLen = sizeof (ber_md5WithRSAEncryption);
1229126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_sha1WithRSAEncryptionLen = sizeof (ber_sha1WithRSAEncryption);
1239126SWyllys.Ingersoll@Sun.COM 
1249126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_AlgMd5Len =    sizeof (ber_AlgMd5);
1259126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_AlgSha1Len =   sizeof (ber_AlgSha1);
1269126SWyllys.Ingersoll@Sun.COM CK_ULONG ber_AlgIdRSAEncryptionLen = sizeof (ber_AlgIdRSAEncryption);
1279126SWyllys.Ingersoll@Sun.COM 
1289126SWyllys.Ingersoll@Sun.COM MECH_LIST_ELEMENT mech_list[] = {
1299126SWyllys.Ingersoll@Sun.COM 	{ CKM_RSA_PKCS_KEY_PAIR_GEN,	{512, 2048, CKF_HW |
1309126SWyllys.Ingersoll@Sun.COM 	    CKF_GENERATE_KEY_PAIR } },
1319126SWyllys.Ingersoll@Sun.COM 	{ CKM_RSA_PKCS, {512, 2048, CKF_HW   | CKF_ENCRYPT | CKF_DECRYPT |
1329126SWyllys.Ingersoll@Sun.COM 	    CKF_WRAP	 | CKF_UNWRAP  | CKF_SIGN | CKF_VERIFY  |
1339126SWyllys.Ingersoll@Sun.COM 	    CKF_SIGN_RECOVER | CKF_VERIFY_RECOVER } },
1349126SWyllys.Ingersoll@Sun.COM 
1359126SWyllys.Ingersoll@Sun.COM 	{ CKM_RSA_PKCS_OAEP,	{512, 2048, CKF_HW   | CKF_ENCRYPT |
1369126SWyllys.Ingersoll@Sun.COM 	    CKF_DECRYPT | CKF_WRAP	 | CKF_UNWRAP  |
1379126SWyllys.Ingersoll@Sun.COM 	    CKF_SIGN | CKF_VERIFY | CKF_SIGN_RECOVER | CKF_VERIFY_RECOVER }},
1389126SWyllys.Ingersoll@Sun.COM 
139*9453SWyllys.Ingersoll@Sun.COM #if 0
140*9453SWyllys.Ingersoll@Sun.COM 	/* No RSA_X_509 support for now... */
1419126SWyllys.Ingersoll@Sun.COM 	{ CKM_RSA_X_509, {512, 2048, CKF_HW  |
1429126SWyllys.Ingersoll@Sun.COM 	    CKF_ENCRYPT	| CKF_DECRYPT |
1439126SWyllys.Ingersoll@Sun.COM 	    CKF_WRAP	 | CKF_UNWRAP  |
1449126SWyllys.Ingersoll@Sun.COM 	    CKF_SIGN	 | CKF_VERIFY  |
1459126SWyllys.Ingersoll@Sun.COM 	    CKF_SIGN_RECOVER | CKF_VERIFY_RECOVER } },
146*9453SWyllys.Ingersoll@Sun.COM #endif
1479126SWyllys.Ingersoll@Sun.COM 
1489126SWyllys.Ingersoll@Sun.COM 	{CKM_MD5_RSA_PKCS,
1499126SWyllys.Ingersoll@Sun.COM 	{512, 2048, CKF_HW	| CKF_SIGN    | CKF_VERIFY } },
1509126SWyllys.Ingersoll@Sun.COM 
1519126SWyllys.Ingersoll@Sun.COM 	{ CKM_SHA1_RSA_PKCS,
1529126SWyllys.Ingersoll@Sun.COM 	{512, 2048, CKF_HW	| CKF_SIGN    | CKF_VERIFY } },
1539126SWyllys.Ingersoll@Sun.COM 
1549126SWyllys.Ingersoll@Sun.COM 	{CKM_SHA_1,
1559126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_DIGEST } },
1569126SWyllys.Ingersoll@Sun.COM 
1579126SWyllys.Ingersoll@Sun.COM 	{CKM_SHA_1_HMAC,
1589126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_SIGN | CKF_VERIFY } },
1599126SWyllys.Ingersoll@Sun.COM 
1609126SWyllys.Ingersoll@Sun.COM 	{CKM_SHA_1_HMAC_GENERAL,
1619126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_SIGN | CKF_VERIFY } },
1629126SWyllys.Ingersoll@Sun.COM 
1639126SWyllys.Ingersoll@Sun.COM 	{CKM_MD5,
1649126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_DIGEST } },
1659126SWyllys.Ingersoll@Sun.COM 
1669126SWyllys.Ingersoll@Sun.COM 	{CKM_MD5_HMAC,
1679126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_SIGN | CKF_VERIFY } },
1689126SWyllys.Ingersoll@Sun.COM 
1699126SWyllys.Ingersoll@Sun.COM 	{CKM_MD5_HMAC_GENERAL,
1709126SWyllys.Ingersoll@Sun.COM 	{0,    0, CKF_SIGN | CKF_VERIFY } },
1719126SWyllys.Ingersoll@Sun.COM };
1729126SWyllys.Ingersoll@Sun.COM 
1739126SWyllys.Ingersoll@Sun.COM CK_ULONG  mech_list_len = (sizeof (mech_list) / sizeof (MECH_LIST_ELEMENT));
1749126SWyllys.Ingersoll@Sun.COM 
1759126SWyllys.Ingersoll@Sun.COM /*
1769126SWyllys.Ingersoll@Sun.COM  * default SO pin hash values
1779126SWyllys.Ingersoll@Sun.COM  *
1789126SWyllys.Ingersoll@Sun.COM  * default SO pin = "87654321"
1799126SWyllys.Ingersoll@Sun.COM  */
1809126SWyllys.Ingersoll@Sun.COM CK_BYTE default_so_pin_md5[MD5_DIGEST_LENGTH] = {
1819126SWyllys.Ingersoll@Sun.COM 	0x5E, 0x86, 0x67, 0xA4, 0x39, 0xC6, 0x8F, 0x51,
1829126SWyllys.Ingersoll@Sun.COM 	0x45, 0xDD, 0x2F, 0xCB, 0xEC, 0xF0, 0x22, 0x09
1839126SWyllys.Ingersoll@Sun.COM };
1849126SWyllys.Ingersoll@Sun.COM 
1859126SWyllys.Ingersoll@Sun.COM CK_BYTE default_so_pin_sha[SHA1_DIGEST_LENGTH] = {
1869126SWyllys.Ingersoll@Sun.COM 	0xA7, 0xD5, 0x79, 0xBA, 0x76, 0x39, 0x80, 0x70,
1879126SWyllys.Ingersoll@Sun.COM 	0xEA, 0xE6, 0x54, 0xC3, 0x0F, 0xF1, 0x53, 0xA4,
1889126SWyllys.Ingersoll@Sun.COM 	0xC2, 0x73, 0x27, 0x2A
1899126SWyllys.Ingersoll@Sun.COM };
1909126SWyllys.Ingersoll@Sun.COM 
1919126SWyllys.Ingersoll@Sun.COM /* SH - 1 of "12345678" */
1929126SWyllys.Ingersoll@Sun.COM CK_BYTE default_user_pin_sha[SHA1_DIGEST_LENGTH] = {
1939126SWyllys.Ingersoll@Sun.COM 	0x7c, 0x22, 0x2f, 0xb2, 0x92, 0x7d, 0x82, 0x8a,
1949126SWyllys.Ingersoll@Sun.COM 	0xf2, 0x2f, 0x59, 0x21, 0x34, 0xe8, 0x93, 0x24,
1959126SWyllys.Ingersoll@Sun.COM 	0x80, 0x63, 0x7c, 0x0d
1969126SWyllys.Ingersoll@Sun.COM };
1979126SWyllys.Ingersoll@Sun.COM 
1989126SWyllys.Ingersoll@Sun.COM CK_BYTE user_pin_md5[MD5_DIGEST_LENGTH];
1999126SWyllys.Ingersoll@Sun.COM CK_BYTE so_pin_md5[MD5_DIGEST_LENGTH];
200