@@ -610,6 +610,8 @@ CK_RV SoftHSM::C_Initialize(CK_VOID_PTR pInitArgs)
610
610
// Load the handle manager
611
611
handleManager = new HandleManager ();
612
612
613
+ doRefresh = Configuration::i ()->getBool (" objectstore.readrefresh" , true );
614
+
613
615
// Set the state to initialised
614
616
isInitialised = true ;
615
617
@@ -1608,7 +1610,7 @@ CK_RV SoftHSM::C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
1608
1610
1609
1611
// Check the object handle.
1610
1612
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;
1612
1614
1613
1615
CK_BBOOL wasOnToken = object->getBooleanValue (CKA_TOKEN, false );
1614
1616
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
1777
1779
1778
1780
// Check the object handle.
1779
1781
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;
1781
1783
1782
1784
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1783
1785
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
1825
1827
1826
1828
// Check the object handle.
1827
1829
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;
1829
1831
1830
1832
*pulSize = CK_UNAVAILABLE_INFORMATION;
1831
1833
@@ -1849,7 +1851,7 @@ CK_RV SoftHSM::C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1849
1851
1850
1852
// Check the object handle.
1851
1853
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;
1853
1855
1854
1856
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1855
1857
CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -1896,7 +1898,7 @@ CK_RV SoftHSM::C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
1896
1898
1897
1899
// Check the object handle.
1898
1900
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;
1900
1902
1901
1903
CK_BBOOL isOnToken = object->getBooleanValue (CKA_TOKEN, false );
1902
1904
CK_BBOOL isPrivate = object->getBooleanValue (CKA_PRIVATE, true );
@@ -2166,7 +2168,7 @@ CK_RV SoftHSM::SymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2166
2168
2167
2169
// Check the key handle.
2168
2170
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;
2170
2172
2171
2173
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2172
2174
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2414,7 +2416,7 @@ CK_RV SoftHSM::AsymEncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
2414
2416
2415
2417
// Check the key handle.
2416
2418
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;
2418
2420
2419
2421
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2420
2422
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -2895,7 +2897,7 @@ CK_RV SoftHSM::SymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
2895
2897
2896
2898
// Check the key handle.
2897
2899
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;
2899
2901
2900
2902
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
2901
2903
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3144,7 +3146,7 @@ CK_RV SoftHSM::AsymDecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMec
3144
3146
3145
3147
// Check the key handle.
3146
3148
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;
3148
3150
3149
3151
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3150
3152
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)
3795
3797
3796
3798
// Check the key handle.
3797
3799
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;
3799
3801
3800
3802
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3801
3803
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -3946,7 +3948,7 @@ CK_RV SoftHSM::MacSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechani
3946
3948
3947
3949
// Check the key handle.
3948
3950
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;
3950
3952
3951
3953
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
3952
3954
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4098,7 +4100,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
4098
4100
4099
4101
// Check the key handle.
4100
4102
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;
4102
4104
4103
4105
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
4104
4106
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -4924,7 +4926,7 @@ CK_RV SoftHSM::MacVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
4924
4926
4925
4927
// Check the key handle.
4926
4928
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;
4928
4930
4929
4931
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
4930
4932
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -5076,7 +5078,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
5076
5078
5077
5079
// Check the key handle.
5078
5080
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;
5080
5082
5081
5083
CK_BBOOL isOnToken = key->getBooleanValue (CKA_TOKEN, false );
5082
5084
CK_BBOOL isPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6512,7 +6514,7 @@ CK_RV SoftHSM::C_WrapKey
6512
6514
6513
6515
// Check the wrapping key handle.
6514
6516
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;
6516
6518
6517
6519
CK_BBOOL isWrapKeyOnToken = wrapKey->getBooleanValue (CKA_TOKEN, false );
6518
6520
CK_BBOOL isWrapKeyPrivate = wrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -6554,7 +6556,7 @@ CK_RV SoftHSM::C_WrapKey
6554
6556
6555
6557
// Check the to be wrapped key handle.
6556
6558
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;
6558
6560
6559
6561
CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
6560
6562
CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -6980,7 +6982,7 @@ CK_RV SoftHSM::C_UnwrapKey
6980
6982
6981
6983
// Check the unwrapping key handle.
6982
6984
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;
6984
6986
6985
6987
CK_BBOOL isUnwrapKeyOnToken = unwrapKey->getBooleanValue (CKA_TOKEN, false );
6986
6988
CK_BBOOL isUnwrapKeyPrivate = unwrapKey->getBooleanValue (CKA_PRIVATE, true );
@@ -7280,7 +7282,7 @@ CK_RV SoftHSM::C_DeriveKey
7280
7282
7281
7283
// Check the key handle.
7282
7284
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;
7284
7286
7285
7287
CK_BBOOL isKeyOnToken = key->getBooleanValue (CKA_TOKEN, false );
7286
7288
CK_BBOOL isKeyPrivate = key->getBooleanValue (CKA_PRIVATE, true );
@@ -10386,7 +10388,7 @@ CK_RV SoftHSM::deriveDH
10386
10388
10387
10389
// Get the base key handle
10388
10390
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10389
- if (baseKey == NULL || !baseKey->isValid ())
10391
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
10390
10392
return CKR_KEY_HANDLE_INVALID;
10391
10393
10392
10394
// Get the DH algorithm handler
@@ -10718,7 +10720,7 @@ CK_RV SoftHSM::deriveECDH
10718
10720
10719
10721
// Get the base key handle
10720
10722
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
10721
- if (baseKey == NULL || !baseKey->isValid ())
10723
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
10722
10724
return CKR_KEY_HANDLE_INVALID;
10723
10725
10724
10726
// Get the ECDH algorithm handler
@@ -11072,7 +11074,7 @@ CK_RV SoftHSM::deriveEDDSA
11072
11074
11073
11075
// Get the base key handle
11074
11076
OSObject *baseKey = (OSObject *)handleManager->getObject (hBaseKey);
11075
- if (baseKey == NULL || !baseKey->isValid ())
11077
+ if (baseKey == NULL || !baseKey->isValid (doRefresh ))
11076
11078
return CKR_KEY_HANDLE_INVALID;
11077
11079
11078
11080
// Get the EDDSA algorithm handler
@@ -11598,7 +11600,7 @@ CK_RV SoftHSM::deriveSymmetric
11598
11600
11599
11601
// Check the key handle
11600
11602
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;
11602
11604
11603
11605
// Get the data
11604
11606
ByteString secretValue;
0 commit comments