/*
* 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