1 /*
2  * Copyright 2015 The Chromium OS Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6 
7 #ifndef __TPM2_CPRIECC_FP_H
8 #define __TPM2_CPRIECC_FP_H
9 
10 LIB_EXPORT CRYPT_RESULT _cpri__C_2_2_KeyExchange(
11     TPMS_ECC_POINT *outZ1,     //   OUT: a computed point
12     TPMS_ECC_POINT *outZ2,     //   OUT: and optional second point
13     TPM_ECC_CURVE curveId,     //   IN: the curve for the computations
14     TPM_ALG_ID scheme,         //   IN: the key exchange scheme
15     TPM2B_ECC_PARAMETER *dsA,  //   IN: static private TPM key
16     TPM2B_ECC_PARAMETER *deA,  //   IN: ephemeral private TPM key
17     TPMS_ECC_POINT *QsB,       //   IN: static public party B key
18     TPMS_ECC_POINT *QeB        //   IN: ephemeral public party B key
19     );
20 LIB_EXPORT CRYPT_RESULT _cpri__C_2_2_KeyExchange(
21     TPMS_ECC_POINT *outZ1,     //   OUT: a computed point
22     TPMS_ECC_POINT *outZ2,     //   OUT: and optional second point
23     TPM_ECC_CURVE curveId,     //   IN: the curve for the computations
24     TPM_ALG_ID scheme,         //   IN: the key exchange scheme
25     TPM2B_ECC_PARAMETER *dsA,  //   IN: static private TPM key
26     TPM2B_ECC_PARAMETER *deA,  //   IN: ephemeral private TPM key
27     TPMS_ECC_POINT *QsB,       //   IN: static public party B key
28     TPMS_ECC_POINT *QeB        //   IN: ephemeral public party B key
29     );
30 LIB_EXPORT CRYPT_RESULT _cpri__EccCommitCompute(
31     TPMS_ECC_POINT *K,       //   OUT: [d]B or [r]Q
32     TPMS_ECC_POINT *L,       //   OUT: [r]B
33     TPMS_ECC_POINT *E,       //   OUT: [r]M
34     TPM_ECC_CURVE curveId,   //   IN: the curve for the computations
35     TPMS_ECC_POINT *M,       //   IN: M (optional)
36     TPMS_ECC_POINT *B,       //   IN: B (optional)
37     TPM2B_ECC_PARAMETER *d,  //   IN: d (required)
38     TPM2B_ECC_PARAMETER *r   //   IN: the computed r value (required)
39     );
40 LIB_EXPORT UINT32 _cpri__EccGetCurveCount(void);
41 LIB_EXPORT const ECC_CURVE *_cpri__EccGetParametersByCurveId(
42     TPM_ECC_CURVE curveId  // IN: the curveID
43     );
44 LIB_EXPORT CRYPT_RESULT _cpri__EccPointMultiply(
45     TPMS_ECC_POINT *Rout,   //   OUT: the product point R
46     TPM_ECC_CURVE curveId,  //   IN: the curve to use
47     TPM2B_ECC_PARAMETER *
48         dIn,              //   IN: value to multiply against the curve generator
49     TPMS_ECC_POINT *Qin,  //   IN: point Q
50     TPM2B_ECC_PARAMETER *uIn  //   IN: scalar value for the multiplier of Q
51     );
52 LIB_EXPORT BOOL
53 _cpri__EccIsPointOnCurve(TPM_ECC_CURVE curveId,  // IN: the curve selector
54                          TPMS_ECC_POINT *Q       // IN: the point.
55                          );
56 LIB_EXPORT CRYPT_RESULT _cpri__GenerateKeyEcc(
57     TPMS_ECC_POINT *Qout,       //   OUT: the public point
58     TPM2B_ECC_PARAMETER *dOut,  //   OUT: the private scalar
59     TPM_ECC_CURVE curveId,      //   IN: the curve identifier
60     TPM_ALG_ID
61         hashAlg,  //   IN: hash algorithm to use in the key generation process
62     TPM2B *seed,  //   IN: the seed to use
63     const char *label,  //   IN: A label for the generation process.
64     TPM2B *extra,       //   IN: Party 1 data for the KDF
65     UINT32 *counter     //   IN/OUT: Counter value to allow KDF iteration to be
66                         //   propagated across multiple functions
67     );
68 LIB_EXPORT TPM_ECC_CURVE _cpri__GetCurveIdByIndex(UINT16 i);
69 LIB_EXPORT CRYPT_RESULT
70 _cpri__GetEphemeralEcc(TPMS_ECC_POINT *Qout,       // OUT: the public point
71                        TPM2B_ECC_PARAMETER *dOut,  // OUT: the private scalar
72                        TPM_ECC_CURVE curveId       // IN: the curve for the key
73                        );
74 LIB_EXPORT CRYPT_RESULT _cpri__SignEcc(
75     TPM2B_ECC_PARAMETER *rOut,  //   OUT: r component of the signature
76     TPM2B_ECC_PARAMETER *sOut,  //   OUT: s component of the signature
77     TPM_ALG_ID scheme,          //   IN: the scheme selector
78     TPM_ALG_ID hashAlg,         //   IN: the hash algorithm if need
79     TPM_ECC_CURVE curveId,      //   IN: the curve used in the signature process
80     TPM2B_ECC_PARAMETER *dIn,   //   IN: the private key
81     TPM2B *digest,              //   IN: the digest to sign
82     TPM2B_ECC_PARAMETER *kIn    //   IN: k for input
83     );
84 LIB_EXPORT BOOL _cpri__EccStartup(void);
85 LIB_EXPORT CRYPT_RESULT _cpri__ValidateSignatureEcc(
86     TPM2B_ECC_PARAMETER *rIn,  //   IN: r component of the signature
87     TPM2B_ECC_PARAMETER *sIn,  //   IN: s component of the signature
88     TPM_ALG_ID scheme,         //   IN: the scheme selector
89     TPM_ALG_ID
90         hashAlg,  //   IN: the hash algorithm used (not used in all schemes)
91     TPM_ECC_CURVE curveId,  //   IN: the curve used in the signature process
92     TPMS_ECC_POINT *Qin,    //   IN: the public point of the key
93     TPM2B *digest           //   IN: the digest that was signed
94     );
95 
96 #endif  // __TPM2_CPRIECC_FP_H
97