xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/fapi_crypto.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ******************************************************************************/
6*758e9fbaSOystein Eftevaag #ifndef FAPI_CRYPTO_H
7*758e9fbaSOystein Eftevaag #define FAPI_CRYPTO_H
8*758e9fbaSOystein Eftevaag 
9*758e9fbaSOystein Eftevaag #include "fapi_int.h"
10*758e9fbaSOystein Eftevaag 
11*758e9fbaSOystein Eftevaag TSS2_RC
12*758e9fbaSOystein Eftevaag ifapi_get_profile_sig_scheme(
13*758e9fbaSOystein Eftevaag     const IFAPI_PROFILE     *profile,
14*758e9fbaSOystein Eftevaag     const TPMT_PUBLIC           *tpmPublic,
15*758e9fbaSOystein Eftevaag     TPMT_SIG_SCHEME             *signatureScheme);
16*758e9fbaSOystein Eftevaag 
17*758e9fbaSOystein Eftevaag TSS2_RC
18*758e9fbaSOystein Eftevaag ifapi_der_sig_to_tpm(
19*758e9fbaSOystein Eftevaag     const TPMT_PUBLIC           *tpmPublic,
20*758e9fbaSOystein Eftevaag     const unsigned char         *signature,
21*758e9fbaSOystein Eftevaag     size_t                      signatureSize,
22*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH               hashAlgorithm,
23*758e9fbaSOystein Eftevaag     TPMT_SIGNATURE              *tpmSignature);
24*758e9fbaSOystein Eftevaag 
25*758e9fbaSOystein Eftevaag TSS2_RC
26*758e9fbaSOystein Eftevaag ifapi_tpm_ecc_sig_to_der(
27*758e9fbaSOystein Eftevaag     const TPMT_SIGNATURE        *tpmSignature,
28*758e9fbaSOystein Eftevaag     uint8_t                     **signature,
29*758e9fbaSOystein Eftevaag     size_t                      *signatureSize);
30*758e9fbaSOystein Eftevaag 
31*758e9fbaSOystein Eftevaag TSS2_RC
32*758e9fbaSOystein Eftevaag ifapi_pub_pem_key_from_tpm(
33*758e9fbaSOystein Eftevaag     const TPM2B_PUBLIC          *tpmPublicKey,
34*758e9fbaSOystein Eftevaag     char                        **pemKey,
35*758e9fbaSOystein Eftevaag     int                         *pemKeySize);
36*758e9fbaSOystein Eftevaag 
37*758e9fbaSOystein Eftevaag TSS2_RC
38*758e9fbaSOystein Eftevaag ifapi_verify_signature(
39*758e9fbaSOystein Eftevaag     const IFAPI_OBJECT          *keyObject,
40*758e9fbaSOystein Eftevaag     const uint8_t               *signature,
41*758e9fbaSOystein Eftevaag     size_t                      signatureSize,
42*758e9fbaSOystein Eftevaag     const uint8_t               *digest,
43*758e9fbaSOystein Eftevaag     size_t                      digestSize);
44*758e9fbaSOystein Eftevaag 
45*758e9fbaSOystein Eftevaag TSS2_RC
46*758e9fbaSOystein Eftevaag ifapi_verify_signature_quote(
47*758e9fbaSOystein Eftevaag     const IFAPI_OBJECT          *keyObject,
48*758e9fbaSOystein Eftevaag     const uint8_t               *signature,
49*758e9fbaSOystein Eftevaag     size_t                      signatureSize,
50*758e9fbaSOystein Eftevaag     const uint8_t               *digest,
51*758e9fbaSOystein Eftevaag     size_t                      digestSize,
52*758e9fbaSOystein Eftevaag     const TPMT_SIG_SCHEME       *signatureScheme);
53*758e9fbaSOystein Eftevaag 
54*758e9fbaSOystein Eftevaag 
55*758e9fbaSOystein Eftevaag typedef struct _IFAPI_CRYPTO_CONTEXT IFAPI_CRYPTO_CONTEXT_BLOB;
56*758e9fbaSOystein Eftevaag 
57*758e9fbaSOystein Eftevaag TSS2_RC
58*758e9fbaSOystein Eftevaag ifapi_crypto_hash_start(
59*758e9fbaSOystein Eftevaag     IFAPI_CRYPTO_CONTEXT_BLOB   **context,
60*758e9fbaSOystein Eftevaag     TPM2_ALG_ID                 hashAlgorithm);
61*758e9fbaSOystein Eftevaag 
62*758e9fbaSOystein Eftevaag TSS2_RC
63*758e9fbaSOystein Eftevaag ifapi_crypto_hash_update(
64*758e9fbaSOystein Eftevaag     IFAPI_CRYPTO_CONTEXT_BLOB   *context,
65*758e9fbaSOystein Eftevaag     const uint8_t               *buffer,
66*758e9fbaSOystein Eftevaag     size_t                      size);
67*758e9fbaSOystein Eftevaag 
68*758e9fbaSOystein Eftevaag TSS2_RC
69*758e9fbaSOystein Eftevaag ifapi_crypto_hash_finish(
70*758e9fbaSOystein Eftevaag     IFAPI_CRYPTO_CONTEXT_BLOB   **context,
71*758e9fbaSOystein Eftevaag     uint8_t                     *digest,
72*758e9fbaSOystein Eftevaag     size_t                      *digestSize);
73*758e9fbaSOystein Eftevaag 
74*758e9fbaSOystein Eftevaag void
75*758e9fbaSOystein Eftevaag ifapi_crypto_hash_abort(
76*758e9fbaSOystein Eftevaag     IFAPI_CRYPTO_CONTEXT_BLOB   **context);
77*758e9fbaSOystein Eftevaag 
78*758e9fbaSOystein Eftevaag TSS2_RC
79*758e9fbaSOystein Eftevaag ifapi_cert_to_pem(
80*758e9fbaSOystein Eftevaag     const uint8_t               *certBuffer,
81*758e9fbaSOystein Eftevaag     size_t                      certBufferSize,
82*758e9fbaSOystein Eftevaag     char                        **pemCert,
83*758e9fbaSOystein Eftevaag     TPM2_ALG_ID                 *certAlgorithmId,
84*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC                *tpmPublic);
85*758e9fbaSOystein Eftevaag 
86*758e9fbaSOystein Eftevaag size_t
87*758e9fbaSOystein Eftevaag ifapi_hash_get_digest_size(
88*758e9fbaSOystein Eftevaag     TPM2_ALG_ID                 hashAlgorithm);
89*758e9fbaSOystein Eftevaag 
90*758e9fbaSOystein Eftevaag TSS2_RC
91*758e9fbaSOystein Eftevaag ifapi_get_tpm2b_public_from_pem(
92*758e9fbaSOystein Eftevaag     const char                  *pemKey,
93*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC                *tpmPublic);
94*758e9fbaSOystein Eftevaag 
95*758e9fbaSOystein Eftevaag TSS2_RC
96*758e9fbaSOystein Eftevaag ifapi_get_hash_alg_for_size(
97*758e9fbaSOystein Eftevaag     uint16_t                    size,
98*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH               *hashAlgorithm);
99*758e9fbaSOystein Eftevaag 
100*758e9fbaSOystein Eftevaag TSS2_RC
101*758e9fbaSOystein Eftevaag ifapi_get_public_from_pem_cert(
102*758e9fbaSOystein Eftevaag     const char*                 pem_cert,
103*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC *tpm_public);
104*758e9fbaSOystein Eftevaag 
105*758e9fbaSOystein Eftevaag TSS2_RC
106*758e9fbaSOystein Eftevaag ifapi_initialize_sign_public(
107*758e9fbaSOystein Eftevaag     TPM2_ALG_ID                 signatureAlgorithm,
108*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC                *template);
109*758e9fbaSOystein Eftevaag 
110*758e9fbaSOystein Eftevaag TPM2_ALG_ID
111*758e9fbaSOystein Eftevaag ifapi_get_signature_algorithm_from_pem(
112*758e9fbaSOystein Eftevaag     const char                  *pemKey);
113*758e9fbaSOystein Eftevaag 
114*758e9fbaSOystein Eftevaag TSS2_RC
115*758e9fbaSOystein Eftevaag ifapi_verify_ek_cert(
116*758e9fbaSOystein Eftevaag     char* root_cert_pem,
117*758e9fbaSOystein Eftevaag     char* intermed_cert_pem,
118*758e9fbaSOystein Eftevaag     char* ek_cert_pem);
119*758e9fbaSOystein Eftevaag 
120*758e9fbaSOystein Eftevaag TSS2_RC
121*758e9fbaSOystein Eftevaag ifapi_get_tpm_key_fingerprint(
122*758e9fbaSOystein Eftevaag     const TPM2B_PUBLIC *tpmPublicKey,
123*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH hashAlg,
124*758e9fbaSOystein Eftevaag     TPM2B_DIGEST *fingerprint);
125*758e9fbaSOystein Eftevaag 
126*758e9fbaSOystein Eftevaag #endif /* FAPI_CRYPTO_H */
127