[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pkinit integration with smart card



The standard say one login is enough for all session since they all  
share
the same loginstate.

That said, I can belive you that this is the case, I've commited code  
that should
deal with by keeping the session around. See next snapshot generated in
a couple of hours.

Love


5 sep 2006 kl. 21.42 skrev Douglas E. Engert:

> One thing I do see in this trace is this sequence:
>
>   6 C_OpenSesion
>   7 C_Login CKU_USER
>  32 C_CloseSesion
>  33 C_OpenSession
>  34 C_SignInit
>  35 C_Sign --- fail
>
> It is not clear why the application clooses one session then opens
> and a new session without the C_Login to do the do the C_Sign.
>
> It is also not clear if you can close a sesion and expect the
> hanldes to objects found under that session to still be valid
> and usable be another sesion.
>
> The library may be sending a close or reset to the card, when the
> session is closed, thus the C_Sign will fail because the card will
> not allow it.
>
> Your card and PKCS#11 maybe working as expected, and it might be the
> application code that needs to be changed to use use a single session.
>
> With some other cards, the PKCS#11 implentation may not be enforcing
> this behavior and card as it should and the second sesion has access
> to the crypto on the card.
>
>
>
>
>
> malexander@kcp.com wrote:
>> p11_list_keys() cycles through the classes.  and uses the  
>> iterate_entries() method is used to find the objects. First i  
>> opens a session for login the uses that session to search:
>> 8: C_FindObjectsInit
>> [in] hSession = 0x8052438
>> [in] pTemplate[1]:
>>     CKA_CLASS             CKO_PRIVATE_KEY
>> Returned:  0 CKR_OK
>> That finds 1 object then that object has GetAttributeValue run  
>> through CKA_ID/CKA_VALUE, CKA_MODULUS, CKA_PUBLIC_EXPONENT (fails,  
>> note below manually populated the rsa->e value with the exponent  
>> from the certficate).  All the values are reqeusted with a 0  
>> buffer to get the size, then with a second request with the proper  
>> buffer allocations. Another FindObjects is called, this returns an  
>> objects and the GetAttributeValues are run through as before.   
>> This is the object that is used for the hKey value in CKA_SignInit  
>> later.
>> Then the FindObjectsFinal is sent. The FindObjectsInit is sent again;
>> 23: C_FindObjectsInit
>> [in] hSession = 0x8052438
>> [in] pTemplate[1]:
>>     CKA_CLASS             CKO_CERTIFICATE
>> Returned:  0 CKR_OK
>> That finds 1 object and then the GetAttributevalues are run same  
>> as before for CKA_ID/CKA_VALUE, then FindObjects is called again,  
>> a different objects matches and GetAttributes are called for  
>> CKA_ID/CKA_VALUE
>> FindObjects is called again, with no returned and  
>> findObjectsFinal, then the session is closed.
>> Next the applications Opens a new session and does the C_SignInit  
>> with the hkey value of from the second object found in the  
>> PRIVATE_KEY search. Then the C_Sign function fails.
>> I copied the PKCS11-spy module output below in case I read this  
>> wrong:
>> *************** OpenSC PKCS#11 spy *****************
>> Loaded: "/usr/local/acgold/lib/libpkcs11.so"
>> 0: C_GetFunctionList
>> Returned:  0 CKR_OK
>> 1: C_Initialize
>> Returned:  0 CKR_OK
>> 2: C_GetSlotList
>> [in] tokenPresent = 0x0
>> [out] pSlotList:
>> Count is 1
>> [out] *pulCount = 0x1
>> Returned:  0 CKR_OK
>> 3: C_GetSlotList
>> [in] tokenPresent = 0x0
>> [out] pSlotList:
>> Slot 1
>> [out] *pulCount = 0x1
>> Returned:  0 CKR_OK
>> 4: C_GetSlotInfo
>> [in] slotID = 0x1
>> [out] pInfo:
>>       slotDescription:        'ActivCard USB Reader 2.0 (60102D'
>>                               '27) 00 00                       '
>>       manufacturerID:         'Unknown MFR                     '
>>       hardwareVersion:         1.0
>>       firmwareVersion:         1.0
>>       flags:                   7
>>         CKF_TOKEN_PRESENT
>>         CKF_REMOVABLE_DEVICE
>>         CKF_HW_SLOT
>> Returned:  0 CKR_OK
>> 5: C_GetTokenInfo
>> [in] slotID = 0x1
>> [out] pInfo:
>>       label:                  'ActivIdentity Smart Card        '
>>       manufacturerID:         'Unknown MFR                     '
>>       model:                  'Unknown Model   '
>>       serialNumber:           '1               '
>>       ulMaxSessionCount:       0
>>       ulSessionCount:          0
>>       ulMaxRwSessionCount:     0
>>       ulRwSessionCount:        0
>>       ulMaxPinLen:             8
>>       ulMinPinLen:             8
>>       ulTotalPublicMemory:     0
>>       ulFreePublicMemory:      0
>>       ulTotalPrivateMemory:    0
>>       ulFreePrivateMemory:     0
>>       hardwareVersion:         255.0
>>       firmwareVersion:         255.0
>>       time:                   '0000000000000000'
>>       flags:                   40d
>>         CKF_RNG
>>         CKF_LOGIN_REQUIRED
>>         CKF_USER_PIN_INITIALIZED
>>         CKF_TOKEN_INITIALIZED
>> Returned:  0 CKR_OK
>> 6: C_OpenSession
>> [in] slotID = 0x1
>> [in] flags = 0x4
>> pApplication=(nil)
>> Notify=(nil)
>> [out] *phSession = 0x8052438
>> Returned:  0 CKR_OK
>> 7: C_Login
>> [in] hSession = 0x8052438
>> [in] userType = CKU_USER
>> [in] pPin[ulPinLen] [size : 0x6 (6)]
>>     36353431 3233
>> Returned:  0 CKR_OK
>> 8: C_FindObjectsInit
>> [in] hSession = 0x8052438
>> [in] pTemplate[1]:
>>     CKA_CLASS             CKO_PRIVATE_KEY
>> Returned:  0 CKR_OK
>> 9: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x1
>> Object 134612592 Matches
>> Returned:  0 CKR_OK
>> 10: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060670
>> [in] pTemplate[1]:
>>     CKA_ID                requested with 0 buffer
>> [out] pTemplate[1]:
>>     CKA_ID                has size 1
>> Returned:  0 CKR_OK
>> 11: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060670
>> [in] pTemplate[1]:
>>     CKA_ID                requested with 1 buffer
>> [out] pTemplate[1]:
>>     CKA_ID                [size : 0x1 (1)]
>>     01
>> Returned:  0 CKR_OK
>> 12: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060670
>> [in] pTemplate[1]:
>>     CKA_MODULUS           requested with 0 buffer
>> [out] pTemplate[1]:
>>     CKA_MODULUS           has size 128
>> Returned:  0 CKR_OK
>> 13: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060670
>> [in] pTemplate[1]:
>>     CKA_MODULUS           requested with 128 buffer
>> [out] pTemplate[1]:
>>     CKA_MODULUS           [size : 0x80 (128)]
>>     9DA6B972 1C10BFF8 C5D762E2 3439468F B907EDB0 CC9303CA B4F2C5B4  
>> 9A9D30A3
>>     9DD7D36E 4020E756 A947A48C 59176B6E 70F58A84 CD4282BC 0996A561  
>> 4496FA47
>>     6B03DE82 FF56A682 03517E8F D0D7D322 15346B06 2B1A39F0 C3202FC8  
>> A12C3043
>>     81F44F5E 5E074D17 62899B4B 9CF10374 FD484A3A F815166A 02D43C0D  
>> 9BB22387
>> Returned:  0 CKR_OK
>> 14: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060670
>> [in] pTemplate[1]:
>>     CKA_PUBLIC_EXPONENT   requested with 0 buffer
>> [out] pTemplate[1]:
>>     CKA_PUBLIC_EXPONENT   has size -1
>> Returned:  18 CKR_ATTRIBUTE_TYPE_INVALID
>> 15: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x1
>> Object 134555168 Matches
>> Returned:  0 CKR_OK
>> 16: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8052620
>> [in] pTemplate[1]:
>>     CKA_ID                requested with 1 buffer
>> [out] pTemplate[1]:
>>     CKA_ID                has size 1
>> Returned:  0 CKR_OK
>> 17: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8052620
>> [in] pTemplate[1]:
>>     CKA_ID                requested with 1 buffer
>> [out] pTemplate[1]:
>>     CKA_ID                [size : 0x1 (1)]
>>     00
>> Returned:  0 CKR_OK
>> 18: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8052620
>> [in] pTemplate[1]:
>>     CKA_MODULUS           requested with 0 buffer
>> [out] pTemplate[1]:
>>     CKA_MODULUS           has size 128
>> Returned:  0 CKR_OK
>> 19: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8052620
>> [in] pTemplate[1]:
>>     CKA_MODULUS           requested with 128 buffer
>> [out] pTemplate[1]:
>>     CKA_MODULUS           [size : 0x80 (128)]
>>     89E42655 C26A3DD8 58349968 A5A32FAE 2FF199EE 0D334E2D E24AA53F  
>> AFD5AAF9
>>     0D9EEACE 7224BB09 D2F4739F 8A678433 7E9F8892 71B4A7F5 27C278A7  
>> 71C6BD0C
>>     FB4DA725 19934967 8A4CBD9D 36FB8518 F0A81FDB D7F57B55 1912A2C8  
>> 8AA9859C
>>     732CD522 8E95A9D0 70A79522 ABC3E0F1 4C374FA8 E1799B48 54668406  
>> 042FFF23
>> Returned:  0 CKR_OK
>> 20: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8052620
>> [in] pTemplate[1]:
>>     CKA_PUBLIC_EXPONENT   requested with 0 buffer
>> [out] pTemplate[1]:
>>     CKA_PUBLIC_EXPONENT   has size -1
>> Returned:  18 CKR_ATTRIBUTE_TYPE_INVALID
>> 21: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x0
>> Returned:  0 CKR_OK
>> 22: C_FindObjectsFinal
>> [in] hSession = 0x8052438
>> Returned:  0 CKR_OK
>> 23: C_FindObjectsInit
>> [in] hSession = 0x8052438
>> [in] pTemplate[1]:
>>     CKA_CLASS             CKO_CERTIFICATE
>> Returned:  0 CKR_OK
>> 24: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x1
>> Object 134630568 Matches
>> Returned:  0 CKR_OK
>> 25: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8064ca8
>> [in] pTemplate[2]:
>>     CKA_ID                requested with 1 buffer
>>     CKA_VALUE             requested with 0 buffer
>> [out] pTemplate[2]:
>>     CKA_ID                has size 1
>>     CKA_VALUE             has size 1351
>> Returned:  0 CKR_OK
>> 26: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8064ca8
>> [in] pTemplate[2]:
>>     CKA_ID                requested with 1 buffer
>>     CKA_VALUE             requested with 1351 buffer
>> [out] pTemplate[2]:
>>     CKA_ID                [size : 0x1 (1)]
>>     01
>>     CKA_VALUE             [size : 0x547 (1351)]
>>     30820543 308204AC A0030201 0202043E CA423A30 0D06092A 864886F7  
>> 0D010105
>>     0500306F 310B3009 06035504 06130255 53311830 16060355 040A130F  
>> 552E532E
>>     20476F76 65726E6D 656E7431 1D301B06 0355040B 13144465 70617274  
>> 6D656E74
>>     206F6620 456E6572 6779311A 30180603 55040B13 114B616E 73617320  
>> 43697479
>>     20506C61 6E74310B 30090603 55040B13 02434130 1E170D30 36303732  
>> 36313733
>>     3134305A 170D3039 30373236 31383031 34305A30 81B1310B 30090603  
>> 55040613
>>     02555331 18301606 0355040A 130F552E 532E2047 6F766572 6E6D656E  
>> 74311D30
>>     1B060355 040B1314 44657061 72746D65 6E74206F 6620456E 65726779  
>> 311A3018
>>     06035504 0B13114B 616E7361 73204369 74792050 6C616E74 310F300D  
>> 06035504
>>     0B130670 6572736F 6E310E30 0C060355 040B1305 6C6F6361 6C312C30  
>> 0D060355
>>     04051306 75363032 3637301B 06035504 0313144D 69636861 656C2042  
>> 2E20416C
>>     6578616E 64657230 819F300D 06092A86 4886F70D 01010105 0003818D  
>> 00308189
>>     02818100 9DA6B972 1C10BFF8 C5D762E2 3439468F B907EDB0 CC9303CA  
>> B4F2C5B4
>>     9A9D30A3 9DD7D36E 4020E756 A947A48C 59176B6E 70F58A84 CD4282BC  
>> 0996A561
>>     4496FA47 6B03DE82 FF56A682 03517E8F D0D7D322 15346B06 2B1A39F0  
>> C3202FC8
>>     A12C3043 81F44F5E 5E074D17 62899B4B 9CF10374 FD484A3A F815166A  
>> 02D43C0D
>>     9BB22387 02030100 01A38202 A7308202 A3301706 03551D20 0410300E  
>> 300C060A
>>     60864801 65030201 0A043040 0603551D 11043930 3781126D 616C6578  
>> 616E6465
>>     72406B63 702E636F 6DA02106 0A2B0601 04018237 140203A0 130C1175  
>> 36303236
>>     37406164 2E6B6370 2E636F6D 301B0603 551D0904 14301230 1006092A  
>> 864886F6
>>     7D07441D 31030201 11308201 B4060355 1D1F0482 01AB3082 01A73081  
>> 8AA08187
>>     A08184A4 8181307F 310B3009 06035504 06130255 53311830 16060355  
>> 040A130F
>>     552E532E 20476F76 65726E6D 656E7431 1D301B06 0355040B 13144465  
>> 70617274
>>     6D656E74 206F6620 456E6572 6779311A 30180603 55040B13 114B616E  
>> 73617320
>>     43697479 20506C61 6E74310B 30090603 55040B13 02434131 0E300C06  
>> 03550403
>>     13054352 4C313730 820116A0 820112A0 82010E86 81836C64 61703A2F  
>> 2F656E74
>>     72757374 6469722E 6B63702E 636F6D2F 636E3D57 696E436F 6D62696E  
>> 6564312C
>>     6F753D43 412C6F75 3D4B616E 73617325 32304369 74792532 30506C61  
>> 6E742C6F
>>     753D4465 70617274 6D656E74 2532306F 66253230 456E6572 67792C6F  
>> 3D552E53
>>     2E253230 476F7665 726E6D65 6E742C63 3D55533F 3F626173 65868185  
>> 6C646170
>>     3A2F2F2F 434E3D43 41312C43 4E3D4341 53657276 65722C43 4E3D4344  
>> 502C434E
>>     3D507562 6C696320 4B657920 53657276 69636573 2C434E3D 53657276  
>> 69636573
>>     2C434E3D 436F6E66 69677572 6174696F 6E2C4443 3D726F6F 742C4443  
>> 3D6B6370
>>     2C44433D 636F6D3F 63657274 69666963 61746552 65766F63 6174696F  
>> 6E4C6973
>>     74300B06 03551D0F 04040302 0520301F 0603551D 23041830 168014D8  
>> 9483D59A
>>     6B2F737D A2F1CA82 6BD1ABC4 06C7BE30 1D060355 1D0E0416 0414BCF1  
>> 13E31D54
>>     1BA07348 2C30AE2B 69A0D7CE 4E5D3009 0603551D 13040230 00301906  
>> 092A8648
>>     86F67D07 4100040C 300A1B04 56372E31 03020490 300D0609 2A864886  
>> F70D0101
>>     05050003 81810050 75D4AEE3 CF0D112B A1D0B610 93158141 E892E3D2  
>> 7E9F07C0
>>     67A8CB64 33725D41 440DFBF3 FE3C6DDB F1C972B3 EBFD90E9 854FB862  
>> BD03513C
>>     DD71CD72 752FD7EA 7972B908 31C11686 295CE116 4BD6A17B A37EB8CB  
>> E5B59085
>>     560D0A7A A509D152 186FD599 E2119CCE A30F87C6 5048CA9E BEF5A3A3  
>> 82BC7CA4
>>     EEFCF7AA 057CC9
>> Returned:  0 CKR_OK
>> 27: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x1
>> Object 134613664 Matches
>> Returned:  0 CKR_OK
>> 28: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060aa0
>> [in] pTemplate[2]:
>>     CKA_ID                requested with 1 buffer
>>     CKA_VALUE             requested with 1351 buffer
>> [out] pTemplate[2]:
>>     CKA_ID                has size 1
>>     CKA_VALUE             has size 1429
>> Returned:  0 CKR_OK
>> 29: C_GetAttributeValue
>> [in] hSession = 0x8052438
>> [in] hObject = 0x8060aa0
>> [in] pTemplate[2]:
>>     CKA_ID                requested with 1 buffer
>>     CKA_VALUE             requested with 1429 buffer
>> [out] pTemplate[2]:
>>     CKA_ID                [size : 0x1 (1)]
>>     00
>>     CKA_VALUE             [size : 0x595 (1429)]
>>     30820591 308204FA A0030201 0202043E CA43DB30 0D06092A 864886F7  
>> 0D010105
>>     0500306F 310B3009 06035504 06130255 53311830 16060355 040A130F  
>> 552E532E
>>     20476F76 65726E6D 656E7431 1D301B06 0355040B 13144465 70617274  
>> 6D656E74
>>     206F6620 456E6572 6779311A 30180603 55040B13 114B616E 73617320  
>> 43697479
>>     20506C61 6E74310B 30090603 55040B13 02434130 1E170D30 36303830  
>> 33313630
>>     3735305A 170D3039 30383033 31363337 35305A30 81B1310B 30090603  
>> 55040613
>>     02555331 18301606 0355040A 130F552E 532E2047 6F766572 6E6D656E  
>> 74311D30
>>     1B060355 040B1314 44657061 72746D65 6E74206F 6620456E 65726779  
>> 311A3018
>>     06035504 0B13114B 616E7361 73204369 74792050 6C616E74 310F300D  
>> 06035504
>>     0B130670 6572736F 6E310E30 0C060355 040B1305 6C6F6361 6C312C30  
>> 0D060355
>>     04051306 75363032 3637301B 06035504 0313144D 69636861 656C2042  
>> 2E20416C
>>     6578616E 64657230 819F300D 06092A86 4886F70D 01010105 0003818D  
>> 00308189
>>     02818100 89E42655 C26A3DD8 58349968 A5A32FAE 2FF199EE 0D334E2D  
>> E24AA53F
>>     AFD5AAF9 0D9EEACE 7224BB09 D2F4739F 8A678433 7E9F8892 71B4A7F5  
>> 27C278A7
>>     71C6BD0C FB4DA725 19934967 8A4CBD9D 36FB8518 F0A81FDB D7F57B55  
>> 1912A2C8
>>     8AA9859C 732CD522 8E95A9D0 70A79522 ABC3E0F1 4C374FA8 E1799B48  
>> 54668406
>>     042FFF23 02030100 01A38202 F5308202 F1300B06 03551D0F 04040302  
>> 0780302B
>>     0603551D 10042430 22800F32 30303630 38303331 36303735 305A810F  
>> 32303038
>>     30393038 32303337 35305A30 1F060355 1D250418 30160608 2B060105  
>> 05070302
>>     060A2B06 01040182 37140202 30170603 551D2004 10300E30 0C060A60  
>> 86480165
>>     0302010A 04304006 03551D11 04393037 81126D61 6C657861 6E646572  
>> 406B6370
>>     2E636F6D A021060A 2B060104 01823714 0203A013 0C117536 30323637  
>> 4061642E
>>     6B63702E 636F6D30 1B060355 1D090414 30123010 06092A86 4886F67D  
>> 07441D31
>>     03020111 308201B4 0603551D 1F048201 AB308201 A730818A A08187A0  
>> 8184A481
>>     81307F31 0B300906 03550406 13025553 31183016 06035504 0A130F55  
>> 2E532E20
>>     476F7665 726E6D65 6E74311D 301B0603 55040B13 14446570 6172746D  
>> 656E7420
>>     6F662045 6E657267 79311A30 18060355 040B1311 4B616E73 61732043  
>> 69747920
>>     506C616E 74310B30 09060355 040B1302 4341310E 300C0603 55040313  
>> 0543524C
>>     31373082 0116A082 0112A082 010E8681 836C6461 703A2F2F 656E7472  
>> 75737464
>>     69722E6B 63702E63 6F6D2F63 6E3D5769 6E436F6D 62696E65 64312C6F  
>> 753D4341
>>     2C6F753D 4B616E73 61732532 30436974 79253230 506C616E 742C6F75  
>> 3D446570
>>     6172746D 656E7425 32306F66 25323045 6E657267 792C6F3D 552E532E  
>> 25323047
>>     6F766572 6E6D656E 742C633D 55533F3F 62617365 8681856C 6461703A  
>> 2F2F2F43
>>     4E3D4341 312C434E 3D434153 65727665 722C434E 3D434450 2C434E3D  
>> 5075626C
>>     6963204B 65792053 65727669 6365732C 434E3D53 65727669 6365732C  
>> 434E3D43
>>     6F6E6669 67757261 74696F6E 2C44433D 726F6F74 2C44433D 6B63702C  
>> 44433D63
>>     6F6D3F63 65727469 66696361 74655265 766F6361 74696F6E 4C697374  
>> 301F0603
>>     551D2304 18301680 14D89483 D59A6B2F 737DA2F1 CA826BD1 ABC406C7  
>> BE301D06
>>     03551D0E 04160414 29704371 70BCFD33 E6DDA186 60E3CD45 A09EE354  
>> 30090603
>>     551D1304 02300030 1906092A 864886F6 7D074100 040C300A 1B045637  
>> 2E310302
>>     04B0300D 06092A86 4886F70D 01010505 00038181 0042F9C0 B1607678  
>> 6EF1E5FF
>>     E90C23FD C2BDAC68 A7DCEC63 F541AA3B F3EA9D9D 36115A54 14B74B0C  
>> 769E3487
>>     F5B60080 F3C23E9E BE908AD8 18380393 F333DFCC 794782C4 8B159D4B  
>> DE0E9C9B
>>     7BF4ACCE 0F586AA7 2E0EC60A E36B3B55 992F8B3B 0AE156A8 3F95C10C  
>> D8E40860
>>     931BFC39 D2DBF130 FF53CD62 18294EEB FE7A5318 71
>> Returned:  0 CKR_OK
>> 30: C_FindObjects
>> [in] hSession = 0x8052438
>> [in] ulMaxObjectCount = 0x1
>> [out] ulObjectCount = 0x0
>> Returned:  0 CKR_OK
>> 31: C_FindObjectsFinal
>> [in] hSession = 0x8052438
>> Returned:  0 CKR_OK
>> 32: C_CloseSession
>> [in] hSession = 0x8052438
>> Returned:  0 CKR_OK
>> 33: C_OpenSession
>> [in] slotID = 0x1
>> [in] flags = 0x4
>> pApplication=(nil)
>> Notify=(nil)
>> [out] *phSession = 0x806f8c0
>> Returned:  0 CKR_OK
>> 34: C_SignInit
>> [in] hSession = 0x806f8c0
>> pMechanism->type=CKM_RSA_PKCS
>> [in] hKey = 0x8052620
>> Returned:  0 CKR_OK
>> 35: C_Sign
>> [in] hSession = 0x806f8c0
>> [in] pData[ulDataLen] [size : 0x23 (35)]
>>     30213009 06052B0E 03021A05 000414C5 89CD9A75 43934015 0D224CD1  
>> 3E5BE1F8
>>     6B9145
>> Returned:  6 CKR_FUNCTION_FAILED
>> "Douglas E. Engert" <deengert@anl.gov> 09/01/2006 03:38 PM
>> To
>> malexander@kcp.com
>> cc
>> heimdal-discuss@sics.se
>> Subject
>> Re: pkinit integration with smart card
>> malexander@kcp.com wrote:
>>> I think I just had a light bulb go off.  The hKey value isn't a  
>>> key like
>> a
>>> symmetric key.  The hKey value is an object on the card, that is  
>>> the private key.  Is this right?
>> Sort of. Its a handle to pass to the PKCS#11 that it uses to find the
>> key on the card.
>>> The hKey value is found in Mozilla with a FindObjectsInit using  
>>> the pTemplate[2]:
>>> [in] pTemplate[2]:    CKA_ID                [size : 0x1 (1)]
>>>    00
>>>    CKA_CLASS             CKO_PRIVATE_KEY
>>> The object that matches is returned and used in the SignInit  
>>> function.
>>>
>>> In heimdal pkinit it looks like it sends the FindObjectsInit with  
>>> just
>> the
>>> CKA_CLASS for the Private key.
>> And what does the FindObject return? Just one key, or many keys.
>> Are the calls to the FindObject... and C_Sign all in the same  
>> session?
>> Are there any other calls between the two that would cause the  
>> PKCS#11
>> to get confused about what hKey was to be used with trhe C_Sign.
>>> Can I add the CKA_ID for 00 in the FindObjectsInit?
>> Maybe. But this may depend on how many keys are on the card,
>> and you need to use the key that matches the certificate.
>> The certificate should have a CKA_ID that can be used to find the
>> matching key. So the apliucation code should use this when it
>> is trying to find the key object.
>> Do you have a copy of the PKCS#11 douument? It can be found at
>> http://www.rsasecurity.com/rsalabs/node.asp?id=2133
>> or Google for RSA PKCS#11  it "must" reading when debuging PKCS#11.
>>>
>>>
>>> "Douglas E. Engert" <deengert@anl.gov> Sent by: owner-heimdal- 
>>> discuss@sics.se
>>> 09/01/2006 10:44 AM
>>>
>>> To
>>> malexander@kcp.com
>>> cc
>>> heimdal-discuss@sics.se, owner-heimdal-discuss@sics.se
>>> Subject
>>> Re: pkinit integration with smart card
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> malexander@kcp.com wrote:
>>>
>>>
>>>
>>>> Thanks for the response.  Complely new to these low level points  
>>>> with
>>>
>>> the
>>>
>>>> Smart Card so I've been looking up some terms, I appreciate the  
>>>> advice.
>>>>
>>>> I looked at the PKCS11-tool output first:
>>>> pkcs11-tool --module /usr/local/acgold/lib/libpkcs11.so  -M   
>>>> Supported mechanisms:
>>>
>>>
>>> I am not sure what the other flags are, but I would expect the
>>> RSA-PKCS would have sign, verify, wrap, unwrap, and maybe decrypt.
>>> Note it did not say sign, which is the operation you are trying  
>>> to do.
>>>
>>>
>>>
>>>> RSA-PKCS, wrap, unwrap, other flags=0x20000
>>>
>>>
>>>> SHA1-RSA-PKCS, sign, verify, wrap, unwrap, encrypt, decrypt,
>>>
>>> keypairgen,
>>>
>>>> other flags=0x2d000
>>>>
>>>
>>>
>>> The available mechanisum from PKCS11 are a combinatiuon of what  
>>> can be done
>>> in the software and the smartcard. For example the SHA1 hash  
>>> might be
>> done
>>> by sending the data to the card, or could be done by the pkcs11  
>>> software
>>> to produce the hash.
>>>
>>> I am suprised if it can do SHA1_RSA_PKCS sign, it can't do
>>> RSA_PKCS as this just skips the hash set.
>>>
>>>
>>>
>>>
>>>
>>>> The length of the destination buffer is 128 bytes.  The length  
>>>> of the signature in pData is 35 bytes.  Is the CKM_RSA_X_509  
>>>> mechanism a tool
>>>
>>> of
>>>
>>>> the Card?  Should/could the pData for signature be padded to 128  
>>>> with a method external to the card?
>>>
>>>
>>> A sign with RSA_PKCS says take the input and pad with PKCS  
>>> padding 01
>> then
>>> do an RSA encrypt using the private key. The data must be less then
>>> keysize-11 so normally the data sent is a hash of the data you  
>>> really
>> want
>>> to sign.
>>>
>>> A sign with SHA1_RSA_PKCS says pass the data (any length) to the  
>>> C_Sign
>> or
>>> (C_SignUpdate...+C_SignFinal) then do the padding and encrypt  
>>> with RSA.
>>>
>>> So as Love pointed out, the Heimdal applicaiton could send the data
>>> pre hashed data to the PKCS11 using SHA1_RSA_PKCS.
>>>
>>>
>>>
>>>>
>>>>
>>>>
>>>> "Douglas E. Engert" <deengert@anl.gov> Sent by: owner-heimdal- 
>>>> discuss@sics.se
>>>> 08/31/2006 01:41 PM
>>>>
>>>> To
>>>> malexander@kcp.com
>>>> cc
>>>> heimdal-discuss@sics.se
>>>> Subject
>>>> Re: pkinit integration with smart card
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I have gotten the Heimdal to work with other OpenSC supported  
>>>> cards.
>>>>
>>>> It could be that the card says it has the CKM_RSA_PKCS but  
>>>> really does
>>>> not or the pkcs11 lib is simulating CKM_RSA_PKCS and is having  
>>>> problems
>>>> doing the padding.  It might be possible to use the  
>>>> CKM_RSA_X_509 (raw)
>>>> mechanisum, by doing the PKCS padding first, then calling the  
>>>> C_Sign
>>>> functions.
>>>>
>>>> Could also be that the pkcs11 is expecting the pSignature and  
>>>> pSignatureLen
>>>> to be set correctly, i.e. for a 1024 key, to a 128 byte buffer,  
>>>> and it
>>>
>>> is
>>>
>>>
>>>> returing the wrong error code.
>>>>
>>>> If you can use the OpenSC spy, can you use the pkcs11-tool as well
>>>> pointing it at your PKCS11( -module <sharedlib>)? What  
>>>> mechanisums does
>>>> it say it has?
>>>>
>>>>
>>>>
>>>> malexander@kcp.com wrote:
>>>>
>>>>
>>>>
>>>>
>>>>> Any idea as to why I would receive a CKR_FUNCTION_FAILED error  
>>>>> on the C_Sign operation from PKCS11 module?
>>>>> I'm getting to the signature operation on the smart card for  
>>>>> PKINIT
>> when
>>>
>>>>> the kinit segment faults.  I used the pkcs11 spy library from  
>>>>> OpenSC
>> and
>>>
>>>>> the final operations it records with the card are:
>>>>> 33: C_OpenSession
>>>>> [in] slotID = 0x1
>>>>> [in] flags = 0x4
>>>>> pApplication=(nil)
>>>>> Notify=(nil)
>>>>> [out] *phSession = 0x806b860
>>>>> Returned:  0 CKR_OK
>>>>>
>>>>>
>>>>> 34: C_SignInit
>>>>> [in] hSession = 0x806b860
>>>>> pMechanism->type=CKM_RSA_PKCS
>>>>> [in] hKey = 0x8052508
>>>>> Returned:  0 CKR_OK
>>>>>
>>>>>
>>>>> 35: C_Sign
>>>>> [in] hSession = 0x806b860
>>>>> [in] pData[ulDataLen] [size : 0x23 (35)]
>>>>>  30213009 06052B0E 03021A05 00041496 9A0A7A5A 74DA942D CA0160DF  
>>>>> CEABACB2
>>>>>  EB2E3F
>>>>> Returned:  6 CKR_FUNCTION_FAILED
>>>>>
>>>>> I've been trying to get the pkinit functionality to work with  
>>>>> the ActivCard Gold middleware product.  They provide the pkcs11  
>>>>> module;
>>>>
>>>> using
>>>>
>>>>
>>>>> this module I'm able to get it to work with SSH using a patch,  
>>>>> but I
>>>>
>>>> have
>>>>
>>>>
>>>>> not had success with heimdal.
>>>>>
>>>>> The module does not implement the CKA_PUBLIC_EXPONENT class.
>> Originally,
>>>
>>>>> the kinit aborts due to the missing exponent and so that's  
>>>>> manually inserted to the value from the certificates on the  
>>>>> Smart Card in the ks_p11.c.
>>>>>
>>>>> rsa->e = getattr_bn(p, slot, session, object,  
>>>>> CKA_PUBLIC_EXPONENT);
>>>>> if (rsa->e == NULL)
>>>>>      BN_dec2bn(&rsa->e, "65537");
>>>>> if (rsa->e == NULL)
>>>>>      _hx509_abort("CKA_PUBLIC_EXPONENT missing");
>>>>>
>>>>> I've also changed the rsa->e to any number with the same  
>>>>> results, so
>> I'm
>>>
>>>>> wondering if I'm doing it right.
>>>>>
>>>>
>>>>
>
> -- 
>
>  Douglas E. Engert  <DEEngert@anl.gov>
>  Argonne National Laboratory
>  9700 South Cass Avenue
>  Argonne, Illinois  60439
>  (630) 252-5444