@@ -610,6 +610,8 @@ CK_RV SoftHSM::C_Initialize(CK_VOID_PTR pInitArgs)
610610 // Load the handle manager
611611 handleManager = new HandleManager ();
612612
613+ doRefresh = Configuration::i ()->getBool (" objectstore.readrefresh" , true );
614+
613615 // Set the state to initialised
614616 isInitialised = true ;
615617
@@ -1608,7 +1610,7 @@ CK_RV SoftHSM::C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
16081610
16091611 // Check the object handle.
16101612 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1611- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1613+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
16121614
16131615 CK_BBOOL wasOnToken = object->getBooleanValue (CKA_TOKEN, false );
16141616 CK_BBOOL wasPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1777,7 +1779,7 @@ CK_RV SoftHSM::C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
17771779
17781780 // Check the object handle.
17791781 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1780- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1782+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
17811783
17821784 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
17831785 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1825,7 +1827,7 @@ CK_RV SoftHSM::C_GetObjectSize(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
18251827
18261828 // Check the object handle.
18271829 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1828- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1830+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
18291831
18301832 *pulSize = CK_UNAVAILABLE_INFORMATION;
18311833
@@ -1849,7 +1851,7 @@ CK_RV SoftHSM::C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
18491851
18501852 // Check the object handle.
18511853 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1852- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1854+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
18531855
18541856 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
18551857 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1896,7 +1898,7 @@ CK_RV SoftHSM::C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
18961898
18971899 // Check the object handle.
18981900 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1899- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1901+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
19001902
19011903 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
19021904 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -2166,7 +2168,7 @@ CK_RV SoftHSM::SymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
21662168
21672169 // Check the key handle.
21682170 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2169- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2171+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
21702172
21712173 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
21722174 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2414,7 +2416,7 @@ CK_RV SoftHSM::AsymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
24142416
24152417 // Check the key handle.
24162418 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2417- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2419+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
24182420
24192421 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
24202422 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2895,7 +2897,7 @@ CK_RV SoftHSM::SymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
28952897
28962898 // Check the key handle.
28972899 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2898- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2900+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
28992901
29002902 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
29012903 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3144,7 +3146,7 @@ CK_RV SoftHSM::AsymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
31443146
31453147 // Check the key handle.
31463148 OSObject *key = (OSObject *)handleManager->getObject (hKey);
3147- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3149+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
31483150
31493151 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
31503152 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3795,7 +3797,7 @@ CK_RV SoftHSM::C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
37953797
37963798 // Check the key handle.
37973799 OSObject *key = (OSObject *)handleManager->getObject (hObject);
3798- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
3800+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
37993801
38003802 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
38013803 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3946,7 +3948,7 @@ CK_RV SoftHSM::MacSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechani
39463948
39473949 // Check the key handle.
39483950 OSObject *key = (OSObject *)handleManager->getObject (hKey);
3949- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3951+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
39503952
39513953 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
39523954 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4098,7 +4100,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
40984100
40994101 // Check the key handle.
41004102 OSObject *key = (OSObject *)handleManager->getObject (hKey);
4101- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4103+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
41024104
41034105 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
41044106 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4924,7 +4926,7 @@ CK_RV SoftHSM::MacVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
49244926
49254927 // Check the key handle.
49264928 OSObject *key = (OSObject *)handleManager->getObject (hKey);
4927- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4929+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
49284930
49294931 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
49304932 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -5076,7 +5078,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
50765078
50775079 // Check the key handle.
50785080 OSObject *key = (OSObject *)handleManager->getObject (hKey);
5079- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
5081+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
50805082
50815083 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
50825084 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6512,7 +6514,7 @@ CK_RV SoftHSM::C_WrapKey
65126514
65136515 // Check the wrapping key handle.
65146516 OSObject *wrapKey = (OSObject *)handleManager->getObject (hWrappingKey);
6515- if (wrapKey == NULL_PTR || !wrapKey->isValid ()) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6517+ if (wrapKey == NULL_PTR || !wrapKey->isValid (doRefresh )) return CKR_WRAPPING_KEY_HANDLE_INVALID;
65166518
65176519 CK_BBOOL isWrapKeyOnToken = wrapKey->getBooleanValue (CKA_TOKEN, false );
65186520 CK_BBOOL isWrapKeyPrivate = wrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -6554,7 +6556,7 @@ CK_RV SoftHSM::C_WrapKey
65546556
65556557 // Check the to be wrapped key handle.
65566558 OSObject *key = (OSObject *)handleManager->getObject (hKey);
6557- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
6559+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
65586560
65596561 CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
65606562 CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6980,7 +6982,7 @@ CK_RV SoftHSM::C_UnwrapKey
69806982
69816983 // Check the unwrapping key handle.
69826984 OSObject *unwrapKey = (OSObject *)handleManager->getObject (hUnwrappingKey);
6983- if (unwrapKey == NULL_PTR || !unwrapKey->isValid ()) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6985+ if (unwrapKey == NULL_PTR || !unwrapKey->isValid (doRefresh )) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
69846986
69856987 CK_BBOOL isUnwrapKeyOnToken = unwrapKey->getBooleanValue (CKA_TOKEN, false );
69866988 CK_BBOOL isUnwrapKeyPrivate = unwrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -7280,7 +7282,7 @@ CK_RV SoftHSM::C_DeriveKey
72807282
72817283 // Check the key handle.
72827284 OSObject *key = (OSObject *)handleManager->getObject (hBaseKey);
7283- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
7285+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
72847286
72857287 CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
72867288 CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -10386,7 +10388,7 @@ CK_RV SoftHSM::deriveDH
1038610388
1038710389 // Get the base key handle
1038810390 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10389- if (baseKey == NULL || !baseKey->isValid ())
10391+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1039010392 return CKR_KEY_HANDLE_INVALID;
1039110393
1039210394 // Get the DH algorithm handler
@@ -10718,7 +10720,7 @@ CK_RV SoftHSM::deriveECDH
1071810720
1071910721 // Get the base key handle
1072010722 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10721- if (baseKey == NULL || !baseKey->isValid ())
10723+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1072210724 return CKR_KEY_HANDLE_INVALID;
1072310725
1072410726 // Get the ECDH algorithm handler
@@ -11072,7 +11074,7 @@ CK_RV SoftHSM::deriveEDDSA
1107211074
1107311075 // Get the base key handle
1107411076 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11075- if (baseKey == NULL || !baseKey->isValid ())
11077+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1107611078 return CKR_KEY_HANDLE_INVALID;
1107711079
1107811080 // Get the EDDSA algorithm handler
@@ -11598,7 +11600,7 @@ CK_RV SoftHSM::deriveSymmetric
1159811600
1159911601 // Check the key handle
1160011602 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11601- if (baseKey == NULL_PTR || !baseKey->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
11603+ if (baseKey == NULL_PTR || !baseKey->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1160211604
1160311605 // Get the data
1160411606 ByteString secretValue;
0 commit comments