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