123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- /* SPDX-License-Identifier: BSD-3-Clause */
- #ifndef FILES_H
- #define FILES_H
- #include <stdbool.h>
- #include <stdio.h>
- #include <tss2/tss2_esys.h>
- #include "tool_rc.h"
- /**
- * Reads a series of bytes from a file as a byte array. This is similar to files_read_bytes(),
- * but opens and closes the FILE for the caller. Size is both an input and output value where
- * the size value is the max buffer size on call and the returned size is how much was read.
- *
- * This interface could be cleaned up in a later revision.
- * @param path
- * The path to the file to open.
- * @param buf
- * The buffer to read the data into
- * @param size
- * The max size of the buffer on call, and the size of the data read on return.
- * @return
- * True on success, false otherwise.
- */
- bool files_load_bytes_from_path(const char *path, UINT8 *buf, UINT16 *size);
- /**
- * Like files_load_bytes_from_path() but uses a FILE pointer.
- * @param f
- * The FILE pointer to read from.
- * @param buf
- * The buffer to store the data.
- * @param size
- * On input the max size of the buffer, on success the actual count of bytes read.
- * @param path
- * A possible path for error reporting, can be NULL to silence error reporting.
- * @return
- * True on success, false otherwise.
- */
- bool file_read_bytes_from_file(FILE *f, UINT8 *buf, UINT16 *size,
- const char *path);
- /**
- * Loads data from an input buffer or file path or stdin enforcing an upper bound on size.
- * @param input_buffer
- * The buffer to read the input data from, NULL means either specified by path or stdin
- * @param path
- * The path to load data from, NULL means stdin.
- * @param size
- * The maximum size.
- * @param buf
- * The buffer to write the data into.
- * @return
- * True on success or false otherwise.
- */
- bool files_load_bytes_from_buffer_or_file_or_stdin(const char *input_buffer,
- const char *path, UINT16 *size, BYTE *buf);
- /**
- * Similar to files_write_bytes(), in that it writes an array of bytes to disk,
- * but this routine opens and closes the file on the callers behalf. If the path
- * is NULL and silent output has not been enabled, then stdout is used.
- * @param path
- * The path to the file to write the data to.
- * @param buf
- * The buffer of data to write
- * @param size
- * The size of the data to write in bytes.
- * @return
- * True on success, false otherwise.
- */
- bool files_save_bytes_to_file(const char *path, UINT8 *buf, UINT16 size);
- /**
- * Saves the TPM ESAPI context for an object handle to disk by calling
- * ContextSave() and serializing the resulting TPMS_CONTEXT structure
- * to disk.
- * @param context
- * The Enhances System API (ESAPI) context
- * @param handle
- * The object handle for the object to save.
- * @param path
- * The output path of the file.
- *
- * @return
- * tool_rc indicating status.
- */
- tool_rc files_save_tpm_context_to_path(ESYS_CONTEXT *context, ESYS_TR handle,
- const char *path);
- /**
- * Like files_save_tpm_context_to_path() but saves a tpm session to a FILE stream.
- * @param context
- * The Enhances System API (ESAPI) context
- * @param handle
- * The object handle for the object to save.
- * @param stream
- * The FILE stream to save too.
- * @return
- * tool_rc indicating status.
- */
- tool_rc files_save_tpm_context_to_file(ESYS_CONTEXT *context, ESYS_TR handle,
- FILE *stream);
- /**
- * Loads a ESAPI TPM object context from disk or an ESAPI serialized ESYS_TR object.
- * @param context
- * The Enhanced System API (ESAPI) context
- * @param tr_handle
- * Optional. The Esys handle for the TPM2 object.
- * @param path
- * The path to the input file.
- * @return
- * tool_rc status indicating success.
- */
- tool_rc files_load_tpm_context_from_path(ESYS_CONTEXT *context,
- ESYS_TR *tr_handle, const char *path);
- /**
- * Like files_load_tpm_context_from_path() but loads the context from a FILE stream.
- * @param context
- * The Enhanced System API (ESAPI) context
- * @param tr_handle
- * Optional. The Esys handle for the TPM2 object
- * @param stream
- * The FILE stream to read from.
- * @return
- * tool_rc status indicating success.
- */
- tool_rc files_load_tpm_context_from_file(ESYS_CONTEXT *context,
- ESYS_TR *tr_handle, FILE *stream);
- /**
- * Save an ESYS_TR to disk.
- * @param ectx
- * The ESAPI context
- * @param handle
- * The handle to serialize.
- * @param path
- * The path to save to.
- * @return
- * A tool_rc indicating status.
- */
- tool_rc files_save_ESYS_TR(ESYS_CONTEXT *ectx, ESYS_TR handle, const char *path);
- /**
- * Serializes a TPM2B_PUBLIC to the file path provided.
- * @param public
- * The TPM2B_PUBLIC to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_public(TPM2B_PUBLIC *public, const char *path);
- /**
- * Serializes a TPMT_PUBLIC to the file path provided.
- * @param template
- * The TPMT_PUBLIC to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_template(TPMT_PUBLIC *template, const char *path);
- /**
- * Like files_load_template(), but doesn't report errors.
- * @param path
- * The path containing the TPMT_PUBLIC to load from.
- * @param public
- * The destination for the TPMT_PUBLIC.
- * @return
- * true on success, false otherwise.
- */
- bool files_load_template_silent(const char *path, TPMT_PUBLIC *public);
- /**
- * Loads a TPM2B_PUBLIC from disk that was saved with files_save_pubkey()
- * @param path
- * The path to load from.
- * @param public
- * The TPM2B_PUBLIC to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_public(const char *path, TPM2B_PUBLIC *public);
- /**
- * Like files_load_public(), but doesn't report errors.
- * @param path
- * The path containing the TP2B_PUBLIC to load from.
- * @param public
- * The destination for the TP2B_PUBLIC.
- * @return
- * true on success, false otherwise.
- */
- bool files_load_public_file(FILE *f, const char *path, TPM2B_PUBLIC *public);
- bool files_load_template(const char *path, TPMT_PUBLIC *public);
- bool files_load_template_file(FILE *f, const char *path, TPMT_PUBLIC *public);
- /**
- * Like files_load_public(), but doesn't report errors.
- * @param path
- * The path containing the TP2B_PUBLIC to load from.
- * @param public
- * The destination for the TP2B_PUBLIC.
- * @return
- * true on success, false otherwise.
- */
- bool files_load_public_silent(const char *path, TPM2B_PUBLIC *public);
- /**
- * Serializes a TPMT_SIGNATURE to the file path provided.
- * @param signature
- * The TPMT_SIGNATURE to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_signature(TPMT_SIGNATURE *signature, const char *path);
- /**
- * Loads a TPMT_SIGNATURE from disk that was saved with files_save_signature()
- * @param path
- * The path to load from.
- * @param signature
- * The TPMT_SIGNATURE to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_signature(const char *path, TPMT_SIGNATURE *signature);
- /**
- * Like files_save)signature() but doesn't complain about libmu failures.
- * Useful if you're trying to probe if its a plain or tss format signature.
- * @param path
- * The path to load from.
- * @param signature
- * The TPMT_SIGNATURE to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_signature_silent(const char *path, TPMT_SIGNATURE *signature);
- /**
- * Serializes a TPMT_TK_VERIFIED to the file path provided.
- * @param signature
- * The TPMT_SIGNATURE to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_ticket(TPMT_TK_VERIFIED *ticket, const char *path);
- /**
- * Loads a TPMT_TK_VERIFIED from disk that was saved with files_save_ticket()
- * @param path
- * The path to load from.
- * @param signature
- * The TPMT_TK_VERIFIED to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_ticket(const char *path, TPMT_TK_VERIFIED *ticket);
- /**
- * Serializes a TPMT_TK_AUTH to the file path provided.
- * @param signature
- * The TPMT_SIGNATURE to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_authorization_ticket(TPMT_TK_AUTH *authorization_ticket,
- const char *path);
- /**
- * Loads a TPMT_TK_AUTH from disk that was saved with
- * files_save_authorization_ticket()
- * @param path
- * The path to load from.
- * @param signature
- * The TPMT_TK_AUTH to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_authorization_ticket(const char *path,
- TPMT_TK_AUTH *authorization_ticket);
- bool files_load_creation_data(const char *path,
- TPM2B_CREATION_DATA *creation_data);
- bool files_save_creation_data(TPM2B_CREATION_DATA *creation_data,
- const char *path);
- bool files_load_creation_ticket(const char *path,
- TPMT_TK_CREATION *creation_ticket);
- bool files_save_creation_ticket(TPMT_TK_CREATION *creation_ticket,
- const char *path);
- bool files_load_digest(const char *path, TPM2B_DIGEST *digest);
- bool files_save_digest(TPM2B_DIGEST *digest, const char *path);
- /**
- * Loads a TPM2B_SENSITIVE from disk.
- * @param path
- * The path to load from.
- * @param signature
- * The TPM2B_SENSITIVE to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_sensitive(const char *path, TPM2B_SENSITIVE *sensitive);
- /**
- * Serializes a TPM2B_SENSITIVE to the file path provided.
- * @param sensitive
- * The TPM2B_SENSITIVE to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_sensitive(TPM2B_SENSITIVE *sensitive, const char *path);
- /**
- * Serializes a TPMT_TK_HASHCHECK to the file path provided.
- * @param validation
- * The TPMT_TK_HASHCHECK to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_validation(TPMT_TK_HASHCHECK *validation, const char *path);
- /**
- * Loads a TPMT_TK_HASHCHECK from disk.
- * @param path
- * The path to load from.
- * @param validation
- * The TPMT_TK_HASHCHECK to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_validation(const char *path, TPMT_TK_HASHCHECK *validation);
- /**
- * Serializes a TPM2B_PRIVATE to the file path provided.
- * @param private
- * The TPM2B_PRIVATE to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_private(TPM2B_PRIVATE *private, const char *path);
- /**
- * Loads a TPM2B_PRIVATE from disk.
- * @param private
- * The path to load from.
- * @param validation
- * The TPM2B_PRIVATE to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_private(const char *path, TPM2B_PRIVATE *private);
- /**
- * Serializes a TPM2B_ENCRYPTED_SECRET to the file path provided.
- * @param encrypted_seed
- * The TPM2B_ENCRYPTED_SECRET to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_encrypted_seed(TPM2B_ENCRYPTED_SECRET *encrypted_seed,
- const char *path);
- /**
- * Serializes a TPM2B_ECC_POINT to the file path provided.
- * @param Q
- * The TPM2B_ECC_POINT to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_ecc_point(TPM2B_ECC_POINT *Q, const char *path);
- /**
- * Loads a TPM2B_ECC_POINT from disk.
- * @param path
- * The path to load from.
- * @param Q
- * The TPM2B_ECC_POINT data to load.
- */
- bool files_load_ecc_point(const char *path, TPM2B_ECC_POINT *Q);
- /**
- * Loads a TPM2B_ECC_PARAMETER from disk
- * @param path
- * The path to load from.
- * @param parameter
- * The TPM2B_ECC_PARAMETER data to load.
- */
- bool files_load_ecc_parameter(const char *path, TPM2B_ECC_PARAMETER *parameter);
- /**
- * Loads a TPM2B_ENCRYPTED_SECRET from disk.
- * @param encrypted_seed
- * The path to load from.
- * @param validation
- * The TPM2B_ENCRYPTED_SECRET to load.
- * @return
- * true on success, false on error.
- */
- bool files_load_encrypted_seed(const char *path,
- TPM2B_ENCRYPTED_SECRET *encrypted_seed);
- /**
- * Serializes a TPMS_ALGORITHM_DETAIL_ECC to the file path provided.
- * @param parameters
- * The TPMS_ALGORITHM_DETAIL_ECC to save to disk.
- * @param path
- * The path to save to.
- * @return
- * true on success, false on error.
- */
- bool files_save_ecc_details(TPMS_ALGORITHM_DETAIL_ECC *parameters,
- const char *path);
- /**
- * Checks a file for existence.
- * @param path
- * The file to check for existence.
- * @return
- * true if a file exists with read permissions, false if it doesn't exist or an error occurs.
- *
- */
- bool files_does_file_exist(const char *path);
- /**
- * Retrieves a files size given a file path.
- * @param path
- * The path of the file to retrieve the size of.
- * @param file_size
- * A pointer to an unsigned long to return the file size. The
- * pointed to value is valid only on a true return.
- *
- * @return
- * True for success or False for error.
- */
- bool files_get_file_size_path(const char *path, unsigned long *file_size);
- /**
- * Similar to files_get_file_size_path(), but uses an already opened FILE object.
- * @param fp
- * The file pointer to query the size of.
- * @param file_size
- * Output of the file size.
- * @param path
- * An optional path used for error reporting, a NULL path disables error logging.
- * @return
- * True on success, False otherwise.
- */
- bool files_get_file_size(FILE *fp, unsigned long *file_size, const char *path);
- /**
- * Writes a TPM2.0 header to a file.
- * @param f
- * The file to write to.
- * @param version
- * The version number of the format of the file.
- * @return
- * True on success, false on error.
- */
- bool files_write_header(FILE *f, UINT32 version);
- /**
- * Reads a TPM2.0 header from a file.
- * @param f
- * The file to read.
- * @param version
- * The version that was found.
- * @return
- * True on Success, False on error.
- */
- bool files_read_header(FILE *f, UINT32 *version);
- /**
- * Writes a 16 bit value to the file in big endian, converting
- * if needed.
- * @param out
- * The file to write.
- * @param data
- * The 16 bit value to write.
- * @return
- * True on success, False on error.
- */
- bool files_write_16(FILE *out, UINT16 data);
- /**
- * Same as files_write_16 but for 32 bit values.
- */
- bool files_write_32(FILE *out, UINT32 data);
- /**
- * Same as files_write_16 but for 64 bit values.
- */
- bool files_write_64(FILE *out, UINT64 data);
- /**
- * Writes a byte array out to a file.
- * @param out
- * The file to write to.
- * @param data
- * The data to write.
- * @param size
- * The size of the data to write in bytes.
- * @return
- * True on success, False otherwise.
- */
- bool files_write_bytes(FILE *out, UINT8 data[], size_t size);
- /**
- * Reads a 16 bit value from a file converting from big endian to host
- * endianess.
- * @param out
- * The file to read from.
- * @param data
- * The data that is read, valid on a true return.
- * @return
- * True on success, False on error.
- */
- bool files_read_16(FILE *out, UINT16 *data);
- /**
- * Same as files_read_16 but for 32 bit values.
- */
- bool files_read_32(FILE *out, UINT32 *data);
- /**
- * Same as files_read_16 but for 64 bit values.
- */
- bool files_read_64(FILE *out, UINT64 *data);
- /**
- * Reads len bytes from a file.
- * @param out
- * The file to read from.
- * @param data
- * The buffer to read into, only valid on a True return.
- * @param size
- * The number of bytes to read.
- * @return
- * True on success, False otherwise.
- */
- bool files_read_bytes(FILE *out, UINT8 data[], size_t size);
- /**
- * Converts a TPM2B_ATTEST to a TPMS_ATTEST using libmu.
- * @param quoted
- * The attestation quote structure.
- * @param attest
- * The TPMS_ATTEST to populate.
- * @return
- * tool_rc_success on success, false otherwise.
- */
- tool_rc files_tpm2b_attest_to_tpms_attest(TPM2B_ATTEST *quoted, TPMS_ATTEST *attest);
- /**
- * Loads a TPMS_ATTEST from disk.
- * @param f
- * The file to load.
- * @param path
- * The path to load from.
- * @param attest
- * The attest structure to fill up.
- * @return
- * True on success, false otherwise.
- */
- bool files_load_attest_file(FILE *f, const char *path, TPMS_ATTEST *attest);
- /**
- * @brief
- * Parse the key type and load the unique data in the object's
- * TPM2B_PUBLIC area.
- *
- * @param file_path
- * The file to read the unique data from. This can be NULL to indicate stdin
- * @param public_data
- * The TPM2B public structure to parse the object type and also to update the
- * unique data as read from the file or stdin.
- *
- * @return
- * tool_rc type signaling the status at the end of read attempt.
- *
- */
- tool_rc files_load_unique_data(const char *file_path,
- TPM2B_PUBLIC *public_data);
- #endif /* FILES_H */
|