summaryrefslogtreecommitdiff
path: root/src/fido.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/fido.h')
-rw-r--r--src/fido.h194
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
17typedef void *fido_dev_io_open_t(const char *);
18typedef void fido_dev_io_close_t(void *);
19typedef int fido_dev_io_read_t(void *, unsigned char *, size_t, int);
20typedef int fido_dev_io_write_t(void *, const unsigned char *, size_t);
21
22typedef 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
29typedef 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
50typedef struct fido_assert fido_assert_t;
51typedef struct fido_cbor_info fido_cbor_info_t;
52typedef struct fido_cred fido_cred_t;
53typedef struct fido_dev fido_dev_t;
54typedef struct fido_dev_info fido_dev_info_t;
55typedef struct es256_pk es256_pk_t;
56typedef struct es256_sk es256_sk_t;
57typedef struct rs256_pk rs256_pk_t;
58typedef struct eddsa_pk eddsa_pk_t;
59#endif
60
61fido_assert_t *fido_assert_new(void);
62fido_cred_t *fido_cred_new(void);
63fido_dev_t *fido_dev_new(void);
64fido_dev_info_t *fido_dev_info_new(size_t);
65fido_cbor_info_t *fido_cbor_info_new(void);
66
67void fido_assert_free(fido_assert_t **);
68void fido_cbor_info_free(fido_cbor_info_t **);
69void fido_cred_free(fido_cred_t **);
70void fido_dev_force_fido2(fido_dev_t *);
71void fido_dev_force_u2f(fido_dev_t *);
72void fido_dev_free(fido_dev_t **);
73void fido_dev_info_free(fido_dev_info_t **, size_t);
74
75/* fido_init() flags. */
76#define FIDO_DEBUG 0x01
77
78void fido_init(int);
79
80const unsigned char *fido_assert_authdata_ptr(const fido_assert_t *, size_t);
81const unsigned char *fido_assert_clientdata_hash_ptr(const fido_assert_t *);
82const unsigned char *fido_assert_hmac_secret_ptr(const fido_assert_t *, size_t);
83const unsigned char *fido_assert_id_ptr(const fido_assert_t *, size_t);
84const unsigned char *fido_assert_sig_ptr(const fido_assert_t *, size_t);
85const unsigned char *fido_assert_user_id_ptr(const fido_assert_t *, size_t);
86
87char **fido_cbor_info_extensions_ptr(const fido_cbor_info_t *);
88char **fido_cbor_info_options_name_ptr(const fido_cbor_info_t *);
89char **fido_cbor_info_versions_ptr(const fido_cbor_info_t *);
90const bool *fido_cbor_info_options_value_ptr(const fido_cbor_info_t *);
91const char *fido_assert_rp_id(const fido_assert_t *);
92const char *fido_assert_user_display_name(const fido_assert_t *, size_t);
93const char *fido_assert_user_icon(const fido_assert_t *, size_t);
94const char *fido_assert_user_name(const fido_assert_t *, size_t);
95const char *fido_cred_display_name(const fido_cred_t *);
96const char *fido_cred_fmt(const fido_cred_t *);
97const char *fido_cred_rp_id(const fido_cred_t *);
98const char *fido_cred_rp_name(const fido_cred_t *);
99const char *fido_cred_user_name(const fido_cred_t *);
100const char *fido_dev_info_manufacturer_string(const fido_dev_info_t *);
101const char *fido_dev_info_path(const fido_dev_info_t *);
102const char *fido_dev_info_product_string(const fido_dev_info_t *);
103const fido_dev_info_t *fido_dev_info_ptr(const fido_dev_info_t *, size_t);
104const uint8_t *fido_cbor_info_protocols_ptr(const fido_cbor_info_t *);
105const unsigned char *fido_cbor_info_aaguid_ptr(const fido_cbor_info_t *);
106const unsigned char *fido_cred_authdata_ptr(const fido_cred_t *);
107const unsigned char *fido_cred_clientdata_hash_ptr(const fido_cred_t *);
108const unsigned char *fido_cred_id_ptr(const fido_cred_t *);
109const unsigned char *fido_cred_user_id_ptr(const fido_cred_t *);
110const unsigned char *fido_cred_pubkey_ptr(const fido_cred_t *);
111const unsigned char *fido_cred_sig_ptr(const fido_cred_t *);
112const unsigned char *fido_cred_x5c_ptr(const fido_cred_t *);
113
114int fido_assert_allow_cred(fido_assert_t *, const unsigned char *, size_t);
115int fido_assert_set_authdata(fido_assert_t *, size_t, const unsigned char *,
116 size_t);
117int fido_assert_set_authdata_raw(fido_assert_t *, size_t, const unsigned char *,
118 size_t);
119int fido_assert_set_clientdata_hash(fido_assert_t *, const unsigned char *,
120 size_t);
121int fido_assert_set_count(fido_assert_t *, size_t);
122int fido_assert_set_extensions(fido_assert_t *, int);
123int fido_assert_set_hmac_salt(fido_assert_t *, const unsigned char *, size_t);
124int fido_assert_set_options(fido_assert_t *, bool, bool) __attribute__((__deprecated__));
125int fido_assert_set_rp(fido_assert_t *, const char *);
126int fido_assert_set_up(fido_assert_t *, fido_opt_t);
127int fido_assert_set_uv(fido_assert_t *, fido_opt_t);
128int fido_assert_set_sig(fido_assert_t *, size_t, const unsigned char *, size_t);
129int fido_assert_verify(const fido_assert_t *, size_t, int, const void *);
130int fido_cred_exclude(fido_cred_t *, const unsigned char *, size_t);
131int fido_cred_set_authdata(fido_cred_t *, const unsigned char *, size_t);
132int fido_cred_set_authdata_raw(fido_cred_t *, const unsigned char *, size_t);
133int fido_cred_set_clientdata_hash(fido_cred_t *, const unsigned char *, size_t);
134int fido_cred_set_extensions(fido_cred_t *, int);
135int fido_cred_set_fmt(fido_cred_t *, const char *);
136int fido_cred_set_options(fido_cred_t *, bool, bool) __attribute__((__deprecated__));
137int fido_cred_set_rk(fido_cred_t *, fido_opt_t);
138int fido_cred_set_rp(fido_cred_t *, const char *, const char *);
139int fido_cred_set_sig(fido_cred_t *, const unsigned char *, size_t);
140int fido_cred_set_type(fido_cred_t *, int);
141int fido_cred_set_uv(fido_cred_t *, fido_opt_t);
142int fido_cred_type(const fido_cred_t *);
143int fido_cred_set_user(fido_cred_t *, const unsigned char *, size_t,
144 const char *, const char *, const char *);
145int fido_cred_set_x509(fido_cred_t *, const unsigned char *, size_t);
146int fido_cred_verify(const fido_cred_t *);
147int fido_cred_verify_self(const fido_cred_t *);
148int fido_dev_cancel(fido_dev_t *);
149int fido_dev_close(fido_dev_t *);
150int fido_dev_get_assert(fido_dev_t *, fido_assert_t *, const char *);
151int fido_dev_get_cbor_info(fido_dev_t *, fido_cbor_info_t *);
152int fido_dev_get_retry_count(fido_dev_t *, int *);
153int fido_dev_info_manifest(fido_dev_info_t *, size_t, size_t *);
154int fido_dev_make_cred(fido_dev_t *, fido_cred_t *, const char *);
155int fido_dev_open(fido_dev_t *, const char *);
156int fido_dev_reset(fido_dev_t *);
157int fido_dev_set_io_functions(fido_dev_t *, const fido_dev_io_t *);
158int fido_dev_set_pin(fido_dev_t *, const char *, const char *);
159
160size_t fido_assert_authdata_len(const fido_assert_t *, size_t);
161size_t fido_assert_clientdata_hash_len(const fido_assert_t *);
162size_t fido_assert_count(const fido_assert_t *);
163size_t fido_assert_hmac_secret_len(const fido_assert_t *, size_t);
164size_t fido_assert_id_len(const fido_assert_t *, size_t);
165size_t fido_assert_sig_len(const fido_assert_t *, size_t);
166size_t fido_assert_user_id_len(const fido_assert_t *, size_t);
167size_t fido_cbor_info_aaguid_len(const fido_cbor_info_t *);
168size_t fido_cbor_info_extensions_len(const fido_cbor_info_t *);
169size_t fido_cbor_info_options_len(const fido_cbor_info_t *);
170size_t fido_cbor_info_protocols_len(const fido_cbor_info_t *);
171size_t fido_cbor_info_versions_len(const fido_cbor_info_t *);
172size_t fido_cred_authdata_len(const fido_cred_t *);
173size_t fido_cred_clientdata_hash_len(const fido_cred_t *);
174size_t fido_cred_id_len(const fido_cred_t *);
175size_t fido_cred_user_id_len(const fido_cred_t *);
176size_t fido_cred_pubkey_len(const fido_cred_t *);
177size_t fido_cred_sig_len(const fido_cred_t *);
178size_t fido_cred_x5c_len(const fido_cred_t *);
179
180uint8_t fido_assert_flags(const fido_assert_t *, size_t);
181uint32_t fido_assert_sigcount(const fido_assert_t *, size_t);
182uint8_t fido_cred_flags(const fido_cred_t *);
183uint8_t fido_dev_protocol(const fido_dev_t *);
184uint8_t fido_dev_major(const fido_dev_t *);
185uint8_t fido_dev_minor(const fido_dev_t *);
186uint8_t fido_dev_build(const fido_dev_t *);
187uint8_t fido_dev_flags(const fido_dev_t *);
188int16_t fido_dev_info_vendor(const fido_dev_info_t *);
189int16_t fido_dev_info_product(const fido_dev_info_t *);
190uint64_t fido_cbor_info_maxmsgsiz(const fido_cbor_info_t *);
191
192bool fido_dev_is_fido2(const fido_dev_t *);
193
194#endif /* !_FIDO_H */