/*
 * 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_CPRIHASH_FP_H
#define __TPM2_CPRIHASH_FP_H

LIB_EXPORT UINT16 _cpri__CompleteHash(
        CPRI_HASH_STATE         *hashState,             // IN: the state of hash stack
        UINT32                   dOutSize,              // IN: size of digest buffer
        BYTE                    *dOut                   // OUT: hash digest
);
LIB_EXPORT UINT16 _cpri__CopyHashState (
        CPRI_HASH_STATE         *out,                  // OUT: destination of the state
        CPRI_HASH_STATE         *in                    // IN: source of the state
);
LIB_EXPORT UINT16 _cpri__HashBlock(
        TPM_ALG_ID         hashAlg,            //   IN: The hash algorithm
        UINT32             dataSize,           //   IN: size of buffer to hash
        BYTE              *data,               //   IN: the buffer to hash
        UINT32             digestSize,         //   IN: size of the digest buffer
        BYTE              *digest              //   OUT: hash digest
);
LIB_EXPORT BOOL _cpri__HashStartup(void);
LIB_EXPORT UINT16 _cpri__GetDigestSize(
        TPM_ALG_ID           hashAlg               // IN: hash algorithm to look up
);
LIB_EXPORT UINT16 _cpri__GetHashDER(
        TPM_ALG_ID           hashAlg,            // IN: the algorithm to look up
        const BYTE          **p
);
LIB_EXPORT UINT16 _cpri__KDFa(
        TPM_ALG_ID          hashAlg,             //   IN: hash algorithm used in HMAC
        TPM2B              *key,                 //   IN: HMAC key
        const char         *label,               //   IN: a 0-byte terminated label used in KDF
        TPM2B              *contextU,            //   IN: context U
        TPM2B              *contextV,            //   IN: context V
        UINT32              sizeInBits,          //   IN: size of generated key in bit
        BYTE               *keyStream,           //   OUT: key buffer
        UINT32             *counterInOut,        //   IN/OUT: caller may provide the iteration
                                             //       counter for incremental operations to
                                             //       avoid large intermediate buffers.
        BOOL                once                 //   IN: TRUE if only one iteration is performed
                                             //       FALSE if iteration count determined by
                                             //       "sizeInBits"
);
LIB_EXPORT UINT16
_cpri__KDFe(
       TPM_ALG_ID          hashAlg,             //   IN: hash algorithm used in HMAC
       TPM2B              *Z,                   //   IN: Z
       const char         *label,               //   IN: a 0 terminated label using in KDF
       TPM2B              *partyUInfo,          //   IN: PartyUInfo
       TPM2B              *partyVInfo,          //   IN: PartyVInfo
       UINT32              sizeInBits,          //   IN: size of generated key in bit
       BYTE               *keyStream            //   OUT: key buffer
);
LIB_EXPORT CRYPT_RESULT _cpri__MGF1(
        UINT32              mSize,          //   IN: length of the mask to be produced
        BYTE               *mask,           //   OUT: buffer to receive the mask
        TPM_ALG_ID          hashAlg,        //   IN: hash to use
        UINT32              sSize,          //   IN: size of the seed
        BYTE               *seed            //   IN: seed size
);
LIB_EXPORT UINT16 _cpri__StartHMAC(
        TPM_ALG_ID              hashAlg,          //   IN: the algorithm to use
        BOOL                    sequence,         //   IN: indicates if the state should be
                                                //       saved
        CPRI_HASH_STATE        *state,            //   IN/OUT: the state buffer
        UINT16                  keySize,          //   IN: the size of the HMAC key
        BYTE                   *key,              //   IN: the HMAC key
        TPM2B                  *oPadKey           //   OUT: the key prepared for the oPad round
);
LIB_EXPORT UINT16 _cpri__StartHash(
        TPM_ALG_ID               hashAlg,              // IN: hash algorithm
        BOOL                     sequence,             // IN: TRUE if the state should be saved
        CPRI_HASH_STATE         *hashState             // OUT: the state of hash stack.
);
LIB_EXPORT void _cpri__UpdateHash(
        CPRI_HASH_STATE           *hashState,      // IN: the hash context information
        UINT32                     dataSize,       // IN: the size of data to be added to the
                                              //     digest
        BYTE                      *data            // IN: data to be hashed
);

#endif // __TPM2_CPRIHASH_FP_H
LIB_EXPORT UINT16 _cpri__CompleteHMAC(
        CPRI_HASH_STATE        *hashState,          //   IN: the state of hash stack
        TPM2B                  *oPadKey,            //   IN: the HMAC key in oPad format
        UINT32                  dOutSize,           //   IN: size of digest buffer
        BYTE                   *dOut                //   OUT: hash digest
        );
LIB_EXPORT TPM_ALG_ID _cpri__GetContextAlg(
        CPRI_HASH_STATE         *hashState             // IN: the hash context
        );
LIB_EXPORT TPM_ALG_ID _cpri__GetHashAlgByIndex(
        UINT32               index               // IN: the index
        );
LIB_EXPORT UINT16 _cpri__GetHashBlockSize(
        TPM_ALG_ID           hashAlg             // IN: hash algorithm to look up
        );
LIB_EXPORT void _cpri__ImportExportHashState(
        CPRI_HASH_STATE           *osslFmt,          // IN/OUT: the hash state formated for use
        //     by openSSL
        EXPORT_HASH_STATE         *externalFmt,      // IN/OUT: the exported hash state
        IMPORT_EXPORT              direction         //
        );
