@@ -609,6 +609,8 @@ CK_RV SoftHSM::C_Initialize(CK_VOID_PTR pInitArgs)
609
609
// Load the handle manager
610
610
handleManager = new HandleManager ();
611
611
612
+ doRefresh = Configuration::i ()->getBool (" objectstore.readrefresh" , true );
613
+
612
614
// Set the state to initialised
613
615
isInitialised = true ;
614
616
@@ -1605,7 +1607,7 @@ CK_RV SoftHSM::C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
1605
1607
1606
1608
// Check the object handle.
1607
1609
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;
1609
1611
1610
1612
CK_BBOOL wasOnToken = object->getBooleanValue (CKA_TOKEN, false );
1611
1613
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
1774
1776
1775
1777
// Check the object handle.
1776
1778
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;
1778
1780
1779
1781
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1780
1782
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
1822
1824
1823
1825
// Check the object handle.
1824
1826
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;
1826
1828
1827
1829
*pulSize = CK_UNAVAILABLE_INFORMATION;
1828
1830
@@ -1846,7 +1848,7 @@ CK_RV SoftHSM::C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1846
1848
1847
1849
// Check the object handle.
1848
1850
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;
1850
1852
1851
1853
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1852
1854
CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1893,7 +1895,7 @@ CK_RV SoftHSM::C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1893
1895
1894
1896
// Check the object handle.
1895
1897
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;
1897
1899
1898
1900
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1899
1901
CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -2163,7 +2165,7 @@ CK_RV SoftHSM::SymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2163
2165
2164
2166
// Check the key handle.
2165
2167
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;
2167
2169
2168
2170
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2169
2171
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2411,7 +2413,7 @@ CK_RV SoftHSM::AsymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
2411
2413
2412
2414
// Check the key handle.
2413
2415
OSObject *key = (OSObject *)handleManager->getObject (hKey);
2414
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2416
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
2415
2417
2416
2418
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2417
2419
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2883,7 +2885,7 @@ CK_RV SoftHSM::SymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2883
2885
2884
2886
// Check the key handle.
2885
2887
OSObject *key = (OSObject *)handleManager->getObject (hKey);
2886
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
2888
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
2887
2889
2888
2890
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2889
2891
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3132,7 +3134,7 @@ CK_RV SoftHSM::AsymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
3132
3134
3133
3135
// Check the key handle.
3134
3136
OSObject *key = (OSObject *)handleManager->getObject (hKey);
3135
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3137
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
3136
3138
3137
3139
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3138
3140
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3775,7 +3777,7 @@ CK_RV SoftHSM::C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
3775
3777
3776
3778
// Check the key handle.
3777
3779
OSObject *key = (OSObject *)handleManager->getObject (hObject);
3778
- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
3780
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
3779
3781
3780
3782
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3781
3783
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3926,7 +3928,7 @@ CK_RV SoftHSM::MacSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechani
3926
3928
3927
3929
// Check the key handle.
3928
3930
OSObject *key = (OSObject *)handleManager->getObject (hKey);
3929
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
3931
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
3930
3932
3931
3933
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3932
3934
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4078,7 +4080,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
4078
4080
4079
4081
// Check the key handle.
4080
4082
OSObject *key = (OSObject *)handleManager->getObject (hKey);
4081
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4083
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
4082
4084
4083
4085
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
4084
4086
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4904,7 +4906,7 @@ CK_RV SoftHSM::MacVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
4904
4906
4905
4907
// Check the key handle.
4906
4908
OSObject *key = (OSObject *)handleManager->getObject (hKey);
4907
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
4909
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
4908
4910
4909
4911
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
4910
4912
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -5056,7 +5058,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
5056
5058
5057
5059
// Check the key handle.
5058
5060
OSObject *key = (OSObject *)handleManager->getObject (hKey);
5059
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
5061
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
5060
5062
5061
5063
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
5062
5064
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6492,7 +6494,7 @@ CK_RV SoftHSM::C_WrapKey
6492
6494
6493
6495
// Check the wrapping key handle.
6494
6496
OSObject *wrapKey = (OSObject *)handleManager->getObject (hWrappingKey);
6495
- if (wrapKey == NULL_PTR || !wrapKey->isValid ()) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6497
+ if (wrapKey == NULL_PTR || !wrapKey->isValid (doRefresh )) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6496
6498
6497
6499
CK_BBOOL isWrapKeyOnToken = wrapKey->getBooleanValue (CKA_TOKEN, false );
6498
6500
CK_BBOOL isWrapKeyPrivate = wrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -6534,7 +6536,7 @@ CK_RV SoftHSM::C_WrapKey
6534
6536
6535
6537
// Check the to be wrapped key handle.
6536
6538
OSObject *key = (OSObject *)handleManager->getObject (hKey);
6537
- if (key == NULL_PTR || !key->isValid ()) return CKR_KEY_HANDLE_INVALID;
6539
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_KEY_HANDLE_INVALID;
6538
6540
6539
6541
CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
6540
6542
CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6959,7 +6961,7 @@ CK_RV SoftHSM::C_UnwrapKey
6959
6961
6960
6962
// Check the unwrapping key handle.
6961
6963
OSObject *unwrapKey = (OSObject *)handleManager->getObject (hUnwrappingKey);
6962
- if (unwrapKey == NULL_PTR || !unwrapKey->isValid ()) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6964
+ if (unwrapKey == NULL_PTR || !unwrapKey->isValid (doRefresh )) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6963
6965
6964
6966
CK_BBOOL isUnwrapKeyOnToken = unwrapKey->getBooleanValue (CKA_TOKEN, false );
6965
6967
CK_BBOOL isUnwrapKeyPrivate = unwrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -7257,7 +7259,7 @@ CK_RV SoftHSM::C_DeriveKey
7257
7259
7258
7260
// Check the key handle.
7259
7261
OSObject *key = (OSObject *)handleManager->getObject (hBaseKey);
7260
- if (key == NULL_PTR || !key->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
7262
+ if (key == NULL_PTR || !key->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
7261
7263
7262
7264
CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
7263
7265
CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -10360,7 +10362,7 @@ CK_RV SoftHSM::deriveDH
10360
10362
10361
10363
// Get the base key handle
10362
10364
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10363
- if (baseKey == NULL || !baseKey->isValid ())
10365
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
10364
10366
return CKR_KEY_HANDLE_INVALID;
10365
10367
10366
10368
// Get the DH algorithm handler
@@ -10692,7 +10694,7 @@ CK_RV SoftHSM::deriveECDH
10692
10694
10693
10695
// Get the base key handle
10694
10696
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10695
- if (baseKey == NULL || !baseKey->isValid ())
10697
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
10696
10698
return CKR_KEY_HANDLE_INVALID;
10697
10699
10698
10700
// Get the ECDH algorithm handler
@@ -11046,7 +11048,7 @@ CK_RV SoftHSM::deriveEDDSA
11046
11048
11047
11049
// Get the base key handle
11048
11050
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11049
- if (baseKey == NULL || !baseKey->isValid ())
11051
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
11050
11052
return CKR_KEY_HANDLE_INVALID;
11051
11053
11052
11054
// Get the EDDSA algorithm handler
@@ -11572,7 +11574,7 @@ CK_RV SoftHSM::deriveSymmetric
11572
11574
11573
11575
// Check the key handle
11574
11576
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11575
- if (baseKey == NULL_PTR || !baseKey->isValid ()) return CKR_OBJECT_HANDLE_INVALID;
11577
+ if (baseKey == NULL_PTR || !baseKey->isValid (doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
11576
11578
11577
11579
// Get the data
11578
11580
ByteString secretValue;
0 commit comments