// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 3: Commands
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014

#include "InternalRoutines.h"
#include "ReadPublic_fp.h"
//
//
//     Error Returns                     Meaning
//
//     TPM_RC_SEQUENCE                   can not read the public area of a sequence object
//
TPM_RC
TPM2_ReadPublic(
   ReadPublic_In     *in,                // IN: input parameter list
   ReadPublic_Out    *out                // OUT: output parameter list
   )
{
   OBJECT                    *object;

// Input Validation

   // Get loaded object pointer
   object = ObjectGet(in->objectHandle);

   // Can not read public area of a sequence object
   if(ObjectIsSequence(object))
       return TPM_RC_SEQUENCE;

// Command Output

   // Compute size of public area in canonical form
   out->outPublic.t.size = TPMT_PUBLIC_Marshal(&object->publicArea, NULL, NULL);

   // Copy public area to output
   out->outPublic.t.publicArea = object->publicArea;

   // Copy name to output
   out->name.t.size = ObjectGetName(in->objectHandle, &out->name.t.name);

   // Copy qualified name to output
   ObjectGetQualifiedName(in->objectHandle, &out->qualifiedName);

   return TPM_RC_SUCCESS;
}