ctap.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2021 Freie Universität Berlin
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
27 #include <stdint.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
38 #define CTAP_MAX_MSG_SIZE 0x400
39 
46 typedef enum {
47  CTAP2_OK = 0x00,
48  CTAP1_ERR_INVALID_COMMAND = 0x01,
49  CTAP1_ERR_INVALID_PARAMETER = 0x02,
50  CTAP1_ERR_INVALID_LENGTH = 0x03,
51  CTAP1_ERR_INVALID_SEQ = 0x04,
52  CTAP1_ERR_TIMEOUT = 0x05,
53  CTAP1_ERR_CHANNEL_BUSY = 0x06,
54  CTAP1_ERR_LOCK_REQUIRED = 0x0A,
55  CTAP1_ERR_INVALID_CHANNEL = 0x0B,
56  CTAP2_ERR_CBOR_PARSING = 0x10,
57  CTAP2_ERR_CBOR_UNEXPECTED_TYPE = 0x11,
58  CTAP2_ERR_INVALID_CBOR = 0x12,
59  CTAP2_ERR_INVALID_CBOR_TYPE = 0x13,
60  CTAP2_ERR_MISSING_PARAMETER = 0x14,
61  CTAP2_ERR_LIMIT_EXCEEDED = 0x15,
62  CTAP2_ERR_UNSUPPORTED_EXTENSION = 0x16,
63  CTAP2_ERR_TOO_MANY_ELEMENTS = 0x17,
64  CTAP2_ERR_EXTENSION_NOT_SUPPORTED = 0x18,
65  CTAP2_ERR_CREDENTIAL_EXCLUDED = 0x19,
66  CTAP2_ERR_CREDENTIAL_NOT_VALID = 0x20,
67  CTAP2_ERR_PROCESSING = 0x21,
68  CTAP2_ERR_INVALID_CREDENTIAL = 0x22,
69  CTAP2_ERR_USER_ACTION_PENDING = 0x23,
70  CTAP2_ERR_OPERATION_PENDING = 0x24,
71  CTAP2_ERR_NO_OPERATIONS = 0x25,
72  CTAP2_ERR_UNSUPPORTED_ALGORITHM = 0x26,
73  CTAP2_ERR_OPERATION_DENIED = 0x27,
74  CTAP2_ERR_KEY_STORE_FULL = 0x28,
75  CTAP2_ERR_NOT_BUSY = 0x29,
76  CTAP2_ERR_NO_OPERATION_PENDING = 0x2A,
77  CTAP2_ERR_UNSUPPORTED_OPTION = 0x2B,
78  CTAP2_ERR_INVALID_OPTION = 0x2C,
79  CTAP2_ERR_KEEPALIVE_CANCEL = 0x2D,
80  CTAP2_ERR_NO_CREDENTIALS = 0x2E,
81  CTAP2_ERR_USER_ACTION_TIMEOUT = 0x2F,
82  CTAP2_ERR_NOT_ALLOWED = 0x30,
83  CTAP2_ERR_PIN_INVALID = 0x31,
84  CTAP2_ERR_PIN_BLOCKED = 0x32,
85  CTAP2_ERR_PIN_AUTH_INVALID = 0x33,
86  CTAP2_ERR_PIN_AUTH_BLOCKED = 0x34,
87  CTAP2_ERR_PIN_NOT_SET = 0x35,
88  CTAP2_ERR_PIN_REQUIRED = 0x36,
89  CTAP2_ERR_PIN_POLICY_VIOLATION = 0x37,
90  CTAP2_ERR_PIN_TOKEN_EXPIRED = 0x38,
91  CTAP2_ERR_REQUEST_TOO_LARGE = 0x39,
92  CTAP2_ERR_ACTION_TIMEOUT = 0x3A,
93  CTAP2_ERR_UP_REQUIRED = 0x3B,
94  CTAP1_ERR_OTHER = 0x7F,
95  CTAP2_ERR_SPEC_LAST = 0xDF,
96  CTAP2_ERR_EXTENSION_FIRST = 0xE0,
97  CTAP2_ERR_EXTENSION_LAST = 0xEF,
98  CTAP2_ERR_VENDOR_FIRST = 0xF0,
99  CTAP2_ERR_VENDOR_LAST = 0xFF
108 typedef enum {
109  CTAP_MAKE_CREDENTIAL = 0x01,
110  CTAP_GET_ASSERTION = 0x02,
111  CTAP_GET_INFO = 0x04,
112  CTAP_CLIENT_PIN = 0x06,
113  CTAP_RESET = 0x07,
114  CTAP_GET_NEXT_ASSERTION = 0x08
115 } ctap_method_t;
123 typedef struct {
124  uint8_t *buf;
125  size_t len;
126  uint8_t method;
127 } ctap_req_t;
128 
134 typedef struct {
136  uint8_t data[CTAP_MAX_MSG_SIZE];
137  size_t len;
138 } ctap_resp_t;
139 
146 
159 
171 
183 
194 
205 
217 
228 
229 #ifdef __cplusplus
230 }
231 #endif
ctap_status_code_t fido2_ctap_get_next_assertion(ctap_resp_t *resp)
GetNextAssertion method.
ctap_status_code_t fido2_ctap_make_credential(ctap_req_t *req, ctap_resp_t *resp)
MakeCredential method.
#define CTAP_MAX_MSG_SIZE
CTAP max message size.
Definition: ctap.h:38
ctap_method_t
CTAP methods.
Definition: ctap.h:108
ctap_status_code_t fido2_ctap_init(void)
Initialize ctap.
ctap_status_code_t fido2_ctap_get_info(ctap_resp_t *resp)
GetInfo method.
ctap_status_code_t fido2_ctap_handle_request(ctap_req_t *req, ctap_resp_t *resp)
Handle CBOR encoded ctap request.
ctap_status_code_t fido2_ctap_reset(ctap_resp_t *resp)
Reset method.
ctap_status_code_t fido2_ctap_get_assertion(ctap_req_t *req, ctap_resp_t *resp)
GetAssertion method.
ctap_status_code_t
CTAP status codes.
Definition: ctap.h:46
ctap_status_code_t fido2_ctap_client_pin(ctap_req_t *req, ctap_resp_t *resp)
ClientPIN method.
CTAP request struct.
Definition: ctap.h:123
uint8_t * buf
Buffer holding CBOR encoded data.
Definition: ctap.h:124
uint8_t method
CTAP method identitifer.
Definition: ctap.h:126
size_t len
Length of buf.
Definition: ctap.h:125
CTAP response struct.
Definition: ctap.h:134
ctap_status_code_t status
response status
Definition: ctap.h:135
size_t len
length of response data
Definition: ctap.h:137