/*
* 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
);
TPM2B_SEED *GetSeedForKDF(
TPM_HANDLE protectorHandle, // IN: the protector handle
TPM2B_SEED *seedIn // IN: the optional input seed
);
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
);
UINT16 ProduceOuterWrap(
TPM_HANDLE protector, // IN: The handle of the object that provides
// protection. For object, it is parent handle. For
// credential, it is the handle of encrypt object.
TPM2B_NAME *name, // IN: the name of the object
TPM_ALG_ID hashAlg, // IN: hash algorithm for outer wrap
TPM2B_SEED *seed, // IN: an external seed may be provided for duplication
// blob. For non duplication blob, this parameter
// should be NULL
BOOL useIV, // IN: indicate if an IV is used
UINT16 dataSize, // IN: the size of sensitive data, excluding the leading
// integrity buffer size or the optional iv size
BYTE *outerBuffer // IN/OUT: outer buffer with sensitive data in it
);
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
);
TPM_RC UnwrapOuter(
TPM_HANDLE protector, // IN: The handle of the object that provides
// protection. For object, it is parent handle. For
// credential, it is the handle of encrypt object.
TPM2B_NAME *name, // IN: the name of the object
TPM_ALG_ID hashAlg, // IN: hash algorithm for outer wrap
TPM2B_SEED *seed, // IN: an external seed may be provided for duplication
// blob. For non duplication blob, this parameter
// should be NULL.
BOOL useIV, // IN: indicates if an IV is used
UINT16 dataSize, // IN: size of sensitive data in outerBuffer, including
// the leading integrity buffer size, and an optional iv
// area
BYTE *outerBuffer // IN/OUT: sensitive data
);
#endif // __TPM2_OBJECT_SPT_FP_H