2626#include <wolfpkcs11/pkcs11.h>
2727#include <wolfpkcs11/internal.h>
2828
29+ #ifdef WOLFPKCS11_TPM
30+ #include <wolftpm/tpm2_wrap.h>
31+ #endif
32+
2933
3034/**
3135 * Gets a list of slot identifiers for available slots.
@@ -1713,8 +1717,8 @@ CK_RV C_SetOperationState(CK_SESSION_HANDLE hSession,
17131717CK_RV C_Login (CK_SESSION_HANDLE hSession , CK_USER_TYPE userType ,
17141718 CK_UTF8CHAR_PTR pPin , CK_ULONG ulPinLen )
17151719{
1716- int ret ;
1717- CK_RV rv ;
1720+ int ret = 0 ;
1721+ CK_RV rv = CKR_OK ;
17181722 WP11_Slot * slot ;
17191723 WP11_Session * session ;
17201724
@@ -1751,44 +1755,9 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
17511755 slot = WP11_Session_GetSlot (session );
17521756 if (userType == CKU_SO ) {
17531757 ret = WP11_Slot_SOLogin (slot , (char * )pPin , (int )ulPinLen );
1754- if (ret == LOGGED_IN_E ) {
1755- rv = CKR_USER_ALREADY_LOGGED_IN ;
1756- WOLFPKCS11_LEAVE ("C_Login" , rv );
1757- return rv ;
1758- }
1759- if (ret == READ_ONLY_E ) {
1760- rv = CKR_SESSION_READ_ONLY_EXISTS ;
1761- WOLFPKCS11_LEAVE ("C_Login" , rv );
1762- return rv ;
1763- }
1764- if (ret == PIN_NOT_SET_E ) {
1765- rv = CKR_USER_PIN_NOT_INITIALIZED ;
1766- WOLFPKCS11_LEAVE ("C_Login" , rv );
1767- return rv ;
1768- }
1769- if (ret != 0 ) {
1770- rv = CKR_PIN_INCORRECT ;
1771- WOLFPKCS11_LEAVE ("C_Login" , rv );
1772- return rv ;
1773- }
17741758 }
17751759 else if (userType == CKU_USER ) {
17761760 ret = WP11_Slot_UserLogin (slot , (char * )pPin , (int )ulPinLen );
1777- if (ret == LOGGED_IN_E ) {
1778- rv = CKR_USER_ALREADY_LOGGED_IN ;
1779- WOLFPKCS11_LEAVE ("C_Login" , rv );
1780- return rv ;
1781- }
1782- if (ret == PIN_NOT_SET_E ) {
1783- rv = CKR_USER_PIN_NOT_INITIALIZED ;
1784- WOLFPKCS11_LEAVE ("C_Login" , rv );
1785- return rv ;
1786- }
1787- if (ret != 0 ) {
1788- rv = CKR_PIN_INCORRECT ;
1789- WOLFPKCS11_LEAVE ("C_Login" , rv );
1790- return rv ;
1791- }
17921761 }
17931762 else if (userType == CKU_CONTEXT_SPECIFIC ) {
17941763 rv = CKR_OPERATION_NOT_INITIALIZED ;
@@ -1801,7 +1770,37 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
18011770 return rv ;
18021771 }
18031772
1804- rv = CKR_OK ;
1773+ switch (ret ) {
1774+ case LOGGED_IN_E :
1775+ rv = CKR_USER_ALREADY_LOGGED_IN ;
1776+ break ;
1777+ case PIN_NOT_SET_E :
1778+ rv = CKR_USER_PIN_NOT_INITIALIZED ;
1779+ break ;
1780+ case PIN_INVALID_E :
1781+ rv = CKR_PIN_INCORRECT ;
1782+ break ;
1783+ case READ_ONLY_E :
1784+ /* Only possible for SO login */
1785+ rv = CKR_SESSION_READ_ONLY_EXISTS ;
1786+ break ;
1787+ case 0 :
1788+ rv = CKR_OK ;
1789+ break ;
1790+ #ifdef WOLFPKCS11_TPM
1791+ case TPM_RC_MEMORY :
1792+ case TPM_RC_SESSION_MEMORY :
1793+ case TPM_RC_OBJECT_MEMORY :
1794+ rv = CKR_DEVICE_MEMORY ;
1795+ break ;
1796+ #endif
1797+ default :
1798+ rv = CKR_DEVICE_ERROR ;
1799+ break ;
1800+ }
1801+
1802+ WOLFPKCS11_MSG ("Login function ret: %d" , ret );
1803+
18051804 WOLFPKCS11_LEAVE ("C_Login" , rv );
18061805 return rv ;
18071806}
0 commit comments