/*
 * 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_SPT_FP_H
#define __TPM2_OBJECT_SPT_FP_H

BOOL AreAttributesForParent(
        OBJECT             *parentObject        // IN: parent handle
);
TPM_RC CredentialToSecret(
        TPM2B_ID_OBJECT          *inIDObject,             //   IN: input credential blob
        TPM2B_NAME               *name,                   //   IN: the name of the object
        TPM2B_SEED               *seed,                   //   IN: an external seed.
        TPM_HANDLE                protector,              //   IN: The protector's handle
        TPM2B_DIGEST             *secret                  //   OUT: secret information
);
TPM_RC DuplicateToSensitive(
        TPM2B_PRIVATE                 *inPrivate,           //   IN: input private structure
        TPM2B_NAME                    *name,                //   IN: the name of the object
        TPM_HANDLE                     parentHandle,        //   IN: The parent's handle
        TPM_ALG_ID                     nameAlg,             //   IN: hash algorithm in public area.
        TPM2B_SEED                    *seed,                //   IN: an external seed may be provided.
                                                       //       If external seed is provided with
                                                       //       size of 0, no outer wrap is
                                                       //       applied
        TPMT_SYM_DEF_OBJECT           *symDef,              //   IN: Symmetric key definition. If the
                                                       //       symmetric key algorithm is NULL,
                                                       //       no inner wrap is applied
        TPM2B_DATA                    *innerSymKey,         //   IN: a symmetric key may be provided
                                                       //       to decrypt the inner wrap of a
                                                       //       duplication blob.
        TPMT_SENSITIVE                *sensitive            //   OUT: sensitive structure
                            );
void FillInCreationData(
        TPMI_DH_OBJECT                     parentHandle,    //   IN: handle of parent
        TPMI_ALG_HASH                      nameHashAlg,     //   IN: name hash algorithm
        TPML_PCR_SELECTION                *creationPCR,     //   IN: PCR selection
        TPM2B_DATA                        *outsideData,     //   IN: outside data
        TPM2B_CREATION_DATA               *outCreation,     //   OUT: creation data for output
        TPM2B_DIGEST                      *creationDigest   //   OUT: creation digest
);
TPM_RC PrivateToSensitive(
        TPM2B_PRIVATE       *inPrivate,          // IN: input private structure
        TPM2B_NAME          *name,               // IN: the name of the object
        TPM_HANDLE          parentHandle,    // IN: The parent's handle
        TPM_ALG_ID          nameAlg,         // IN: hash algorithm in public area. It is
                                        //     passed separately because we only pass
                                        //     name, rather than the whole public area
                                        //     of the object. This parameter is used in
                                        //     the following two cases: 1. primary
                                        //     objects. 2. duplication blob with inner
                                        //     wrap. In other cases, this parameter
                                        //     will be ignored
        TPMT_SENSITIVE     *sensitive        // OUT: sensitive structure
                          );
TPM_RC PublicAttributesValidation(
        BOOL                load,                 // IN: TRUE if load checks, FALSE if
                                             //     TPM2_Create()
        TPMI_DH_OBJECT      parentHandle,         // IN: input parent handle
        TPMT_PUBLIC        *publicArea            // IN: public area of the object
);
TPM_RC SchemeChecks(
        BOOL                load,               // IN: TRUE if load checks, FALSE if
                                           //     TPM2_Create()
        TPMI_DH_OBJECT      parentHandle,       // IN: input parent handle
        TPMT_PUBLIC        *publicArea          // IN: public area of the object
                    );
void SecretToCredential(
        TPM2B_DIGEST              *secret,          //   IN: secret information
        TPM2B_NAME                *name,            //   IN: the name of the object
        TPM2B_SEED                *seed,            //   IN: an external seed.
        TPM_HANDLE                 protector,       //   IN: The protector's handle
        TPM2B_ID_OBJECT           *outIDObject      //   OUT: output credential
                        );
void SensitiveToDuplicate(
        TPMT_SENSITIVE                *sensitive,          //   IN: sensitive structure
        TPM2B_NAME                    *name,               //   IN: the name of the object
        TPM_HANDLE                     parentHandle,       //   IN: The new parent's handle
        TPM_ALG_ID                     nameAlg,            //   IN: hash algorithm in public area. It
        //       is passed separately because we
        //       only pass name, rather than the
        //       whole public area of the object.
        TPM2B_SEED                    *seed,               //   IN: the external seed. If external
        //       seed is provided with size of 0,
        //       no outer wrap should be applied
        //       to duplication blob.
        TPMT_SYM_DEF_OBJECT           *symDef,             //   IN: Symmetric key definition. If the
        //       symmetric key algorithm is NULL,
        //       no inner wrap should be applied.
        TPM2B_DATA                    *innerSymKey,        //   IN/OUT: a symmetric key may be
        //       provided to encrypt the inner
        //       wrap of a duplication blob. May
        //       be generated here if needed.
        TPM2B_PRIVATE                 *outPrivate          //   OUT: output private structure
        );
void SensitiveToPrivate(
        TPMT_SENSITIVE      *sensitive,         //   IN: sensitive structure
        TPM2B_NAME          *name,              //   IN: the name of the object
        TPM_HANDLE           parentHandle,      //   IN: The parent's handle
        TPM_ALG_ID           nameAlg,           //   IN: hash algorithm in public area. This
                                            //       parameter is used when parentHandle is
                                            //       NULL, in which case the object is
                                            //       temporary.
        TPM2B_PRIVATE       *outPrivate         //   OUT: output private structure
);

#endif // __TPM2_OBJECT_SPT_FP_H
