96 lines
4.7 KiB
C
96 lines
4.7 KiB
C
/*
|
|
* 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
|