132 lines
7 KiB
C
132 lines
7 KiB
C
/*
|
|
* 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
|