diff --git a/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMPoolManager.java b/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMPoolManager.java index 7b65303a..de9d9f37 100644 --- a/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMPoolManager.java +++ b/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMPoolManager.java @@ -184,7 +184,7 @@ public static void initStatics() { } private KMPoolManager() { - initStatics(); + initStatics(); cipherPool = new Object[(short) (CIPHER_ALGS.length * 4)]; // Extra 4 algorithms are used to support TRUSTED_CONFIRMATION_REQUIRED feature. signerPool = new Object[(short) ((SIG_ALGS.length * 4) + 4)]; @@ -202,9 +202,8 @@ private KMPoolManager() { initializeKeysPool(); // Initialize the Crypto and Key objects required for RKP flow. initializeRKpObjects(); - } - + private void initializeRKpObjects() { rkpOPeration = new KMOperationImpl(); rkpAesGcm = Cipher.getInstance(AEADCipher.ALG_AES_GCM, false); diff --git a/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java b/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java index e8dac348..a68cbbbd 100644 --- a/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java +++ b/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java @@ -925,7 +925,7 @@ public void onRestore(Element element, short oldVersion, short currentVersion) { } void handleDataUpgrade(short oldVersion, short currentVersion) { - if(oldVersion == 0x0100 && currentVersion == 0x0200) { + if(oldVersion != currentVersion) { handleProvisionStatusUpgrade(); } } diff --git a/Applet/src/com/android/javacard/keymaster/RemotelyProvisionedComponentDevice.java b/Applet/src/com/android/javacard/keymaster/RemotelyProvisionedComponentDevice.java index 12dc4b83..8cd8aab1 100644 --- a/Applet/src/com/android/javacard/keymaster/RemotelyProvisionedComponentDevice.java +++ b/Applet/src/com/android/javacard/keymaster/RemotelyProvisionedComponentDevice.java @@ -159,10 +159,13 @@ public RemotelyProvisionedComponentDevice(KMEncoder encoder, KMDecoder decoder, operation = JCSystem.makeTransientObjectArray((short) 1, JCSystem.CLEAR_ON_RESET); dataIndex = JCSystem.makeTransientShortArray((short) 1, JCSystem.CLEAR_ON_RESET); // Initialize RKP mac key - short offset = repository.alloc((short) RKP_MAC_KEY_SIZE); - byte[] buffer = repository.getHeap(); - seProvider.getTrueRandomNumber(buffer, offset, RKP_MAC_KEY_SIZE); - storeDataInst.createRkpMacKey(buffer, offset, RKP_MAC_KEY_SIZE); + if (!seProvider.isUpgrading()) { + short offset = repository.allocReclaimableMemory((short) RKP_MAC_KEY_SIZE); + byte[] buffer = repository.getHeap(); + seProvider.getTrueRandomNumber(buffer, offset, RKP_MAC_KEY_SIZE); + storeDataInst.createRkpMacKey(buffer, offset, RKP_MAC_KEY_SIZE); + repository.reclaimMemory(RKP_MAC_KEY_SIZE); + } operation[0] = null; createAuthorizedEEKRoot(); }