8787import java .util .HashMap ;
8888import java .util .List ;
8989import java .util .Map ;
90- import java . util . UUID ;
90+
9191import java .util .concurrent .ExecutionException ;
9292import java .util .concurrent .ExecutorService ;
9393import java .util .concurrent .Executors ;
@@ -435,8 +435,11 @@ KMSKey createUserKMSKey(Long accountId, Long domainId, Long zoneId,
435435 throw KMSException .invalidParameter ("HSM Profile not found" );
436436 }
437437
438+ KMSKeyVO kmsKey = new KMSKeyVO (name , description , "" , purpose ,
439+ accountId , domainId , zoneId , "AES/GCM/NoPadding" , keyBits );
440+
438441 KMSProvider provider = getKMSProvider (profile .getProtocol ());
439- String kekLabel = purpose .getName () + "-kek-" + UUID . randomUUID (). toString (). substring ( 0 , 8 );
442+ String kekLabel = purpose .generateKekLabel ( domainId , accountId , kmsKey . getUuid (), 1 );
440443
441444 String providerKekLabel ;
442445 Long finalProfileId = hsmProfileId ;
@@ -446,8 +449,7 @@ KMSKey createUserKMSKey(Long accountId, Long domainId, Long zoneId,
446449 throw handleKmsException (e );
447450 }
448451
449- KMSKeyVO kmsKey = new KMSKeyVO (name , description , providerKekLabel , purpose ,
450- accountId , domainId , zoneId , "AES/GCM/NoPadding" , keyBits );
452+ kmsKey .setKekLabel (providerKekLabel );
451453 kmsKey .setHsmProfileId (finalProfileId );
452454 kmsKey = kmsKeyDao .persist (kmsKey );
453455
@@ -661,8 +663,12 @@ String rotateKek(KMSKeyVO kmsKey, String oldKekLabel, String newKekLabel, int ke
661663 try {
662664 logger .info ("Starting KEK rotation from {} to {} for kms key {}" , oldKekLabel , newKekLabel , kmsKey );
663665
666+ final KMSKekVersionVO newVersionEntity = new KMSKekVersionVO ();
664667 if (StringUtils .isEmpty (newKekLabel )) {
665- newKekLabel = kmsKey .getPurpose ().getName () + "-kek-" + UUID .randomUUID ().toString ().substring (0 , 8 );
668+ List <KMSKekVersionVO > existingVersions = kmsKekVersionDao .listByKmsKeyId (kmsKey .getId ());
669+ int nextVersion = existingVersions .stream ().mapToInt (KMSKekVersionVO ::getVersionNumber ).max ().orElse (0 ) + 1 ;
670+ newKekLabel = kmsKey .getPurpose ().generateKekLabel (kmsKey .getDomainId (), kmsKey .getAccountId (),
671+ kmsKey .getUuid (), nextVersion );
666672 }
667673
668674 String finalNewKekLabel = newKekLabel ;
@@ -676,7 +682,9 @@ String rotateKek(KMSKeyVO kmsKey, String oldKekLabel, String newKekLabel, int ke
676682 .execute (new TransactionCallbackWithException <KMSKekVersionVO , KMSException >() {
677683 @ Override
678684 public KMSKekVersionVO doInTransaction (TransactionStatus status ) throws KMSException {
679- KMSKekVersionVO version = createKekVersion (kmsKey .getId (), newKekId , newProfileId );
685+ newVersionEntity .setKmsKeyId (kmsKey .getId ());
686+ newVersionEntity .setHsmProfileId (newProfileId );
687+ KMSKekVersionVO version = createKekVersion (newVersionEntity );
680688
681689 if (!newProfileId .equals (kmsKey .getHsmProfileId ())) {
682690 kmsKey .setHsmProfileId (newProfileId );
@@ -712,26 +720,23 @@ public KMSKekVersionVO doInTransaction(TransactionStatus status) throws KMSExcep
712720 }
713721 }
714722
715- private KMSKekVersionVO createKekVersion (Long kmsKeyId , String kekLabel , Long hsmProfileId ) throws KMSException {
716- List <KMSKekVersionVO > existingVersions = kmsKekVersionDao .listByKmsKeyId (kmsKeyId );
723+ private KMSKekVersionVO createKekVersion (KMSKekVersionVO newVersion ) throws KMSException {
724+ List <KMSKekVersionVO > existingVersions = kmsKekVersionDao .listByKmsKeyId (newVersion . getKmsKeyId () );
717725 int nextVersion = existingVersions .stream ()
718726 .mapToInt (KMSKekVersionVO ::getVersionNumber )
719727 .max ()
720728 .orElse (0 ) + 1 ;
721729
722- KMSKekVersionVO currentActive = kmsKekVersionDao .getActiveVersion (kmsKeyId );
730+ KMSKekVersionVO currentActive = kmsKekVersionDao .getActiveVersion (newVersion . getKmsKeyId () );
723731 if (currentActive != null ) {
724732 currentActive .setStatus (KMSKekVersionVO .Status .Previous );
725733 kmsKekVersionDao .update (currentActive .getId (), currentActive );
726734 }
727735
728- KMSKekVersionVO newVersion = new KMSKekVersionVO (kmsKeyId , nextVersion , kekLabel ,
729- KMSKekVersionVO .Status .Active );
730- newVersion .setHsmProfileId (hsmProfileId );
736+ newVersion .setVersionNumber (nextVersion );
737+ newVersion .setStatus (KMSKekVersionVO .Status .Active );
731738 newVersion = kmsKekVersionDao .persist (newVersion );
732-
733- logger .info ("Created KEK version {} for KMS key {} (label: {}, profile: {})" , nextVersion , kmsKeyId , kekLabel ,
734- hsmProfileId );
739+ logger .info ("Created KEK version {} for KMS key {}" , nextVersion , newVersion .getKmsKeyId ());
735740 return newVersion ;
736741 }
737742
0 commit comments