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