tpm2-tss 4.2.0
TPM Software stack 2.0 TCG spec compliant implementation
fapi_crypto.h
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*******************************************************************************
3 * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4 * All rights reserved.
5 ******************************************************************************/
6#ifndef FAPI_CRYPTO_H
7#define FAPI_CRYPTO_H
8
9#include <stddef.h> // for size_t
10#include <stdint.h> // for uint8_t, uint16_t
11
12#include "ifapi_keystore.h" // for IFAPI_OBJECT
13#include "ifapi_profiles.h" // for IFAPI_PROFILE
14#include "tss2_common.h" // for TSS2_RC
15#include "tss2_tpm2_types.h" // for TPM2B_PUBLIC, TPM2_ALG_ID, TPMI_ALG_HASH
16
17TSS2_RC
19 const TPMT_PUBLIC *tpmPublic,
20 TPMT_SIG_SCHEME *signatureScheme);
21
22TSS2_RC
23ifapi_der_sig_to_tpm(const TPMT_PUBLIC *tpmPublic,
24 const unsigned char *signature,
25 size_t signatureSize,
26 TPMI_ALG_HASH hashAlgorithm,
27 TPMT_SIGNATURE *tpmSignature);
28
29TSS2_RC
30ifapi_tpm_ecc_sig_to_der(const TPMT_SIGNATURE *tpmSignature,
31 uint8_t **signature,
32 size_t *signatureSize);
33
34TSS2_RC
35ifapi_pub_pem_key_from_tpm(const TPM2B_PUBLIC *tpmPublicKey, char **pemKey, int *pemKeySize);
36
37TSS2_RC
39 const uint8_t *signature,
40 size_t signatureSize,
41 const uint8_t *digest,
42 size_t digestSize);
43
44TSS2_RC
46 const uint8_t *signature,
47 size_t signatureSize,
48 const uint8_t *digest,
49 size_t digestSize,
50 const TPMT_SIG_SCHEME *signatureScheme);
51
52typedef struct IFAPI_CRYPTO_CONTEXT IFAPI_CRYPTO_CONTEXT_BLOB;
53
54TSS2_RC
55ifapi_crypto_hash_start(IFAPI_CRYPTO_CONTEXT_BLOB **context, TPM2_ALG_ID hashAlgorithm);
56
57TSS2_RC
58ifapi_crypto_hash_update(IFAPI_CRYPTO_CONTEXT_BLOB *context, const uint8_t *buffer, size_t size);
59
60TSS2_RC
61ifapi_crypto_hash_finish(IFAPI_CRYPTO_CONTEXT_BLOB **context, uint8_t *digest, size_t *digestSize);
62
63void ifapi_crypto_hash_abort(IFAPI_CRYPTO_CONTEXT_BLOB **context);
64
65TSS2_RC
66ifapi_cert_to_pem(const uint8_t *certBuffer,
67 size_t certBufferSize,
68 char **pemCert,
69 TPM2_ALG_ID *certAlgorithmId,
70 TPM2B_PUBLIC *tpmPublic);
71
72size_t ifapi_hash_get_digest_size(TPM2_ALG_ID hashAlgorithm);
73
74TSS2_RC
75ifapi_get_tpm2b_public_from_pem(const char *pemKey, TPM2B_PUBLIC *tpmPublic);
76
77TSS2_RC
78ifapi_get_hash_alg_for_size(uint16_t size, TPMI_ALG_HASH *hashAlgorithm);
79
80TSS2_RC
81ifapi_get_public_from_pem_cert(const char *pem_cert, TPM2B_PUBLIC *tpm_public);
82
83TSS2_RC
84ifapi_initialize_sign_public(TPM2_ALG_ID signatureAlgorithm, TPM2B_PUBLIC *template);
85
86TPM2_ALG_ID
88
89TSS2_RC
90ifapi_get_tpm_key_fingerprint(const TPM2B_PUBLIC *tpmPublicKey,
91 TPMI_ALG_HASH hashAlg,
92 TPM2B_DIGEST *fingerprint);
93
94TSS2_RC
95ifapi_base64encode(uint8_t *buffer, size_t buffer_size, char **b64_data);
96
97TSS2_RC
98ifapi_rsa_encrypt(const char *pem_key,
99 const TPMT_RSA_DECRYPT *rsa_decrypt_scheme,
100 const uint8_t *plainText,
101 size_t plainTextSize,
102 uint8_t **cipherText,
103 size_t *cipherTextSize);
104
105TSS2_RC
106ifapi_openssl_load_private(const char *pem_key,
107 const char *passin,
108 const char *object_auth,
109 TPM2B_PUBLIC *template,
110 TPM2B_PUBLIC *pub,
111 TPM2B_SENSITIVE *priv);
112
113#endif /* FAPI_CRYPTO_H */
void ifapi_crypto_hash_abort(IFAPI_CRYPTO_CONTEXT_BLOB **context)
Definition fapi_crypto.c:1660
TSS2_RC ifapi_crypto_hash_start(IFAPI_CRYPTO_CONTEXT_BLOB **context, TPM2_ALG_ID hashAlgorithm)
Definition fapi_crypto.c:1522
TPM2_ALG_ID ifapi_get_signature_algorithm_from_pem(const char *pemKey)
Definition fapi_crypto.c:1206
TSS2_RC ifapi_get_tpm_key_fingerprint(const TPM2B_PUBLIC *tpmPublicKey, TPMI_ALG_HASH hashAlg, TPM2B_DIGEST *fingerprint)
Definition fapi_crypto.c:1880
TSS2_RC ifapi_cert_to_pem(const uint8_t *certBuffer, size_t certBufferSize, char **pemCert, TPM2_ALG_ID *certAlgorithmId, TPM2B_PUBLIC *tpmPublic)
Definition fapi_crypto.c:1688
TSS2_RC ifapi_der_sig_to_tpm(const TPMT_PUBLIC *tpmPublic, const unsigned char *signature, size_t signatureSize, TPMI_ALG_HASH hashAlgorithm, TPMT_SIGNATURE *tpmSignature)
Definition fapi_crypto.c:789
TSS2_RC ifapi_tpm_ecc_sig_to_der(const TPMT_SIGNATURE *tpmSignature, uint8_t **signature, size_t *signatureSize)
Definition fapi_crypto.c:341
TSS2_RC ifapi_pub_pem_key_from_tpm(const TPM2B_PUBLIC *tpmPublicKey, char **pemKey, int *pemKeySize)
Definition fapi_crypto.c:647
size_t ifapi_hash_get_digest_size(TPM2_ALG_ID hashAlgorithm)
Definition fapi_crypto.c:1487
TSS2_RC ifapi_get_profile_sig_scheme(const IFAPI_PROFILE *profile, const TPMT_PUBLIC *tpmPublic, TPMT_SIG_SCHEME *signatureScheme)
Definition fapi_crypto.c:109
TSS2_RC ifapi_get_hash_alg_for_size(uint16_t size, TPMI_ALG_HASH *hashAlgorithm)
Definition fapi_crypto.c:1775
TSS2_RC ifapi_initialize_sign_public(TPM2_ALG_ID signatureAlgorithm, TPM2B_PUBLIC *template)
Definition fapi_crypto.c:201
TSS2_RC ifapi_verify_signature(const IFAPI_OBJECT *keyObject, const uint8_t *signature, size_t signatureSize, const uint8_t *digest, size_t digestSize)
Definition fapi_crypto.c:1422
TSS2_RC ifapi_crypto_hash_finish(IFAPI_CRYPTO_CONTEXT_BLOB **context, uint8_t *digest, size_t *digestSize)
Definition fapi_crypto.c:1616
TSS2_RC ifapi_get_tpm2b_public_from_pem(const char *pemKey, TPM2B_PUBLIC *tpmPublic)
Definition fapi_crypto.c:1251
TSS2_RC ifapi_get_public_from_pem_cert(const char *pem_cert, TPM2B_PUBLIC *tpm_public)
Definition fapi_crypto.c:1835
TSS2_RC ifapi_verify_signature_quote(const IFAPI_OBJECT *keyObject, const uint8_t *signature, size_t signatureSize, const uint8_t *digest, size_t digestSize, const TPMT_SIG_SCHEME *signatureScheme)
Definition fapi_crypto.c:1298
TSS2_RC ifapi_crypto_hash_update(IFAPI_CRYPTO_CONTEXT_BLOB *context, const uint8_t *buffer, size_t size)
Definition fapi_crypto.c:1586
Definition fapi_crypto.c:60
Definition ifapi_keystore.h:153
Definition ifapi_profiles.h:19