@@ -609,6 +609,8 @@ CK_RV SoftHSM::C_Initialize(CK_VOID_PTR pInitArgs)
609609 // Load the handle manager
610610 handleManager = new HandleManager ();
611611
612+ doRefresh = Configuration::i ()->getBool (" objectstore.readrefresh" , true );
613+
612614 // Set the state to initialised
613615 isInitialised = true ;
614616
@@ -1605,7 +1607,7 @@ CK_RV SoftHSM::C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
16051607
16061608 // Check the object handle.
16071609 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1608- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1610+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
16091611
16101612 CK_BBOOL wasOnToken = object->getBooleanValue (CKA_TOKEN, false );
16111613 CK_BBOOL wasPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1774,7 +1776,7 @@ CK_RV SoftHSM::C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
17741776
17751777 // Check the object handle.
17761778 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1777- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1779+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
17781780
17791781 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
17801782 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1822,7 +1824,7 @@ CK_RV SoftHSM::C_GetObjectSize(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
18221824
18231825 // Check the object handle.
18241826 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1825- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1827+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
18261828
18271829 *pulSize = CK_UNAVAILABLE_INFORMATION;
18281830
@@ -1846,7 +1848,7 @@ CK_RV SoftHSM::C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
18461848
18471849 // Check the object handle.
18481850 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1849- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1851+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
18501852
18511853 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
18521854 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1893,7 +1895,7 @@ CK_RV SoftHSM::C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
18931895
18941896 // Check the object handle.
18951897 OSObject *object = (OSObject *)handleManager->getObject (hObject);
1896- if (object == NULL_PTR || !object->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
1898+ if (object == NULL_PTR || !object->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
18971899
18981900 CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
18991901 CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -2163,7 +2165,7 @@ CK_RV SoftHSM::SymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
21632165
21642166 // Check the key handle.
21652167 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2166- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2168+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
21672169
21682170 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
21692171 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2410,7 +2412,7 @@ CK_RV SoftHSM::AsymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
24102412
24112413 // Check the key handle.
24122414 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2413- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2415+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
24142416
24152417 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
24162418 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2882,7 +2884,7 @@ CK_RV SoftHSM::SymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
28822884
28832885 // Check the key handle.
28842886 OSObject *key = (OSObject *)handleManager->getObject (hKey);
2885- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2887+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
28862888
28872889 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
28882890 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3130,7 +3132,7 @@ CK_RV SoftHSM::AsymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
31303132
31313133 // Check the key handle.
31323134 OSObject *key = (OSObject *)handleManager->getObject (hKey);
3133- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3135+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
31343136
31353137 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
31363138 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3773,7 +3775,7 @@ CK_RV SoftHSM::C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
37733775
37743776 // Check the key handle.
37753777 OSObject *key = (OSObject *)handleManager->getObject (hObject);
3776- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
3778+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
37773779
37783780 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
37793781 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3924,7 +3926,7 @@ CK_RV SoftHSM::MacSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechani
39243926
39253927 // Check the key handle.
39263928 OSObject *key = (OSObject *)handleManager->getObject (hKey);
3927- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3929+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
39283930
39293931 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
39303932 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4076,7 +4078,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
40764078
40774079 // Check the key handle.
40784080 OSObject *key = (OSObject *)handleManager->getObject (hKey);
4079- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4081+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
40804082
40814083 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
40824084 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4902,7 +4904,7 @@ CK_RV SoftHSM::MacVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
49024904
49034905 // Check the key handle.
49044906 OSObject *key = (OSObject *)handleManager->getObject (hKey);
4905- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4907+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
49064908
49074909 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
49084910 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -5054,7 +5056,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
50545056
50555057 // Check the key handle.
50565058 OSObject *key = (OSObject *)handleManager->getObject (hKey);
5057- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
5059+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
50585060
50595061 CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
50605062 CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6490,7 +6492,7 @@ CK_RV SoftHSM::C_WrapKey
64906492
64916493 // Check the wrapping key handle.
64926494 OSObject *wrapKey = (OSObject *)handleManager->getObject (hWrappingKey);
6493- if (wrapKey == NULL_PTR || !wrapKey->isValid ()) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6495+ if (wrapKey == NULL_PTR || !wrapKey->isValid (doRefresh )) return CKR_WRAPPING_KEY_HANDLE_INVALID;
64946496
64956497 CK_BBOOL isWrapKeyOnToken = wrapKey->getBooleanValue (CKA_TOKEN, false );
64966498 CK_BBOOL isWrapKeyPrivate = wrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -6532,7 +6534,7 @@ CK_RV SoftHSM::C_WrapKey
65326534
65336535 // Check the to be wrapped key handle.
65346536 OSObject *key = (OSObject *)handleManager->getObject (hKey);
6535- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
6537+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
65366538
65376539 CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
65386540 CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6957,7 +6959,7 @@ CK_RV SoftHSM::C_UnwrapKey
69576959
69586960 // Check the unwrapping key handle.
69596961 OSObject *unwrapKey = (OSObject *)handleManager->getObject (hUnwrappingKey);
6960- if (unwrapKey == NULL_PTR || !unwrapKey->isValid ()) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6962+ if (unwrapKey == NULL_PTR || !unwrapKey->isValid (doRefresh )) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
69616963
69626964 CK_BBOOL isUnwrapKeyOnToken = unwrapKey->getBooleanValue (CKA_TOKEN, false );
69636965 CK_BBOOL isUnwrapKeyPrivate = unwrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -7255,7 +7257,7 @@ CK_RV SoftHSM::C_DeriveKey
72557257
72567258 // Check the key handle.
72577259 OSObject *key = (OSObject *)handleManager->getObject (hBaseKey);
7258- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
7260+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
72597261
72607262 CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
72617263 CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -10358,7 +10360,7 @@ CK_RV SoftHSM::deriveDH
1035810360
1035910361 // Get the base key handle
1036010362 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10361- if (baseKey == NULL || !baseKey->isValid ())
10363+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1036210364 return CKR_KEY_HANDLE_INVALID;
1036310365
1036410366 // Get the DH algorithm handler
@@ -10690,7 +10692,7 @@ CK_RV SoftHSM::deriveECDH
1069010692
1069110693 // Get the base key handle
1069210694 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10693- if (baseKey == NULL || !baseKey->isValid ())
10695+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1069410696 return CKR_KEY_HANDLE_INVALID;
1069510697
1069610698 // Get the ECDH algorithm handler
@@ -11044,7 +11046,7 @@ CK_RV SoftHSM::deriveEDDSA
1104411046
1104511047 // Get the base key handle
1104611048 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11047- if (baseKey == NULL || !baseKey->isValid ())
11049+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
1104811050 return CKR_KEY_HANDLE_INVALID;
1104911051
1105011052 // Get the EDDSA algorithm handler
@@ -11570,7 +11572,7 @@ CK_RV SoftHSM::deriveSymmetric
1157011572
1157111573 // Check the key handle
1157211574 OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11573- if (baseKey == NULL_PTR || !baseKey->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
11575+ if (baseKey == NULL_PTR || !baseKey->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1157411576
1157511577 // Get the data
1157611578 ByteString secretValue;
0 commit comments