/*
 * 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_CPRIECC_FP_H
#define __TPM2_CPRIECC_FP_H

LIB_EXPORT CRYPT_RESULT _cpri__C_2_2_KeyExchange(
        TPMS_ECC_POINT              *outZ1,                //   OUT: a computed point
        TPMS_ECC_POINT              *outZ2,                //   OUT: and optional second point
        TPM_ECC_CURVE                curveId,              //   IN: the curve for the computations
        TPM_ALG_ID                   scheme,               //   IN: the key exchange scheme
        TPM2B_ECC_PARAMETER         *dsA,                  //   IN: static private TPM key
        TPM2B_ECC_PARAMETER         *deA,                  //   IN: ephemeral private TPM key
        TPMS_ECC_POINT              *QsB,                  //   IN: static public party B key
        TPMS_ECC_POINT              *QeB                   //   IN: ephemeral public party B key
        );
LIB_EXPORT CRYPT_RESULT _cpri__C_2_2_KeyExchange(
        TPMS_ECC_POINT              *outZ1,                //   OUT: a computed point
        TPMS_ECC_POINT              *outZ2,                //   OUT: and optional second point
        TPM_ECC_CURVE                curveId,              //   IN: the curve for the computations
        TPM_ALG_ID                   scheme,               //   IN: the key exchange scheme
        TPM2B_ECC_PARAMETER         *dsA,                  //   IN: static private TPM key
        TPM2B_ECC_PARAMETER         *deA,                  //   IN: ephemeral private TPM key
        TPMS_ECC_POINT              *QsB,                  //   IN: static public party B key
        TPMS_ECC_POINT              *QeB                   //   IN: ephemeral public party B key
        );
LIB_EXPORT CRYPT_RESULT _cpri__EccCommitCompute(
        TPMS_ECC_POINT                  *K,                   //   OUT: [d]B or [r]Q
        TPMS_ECC_POINT                  *L,                   //   OUT: [r]B
        TPMS_ECC_POINT                  *E,                   //   OUT: [r]M
        TPM_ECC_CURVE                    curveId,             //   IN: the curve for the computations
        TPMS_ECC_POINT                  *M,                   //   IN: M (optional)
        TPMS_ECC_POINT                  *B,                   //   IN: B (optional)
        TPM2B_ECC_PARAMETER             *d,                   //   IN: d (required)
        TPM2B_ECC_PARAMETER             *r                    //   IN: the computed r value (required)
        );
LIB_EXPORT UINT32 _cpri__EccGetCurveCount(
        void
        );
LIB_EXPORT const ECC_CURVE * _cpri__EccGetParametersByCurveId(
        TPM_ECC_CURVE       curveId               // IN: the curveID
        );
LIB_EXPORT CRYPT_RESULT _cpri__EccPointMultiply(
        TPMS_ECC_POINT                *Rout,                  //   OUT: the product point R
        TPM_ECC_CURVE                  curveId,               //   IN: the curve to use
        TPM2B_ECC_PARAMETER           *dIn,                   //   IN: value to multiply against the
        //       curve generator
        TPMS_ECC_POINT                *Qin,                   //   IN: point Q
        TPM2B_ECC_PARAMETER           *uIn                    //   IN: scalar value for the multiplier
        //       of Q
        );
LIB_EXPORT BOOL _cpri__EccIsPointOnCurve(
        TPM_ECC_CURVE          curveId,             // IN: the curve selector
        TPMS_ECC_POINT        *Q                    // IN: the point.
                                         );
LIB_EXPORT CRYPT_RESULT _cpri__GenerateKeyEcc(
        TPMS_ECC_POINT                    *Qout,                  //   OUT: the public point
        TPM2B_ECC_PARAMETER               *dOut,                  //   OUT: the private scalar
        TPM_ECC_CURVE                      curveId,               //   IN: the curve identifier
        TPM_ALG_ID                         hashAlg,               //   IN: hash algorithm to use in the key
        //       generation process
        TPM2B                             *seed,                  //   IN: the seed to use
        const char                        *label,                 //   IN: A label for the generation
        //       process.
        TPM2B                             *extra,                 //   IN: Party 1 data for the KDF
        UINT32                            *counter                //   IN/OUT: Counter value to allow KDF
        //       iteration to be propagated across
        //       multiple functions
        );
LIB_EXPORT TPM_ECC_CURVE _cpri__GetCurveIdByIndex(
        UINT16                i
);
LIB_EXPORT CRYPT_RESULT _cpri__GetEphemeralEcc(
        TPMS_ECC_POINT                *Qout,            // OUT: the public point
        TPM2B_ECC_PARAMETER           *dOut,            // OUT: the private scalar
        TPM_ECC_CURVE                  curveId          // IN: the curve for the key
        );
LIB_EXPORT CRYPT_RESULT _cpri__SignEcc(
        TPM2B_ECC_PARAMETER            *rOut,              //   OUT: r component of the signature
        TPM2B_ECC_PARAMETER            *sOut,              //   OUT: s component of the signature
        TPM_ALG_ID                      scheme,            //   IN: the scheme selector
        TPM_ALG_ID                      hashAlg,           //   IN: the hash algorithm if need
        TPM_ECC_CURVE                   curveId,           //   IN: the curve used in the signature
        //       process
        TPM2B_ECC_PARAMETER            *dIn,               //   IN: the private key
        TPM2B                          *digest,            //   IN: the digest to sign
        TPM2B_ECC_PARAMETER            *kIn                //   IN: k for input
        );
LIB_EXPORT BOOL _cpri__EccStartup(void);
LIB_EXPORT CRYPT_RESULT _cpri__ValidateSignatureEcc(
        TPM2B_ECC_PARAMETER           *rIn,                  //   IN: r component of the signature
        TPM2B_ECC_PARAMETER           *sIn,                  //   IN: s component of the signature
        TPM_ALG_ID                     scheme,               //   IN: the scheme selector
        TPM_ALG_ID                     hashAlg,              //   IN: the hash algorithm used (not used
        //       in all schemes)
        TPM_ECC_CURVE                   curveId,             //   IN: the curve used in the signature
        //       process
        TPMS_ECC_POINT                *Qin,                  //   IN: the public point of the key
        TPM2B                         *digest                //   IN: the digest that was signed
        );

#endif // __TPM2_CPRIECC_FP_H
