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 |