|
From: Mudassar A. <mud...@ho...> - 2011-03-22 23:08:43
|
Hi,
I am trying to certify a key using AIK key. My code was working fine before
but then I reset my TPM and re-created keys. Probably after that or due to
any other reason I am now getting following exception.
Exception in thread "main" java.lang.NullPointerException
at
iaik.tc.tss.api.structs.common.TcBasicTypeDecoder.checkBoundaryPreconditions(TcBasicTypeDecoder.java:90)
at iaik.tc.tss.api.structs.tpm.TcTpmNonce.decode(TcTpmNonce.java:78)
at
iaik.tc.tss.api.structs.common.TcCompositeTypeDecoder.<init>(TcCompositeTypeDecoder.java:54)
at
iaik.tc.tss.api.structs.common.TcCompositeTypeDecoder.<init>(TcCompositeTypeDecoder.java:40)
at iaik.tc.tss.api.structs.tpm.TcTpmNonce.<init>(TcTpmNonce.java:46)
at iaik.tc.tss.impl.java.tsp.TcRsaKey.certifyKey(TcRsaKey.java:279)
at tests.TestCertifyKey.main(TestCertifyKey.java:90)
My code is:
try{
TcIContext context = new
TcTssContextFactory().newContextObject();
context.connect();
TcITpm tpm = context.getTpmObject();
TcIPolicy ownerPolicy =
context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
ownerPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
Define.OWNER_SECRET);
ownerPolicy.assignToObject(tpm);
/*KEY CREATION*/
//Parent key SRK
TcIRsaKey srk =
context.getKeyByUuid(TcTssConstants.TSS_PS_TYPE_SYSTEM,TcUuidFactory.getInstance().getUuidSRK());
TcIPolicy srkPolicy =
context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
srkPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_SHA1,
TcBlobData.newByteArray(TcTssConstants.TSS_WELL_KNOWN_SECRET) );
srkPolicy.assignToObject(srk);
/*Binding Key*/
// Create an empty binding key object
long keyAttributes = TcTssConstants.TSS_KEY_SIZE_2048 |
TcTssConstants.TSS_KEY_TYPE_BIND |
TcTssConstants.TSS_KEY_VOLATILE |
TcTssConstants.TSS_KEY_NOT_MIGRATABLE |
TcTssConstants.TSS_KEY_NO_AUTHORIZATION;
//default
TcIRsaKey bindKey = context.createRsaKeyObject(keyAttributes);
// Bind key usage policy
TcIPolicy bindKeyPolicy =
context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
bindKeyPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
Define.BIND_KEY_SECRET);
bindKeyPolicy.assignToObject(bindKey);
// Bind key migration policy (just to avoid popup)
TcIPolicy bindKeyMigrationPolicy =
context.createPolicyObject(TcTssConstants.TSS_POLICY_MIGRATION);
bindKeyMigrationPolicy.setSecret(TcTssConstants.TSS_SECRET_MODE_SHA1,
TcBlobData.newByteArray(TcTssConstants.TSS_WELL_KNOWN_SECRET) );
bindKeyMigrationPolicy.assignToObject(bindKey);
//Parent key SRK (already loaded)
bindKey.createKey(srk, null);
/*Store on HDD*/
TcTssUuid bindKeyUUID =
TcUuidFactory.getInstance().generateRandomUuid();
context.registerKey(bindKey, TcTssConstants.TSS_PS_TYPE_SYSTEM,
bindKeyUUID, TcTssConstants.TSS_PS_TYPE_SYSTEM,
TcUuidFactory.getInstance().getUuidSRK());
System.out.println("Bind key registered in persistant system
storage with " + bindKeyUUID.toString());
bindKey.loadKey(srk);
TcIRsaKey aikKey =
context.createRsaKeyObject(Define.AIK_KEY_ATTRIBUTES);
// create the UUID of the AIK
TcTssUuid uuid = new TcTssUuid().initString(Define.aikKeyUuid);
aikKey = context.getKeyByUuid(TcTssConstants.TSS_PS_TYPE_SYSTEM,
uuid);
// set usage secret for identity key
TcIPolicy aikUsgPol =
context.createPolicyObject(TcTssConstants.TSS_POLICY_USAGE);
aikUsgPol.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
Define.AIK_SECRET);
aikUsgPol.assignToObject(aikKey);
TcIPolicy aikMigPol =
context.createPolicyObject(TcTssConstants.TSS_POLICY_MIGRATION);
aikMigPol.setSecret(TcTssConstants.TSS_SECRET_MODE_PLAIN,
TcBlobData.newString("none"));
aikMigPol.assignToObject(aikKey);
aikKey.loadKey(srk);
TcTssValidation val = new TcTssValidation();
TcTssValidation validationResult = bindKey.certifyKey(aikKey,
val);
context.closeContext();
}
catch (TcTssException e){
e.printStackTrace();
}
}
Regards.
Mudassar Aslam
|