@@ -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
@@ -1598,7 +1600,7 @@ CK_RV SoftHSM::C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
1598
1600
1599
1601
// Check the object handle.
1600
1602
OSObject *object = (OSObject *)handleManager->getObject(hObject);
1601
- if (object == NULL_PTR || !object->isValid()) return CKR_OBJECT_HANDLE_INVALID;
1603
+ if (object == NULL_PTR || !object->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1602
1604
1603
1605
CK_BBOOL wasOnToken = object->getBooleanValue(CKA_TOKEN, false);
1604
1606
CK_BBOOL wasPrivate = object->getBooleanValue(CKA_PRIVATE, true);
@@ -1767,7 +1769,7 @@ CK_RV SoftHSM::C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
1767
1769
1768
1770
// Check the object handle.
1769
1771
OSObject *object = (OSObject *)handleManager->getObject(hObject);
1770
- if (object == NULL_PTR || !object->isValid()) return CKR_OBJECT_HANDLE_INVALID;
1772
+ if (object == NULL_PTR || !object->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1771
1773
1772
1774
CK_BBOOL isOnToken = object->getBooleanValue(CKA_TOKEN, false);
1773
1775
CK_BBOOL isPrivate = object->getBooleanValue(CKA_PRIVATE, true);
@@ -1815,7 +1817,7 @@ CK_RV SoftHSM::C_GetObjectSize(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
1815
1817
1816
1818
// Check the object handle.
1817
1819
OSObject *object = (OSObject *)handleManager->getObject(hObject);
1818
- if (object == NULL_PTR || !object->isValid()) return CKR_OBJECT_HANDLE_INVALID;
1820
+ if (object == NULL_PTR || !object->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1819
1821
1820
1822
*pulSize = CK_UNAVAILABLE_INFORMATION;
1821
1823
@@ -1839,7 +1841,7 @@ CK_RV SoftHSM::C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1839
1841
1840
1842
// Check the object handle.
1841
1843
OSObject *object = (OSObject *)handleManager->getObject(hObject);
1842
- if (object == NULL_PTR || !object->isValid()) return CKR_OBJECT_HANDLE_INVALID;
1844
+ if (object == NULL_PTR || !object->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1843
1845
1844
1846
CK_BBOOL isOnToken = object->getBooleanValue(CKA_TOKEN, false);
1845
1847
CK_BBOOL isPrivate = object->getBooleanValue(CKA_PRIVATE, true);
@@ -1886,7 +1888,7 @@ CK_RV SoftHSM::C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1886
1888
1887
1889
// Check the object handle.
1888
1890
OSObject *object = (OSObject *)handleManager->getObject(hObject);
1889
- if (object == NULL_PTR || !object->isValid()) return CKR_OBJECT_HANDLE_INVALID;
1891
+ if (object == NULL_PTR || !object->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
1890
1892
1891
1893
CK_BBOOL isOnToken = object->getBooleanValue(CKA_TOKEN, false);
1892
1894
CK_BBOOL isPrivate = object->getBooleanValue(CKA_PRIVATE, true);
@@ -2156,7 +2158,7 @@ CK_RV SoftHSM::SymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2156
2158
2157
2159
// Check the key handle.
2158
2160
OSObject *key = (OSObject *)handleManager->getObject(hKey);
2159
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
2161
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
2160
2162
2161
2163
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
2162
2164
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -2403,7 +2405,7 @@ CK_RV SoftHSM::AsymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
2403
2405
2404
2406
// Check the key handle.
2405
2407
OSObject *key = (OSObject *)handleManager->getObject(hKey);
2406
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
2408
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
2407
2409
2408
2410
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
2409
2411
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -2875,7 +2877,7 @@ CK_RV SoftHSM::SymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2875
2877
2876
2878
// Check the key handle.
2877
2879
OSObject *key = (OSObject *)handleManager->getObject(hKey);
2878
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
2880
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
2879
2881
2880
2882
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
2881
2883
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -3123,7 +3125,7 @@ CK_RV SoftHSM::AsymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
3123
3125
3124
3126
// Check the key handle.
3125
3127
OSObject *key = (OSObject *)handleManager->getObject(hKey);
3126
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
3128
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
3127
3129
3128
3130
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
3129
3131
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -3766,7 +3768,7 @@ CK_RV SoftHSM::C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
3766
3768
3767
3769
// Check the key handle.
3768
3770
OSObject *key = (OSObject *)handleManager->getObject(hObject);
3769
- if (key == NULL_PTR || !key->isValid()) return CKR_KEY_HANDLE_INVALID;
3771
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_KEY_HANDLE_INVALID;
3770
3772
3771
3773
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
3772
3774
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -3917,7 +3919,7 @@ CK_RV SoftHSM::MacSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechani
3917
3919
3918
3920
// Check the key handle.
3919
3921
OSObject *key = (OSObject *)handleManager->getObject(hKey);
3920
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
3922
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
3921
3923
3922
3924
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
3923
3925
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -4069,7 +4071,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
4069
4071
4070
4072
// Check the key handle.
4071
4073
OSObject *key = (OSObject *)handleManager->getObject(hKey);
4072
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
4074
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
4073
4075
4074
4076
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
4075
4077
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -4895,7 +4897,7 @@ CK_RV SoftHSM::MacVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
4895
4897
4896
4898
// Check the key handle.
4897
4899
OSObject *key = (OSObject *)handleManager->getObject(hKey);
4898
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
4900
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
4899
4901
4900
4902
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
4901
4903
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -5047,7 +5049,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
5047
5049
5048
5050
// Check the key handle.
5049
5051
OSObject *key = (OSObject *)handleManager->getObject(hKey);
5050
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
5052
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
5051
5053
5052
5054
CK_BBOOL isOnToken = key->getBooleanValue(CKA_TOKEN, false);
5053
5055
CK_BBOOL isPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -6407,7 +6409,7 @@ CK_RV SoftHSM::C_WrapKey
6407
6409
6408
6410
// Check the wrapping key handle.
6409
6411
OSObject *wrapKey = (OSObject *)handleManager->getObject(hWrappingKey);
6410
- if (wrapKey == NULL_PTR || !wrapKey->isValid()) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6412
+ if (wrapKey == NULL_PTR || !wrapKey->isValid(doRefresh )) return CKR_WRAPPING_KEY_HANDLE_INVALID;
6411
6413
6412
6414
CK_BBOOL isWrapKeyOnToken = wrapKey->getBooleanValue(CKA_TOKEN, false);
6413
6415
CK_BBOOL isWrapKeyPrivate = wrapKey->getBooleanValue(CKA_PRIVATE, true);
@@ -6449,7 +6451,7 @@ CK_RV SoftHSM::C_WrapKey
6449
6451
6450
6452
// Check the to be wrapped key handle.
6451
6453
OSObject *key = (OSObject *)handleManager->getObject(hKey);
6452
- if (key == NULL_PTR || !key->isValid()) return CKR_KEY_HANDLE_INVALID;
6454
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_KEY_HANDLE_INVALID;
6453
6455
6454
6456
CK_BBOOL isKeyOnToken = key->getBooleanValue(CKA_TOKEN, false);
6455
6457
CK_BBOOL isKeyPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -6805,7 +6807,7 @@ CK_RV SoftHSM::C_UnwrapKey
6805
6807
6806
6808
// Check the unwrapping key handle.
6807
6809
OSObject *unwrapKey = (OSObject *)handleManager->getObject(hUnwrappingKey);
6808
- if (unwrapKey == NULL_PTR || !unwrapKey->isValid()) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6810
+ if (unwrapKey == NULL_PTR || !unwrapKey->isValid(doRefresh )) return CKR_UNWRAPPING_KEY_HANDLE_INVALID;
6809
6811
6810
6812
CK_BBOOL isUnwrapKeyOnToken = unwrapKey->getBooleanValue(CKA_TOKEN, false);
6811
6813
CK_BBOOL isUnwrapKeyPrivate = unwrapKey->getBooleanValue(CKA_PRIVATE, true);
@@ -7098,7 +7100,7 @@ CK_RV SoftHSM::C_DeriveKey
7098
7100
7099
7101
// Check the key handle.
7100
7102
OSObject *key = (OSObject *)handleManager->getObject(hBaseKey);
7101
- if (key == NULL_PTR || !key->isValid()) return CKR_OBJECT_HANDLE_INVALID;
7103
+ if (key == NULL_PTR || !key->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
7102
7104
7103
7105
CK_BBOOL isKeyOnToken = key->getBooleanValue(CKA_TOKEN, false);
7104
7106
CK_BBOOL isKeyPrivate = key->getBooleanValue(CKA_PRIVATE, true);
@@ -10201,7 +10203,7 @@ CK_RV SoftHSM::deriveDH
10201
10203
10202
10204
// Get the base key handle
10203
10205
OSObject *baseKey = (OSObject *)handleManager->getObject(hBaseKey);
10204
- if (baseKey == NULL || !baseKey->isValid())
10206
+ if (baseKey == NULL || !baseKey->isValid(doRefresh ))
10205
10207
return CKR_KEY_HANDLE_INVALID;
10206
10208
10207
10209
// Get the DH algorithm handler
@@ -10533,7 +10535,7 @@ CK_RV SoftHSM::deriveECDH
10533
10535
10534
10536
// Get the base key handle
10535
10537
OSObject *baseKey = (OSObject *)handleManager->getObject(hBaseKey);
10536
- if (baseKey == NULL || !baseKey->isValid())
10538
+ if (baseKey == NULL || !baseKey->isValid(doRefresh ))
10537
10539
return CKR_KEY_HANDLE_INVALID;
10538
10540
10539
10541
// Get the ECDH algorithm handler
@@ -10887,7 +10889,7 @@ CK_RV SoftHSM::deriveEDDSA
10887
10889
10888
10890
// Get the base key handle
10889
10891
OSObject *baseKey = (OSObject *)handleManager->getObject(hBaseKey);
10890
- if (baseKey == NULL || !baseKey->isValid())
10892
+ if (baseKey == NULL || !baseKey->isValid(doRefresh ))
10891
10893
return CKR_KEY_HANDLE_INVALID;
10892
10894
10893
10895
// Get the EDDSA algorithm handler
@@ -11413,7 +11415,7 @@ CK_RV SoftHSM::deriveSymmetric
11413
11415
11414
11416
// Check the key handle
11415
11417
OSObject *baseKey = (OSObject *)handleManager->getObject(hBaseKey);
11416
- if (baseKey == NULL_PTR || !baseKey->isValid()) return CKR_OBJECT_HANDLE_INVALID;
11418
+ if (baseKey == NULL_PTR || !baseKey->isValid(doRefresh )) return CKR_OBJECT_HANDLE_INVALID;
11417
11419
11418
11420
// Get the data
11419
11421
ByteString secretValue;
0 commit comments