Exemple #1
0
TPM_RESULT cap_pid(UINT32 subCapSize, BYTE *subCap,
                   UINT32 *respSize, BYTE **resp)
{
  TPM_PROTOCOL_ID id;
  if (tpm_unmarshal_TPM_PROTOCOL_ID(&subCap, &subCapSize, &id))
    return TPM_BAD_MODE;
  switch (id) {
    case TPM_PID_OIAP:
    case TPM_PID_OSAP:
    case TPM_PID_ADIP:
    case TPM_PID_ADCP:
    case TPM_PID_OWNER:
/* WATCH: not yet implemented
    case TPM_PID_DSAP:
*/
    case TPM_PID_TRANSPORT:
      return return_BOOL(respSize, resp, TRUE);
    default:
      return return_BOOL(respSize, resp, FALSE);
  }
}
Exemple #2
0
static TPM_RESULT execute_TPM_TakeOwnership(TPM_REQUEST *req, TPM_RESPONSE *rsp) {
   BYTE *ptr;
   UINT32 len;
   TPM_PROTOCOL_ID protocolID;
   UINT32 encOwnerAuthSize;
   BYTE *encOwnerAuth;
   UINT32 encSrkAuthSize;
   BYTE *encSrkAuth;
   TPM_KEY srkParams;
   TPM_KEY srkPub;
   TPM_RESULT res;
   /* compute parameter digest */
   tpm_compute_in_param_digest(req);
   /* unmarshal input */
   ptr = req->param;
   len = req->paramSize;
   if (tpm_unmarshal_TPM_PROTOCOL_ID(&ptr, &len, &protocolID)
       || tpm_unmarshal_UINT32(&ptr, &len, &encOwnerAuthSize)
       || tpm_unmarshal_BLOB(&ptr, &len, &encOwnerAuth, encOwnerAuthSize)
       || tpm_unmarshal_UINT32(&ptr, &len, &encSrkAuthSize)
       || tpm_unmarshal_BLOB(&ptr, &len, &encSrkAuth, encSrkAuthSize)
       || tpm_unmarshal_TPM_KEY(&ptr, &len, &srkParams)
       || len != 0) return TPM_BAD_PARAMETER;
   /* execute command */
   res = TPM_TakeOwnership(protocolID, encOwnerAuthSize, encOwnerAuth, 
     encSrkAuthSize, encSrkAuth, &srkParams, &req->auth1, &srkPub);
   if (res != TPM_SUCCESS) return res;
   /* marshal output */
   rsp->paramSize = len = sizeof_TPM_KEY(srkPub);
   rsp->param = ptr = malloc(len);
   if (ptr == NULL
       || tpm_marshal_TPM_KEY(&ptr, &len, &srkPub)) {
     free(rsp->param);
     res = TPM_FAIL;
   }
   free_TPM_KEY(srkPub);
   return res;
 }