55import com .uid2 .admin .auth .OktaAuthProvider ;
66import com .uid2 .admin .auth .AuthProvider ;
77import com .uid2 .admin .auth .TokenRefreshHandler ;
8+ import com .uid2 .admin .cloudEncryption .CloudKeyRotationStrategy ;
9+ import com .uid2 .admin .cloudEncryption .ExpiredKeyCountRetentionStrategy ;
810import com .uid2 .admin .job .JobDispatcher ;
911import com .uid2 .admin .job .jobsync .EncryptedFilesSyncJob ;
1012import com .uid2 .admin .job .jobsync .PrivateSiteDataSyncJob ;
1113import com .uid2 .admin .job .jobsync .keyset .ReplaceSharingTypesWithSitesJob ;
1214import com .uid2 .admin .legacy .LegacyClientKeyStoreWriter ;
1315import com .uid2 .admin .legacy .RotatingLegacyClientKeyProvider ;
1416import com .uid2 .admin .managers .KeysetManager ;
17+ import com .uid2 .admin .cloudEncryption .CloudSecretGenerator ;
1518import com .uid2 .admin .monitoring .DataStoreMetrics ;
1619import com .uid2 .admin .managers .CloudEncryptionKeyManager ;
1720import com .uid2 .admin .secret .*;
2932import com .uid2 .admin .vertx .service .*;
3033import com .uid2 .shared .Const ;
3134import com .uid2 .shared .Utils ;
32- import com .uid2 .shared .secret .IKeyGenerator ;
3335import com .uid2 .shared .secret .KeyHasher ;
3436import com .uid2 .shared .secret .SecureKeyGenerator ;
3537import com .uid2 .shared .auth .EnclaveIdentifierProvider ;
@@ -122,7 +124,7 @@ public void run() {
122124 try {
123125 adminKeysetProvider .loadContent ();
124126 } catch (CloudStorageException e ) {
125- if (e .getMessage ().contains ("The specified key does not exist" )){
127+ if (e .getMessage ().contains ("The specified key does not exist" )) {
126128 adminKeysetStoreWriter .upload (new HashMap <>(), null );
127129 adminKeysetProvider .loadContent ();
128130 } else {
@@ -134,7 +136,7 @@ public void run() {
134136 GlobalScope keysetKeysGlobalScope = new GlobalScope (keysetKeyMetadataPath );
135137 RotatingKeysetKeyStore keysetKeysProvider = new RotatingKeysetKeyStore (cloudStorage , keysetKeysGlobalScope );
136138 KeysetKeyStoreWriter keysetKeyStoreWriter = new KeysetKeyStoreWriter (keysetKeysProvider , fileManager , versionGenerator , clock , keysetKeysGlobalScope , enableKeysets );
137- if (enableKeysets ) {
139+ if (enableKeysets ) {
138140 try {
139141 keysetKeysProvider .loadContent ();
140142 } catch (CloudStorageException e ) {
@@ -154,7 +156,7 @@ public void run() {
154156 try {
155157 clientSideKeypairProvider .loadContent ();
156158 } catch (CloudStorageException e ) {
157- if (e .getMessage ().contains ("The specified key does not exist" )) {
159+ if (e .getMessage ().contains ("The specified key does not exist" )) {
158160 clientSideKeypairStoreWriter .upload (new HashSet <>(), null );
159161 clientSideKeypairProvider .loadContent ();
160162 } else {
@@ -163,13 +165,13 @@ public void run() {
163165 }
164166
165167 CloudPath serviceMetadataPath = new CloudPath (config .getString (Const .Config .ServiceMetadataPathProp ));
166- GlobalScope serviceGlobalScope = new GlobalScope (serviceMetadataPath );
168+ GlobalScope serviceGlobalScope = new GlobalScope (serviceMetadataPath );
167169 RotatingServiceStore serviceProvider = new RotatingServiceStore (cloudStorage , serviceGlobalScope );
168170 ServiceStoreWriter serviceStoreWriter = new ServiceStoreWriter (serviceProvider , fileManager , jsonWriter , versionGenerator , clock , serviceGlobalScope );
169171 try {
170172 serviceProvider .loadContent ();
171173 } catch (CloudStorageException e ) {
172- if (e .getMessage ().contains ("The specified key does not exist" )) {
174+ if (e .getMessage ().contains ("The specified key does not exist" )) {
173175 serviceStoreWriter .upload (new HashSet <>(), null );
174176 serviceProvider .loadContent ();
175177 } else {
@@ -178,13 +180,13 @@ public void run() {
178180 }
179181
180182 CloudPath serviceLinkMetadataPath = new CloudPath (config .getString (Const .Config .ServiceLinkMetadataPathProp ));
181- GlobalScope serviceLinkGlobalScope = new GlobalScope (serviceLinkMetadataPath );
183+ GlobalScope serviceLinkGlobalScope = new GlobalScope (serviceLinkMetadataPath );
182184 RotatingServiceLinkStore serviceLinkProvider = new RotatingServiceLinkStore (cloudStorage , serviceLinkGlobalScope );
183185 ServiceLinkStoreWriter serviceLinkStoreWriter = new ServiceLinkStoreWriter (serviceLinkProvider , fileManager , jsonWriter , versionGenerator , clock , serviceLinkGlobalScope );
184186 try {
185187 serviceLinkProvider .loadContent ();
186188 } catch (CloudStorageException e ) {
187- if (e .getMessage ().contains ("The specified key does not exist" )) {
189+ if (e .getMessage ().contains ("The specified key does not exist" )) {
188190 serviceLinkStoreWriter .upload (new HashSet <>(), null );
189191 serviceLinkProvider .loadContent ();
190192 } else {
@@ -202,8 +204,7 @@ public void run() {
202204 GlobalScope cloudEncryptionKeyGlobalScope = new GlobalScope (cloudEncryptionKeyMetadataPath );
203205 RotatingCloudEncryptionKeyProvider rotatingCloudEncryptionKeyProvider = new RotatingCloudEncryptionKeyProvider (cloudStorage , cloudEncryptionKeyGlobalScope );
204206 CloudEncryptionKeyStoreWriter cloudEncryptionKeyStoreWriter = new CloudEncryptionKeyStoreWriter (rotatingCloudEncryptionKeyProvider , fileManager , jsonWriter , versionGenerator , clock , cloudEncryptionKeyGlobalScope );
205- IKeyGenerator keyGenerator = new SecureKeyGenerator ();
206- CloudEncryptionKeyManager cloudEncryptionKeyManager = new CloudEncryptionKeyManager (rotatingCloudEncryptionKeyProvider , cloudEncryptionKeyStoreWriter ,keyGenerator );
207+ SecureKeyGenerator keyGenerator = new SecureKeyGenerator ();
207208 try {
208209 rotatingCloudEncryptionKeyProvider .loadContent ();
209210 } catch (CloudStorageException e ) {
@@ -247,6 +248,11 @@ public void run() {
247248
248249 ClientSideKeypairService clientSideKeypairService = new ClientSideKeypairService (config , auth , writeLock , clientSideKeypairStoreWriter , clientSideKeypairProvider , siteProvider , keysetManager , keypairGenerator , clock );
249250
251+ var cloudEncryptionSecretGenerator = new CloudSecretGenerator (keyGenerator );
252+ var cloudEncryptionKeyManager = new CloudEncryptionKeyManager (rotatingCloudEncryptionKeyProvider , cloudEncryptionKeyStoreWriter , cloudEncryptionSecretGenerator );
253+ var cloudEncryptionKeyRetentionStrategy = new ExpiredKeyCountRetentionStrategy (clock , 5 );
254+ var cloudEncryptionKeyRotationStrategy = new CloudKeyRotationStrategy (cloudEncryptionSecretGenerator , clock , cloudEncryptionKeyRetentionStrategy );
255+
250256 IService [] services = {
251257 new ClientKeyService (config , auth , writeLock , clientKeyStoreWriter , clientKeyProvider , siteProvider , keysetManager , keyGenerator , keyHasher ),
252258 new EnclaveIdService (auth , writeLock , enclaveStoreWriter , enclaveIdProvider , clock ),
@@ -263,7 +269,7 @@ public void run() {
263269 new PrivateSiteDataRefreshService (auth , jobDispatcher , writeLock , config , rotatingCloudEncryptionKeyProvider ),
264270 new JobDispatcherService (auth , jobDispatcher ),
265271 new SearchService (auth , clientKeyProvider , operatorKeyProvider ),
266- new CloudEncryptionKeyService (auth , rotatingCloudEncryptionKeyProvider )
272+ new CloudEncryptionKeyService (auth , rotatingCloudEncryptionKeyProvider , cloudEncryptionKeyStoreWriter , siteProvider , cloudEncryptionKeyRotationStrategy )
267273 };
268274
269275
@@ -279,7 +285,7 @@ public void run() {
279285 try {
280286 keysetProvider .loadContent ();
281287 } catch (CloudStorageException e ) {
282- if (e .getMessage ().contains ("The specified key does not exist" )){
288+ if (e .getMessage ().contains ("The specified key does not exist" )) {
283289 keysetStoreWriter .upload (new HashMap <>(), null );
284290 keysetProvider .loadContent ();
285291 } else {
@@ -305,7 +311,7 @@ public void run() {
305311 The jobs are executed after because they copy data from these files locations consumed by public and private operators.
306312 This caused an issue because the files were empty and the job started to fail so the operators got empty files.
307313 */
308- if (enableKeysets ) {
314+ if (enableKeysets ) {
309315 synchronized (writeLock ) {
310316 //UID2-628 keep keys.json and keyset_keys.json in sync. This function syncs them on start up
311317 keysetProvider .loadContent ();
@@ -342,7 +348,7 @@ public void run() {
342348 CompletableFuture <Boolean > privateSiteDataSyncJobFuture = jobDispatcher .executeNextJob ();
343349 privateSiteDataSyncJobFuture .get ();
344350
345- EncryptedFilesSyncJob encryptedFilesSyncJob = new EncryptedFilesSyncJob (config , writeLock ,rotatingCloudEncryptionKeyProvider );
351+ EncryptedFilesSyncJob encryptedFilesSyncJob = new EncryptedFilesSyncJob (config , writeLock , rotatingCloudEncryptionKeyProvider );
346352 jobDispatcher .enqueue (encryptedFilesSyncJob );
347353 CompletableFuture <Boolean > encryptedFilesSyncJobFuture = jobDispatcher .executeNextJob ();
348354 encryptedFilesSyncJobFuture .get ();
0 commit comments