Skip to content

Commit 8c0d85e

Browse files
authored
Merge pull request #53 from cpathak/Keymint
Bug fix for Binder issue
2 parents bf6d73c + bcc4f4c commit 8c0d85e

13 files changed

+357
-396
lines changed

Applet/src/com/android/javacard/keymaster/KMKeymasterApplet.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -691,8 +691,6 @@ private void processGetHmacSharingParamCmd(APDU apdu) {
691691
short seed = KMByteBlob.instance((short) 0);
692692
KMHmacSharingParameters.cast(params).setNonce(nonce);
693693
KMHmacSharingParameters.cast(params).setSeed(seed);
694-
print(KMByteBlob.cast(nonce).getBuffer(), KMByteBlob.cast(nonce).getStartOff(),
695-
KMByteBlob.cast(nonce).length());
696694
// prepare the response
697695
short resp = KMArray.instance((short) 2);
698696
KMArray.cast(resp).add((short) 0, KMInteger.uint_16(KMError.OK));
@@ -771,9 +769,6 @@ private void processComputeSharedHmacCmd(APDU apdu) {
771769
short found = 0;
772770
//tmpVariables[9]
773771
short nonce = repository.getHmacNonce();
774-
print(KMByteBlob.cast(nonce).getBuffer(),
775-
KMByteBlob.cast(nonce).getStartOff(),
776-
KMByteBlob.cast(nonce).length());
777772

778773
while (paramIndex < paramsLen) {
779774
// read HmacSharingParam
@@ -816,11 +811,6 @@ private void processComputeSharedHmacCmd(APDU apdu) {
816811
// Check if the nonce generated here is present in the hmacSharingParameters array.
817812
// Otherwise throw INVALID_ARGUMENT error.
818813
if (found == 1) {
819-
print(repository.getHeap(),
820-
(short) (concateBuffer + bufferIndex),nonceLen);
821-
print(KMByteBlob.cast(nonce).getBuffer(),
822-
KMByteBlob.cast(nonce).getStartOff(),
823-
nonceLen);
824814
if (0
825815
== Util.arrayCompare(
826816
repository.getHeap(),
@@ -1347,7 +1337,7 @@ protected short getBootKey(byte[] scratchPad){
13471337
}
13481338
return KMByteBlob.instance(scratchPad,(short)0, VERIFIED_BOOT_KEY_SIZE);
13491339
}
1350-
1340+
13511341
protected short getVerifiedBootHash(byte[] scratchPad){
13521342
Util.arrayFillNonAtomic(scratchPad, (short)0, VERIFIED_BOOT_HASH_SIZE, (byte)0);
13531343
short len = seProvider.getVerifiedBootHash(scratchPad,(short)0);
@@ -3042,14 +3032,14 @@ protected void setOsVersion(short version){
30423032
KMInteger.cast(version).length());
30433033
}
30443034

3045-
protected void setVendorPatchLevel(short patch){
3035+
protected void setOsPatchLevel(short patch){
30463036
repository.setOsPatch(
30473037
KMInteger.cast(patch).getBuffer(),
30483038
KMInteger.cast(patch).getStartOff(),
30493039
KMInteger.cast(patch).length());
30503040
}
30513041

3052-
protected void setOsPatchLevel(short patch){
3042+
protected void setVendorPatchLevel(short patch){
30533043
repository.setVendorPatchLevel(
30543044
KMInteger.cast(patch).getBuffer(),
30553045
KMInteger.cast(patch).getStartOff(),
@@ -3106,6 +3096,7 @@ private void processGenerateKey(APDU apdu) {
31063096
KMException.throwIt(KMError.UNSUPPORTED_ALGORITHM);
31073097
break;
31083098
}
3099+
31093100
// create key blob and associated attestation.
31103101
data[ORIGIN] = KMType.GENERATED;
31113102
makeKeyCharacteristics(scratchPad);
@@ -3120,20 +3111,13 @@ private void processGenerateKey(APDU apdu) {
31203111
sendOutgoing(apdu, resp);
31213112
}
31223113

3123-
private static void print(byte[] buf, short start, short length){
3124-
StringBuilder sb = new StringBuilder(length * 2);
3125-
for(short i = start; i < (start+length); i ++){
3126-
sb.append(String.format("%02x", buf[i]));
3127-
}
3128-
System.out.println( sb.toString());
3129-
}
3130-
31313114
private void generateAttestation(byte[] scratchPad){
31323115
KMAttestationCert cert = makeCert(scratchPad);
31333116
if(cert == null) {// No certificate
31343117
data[CERTIFICATE] = KMArray.instance((short)0);
31353118
return;
31363119
}
3120+
31373121
// Allocate memory
31383122
short certData = KMByteBlob.instance(MAX_CERT_SIZE);
31393123
cert.buffer(KMByteBlob.cast(certData).getBuffer(),
@@ -3145,9 +3129,6 @@ private void generateAttestation(byte[] scratchPad){
31453129
KMByteBlob.cast(certData).setStartOff(cert.getCertStart());
31463130
KMByteBlob.cast(certData).setLength(cert.getCertLength());
31473131

3148-
print(KMByteBlob.cast(certData).getBuffer(),
3149-
KMByteBlob.cast(certData).getStartOff(),
3150-
KMByteBlob.cast(certData).length());
31513132
// Initialize the certificate as array of blob
31523133
data[CERTIFICATE] = KMArray.instance((short)1);
31533134
KMArray.cast(data[CERTIFICATE]).add((short)0, certData);

Applet/src/com/android/javacard/keymaster/KMRepository.java

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public class KMRepository implements KMUpgradable {
5959
public static final short DEVICE_LOCK_FLAG_SIZE = 1;
6060

6161
// Class Attributes
62-
// private Object[] operationStateTable;
6362
private byte[] heap;
6463
private short heapIndex;
6564
private byte[] dataTable;
@@ -288,48 +287,6 @@ public short getOsPatch() {
288287
}
289288
}
290289

291-
/*
292-
public void deleteAttIds() {
293-
clearDataEntry(ATT_ID_BRAND);
294-
clearDataEntry(ATT_ID_MEID);
295-
clearDataEntry(ATT_ID_DEVICE);
296-
clearDataEntry(ATT_ID_IMEI);
297-
clearDataEntry(ATT_ID_MODEL);
298-
clearDataEntry(ATT_ID_PRODUCT);
299-
clearDataEntry(ATT_ID_SERIAL);
300-
clearDataEntry(ATT_ID_MANUFACTURER);
301-
}
302-
303-
304-
public short getBootPatchLevel() {
305-
short blob = readData(BOOT_PATCH_LEVEL);
306-
if (blob != 0) {
307-
return KMInteger.uint_32(
308-
KMByteBlob.cast(blob).getBuffer(), KMByteBlob.cast(blob).getStartOff());
309-
} else {
310-
return KMInteger.uint_32(zero, (short) 0);
311-
}
312-
}
313-
314-
public short getVerifiedBootKey() {
315-
return readData(BOOT_VERIFIED_BOOT_KEY);
316-
}
317-
318-
public short getVerifiedBootHash() {
319-
return readData(BOOT_VERIFIED_BOOT_HASH);
320-
}
321-
322-
public boolean getBootLoaderLock() {
323-
short blob = readData(BOOT_DEVICE_LOCKED_STATUS);
324-
return (byte) ((getHeap())[KMByteBlob.cast(blob).getStartOff()] & 0xFE) != 0;
325-
}
326-
327-
public byte getBootState() {
328-
short blob = readData(BOOT_VERIFIED_BOOT_STATE);
329-
return (getHeap())[KMByteBlob.cast(blob).getStartOff()];
330-
}
331-
*/
332-
333290
public boolean getDeviceLock() {
334291
short blob = readData(DEVICE_LOCKED);
335292
return (byte) ((getHeap())[KMByteBlob.cast(blob).getStartOff()] & 0xFE) != 0;
@@ -401,46 +358,6 @@ public void setOsPatch(byte[] buf, short start, short len) {
401358
}
402359
writeDataEntry(BOOT_OS_PATCH, buf, start, len);
403360
}
404-
/*
405-
406-
public void setBootPatchLevel(byte[] buf, short start, short len) {
407-
if (len != BOOT_PATCH_SIZE) {
408-
KMException.throwIt(KMError.INVALID_INPUT_LENGTH);
409-
}
410-
writeDataEntry(BOOT_PATCH_LEVEL, buf, start, len);
411-
}
412-
413-
public void setBootloaderLocked(boolean flag) {
414-
short start = alloc(DEVICE_LOCK_FLAG_SIZE);
415-
if (flag) {
416-
(getHeap())[start] = (byte) ((getHeap())[start] | 0x01);
417-
} else {
418-
(getHeap())[start] = (byte) ((getHeap())[start] & 0xFE);
419-
}
420-
writeDataEntry(BOOT_DEVICE_LOCKED_STATUS, getHeap(), start, DEVICE_LOCK_FLAG_SIZE);
421-
}
422-
423-
public void setVerifiedBootKey(byte[] buf, short start, short len) {
424-
if (len > BOOT_KEY_MAX_SIZE) {
425-
KMException.throwIt(KMError.INVALID_INPUT_LENGTH);
426-
}
427-
writeDataEntry(BOOT_VERIFIED_BOOT_KEY, buf, start, len);
428-
}
429-
430-
431-
public void setVerifiedBootHash(byte[] buf, short start, short len) {
432-
if (len > BOOT_HASH_MAX_SIZE) {
433-
KMException.throwIt(KMError.INVALID_INPUT_LENGTH);
434-
}
435-
writeDataEntry(BOOT_VERIFIED_BOOT_HASH, buf, start, len);
436-
}
437-
438-
public void setBootState(byte state) {
439-
short start = alloc(BOOT_STATE_SIZE);
440-
(getHeap())[start] = state;
441-
writeDataEntry(BOOT_VERIFIED_BOOT_STATE, getHeap(), start, BOOT_STATE_SIZE);
442-
}
443-
*/
444361
@Override
445362
public void onSave(Element ele) {
446363
ele.write(dataIndex);

HAL/Android.bp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ cc_library {
2222
"CborConverter.cpp",
2323
"JavacardKeyMintDevice.cpp",
2424
"JavacardKeyMintOperation.cpp",
25+
"JavacardSecureElement.cpp",
26+
"JavacardSharedSecret.cpp",
27+
"keymint_utils.cpp",
2528
],
2629
cflags:["-O0",],
2730
shared_libs: [
@@ -90,7 +93,6 @@ cc_binary {
9093
],
9194
srcs: [
9295
"service.cpp",
93-
"keymint_utils.cpp"
9496
],
9597
required: [
9698
// "RemoteProvisioner",

0 commit comments

Comments
 (0)