This is an automated email from the ASF dual-hosted git repository.

dhavalshah9131 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new cde5be80c RANGER-5411: Refactor logic to use external Key as MasterKey 
to avoid code redundancy (#747)
cde5be80c is described below

commit cde5be80c8cc1394cfe22284ce7065b6ac75def5
Author: Vikas Kumar <[email protected]>
AuthorDate: Fri Jan 2 11:23:21 2026 +0530

    RANGER-5411: Refactor logic to use external Key as MasterKey to avoid code 
redundancy (#747)
---
 .../org/apache/hadoop/crypto/key/DB2HSMMKUtil.java |  6 ++--
 .../apache/hadoop/crypto/key/DBToKeySecure.java    |  6 ++--
 .../org/apache/hadoop/crypto/key/HSM2DBMKUtil.java | 14 +++++---
 .../crypto/key/KeySecureToRangerDBMKUtil.java      |  7 ++--
 .../org/apache/hadoop/crypto/key/RangerHSM.java    |  3 +-
 .../org/apache/hadoop/crypto/key/RangerKMSMKI.java |  4 +++
 .../apache/hadoop/crypto/key/RangerMasterKey.java  | 38 ++++++++--------------
 .../hadoop/crypto/key/RangerSafenetKeySecure.java  |  3 +-
 .../hadoop/crypto/key/RangerMasterKeyTest.java     |  4 +--
 .../crypto/key/kms/TestRangerSafenetKeySecure.java |  2 +-
 10 files changed, 44 insertions(+), 43 deletions(-)

diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/DB2HSMMKUtil.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/DB2HSMMKUtil.java
index bbe3e72fb..0bfa19f49 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/DB2HSMMKUtil.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/DB2HSMMKUtil.java
@@ -76,14 +76,14 @@ private boolean doExportMKToHSM(String hsmType, String 
partitionName) {
             String      password    = conf.get(ENCRYPTION_KEY);
 
             // Get Master Key from Ranger DB
-            RangerMasterKey rangerMasterKey = new RangerMasterKey(daoManager);
+            RangerKMSMKI rangerMasterKey    = new RangerMasterKey(daoManager);
             String          mkey            = 
rangerMasterKey.getMasterKey(password);
             byte[]          key             = Base64.decode(mkey);
 
             // Put Master Key in HSM
-            RangerHSM rangerHSM = new RangerHSM(conf);
+            RangerKMSMKI rangerHSM = new RangerHSM(conf);
 
-            return rangerHSM.setMasterKey(password, key);
+            return rangerHSM.setExternalKeyAsMK(password, key);
         } catch (Throwable t) {
             throw new RuntimeException("Unable to import Master key from 
Ranger DB to HSM ", t);
         } finally {
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/DBToKeySecure.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/DBToKeySecure.java
index dbe41e319..29d1a37c5 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/DBToKeySecure.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/DBToKeySecure.java
@@ -102,14 +102,14 @@ private boolean doExportMKToKeySecure(String keyName, 
String username, String pa
             String      mkPassword  = conf.get(ENCRYPTION_KEY);
 
             // Get Master Key from Ranger DB
-            RangerMasterKey rangerMasterKey = new RangerMasterKey(daoManager);
+            RangerKMSMKI rangerMasterKey    = new RangerMasterKey(daoManager);
             String          mkey            = 
rangerMasterKey.getMasterKey(mkPassword);
             byte[]          key             = Base64.decode(mkey);
 
             if (conf != null) {
-                RangerSafenetKeySecure rangerSafenetKeySecure = new 
RangerSafenetKeySecure(conf);
+                RangerKMSMKI rangerSafenetKeySecure = new 
RangerSafenetKeySecure(conf);
 
-                return rangerSafenetKeySecure.setMasterKey(password, key, 
conf);
+                return rangerSafenetKeySecure.setExternalKeyAsMK(password, 
key);
             }
 
             return false;
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/HSM2DBMKUtil.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/HSM2DBMKUtil.java
index 86ab3c8de..4feb01172 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/HSM2DBMKUtil.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/HSM2DBMKUtil.java
@@ -79,14 +79,18 @@ private void doImportMKFromHSM(String hsmType, String 
partitionName) {
             String      password    = conf.get(ENCRYPTION_KEY);
 
             // Get Master Key from HSM
-            RangerHSM rangerHSM = new RangerHSM(conf);
-            String    mKey      = rangerHSM.getMasterKey(password);
-            byte[]    key       = Base64.decode(mKey);
+            RangerKMSMKI rangerHSM  = new RangerHSM(conf);
+            String    mKey          = rangerHSM.getMasterKey(password);
+            byte[]    key           = Base64.decode(mKey);
 
             // Put Master Key in Ranger DB
-            RangerMasterKey rangerMasterKey = new RangerMasterKey(daoManager);
+            RangerKMSMKI rangerMasterKey = new RangerMasterKey(daoManager);
 
-            rangerMasterKey.generateMKFromHSMMK(password, key);
+            boolean isMKSet = rangerMasterKey.setExternalKeyAsMK(password, 
key);
+
+            if (!isMKSet) {
+                throw new Exception("MK import from HSM to DB failed");
+            }
         } catch (Throwable t) {
             throw new RuntimeException("Unable to import Master key from HSM 
to Ranger DB", t);
         } finally {
diff --git 
a/kms/src/main/java/org/apache/hadoop/crypto/key/KeySecureToRangerDBMKUtil.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/KeySecureToRangerDBMKUtil.java
index c9ca43319..6f92592c0 100644
--- 
a/kms/src/main/java/org/apache/hadoop/crypto/key/KeySecureToRangerDBMKUtil.java
+++ 
b/kms/src/main/java/org/apache/hadoop/crypto/key/KeySecureToRangerDBMKUtil.java
@@ -72,9 +72,12 @@ private void doImportMKFromKeySecure(String kmsMKPassword) {
             RangerSafenetKeySecure rangerSafenetKeySecure = new 
RangerSafenetKeySecure(conf);
             String                 mKey                   = 
rangerSafenetKeySecure.getMasterKey(password);
             byte[]                 key                    = 
Base64.decode(mKey);
-            RangerMasterKey        rangerMasterKey        = new 
RangerMasterKey(daoManager); // Put Master Key in Ranger DB
+            RangerKMSMKI        rangerMasterKey        = new 
RangerMasterKey(daoManager); // Put Master Key in Ranger DB
 
-            rangerMasterKey.generateMKFromKeySecureMK(password, key);
+            boolean isMKSet = rangerMasterKey.setExternalKeyAsMK(password, 
key);
+            if (!isMKSet) {
+                throw new Exception("MK import from KeySecure to KMS-DB 
failed");
+            }
         } catch (Throwable t) {
             throw new RuntimeException("Unable to migrate Master key from 
KeySecure to Ranger DB", t);
         }
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerHSM.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerHSM.java
index 2825aa599..be1484a42 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerHSM.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerHSM.java
@@ -150,7 +150,8 @@ public String getMasterKey(String password) throws 
Throwable {
         return null;
     }
 
-    public boolean setMasterKey(String password, byte[] key) {
+    @Override
+    public boolean setExternalKeyAsMK(String password, byte[] key) {
         if (myStore != null) {
             try {
                 Key aesKey = new SecretKeySpec(key, MK_CIPHER);
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKMSMKI.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKMSMKI.java
index 83789c2e1..1d4a31fcf 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKMSMKI.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKMSMKI.java
@@ -37,4 +37,8 @@ default void onInitialization() throws Exception {}
     default boolean reencryptMKWithFipsAlgo(String mkPassword) throws 
Exception {
         return  false;
     }
+
+    default boolean setExternalKeyAsMK(String password, byte[] key) throws 
Throwable {
+        throw new UnsupportedOperationException("This method is not supported 
for current MK provider");
+    }
 }
diff --git 
a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
index 2e840cbfe..067958b77 100755
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
@@ -332,43 +332,31 @@ public boolean reencryptMKWithFipsAlgo(String mkPassword) 
{
         return isMKReencrypted;
     }
 
-    public void generateMKFromHSMMK(String password, byte[] key) throws 
Throwable {
-        logger.debug("==> RangerMasterKey.generateMKFromHSMMK()");
-
-        if (!checkMKExistence(this.masterKeyDao)) {
-            logger.info("Master Key doesn't exist in DB, Generating the Master 
Key");
-
-            String encryptedMasterKey = encryptMasterKey(password, key);
-            String savedKey           = saveEncryptedMK(paddingString + "," + 
encryptedMasterKey);
-
-            if (savedKey != null && !savedKey.trim().equals("")) {
-                logger.debug("Master Key Created with id = {}", savedKey);
-                logger.debug("<== RangerMasterKey.generateMKFromHSMMK()");
-            }
-        } else {
-            logger.debug("Ranger Master Key already exists in the DB, 
returning.");
-        }
-
-        logger.debug("<== RangerMasterKey.generateMKFromHSMMK()");
-    }
+    @Override
+    public boolean setExternalKeyAsMK(String password, byte[] key)throws 
Throwable {
+        logger.debug("==> RangerMasterKey.useExternalKeyAsMK()");
 
-    public void generateMKFromKeySecureMK(String password, byte[] key) throws 
Throwable {
-        logger.debug("==> RangerMasterKey.generateMKFromKeySecureMK()");
+        boolean keySetAsMK = false;
 
         if (!checkMKExistence(this.masterKeyDao)) {
-            logger.info("Master Key doesn't exist in DB, Generating the Master 
Key");
+            logger.info("Master Key doesn't exist in DB, encrypting and 
storing the provided Master Key");
 
             String encryptedMasterKey = encryptMasterKey(password, key);
             String savedKey           = saveEncryptedMK(paddingString + "," + 
encryptedMasterKey);
 
             if (savedKey != null && !savedKey.trim().equals("")) {
-                logger.debug("Master Key Created with id = {}", savedKey);
+                keySetAsMK = true;
+                logger.info("Master Key Created with id = {}", savedKey);
+                logger.debug("<== RangerMasterKey.useExternalKeyAsMK()");
             }
         } else {
-            logger.debug("Ranger Master Key already exists in the DB, 
returning.");
+            String errMsg = "Ranger Master Key already exists in the DB, 
returning.";
+            logger.warn(errMsg);
         }
 
-        logger.debug("<== RangerMasterKey.generateMKFromKeySecureMK()");
+        logger.debug("<== RangerMasterKey.useExternalKeyAsMK()");
+
+        return keySetAsMK;
     }
 
     private String decryptMasterKey(byte[] masterKey, String password, String 
encryptedPassString) throws Throwable {
diff --git 
a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java 
b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java
index f2b1db3bf..9832ac4eb 100644
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java
@@ -165,7 +165,8 @@ public String getMasterKey(String password) throws 
Throwable {
         return null;
     }
 
-    public boolean setMasterKey(String password, byte[] key, Configuration 
conf) {
+    @Override
+    public boolean setExternalKeyAsMK(String password, byte[] key) {
         if (myStore != null) {
             try {
                 Key aesKey = new SecretKeySpec(key, MK_ALGO);
diff --git 
a/kms/src/test/java/org/apache/hadoop/crypto/key/RangerMasterKeyTest.java 
b/kms/src/test/java/org/apache/hadoop/crypto/key/RangerMasterKeyTest.java
index e76f2341c..4b661153f 100644
--- a/kms/src/test/java/org/apache/hadoop/crypto/key/RangerMasterKeyTest.java
+++ b/kms/src/test/java/org/apache/hadoop/crypto/key/RangerMasterKeyTest.java
@@ -183,7 +183,7 @@ public void testGenerateMKFromHSMMK() throws Throwable {
         byte[] key = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
                 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
-        rangerMasterKey.generateMKFromHSMMK(password, key);
+        rangerMasterKey.setExternalKeyAsMK(password, key);
     }
 
     @Test
@@ -197,7 +197,7 @@ public void testGenerateMKFromKeySecureMK() throws 
Throwable {
         byte[] key = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
                 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
-        rangerMasterKey.generateMKFromKeySecureMK(password, key);
+        rangerMasterKey.setExternalKeyAsMK(password, key);
 
         assertNotNull(rangerMasterKey.getMasterKey(password));
     }
diff --git 
a/kms/src/test/java/org/apache/hadoop/crypto/key/kms/TestRangerSafenetKeySecure.java
 
b/kms/src/test/java/org/apache/hadoop/crypto/key/kms/TestRangerSafenetKeySecure.java
index d4c2e3329..ea135e9a5 100644
--- 
a/kms/src/test/java/org/apache/hadoop/crypto/key/kms/TestRangerSafenetKeySecure.java
+++ 
b/kms/src/test/java/org/apache/hadoop/crypto/key/kms/TestRangerSafenetKeySecure.java
@@ -86,7 +86,7 @@ public void 
testSetMasterKey_WithNullKeystore_ShouldReturnFalse() throws Excepti
         storeField.setAccessible(true);
         storeField.set(secure, null);
 
-        boolean result = secure.setMasterKey("pass", "mockKey".getBytes(), new 
Configuration());
+        boolean result = secure.setExternalKeyAsMK("pass", 
"mockKey".getBytes());
         assertFalse(result);
     }
 

Reply via email to