From 7613056c14f8c0a144358c643b7e8a6390379e0e Mon Sep 17 00:00:00 2001 From: Subrahmanyaman Date: Sat, 11 Jun 2022 20:31:24 +0000 Subject: [PATCH] Validate token at the start itself. --- .../android/javacard/keymaster/KMKeymasterApplet.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Applet/src/com/android/javacard/keymaster/KMKeymasterApplet.java b/Applet/src/com/android/javacard/keymaster/KMKeymasterApplet.java index cda3a989..992ee55c 100644 --- a/Applet/src/com/android/javacard/keymaster/KMKeymasterApplet.java +++ b/Applet/src/com/android/javacard/keymaster/KMKeymasterApplet.java @@ -2163,6 +2163,9 @@ private void authorizeUpdateFinishOperation(KMOperationState op, byte[] scratchP } op.setAuthTimeoutValidated(true); } else if (op.isAuthPerOperationReqd()) { // If Auth per operation is required + if (!validateHwToken(data[HW_TOKEN], scratchPad)) { + KMException.throwIt(KMError.KEY_USER_NOT_AUTHENTICATED); + } tmpVariables[0] = KMHardwareAuthToken.cast(data[HW_TOKEN]).getChallenge(); if (KMInteger.compare(data[OP_HANDLE], tmpVariables[0]) != 0) { KMException.throwIt(KMError.KEY_USER_NOT_AUTHENTICATED); @@ -2226,7 +2229,7 @@ private void authorizeDeviceUnlock(byte[] scratchPad) { KMType.BOOL_TAG, KMType.UNLOCKED_DEVICE_REQUIRED, data[HW_PARAMETERS]); if (ptr != KMType.INVALID_VALUE && repository.getDeviceLock()) { - if (!validateHwToken(data[HW_TOKEN], scratchPad)) { + if (data[HW_TOKEN] == KMType.INVALID_VALUE) { KMException.throwIt(KMError.DEVICE_LOCKED); } ptr = KMHardwareAuthToken.cast(data[HW_TOKEN]).getTimestamp(); @@ -2808,6 +2811,9 @@ private void authorizeAndBeginOperation(KMOperationState op, byte[] scratchPad) authorizeDigest(op); authorizePadding(op); authorizeBlockModeAndMacLength(op); + if (!validateHwToken(data[HW_TOKEN], scratchPad)) { + data[HW_TOKEN] = KMType.INVALID_VALUE; + } authorizeUserSecureIdAuthTimeout(op, scratchPad); authorizeDeviceUnlock(scratchPad); authorizeKeyUsageForCount(scratchPad); @@ -3110,7 +3116,7 @@ private boolean isHwAuthTokenContainsMatchingSecureId(short hwAuthToken, private boolean authTokenMatches(short userSecureIdsPtr, short authType, byte[] scratchPad) { - if (!validateHwToken(data[HW_TOKEN], scratchPad)) { + if (data[HW_TOKEN] == KMType.INVALID_VALUE) { return false; } if (!isHwAuthTokenContainsMatchingSecureId(data[HW_TOKEN], userSecureIdsPtr)) {