diff options
Diffstat (limited to 'src/fido.h')
-rw-r--r-- | src/fido.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/src/fido.h b/src/fido.h new file mode 100644 index 0000000..f85a41a --- /dev/null +++ b/src/fido.h | |||
@@ -0,0 +1,194 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2018 Yubico AB. All rights reserved. | ||
3 | * Use of this source code is governed by a BSD-style | ||
4 | * license that can be found in the LICENSE file. | ||
5 | */ | ||
6 | |||
7 | #ifndef _FIDO_H | ||
8 | #define _FIDO_H | ||
9 | |||
10 | #include <openssl/ec.h> | ||
11 | #include <openssl/evp.h> | ||
12 | |||
13 | #include <stdbool.h> | ||
14 | #include <stdint.h> | ||
15 | #include <stdlib.h> | ||
16 | |||
17 | typedef void *fido_dev_io_open_t(const char *); | ||
18 | typedef void fido_dev_io_close_t(void *); | ||
19 | typedef int fido_dev_io_read_t(void *, unsigned char *, size_t, int); | ||
20 | typedef int fido_dev_io_write_t(void *, const unsigned char *, size_t); | ||
21 | |||
22 | typedef struct fido_dev_io { | ||
23 | fido_dev_io_open_t *open; | ||
24 | fido_dev_io_close_t *close; | ||
25 | fido_dev_io_read_t *read; | ||
26 | fido_dev_io_write_t *write; | ||
27 | } fido_dev_io_t; | ||
28 | |||
29 | typedef enum { | ||
30 | FIDO_OPT_OMIT = 0, /* use authenticator's default */ | ||
31 | FIDO_OPT_FALSE, /* explicitly set option to false */ | ||
32 | FIDO_OPT_TRUE, /* explicitly set option to true */ | ||
33 | } fido_opt_t; | ||
34 | |||
35 | #ifdef _FIDO_INTERNAL | ||
36 | #include <cbor.h> | ||
37 | #include <limits.h> | ||
38 | |||
39 | #include "blob.h" | ||
40 | #include "../openbsd-compat/openbsd-compat.h" | ||
41 | #include "iso7816.h" | ||
42 | #include "types.h" | ||
43 | #include "extern.h" | ||
44 | #endif | ||
45 | |||
46 | #include "fido/err.h" | ||
47 | #include "fido/param.h" | ||
48 | |||
49 | #ifndef _FIDO_INTERNAL | ||
50 | typedef struct fido_assert fido_assert_t; | ||
51 | typedef struct fido_cbor_info fido_cbor_info_t; | ||
52 | typedef struct fido_cred fido_cred_t; | ||
53 | typedef struct fido_dev fido_dev_t; | ||
54 | typedef struct fido_dev_info fido_dev_info_t; | ||
55 | typedef struct es256_pk es256_pk_t; | ||
56 | typedef struct es256_sk es256_sk_t; | ||
57 | typedef struct rs256_pk rs256_pk_t; | ||
58 | typedef struct eddsa_pk eddsa_pk_t; | ||
59 | #endif | ||
60 | |||
61 | fido_assert_t *fido_assert_new(void); | ||
62 | fido_cred_t *fido_cred_new(void); | ||
63 | fido_dev_t *fido_dev_new(void); | ||
64 | fido_dev_info_t *fido_dev_info_new(size_t); | ||
65 | fido_cbor_info_t *fido_cbor_info_new(void); | ||
66 | |||
67 | void fido_assert_free(fido_assert_t **); | ||
68 | void fido_cbor_info_free(fido_cbor_info_t **); | ||
69 | void fido_cred_free(fido_cred_t **); | ||
70 | void fido_dev_force_fido2(fido_dev_t *); | ||
71 | void fido_dev_force_u2f(fido_dev_t *); | ||
72 | void fido_dev_free(fido_dev_t **); | ||
73 | void fido_dev_info_free(fido_dev_info_t **, size_t); | ||
74 | |||
75 | /* fido_init() flags. */ | ||
76 | #define FIDO_DEBUG 0x01 | ||
77 | |||
78 | void fido_init(int); | ||
79 | |||
80 | const unsigned char *fido_assert_authdata_ptr(const fido_assert_t *, size_t); | ||
81 | const unsigned char *fido_assert_clientdata_hash_ptr(const fido_assert_t *); | ||
82 | const unsigned char *fido_assert_hmac_secret_ptr(const fido_assert_t *, size_t); | ||
83 | const unsigned char *fido_assert_id_ptr(const fido_assert_t *, size_t); | ||
84 | const unsigned char *fido_assert_sig_ptr(const fido_assert_t *, size_t); | ||
85 | const unsigned char *fido_assert_user_id_ptr(const fido_assert_t *, size_t); | ||
86 | |||
87 | char **fido_cbor_info_extensions_ptr(const fido_cbor_info_t *); | ||
88 | char **fido_cbor_info_options_name_ptr(const fido_cbor_info_t *); | ||
89 | char **fido_cbor_info_versions_ptr(const fido_cbor_info_t *); | ||
90 | const bool *fido_cbor_info_options_value_ptr(const fido_cbor_info_t *); | ||
91 | const char *fido_assert_rp_id(const fido_assert_t *); | ||
92 | const char *fido_assert_user_display_name(const fido_assert_t *, size_t); | ||
93 | const char *fido_assert_user_icon(const fido_assert_t *, size_t); | ||
94 | const char *fido_assert_user_name(const fido_assert_t *, size_t); | ||
95 | const char *fido_cred_display_name(const fido_cred_t *); | ||
96 | const char *fido_cred_fmt(const fido_cred_t *); | ||
97 | const char *fido_cred_rp_id(const fido_cred_t *); | ||
98 | const char *fido_cred_rp_name(const fido_cred_t *); | ||
99 | const char *fido_cred_user_name(const fido_cred_t *); | ||
100 | const char *fido_dev_info_manufacturer_string(const fido_dev_info_t *); | ||
101 | const char *fido_dev_info_path(const fido_dev_info_t *); | ||
102 | const char *fido_dev_info_product_string(const fido_dev_info_t *); | ||
103 | const fido_dev_info_t *fido_dev_info_ptr(const fido_dev_info_t *, size_t); | ||
104 | const uint8_t *fido_cbor_info_protocols_ptr(const fido_cbor_info_t *); | ||
105 | const unsigned char *fido_cbor_info_aaguid_ptr(const fido_cbor_info_t *); | ||
106 | const unsigned char *fido_cred_authdata_ptr(const fido_cred_t *); | ||
107 | const unsigned char *fido_cred_clientdata_hash_ptr(const fido_cred_t *); | ||
108 | const unsigned char *fido_cred_id_ptr(const fido_cred_t *); | ||
109 | const unsigned char *fido_cred_user_id_ptr(const fido_cred_t *); | ||
110 | const unsigned char *fido_cred_pubkey_ptr(const fido_cred_t *); | ||
111 | const unsigned char *fido_cred_sig_ptr(const fido_cred_t *); | ||
112 | const unsigned char *fido_cred_x5c_ptr(const fido_cred_t *); | ||
113 | |||
114 | int fido_assert_allow_cred(fido_assert_t *, const unsigned char *, size_t); | ||
115 | int fido_assert_set_authdata(fido_assert_t *, size_t, const unsigned char *, | ||
116 | size_t); | ||
117 | int fido_assert_set_authdata_raw(fido_assert_t *, size_t, const unsigned char *, | ||
118 | size_t); | ||
119 | int fido_assert_set_clientdata_hash(fido_assert_t *, const unsigned char *, | ||
120 | size_t); | ||
121 | int fido_assert_set_count(fido_assert_t *, size_t); | ||
122 | int fido_assert_set_extensions(fido_assert_t *, int); | ||
123 | int fido_assert_set_hmac_salt(fido_assert_t *, const unsigned char *, size_t); | ||
124 | int fido_assert_set_options(fido_assert_t *, bool, bool) __attribute__((__deprecated__)); | ||
125 | int fido_assert_set_rp(fido_assert_t *, const char *); | ||
126 | int fido_assert_set_up(fido_assert_t *, fido_opt_t); | ||
127 | int fido_assert_set_uv(fido_assert_t *, fido_opt_t); | ||
128 | int fido_assert_set_sig(fido_assert_t *, size_t, const unsigned char *, size_t); | ||
129 | int fido_assert_verify(const fido_assert_t *, size_t, int, const void *); | ||
130 | int fido_cred_exclude(fido_cred_t *, const unsigned char *, size_t); | ||
131 | int fido_cred_set_authdata(fido_cred_t *, const unsigned char *, size_t); | ||
132 | int fido_cred_set_authdata_raw(fido_cred_t *, const unsigned char *, size_t); | ||
133 | int fido_cred_set_clientdata_hash(fido_cred_t *, const unsigned char *, size_t); | ||
134 | int fido_cred_set_extensions(fido_cred_t *, int); | ||
135 | int fido_cred_set_fmt(fido_cred_t *, const char *); | ||
136 | int fido_cred_set_options(fido_cred_t *, bool, bool) __attribute__((__deprecated__)); | ||
137 | int fido_cred_set_rk(fido_cred_t *, fido_opt_t); | ||
138 | int fido_cred_set_rp(fido_cred_t *, const char *, const char *); | ||
139 | int fido_cred_set_sig(fido_cred_t *, const unsigned char *, size_t); | ||
140 | int fido_cred_set_type(fido_cred_t *, int); | ||
141 | int fido_cred_set_uv(fido_cred_t *, fido_opt_t); | ||
142 | int fido_cred_type(const fido_cred_t *); | ||
143 | int fido_cred_set_user(fido_cred_t *, const unsigned char *, size_t, | ||
144 | const char *, const char *, const char *); | ||
145 | int fido_cred_set_x509(fido_cred_t *, const unsigned char *, size_t); | ||
146 | int fido_cred_verify(const fido_cred_t *); | ||
147 | int fido_cred_verify_self(const fido_cred_t *); | ||
148 | int fido_dev_cancel(fido_dev_t *); | ||
149 | int fido_dev_close(fido_dev_t *); | ||
150 | int fido_dev_get_assert(fido_dev_t *, fido_assert_t *, const char *); | ||
151 | int fido_dev_get_cbor_info(fido_dev_t *, fido_cbor_info_t *); | ||
152 | int fido_dev_get_retry_count(fido_dev_t *, int *); | ||
153 | int fido_dev_info_manifest(fido_dev_info_t *, size_t, size_t *); | ||
154 | int fido_dev_make_cred(fido_dev_t *, fido_cred_t *, const char *); | ||
155 | int fido_dev_open(fido_dev_t *, const char *); | ||
156 | int fido_dev_reset(fido_dev_t *); | ||
157 | int fido_dev_set_io_functions(fido_dev_t *, const fido_dev_io_t *); | ||
158 | int fido_dev_set_pin(fido_dev_t *, const char *, const char *); | ||
159 | |||
160 | size_t fido_assert_authdata_len(const fido_assert_t *, size_t); | ||
161 | size_t fido_assert_clientdata_hash_len(const fido_assert_t *); | ||
162 | size_t fido_assert_count(const fido_assert_t *); | ||
163 | size_t fido_assert_hmac_secret_len(const fido_assert_t *, size_t); | ||
164 | size_t fido_assert_id_len(const fido_assert_t *, size_t); | ||
165 | size_t fido_assert_sig_len(const fido_assert_t *, size_t); | ||
166 | size_t fido_assert_user_id_len(const fido_assert_t *, size_t); | ||
167 | size_t fido_cbor_info_aaguid_len(const fido_cbor_info_t *); | ||
168 | size_t fido_cbor_info_extensions_len(const fido_cbor_info_t *); | ||
169 | size_t fido_cbor_info_options_len(const fido_cbor_info_t *); | ||
170 | size_t fido_cbor_info_protocols_len(const fido_cbor_info_t *); | ||
171 | size_t fido_cbor_info_versions_len(const fido_cbor_info_t *); | ||
172 | size_t fido_cred_authdata_len(const fido_cred_t *); | ||
173 | size_t fido_cred_clientdata_hash_len(const fido_cred_t *); | ||
174 | size_t fido_cred_id_len(const fido_cred_t *); | ||
175 | size_t fido_cred_user_id_len(const fido_cred_t *); | ||
176 | size_t fido_cred_pubkey_len(const fido_cred_t *); | ||
177 | size_t fido_cred_sig_len(const fido_cred_t *); | ||
178 | size_t fido_cred_x5c_len(const fido_cred_t *); | ||
179 | |||
180 | uint8_t fido_assert_flags(const fido_assert_t *, size_t); | ||
181 | uint32_t fido_assert_sigcount(const fido_assert_t *, size_t); | ||
182 | uint8_t fido_cred_flags(const fido_cred_t *); | ||
183 | uint8_t fido_dev_protocol(const fido_dev_t *); | ||
184 | uint8_t fido_dev_major(const fido_dev_t *); | ||
185 | uint8_t fido_dev_minor(const fido_dev_t *); | ||
186 | uint8_t fido_dev_build(const fido_dev_t *); | ||
187 | uint8_t fido_dev_flags(const fido_dev_t *); | ||
188 | int16_t fido_dev_info_vendor(const fido_dev_info_t *); | ||
189 | int16_t fido_dev_info_product(const fido_dev_info_t *); | ||
190 | uint64_t fido_cbor_info_maxmsgsiz(const fido_cbor_info_t *); | ||
191 | |||
192 | bool fido_dev_is_fido2(const fido_dev_t *); | ||
193 | |||
194 | #endif /* !_FIDO_H */ | ||