Utility to Import external RSA pem key into TPM
[aaf/sshsm.git] / TPM2-Plugin / lib / include / tpm2_tool.h
1 /*
2  * Copyright (c) 2016, Intel Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of Intel Corporation nor the names of its contributors
16  * may be used to endorse or promote products derived from this software without
17  * specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29  * THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 #ifndef MAIN_H
32 #define MAIN_H
33
34 #include <tss2/tss2_sys.h>
35 #include <stdbool.h>
36
37 #include "tpm2_options.h"
38
39 extern bool output_enabled;
40
41 /**
42  * An optional interface for tools to specify what options they support.
43  * They are concatenated with main's options and passed to getopt_long.
44  * @param opts
45  *  The callee can choose to set *opts to a tpm_options pointer allocated
46  *  via tpm2_options_new(). Setting *opts to NULL is not an error, and
47  *  Indicates that no options are specified by the tool.
48  *
49  * @return
50  *  True on success, false on error.
51  */
52 bool tpm2_tool_onstart(tpm2_options **opts) __attribute__((weak));
53
54 /**
55  * This is the main interface for tools, after tcti and sapi initialization
56  * are performed.
57  * @param sapi_context
58  *  The system api context.
59  * @param flags
60  *  Flags that tools may wish to respect.
61  * @return
62  *  0 on success.
63  */
64 int tpm2_tool_onrun (TSS2_SYS_CONTEXT *sapi_context, tpm2_option_flags flags) __attribute__((weak));
65
66 /**
67  * Called when the tool is exiting, useful for cleanup.
68  */
69 void tpm2_tool_onexit(void) __attribute__((weak));
70
71 /**
72  * prints output to stdout respecting the quiet option.
73  * Ie when quiet, don't print.
74  * @param fmt
75  *  The format specifier, ala printf.
76  * @param ...
77  *  The varargs, just like printf.
78  */
79 #define tpm2_tool_output(fmt, ...)                   \
80     do {                                        \
81         if (output_enabled) {                   \
82             printf(fmt, ##__VA_ARGS__);         \
83         }                                       \
84     } while (0)
85
86 #endif /* MAIN_H */