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