/*
 * Copyright 2015 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef __TPM2_OBJECT_FP_H
#define __TPM2_OBJECT_FP_H

BOOL AreAttributesForParent(
        OBJECT             *parentObject        // IN: parent handle
                            );
TPMI_YES_NO ObjectCapGetLoaded(
        TPMI_DH_OBJECT     handle,             // IN: start handle
        UINT32             count,              // IN: count of returned handles
        TPML_HANDLE       *handleList          // OUT: list of handle
);
void ObjectCleanupEvict(
        void
        );
void ObjectComputeName(
        TPMT_PUBLIC         *publicArea,       // IN: public area of an object
        TPM2B_NAME          *name              // OUT: name of the object
);
void ObjectComputeQualifiedName(
        TPM2B_NAME          *parentQN,             //   IN: parent's qualified name
        TPM_ALG_ID           nameAlg,              //   IN: name hash
        TPM2B_NAME          *name,                 //   IN: name of the object
        TPM2B_NAME          *qualifiedName         //   OUT: qualified name of the object
        );
TPM_RC ObjectContextLoad(
        OBJECT              *object,               // IN: object structure from saved context
        TPMI_DH_OBJECT      *handle                // OUT: object handle
                         );
TPM_RC ObjectCreateEventSequence(
        TPM2B_AUTH          *auth,              // IN: authValue
        TPMI_DH_OBJECT      *newHandle          // OUT: sequence object handle
                                 );
TPM_RC ObjectCreateHMACSequence(
        TPMI_ALG_HASH        hashAlg,               // IN: hash algorithm
        TPM_HANDLE           handle,                // IN: the handle associated with sequence
                                               //     object
        TPM2B_AUTH         *auth,                 // IN: authValue
        TPMI_DH_OBJECT     *newHandle             // OUT: HMAC sequence object handle
                                );
TPM_RC ObjectCreateHashSequence(
        TPMI_ALG_HASH       hashAlg,              // IN: hash algorithm
        TPM2B_AUTH         *auth,                 // IN: authValue
        TPMI_DH_OBJECT     *newHandle             // OUT: sequence object handle
                         );
TPMI_RH_HIERARCHY ObjectDataGetHierarchy(
        OBJECT              *object             // IN :object
);
BOOL ObjectDataIsStorage(
        TPMT_PUBLIC         *publicArea            // IN: public area of the object
        );
OBJECT* ObjectGet(
        TPMI_DH_OBJECT       handle             // IN: handle of the object
);
TPMI_RH_HIERARCHY ObjectGetHierarchy(
        TPMI_DH_OBJECT        handle              // IN :object handle
        );
TPMI_ALG_HASH ObjectGetNameAlg(
        TPMI_DH_OBJECT       handle             // IN: handle of the object
        );
TPM_RC ObjectLoadEvict(
        TPM_HANDLE           *handle,             // IN:OUT: evict object handle. If success, it
                                              // will be replace by the loaded object handle
        TPM_CC                commandCode         // IN: the command being processed
                       );
void ObjectFlush(
        TPMI_DH_OBJECT        handle               // IN: handle to be freed
);
void ObjectFlushHierarchy(
        TPMI_RH_HIERARCHY          hierarchy             // IN: hierarchy to be flush
);
OBJECT* ObjectGet(
        TPMI_DH_OBJECT       handle             // IN: handle of the object
);
UINT16 ObjectGetName(
        TPMI_DH_OBJECT       handle,            // IN: handle of the object
        NAME                *name               // OUT: name of the object
);
void ObjectGetQualifiedName(
        TPMI_DH_OBJECT       handle,            // IN: handle of the object
        TPM2B_NAME          *qualifiedName      // OUT: qualified name of the object
);
BOOL ObjectIsPresent(
        TPMI_DH_OBJECT        handle              // IN: handle to be checked
                     );
BOOL ObjectIsSequence(
        OBJECT              *object               // IN: handle to be checked
                      );
BOOL ObjectIsStorage(
        TPMI_DH_OBJECT     handle              // IN: object handle
        );
TPM_RC ObjectLoad(
        TPMI_RH_HIERARCHY        hierarchy,               //   IN: hierarchy to which the object belongs
        TPMT_PUBLIC             *publicArea,              //   IN: public area
        TPMT_SENSITIVE          *sensitive,               //   IN: sensitive area (may be null)
        TPM2B_NAME              *name,                    //   IN: object's name (may be null)
        TPM_HANDLE               parentHandle,            //   IN: handle of parent
        BOOL                     skipChecks,              //   IN: flag to indicate if it is OK to skip
                                                     //       consistency checks.
        TPMI_DH_OBJECT          *handle                   //   OUT: object handle
);
void ObjectTerminateEvent(
        void
);

#endif // __TPM2_OBJECT_FP_H
