From fd4dae7773221ae5a108105e461fcf45ac3b5f82 Mon Sep 17 00:00:00 2001 From: "avinash.hedage" Date: Tue, 28 Jun 2022 09:34:42 +0000 Subject: [PATCH] code review changes and code cleanup in applet upgrade --- .../seprovider/KMAndroidSEProvider.java | 18 ------------------ .../javacard/keymaster/KMKeymintDataStore.java | 15 +++++++-------- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMAndroidSEProvider.java b/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMAndroidSEProvider.java index 67b02708..ddd45ae8 100644 --- a/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMAndroidSEProvider.java +++ b/Applet/AndroidSEProviderLib/src/com/android/javacard/seprovider/KMAndroidSEProvider.java @@ -1144,18 +1144,12 @@ public void onSave(Element element, byte interfaceType, Object object) { return; } switch (interfaceType) { - case KMDataStoreConstants.INTERFACE_TYPE_COMPUTED_HMAC_KEY: - KMHmacKey.onSave(element, (KMHmacKey) object); - break; case KMDataStoreConstants.INTERFACE_TYPE_MASTER_KEY: KMAESKey.onSave(element, (KMAESKey) object); break; case KMDataStoreConstants.INTERFACE_TYPE_PRE_SHARED_KEY: KMHmacKey.onSave(element, (KMHmacKey) object); break; - case KMDataStoreConstants.INTERFACE_TYPE_ATTESTATION_KEY: - KMECPrivateKey.onSave(element, (KMECPrivateKey) object); - break; case KMDataStoreConstants.INTERFACE_TYPE_DEVICE_UNIQUE_KEY_PAIR: KMECDeviceUniqueKey.onSave(element, (KMECDeviceUniqueKey) object); break; @@ -1180,8 +1174,6 @@ public Object onRestore(Element element) { return KMAESKey.onRestore((AESKey) element.readObject()); case KMDataStoreConstants.INTERFACE_TYPE_PRE_SHARED_KEY: return KMHmacKey.onRestore((HMACKey) element.readObject()); - case KMDataStoreConstants.INTERFACE_TYPE_ATTESTATION_KEY: - return KMECPrivateKey.onRestore((KeyPair) element.readObject()); case KMDataStoreConstants.INTERFACE_TYPE_DEVICE_UNIQUE_KEY_PAIR: return KMECDeviceUniqueKey.onRestore((KeyPair) element.readObject()); case KMDataStoreConstants.INTERFACE_TYPE_RKP_MAC_KEY: @@ -1196,18 +1188,12 @@ public Object onRestore(Element element) { public short getBackupPrimitiveByteCount(byte interfaceType) { short primitiveCount = 1; // interface type switch (interfaceType) { - case KMDataStoreConstants.INTERFACE_TYPE_COMPUTED_HMAC_KEY: - primitiveCount += KMHmacKey.getBackupPrimitiveByteCount(); - break; case KMDataStoreConstants.INTERFACE_TYPE_MASTER_KEY: primitiveCount += KMAESKey.getBackupPrimitiveByteCount(); break; case KMDataStoreConstants.INTERFACE_TYPE_PRE_SHARED_KEY: primitiveCount += KMHmacKey.getBackupPrimitiveByteCount(); break; - case KMDataStoreConstants.INTERFACE_TYPE_ATTESTATION_KEY: - primitiveCount += KMECPrivateKey.getBackupPrimitiveByteCount(); - break; case KMDataStoreConstants.INTERFACE_TYPE_DEVICE_UNIQUE_KEY_PAIR: primitiveCount += KMECDeviceUniqueKey.getBackupPrimitiveByteCount(); break; @@ -1223,14 +1209,10 @@ public short getBackupPrimitiveByteCount(byte interfaceType) { @Override public short getBackupObjectCount(byte interfaceType) { switch (interfaceType) { - case KMDataStoreConstants.INTERFACE_TYPE_COMPUTED_HMAC_KEY: - return KMHmacKey.getBackupObjectCount(); case KMDataStoreConstants.INTERFACE_TYPE_MASTER_KEY: return KMAESKey.getBackupObjectCount(); case KMDataStoreConstants.INTERFACE_TYPE_PRE_SHARED_KEY: return KMHmacKey.getBackupObjectCount(); - case KMDataStoreConstants.INTERFACE_TYPE_ATTESTATION_KEY: - return KMECPrivateKey.getBackupObjectCount(); case KMDataStoreConstants.INTERFACE_TYPE_DEVICE_UNIQUE_KEY_PAIR: return KMECDeviceUniqueKey.getBackupObjectCount(); case KMDataStoreConstants.INTERFACE_TYPE_RKP_MAC_KEY: diff --git a/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java b/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java index a2edeb82..c79a0a8c 100644 --- a/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java +++ b/Applet/src/com/android/javacard/keymaster/KMKeymintDataStore.java @@ -910,7 +910,7 @@ private void handlePreviousVersionUpgrade(Element element) { element.readObject(); // pop verifiedHash element.readObject(); //pop bootKey element.readObject(); // pop bootPatchLevel - additionalCertChain = (byte[]) element.readObject(); // + additionalCertChain = (byte[]) element.readObject(); bcc = (byte[]) element.readObject(); // Read Key Objects @@ -953,12 +953,13 @@ void handleProvisionStatusUpgrade(byte[] dataTable, short dataTableIndex){ short dInex = repository.allocReclaimableMemory((short)2); byte data[] = repository.getHeap(); getProvisionStatus(dataTable, data, dInex); - JCSystem.beginTransaction(); - provisionStatus = (short)( data[dInex] & 0x00ff); + short pStatus = (short)( data[dInex] & 0x00ff); if( KMKeymasterApplet.PROVISION_STATUS_PROVISIONING_LOCKED - == (provisionStatus & KMKeymasterApplet.PROVISION_STATUS_PROVISIONING_LOCKED)) { - provisionStatus |= KMKeymasterApplet.PROVISION_STATUS_SE_LOCKED; + == (pStatus & KMKeymasterApplet.PROVISION_STATUS_PROVISIONING_LOCKED)) { + pStatus |= KMKeymasterApplet.PROVISION_STATUS_SE_LOCKED; } + JCSystem.beginTransaction(); + provisionStatus = pStatus; JCSystem.commitTransaction(); repository.reclaimMemory((short)2); } @@ -980,12 +981,10 @@ public short getBackupObjectCount() { // BCC - 1 // oemRootPublicKey - 1 return (short) (11 + - seProvider.getBackupObjectCount(KMDataStoreConstants.INTERFACE_TYPE_COMPUTED_HMAC_KEY) + seProvider.getBackupObjectCount(KMDataStoreConstants.INTERFACE_TYPE_MASTER_KEY) + seProvider.getBackupObjectCount(KMDataStoreConstants.INTERFACE_TYPE_PRE_SHARED_KEY) + seProvider.getBackupObjectCount(KMDataStoreConstants.INTERFACE_TYPE_DEVICE_UNIQUE_KEY_PAIR) + - seProvider.getBackupObjectCount( - KMDataStoreConstants.INTERFACE_TYPE_RKP_MAC_KEY)); + seProvider.getBackupObjectCount(KMDataStoreConstants.INTERFACE_TYPE_RKP_MAC_KEY)); } }