diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/AbstractAttestationCertificateAuthority.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/AbstractAttestationCertificateAuthority.java index 1a2b6387..d0753103 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/AbstractAttestationCertificateAuthority.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/AbstractAttestationCertificateAuthority.java @@ -439,10 +439,11 @@ public abstract class AbstractAttestationCertificateAuthority } } + ByteString blobStr = ByteString.copyFrom(new byte[]{}); if (validationResult == AppraisalStatus.Status.PASS) { RSAPublicKey akPub = parsePublicKey(claim.getAkPublicArea().toByteArray()); byte[] nonce = generateRandomBytes(NONCE_LENGTH); - ByteString blobStr = tpm20MakeCredential(ekPub, akPub, nonce); + blobStr = tpm20MakeCredential(ekPub, akPub, nonce); SupplyChainPolicy scp = this.supplyChainValidationService.getPolicy(); String pcrQuoteMask = PCR_QUOTE_MASK; @@ -465,7 +466,12 @@ public abstract class AbstractAttestationCertificateAuthority } else { LOG.error("Supply chain validation did not succeed. Result is: " + validationResult); - return new byte[]{}; + // empty response + ProvisionerTpm2.IdentityClaimResponse response + = ProvisionerTpm2.IdentityClaimResponse.newBuilder() + .setCredentialBlob(blobStr) + .build(); + return response.toByteArray(); } } diff --git a/HIRS_ProvisionerTPM2/src/TPM2_Provisioner.cpp b/HIRS_ProvisionerTPM2/src/TPM2_Provisioner.cpp index c7e90f3e..2f5aea23 100644 --- a/HIRS_ProvisionerTPM2/src/TPM2_Provisioner.cpp +++ b/HIRS_ProvisionerTPM2/src/TPM2_Provisioner.cpp @@ -143,13 +143,20 @@ int provision() { RestfulClientProvisioner provisioner; string response = provisioner.sendIdentityClaim(identityClaim); hirs::pb::IdentityClaimResponse icr; + if (!icr.ParseFromString(response) || !icr.has_credential_blob()) { + logger.error("The ACA did not send make credential blob."); cout << "----> Provisioning failed." << endl; cout << "The ACA did not send make credential information." << endl; return 0; } string nonceBlob = icr.credential_blob(); + if (nonceBlob == "") { + cout << "----> Provisioning failed." << endl; + cout << "The ACA sent empty credential information." << endl; + return 0; + } // activateIdentity requires we read makeCredential output from a file cout << "----> Received response. Attempting to decrypt nonce" << endl;