2082c3d4f03ad9cd3f7480115d857563e630bcb0
[gnuk/gnuk.git] / src / gnuk.h
1 /*
2  * Application layer <-> CCID layer data structure
3  */
4 struct apdu {
5   uint8_t seq;
6
7   /* command APDU */
8   uint8_t *cmd_apdu_head;       /* CLS INS P1 P2 [ internal Lc ] */
9   uint8_t *cmd_apdu_data;
10   uint16_t cmd_apdu_data_len;   /* Nc, calculated by Lc field */
11   uint16_t expected_res_size;   /* Ne, calculated by Le field */
12
13   /* response APDU */
14   uint16_t sw;
15   uint16_t res_apdu_data_len;
16   uint8_t *res_apdu_data;
17 };
18
19 extern struct apdu apdu;
20
21 #define CARD_CHANGE_INSERT 0
22 #define CARD_CHANGE_REMOVE 1
23 #define CARD_CHANGE_TOGGLE 2
24 void ccid_card_change_signal (int how);
25
26 /* CCID thread */
27 #define EV_RX_DATA_READY      1 /* USB Rx data available  */
28 #define EV_EXEC_FINISHED      2 /* OpenPGPcard Execution finished */
29 #define EV_EXEC_ACK_REQUIRED  4 /* OpenPGPcard Execution ACK required */
30 #define EV_TX_FINISHED        8 /* CCID Tx finished  */
31 #define EV_CARD_CHANGE       16
32
33 /* OpenPGPcard thread */
34 #define EV_PINPAD_INPUT_DONE      1
35 #define EV_EXIT                   2
36 #define EV_CMD_AVAILABLE          4
37 #define EV_VERIFY_CMD_AVAILABLE   8
38 #define EV_MODIFY_CMD_AVAILABLE  16
39
40 /* Maximum cmd apdu data is key import 24+4+256+256 (proc_key_import) */
41 #define MAX_CMD_APDU_DATA_SIZE (24+4+256+256) /* without header */
42 /* Maximum res apdu data is public key 5+9+512 (gpg_do_public_key) */
43 #define MAX_RES_APDU_DATA_SIZE (5+9+512) /* without trailer */
44
45 #define CCID_MSG_HEADER_SIZE    10
46
47 #define res_APDU apdu.res_apdu_data
48 #define res_APDU_size apdu.res_apdu_data_len
49
50 /* USB buffer size of LL (Low-level): size of single Bulk transaction */
51 #define USB_LL_BUF_SIZE 64
52
53 enum ccid_state {
54   CCID_STATE_NOCARD,            /* No card available */
55   CCID_STATE_START,             /* Initial */
56   CCID_STATE_WAIT,              /* Waiting APDU */
57
58   CCID_STATE_EXECUTE,           /* Executing command */
59   CCID_STATE_ACK_REQUIRED_0,    /* Ack required (executing)*/
60   CCID_STATE_ACK_REQUIRED_1,    /* Waiting user's ACK (execution finished) */
61
62   CCID_STATE_EXITED,            /* CCID Thread Terminated */
63   CCID_STATE_EXEC_REQUESTED,    /* Exec requested */
64 };
65
66
67 enum ccid_state ccid_get_ccid_state (void);
68
69 extern volatile uint8_t auth_status;
70 #define AC_NONE_AUTHORIZED      0x00
71 #define AC_PSO_CDS_AUTHORIZED   0x01  /* PW1 with 0x81 verified */
72 #define AC_OTHER_AUTHORIZED     0x02  /* PW1 with 0x82 verified */
73 #define AC_ADMIN_AUTHORIZED     0x04  /* PW3 verified */
74 #define AC_NEVER                0x80
75 #define AC_ALWAYS               0xFF
76
77 #define PW_ERR_PW1 0
78 #define PW_ERR_RC  1
79 #define PW_ERR_PW3 2
80 int gpg_pw_get_retry_counter (int who);
81 int gpg_pw_locked (uint8_t which);
82 void gpg_pw_reset_err_counter (uint8_t which);
83 void gpg_pw_increment_err_counter (uint8_t which);
84
85 int ac_check_status (uint8_t ac_flag);
86 int verify_pso_cds (const uint8_t *pw, int pw_len);
87 int verify_other (const uint8_t *pw, int pw_len);
88 int verify_user_0 (uint8_t access, const uint8_t *pw, int buf_len,
89                    int pw_len_known, const uint8_t *ks_pw1, int saveks);
90 int verify_admin (const uint8_t *pw, int pw_len);
91 int verify_admin_0 (const uint8_t *pw, int buf_len, int pw_len_known,
92                     const uint8_t *ks_pw3, int saveks);
93
94 void ac_reset_pso_cds (void);
95 void ac_reset_other (void);
96 void ac_reset_admin (void);
97 void ac_fini (void);
98
99
100 void set_res_sw (uint8_t sw1, uint8_t sw2);
101 extern uint8_t file_selection;
102 extern const uint8_t historical_bytes[];
103 extern uint16_t data_objects_number_of_bytes;
104
105 #define CHALLENGE_LEN   32
106
107 void gpg_data_scan (const uint8_t *start, const uint8_t *end);
108 void gpg_data_copy (const uint8_t *p);
109 void gpg_do_terminate (void);
110 void gpg_do_get_data (uint16_t tag, int with_tag);
111 void gpg_do_put_data (uint16_t tag, const uint8_t *data, int len);
112 void gpg_do_public_key (uint8_t kk_byte);
113 void gpg_do_keygen (uint8_t *buf);
114
115 const uint8_t *gpg_get_firmware_update_key (uint8_t keyno);
116
117 /* Constants: algo+size */
118 #define ALGO_RSA4K      0
119 #define ALGO_NISTP256R1 1
120 #define ALGO_SECP256K1  2
121 #define ALGO_ED25519    3
122 #define ALGO_CURVE25519 4
123 #define ALGO_RSA2K      255
124
125 enum kind_of_key {
126   GPG_KEY_FOR_SIGNING = 0,
127   GPG_KEY_FOR_DECRYPTION = 1,
128   GPG_KEY_FOR_AUTHENTICATION = 2,
129 };
130
131 enum size_of_key {
132   GPG_KEY_STORAGE = 0,          /* PUBKEY + PRVKEY rounded to 2^N */
133   GPG_KEY_PUBLIC,
134   GPG_KEY_PRIVATE,
135 };
136
137 int gpg_get_algo_attr (enum kind_of_key kk);
138 int gpg_get_algo_attr_key_size (enum kind_of_key kk, enum size_of_key s);
139
140 void flash_do_storage_init (const uint8_t **, const uint8_t **);
141 void flash_terminate (void);
142 void flash_activate (void);
143 void flash_key_storage_init (void);
144 void flash_do_release (const uint8_t *);
145 const uint8_t *flash_do_write (uint8_t nr, const uint8_t *data, int len);
146 uint8_t *flash_key_alloc (enum kind_of_key);
147 void flash_key_release (uint8_t *, int);
148 void flash_key_release_page (enum kind_of_key);
149 int flash_key_write (uint8_t *key_addr,
150                      const uint8_t *key_data, int key_data_len,
151                      const uint8_t *pubkey, int pubkey_len);
152 void flash_set_data_pool_last (const uint8_t *p);
153 void flash_clear_halfword (uintptr_t addr);
154 void flash_increment_counter (uint8_t counter_tag_nr);
155 void flash_reset_counter (uint8_t counter_tag_nr);
156
157 #define FILEID_SERIAL_NO        0
158 #define FILEID_UPDATE_KEY_0     1
159 #define FILEID_UPDATE_KEY_1     2
160 #define FILEID_UPDATE_KEY_2     3
161 #define FILEID_UPDATE_KEY_3     4
162 #define FILEID_CH_CERTIFICATE   5
163 int flash_erase_binary (uint8_t file_id);
164 int flash_write_binary (uint8_t file_id, const uint8_t *data,
165                         uint16_t len, uint16_t offset);
166
167 #define FLASH_CH_CERTIFICATE_SIZE 2048
168
169 /* Linker set these two symbols */
170 extern uint8_t ch_certificate_start;
171
172 #define FIRMWARE_UPDATE_KEY_CONTENT_LEN 256     /* RSA-2048 (p and q) */
173
174 #define INITIAL_VECTOR_SIZE 16
175 #define DATA_ENCRYPTION_KEY_SIZE 16
176
177 #define MAX_PRVKEY_LEN 512      /* Maximum is the case for RSA 4096-bit.  */
178
179 struct key_data {
180   const uint8_t *pubkey;        /* Pointer to public key */
181   uint8_t data[MAX_PRVKEY_LEN]; /* decrypted private key data content */
182 };
183
184 struct prvkey_data {
185   /*
186    * IV: Initial Vector
187    */
188   uint8_t iv[INITIAL_VECTOR_SIZE];
189   /*
190    * Checksum
191    */
192   uint8_t checksum_encrypted[DATA_ENCRYPTION_KEY_SIZE];
193   /*
194    * DEK (Data Encryption Key) encrypted
195    */
196   uint8_t dek_encrypted_1[DATA_ENCRYPTION_KEY_SIZE]; /* For user */
197   uint8_t dek_encrypted_2[DATA_ENCRYPTION_KEY_SIZE]; /* For resetcode */
198   uint8_t dek_encrypted_3[DATA_ENCRYPTION_KEY_SIZE]; /* For admin */
199 };
200
201 #define BY_USER         1
202 #define BY_RESETCODE    2
203 #define BY_ADMIN        3
204
205 /*
206  * Maximum length of pass phrase is 127.
207  * We use the top bit (0x80) to encode if keystring is available within DO.
208  */
209 #define PW_LEN_MAX            127
210 #define PW_LEN_MASK          0x7f
211 #define PW_LEN_KEYSTRING_BIT 0x80
212
213 #define SALT_SIZE 8
214
215 void s2k (const unsigned char *salt, size_t slen,
216           const unsigned char *input, size_t ilen, unsigned char output[32]);
217
218 #define KEYSTRING_PASSLEN_SIZE  1
219 #define KEYSTRING_SALT_SIZE     SALT_SIZE
220 #define KEYSTRING_MD_SIZE       32
221 #define KEYSTRING_SIZE        (KEYSTRING_PASSLEN_SIZE + KEYSTRING_SALT_SIZE \
222                                + KEYSTRING_MD_SIZE)
223 #define KS_META_SIZE          (KEYSTRING_PASSLEN_SIZE + KEYSTRING_SALT_SIZE)
224 #define KS_GET_SALT(ks)       (ks + KEYSTRING_PASSLEN_SIZE)
225 #define KS_GET_KEYSTRING(ks)  (ks + KS_META_SIZE)
226
227 void gpg_do_clear_prvkey (enum kind_of_key kk);
228 int gpg_do_load_prvkey (enum kind_of_key kk, int who, const uint8_t *keystring);
229 int gpg_do_chks_prvkey (enum kind_of_key kk,
230                         int who_old, const uint8_t *old_ks,
231                         int who_new, const uint8_t *new_ks);
232
233 int gpg_change_keystring (int who_old, const uint8_t *old_ks,
234                           int who_new, const uint8_t *new_ks);
235
236 extern struct key_data kd[3];
237
238 #ifdef DEBUG
239 void stdout_init (void);
240 #define DEBUG_MORE 1
241 /*
242  * Debug functions in debug.c
243  */
244 void put_byte (uint8_t b);
245 void put_byte_with_no_nl (uint8_t b);
246 void put_short (uint16_t x);
247 void put_word (uint32_t x);
248 void put_int (uint32_t x);
249 void put_string (const char *s);
250 void put_binary (const char *s, int len);
251
252 #define DEBUG_INFO(msg)     put_string (msg)
253 #define DEBUG_WORD(w)       put_word (w)
254 #define DEBUG_SHORT(h)      put_short (h)
255 #define DEBUG_BYTE(b)       put_byte (b)
256 #define DEBUG_BINARY(s,len) put_binary ((const char *)s,len)
257 #else
258 #define DEBUG_INFO(msg)
259 #define DEBUG_WORD(w)
260 #define DEBUG_SHORT(h)
261 #define DEBUG_BYTE(b)
262 #define DEBUG_BINARY(s,len)
263 #endif
264
265 int rsa_sign (const uint8_t *, uint8_t *, int, struct key_data *, int);
266 int modulus_calc (const uint8_t *, int, uint8_t *);
267 int rsa_decrypt (const uint8_t *, uint8_t *, int, struct key_data *,
268                  unsigned int *);
269 int rsa_verify (const uint8_t *, int, const uint8_t *, const uint8_t *);
270 int rsa_genkey (int, uint8_t *, uint8_t *);
271
272 int ecdsa_sign_p256r1 (const uint8_t *hash, uint8_t *output,
273                        const uint8_t *key_data);
274 int ecc_compute_public_p256r1 (const uint8_t *key_data, uint8_t *);
275 int ecc_check_secret_p256r1 (const uint8_t *d0, uint8_t *d1);
276 int ecdh_decrypt_p256r1 (const uint8_t *input, uint8_t *output,
277                          const uint8_t *key_data);
278
279 int ecdsa_sign_p256k1 (const uint8_t *hash, uint8_t *output,
280                        const uint8_t *key_data);
281 int ecc_compute_public_p256k1 (const uint8_t *key_data, uint8_t *);
282 int ecc_check_secret_p256k1 (const uint8_t *d0, uint8_t  *d1);
283 int ecdh_decrypt_p256k1 (const uint8_t *input, uint8_t *output,
284                          const uint8_t *key_data);
285
286 int eddsa_sign_25519 (const uint8_t *input, size_t ilen, uint32_t *output,
287                       const uint8_t *sk_a, const uint8_t *seed,
288                       const uint8_t *pk);
289 void eddsa_compute_public_25519 (const uint8_t *a, uint8_t *);
290 void ecdh_compute_public_25519 (const uint8_t *a, uint8_t *);
291 int ecdh_decrypt_curve25519 (const uint8_t *input, uint8_t *output,
292                              const uint8_t *key_data);
293
294 const uint8_t *gpg_do_read_simple (uint8_t);
295 void gpg_do_write_simple (uint8_t, const uint8_t *, int);
296 void gpg_increment_digital_signature_counter (void);
297 void gpg_do_get_initial_pw_setting (int is_pw3, int *r_len,
298                                     const uint8_t **r_p);
299 int gpg_do_kdf_check (int len, int how_many);
300 int gpg_do_get_uif (enum kind_of_key kk);
301
302
303 void fatal (uint8_t code) __attribute__ ((noreturn));
304 #define FATAL_FLASH  1
305 #define FATAL_RANDOM 2
306 #define FATAL_HEAP   3
307
308 extern uint8_t keystring_md_pw3[KEYSTRING_MD_SIZE];
309 extern uint8_t admin_authorized;
310
311 /*** Flash memory tag values ***/
312 /* Data objects */
313 /*
314  * Representation of data object:
315  *
316  *   <-1 halfword-> <--len/2 halfwords->
317  *   <-tag-><-len-> <---data content--->
318  */
319 #define NR_DO_SEX               0x00
320 #define NR_DO_FP_SIG            0x01
321 #define NR_DO_FP_DEC            0x02
322 #define NR_DO_FP_AUT            0x03
323 #define NR_DO_CAFP_1            0x04
324 #define NR_DO_CAFP_2            0x05
325 #define NR_DO_CAFP_3            0x06
326 #define NR_DO_KGTIME_SIG        0x07
327 #define NR_DO_KGTIME_DEC        0x08
328 #define NR_DO_KGTIME_AUT        0x09
329 #define NR_DO_LOGIN_DATA        0x0a
330 #define NR_DO_URL               0x0b
331 #define NR_DO_NAME              0x0c
332 #define NR_DO_LANGUAGE          0x0d
333 #define NR_DO_PRVKEY_SIG        0x0e
334 #define NR_DO_PRVKEY_DEC        0x0f
335 #define NR_DO_PRVKEY_AUT        0x10
336 #define NR_DO_KEYSTRING_PW1     0x11
337 #define NR_DO_KEYSTRING_RC      0x12
338 #define NR_DO_KEYSTRING_PW3     0x13
339 #define NR_DO_KDF               0x14
340 #define NR_DO__LAST__           21   /* == 0x15 */
341 /* 14-bit counter for DS: Recorded in flash memory by 1-halfword (2-byte).  */
342 /*
343  * Representation of 14-bit counter:
344  *      0: 0x8000
345  *      1: 0x8001
346  *     ...
347  *  16383: 0xbfff
348  */
349 #define NR_COUNTER_DS           0x80 /* ..0xbf */
350 /* 10-bit counter for DS: Recorded in flash memory by 1-halfword (2-byte).  */
351 /*
352  * Representation of 10-bit counter:
353  *      0: 0xc000
354  *      1: 0xc001
355  *     ...
356  *   1023: 0xc3ff
357  */
358 #define NR_COUNTER_DS_LSB       0xc0 /* ..0xc3 */
359 /*
360  * Boolean object, small enum, or 8-bit integer:
361  * Recorded in flash memory by 1-halfword (2-byte)
362  */
363 /*
364  * Representation of Boolean object:
365  *   0: No record in flash memory
366  *   1: 0xf000
367  */
368 #define NR_BOOL_PW1_LIFETIME    0xf0
369 /*
370  * Representation of algorithm attribute object:
371  *   RSA-2048:       No record in flash memory
372  *   RSA-4096:       0xf?00
373  *   ECC p256r1:     0xf?01
374  *   ECC p256k1:     0xf?02
375  *   ECC Ed25519:    0xf?03
376  *   ECC Curve25519: 0xf?04
377  * where <?> == 1 (signature), 2 (decryption) or 3 (authentication)
378  */
379 #define NR_KEY_ALGO_ATTR_SIG    0xf1
380 #define NR_KEY_ALGO_ATTR_DEC    0xf2
381 #define NR_KEY_ALGO_ATTR_AUT    0xf3
382 /*
383  * Representation of User Interaction Flag:
384  *  0 (UIF disabled):            0xf?00 or No record in flash memory
385  *  1 (UIF enabled):             0xf?01
386  *  2 (UIF permanently enabled): 0xf?02
387  *
388  */
389 #define NR_DO_UIF_SIG           0xf6
390 #define NR_DO_UIF_DEC           0xf7
391 #define NR_DO_UIF_AUT           0xf8
392 /*
393  * NR_UINT_SOMETHING could be here...  Use 0xf[459abcd]
394  */
395 /* 123-counters: Recorded in flash memory by 2-halfword (4-byte).  */
396 /*
397  * Representation of 123-counters:
398  *   0: No record in flash memory
399  *   1: 0xfe?? 0xffff
400  *   2: 0xfe?? 0xc3c3
401  *   3: 0xfe?? 0x0000
402  *                    where <counter_id> is placed at second byte <??>
403  */
404 #define NR_COUNTER_123          0xfe
405 #define NR_EMPTY                0xff
406
407 #define SIZE_PW_STATUS_BYTES 7
408
409
410 #define NUM_ALL_PRV_KEYS 3      /* SIG, DEC and AUT */
411
412 #if !defined(OPENPGP_CARD_INITIAL_PW1)
413 #define OPENPGP_CARD_INITIAL_PW1 "123456"
414 #endif
415
416 #if !defined(OPENPGP_CARD_INITIAL_PW3)
417 #define OPENPGP_CARD_INITIAL_PW3 "12345678"
418 #endif
419
420 extern const uint8_t openpgpcard_aid[14];
421
422 void flash_bool_clear (const uint8_t **addr_p);
423 const uint8_t *flash_bool_write (uint8_t nr);
424 void flash_enum_clear (const uint8_t **addr_p);
425 const uint8_t *flash_enum_write (uint8_t nr, uint8_t v);
426 int flash_cnt123_get_value (const uint8_t *p);
427 void flash_cnt123_increment (uint8_t which, const uint8_t **addr_p);
428 void flash_cnt123_clear (const uint8_t **addr_p);
429 void flash_put_data (uint16_t hw);
430 void flash_warning (const char *msg);
431
432 void flash_put_data_internal (const uint8_t *p, uint16_t hw);
433 void flash_bool_write_internal (const uint8_t *p, int nr);
434 void flash_enum_write_internal (const uint8_t *p, int nr, uint8_t v);
435 void flash_cnt123_write_internal (const uint8_t *p, int which, int v);
436 void flash_do_write_internal (const uint8_t *p, int nr,
437                               const uint8_t *data, int len);
438
439 extern const uint8_t gnuk_string_serial[];
440
441 #define LED_ONESHOT               1
442 #define LED_TWOSHOTS              2
443 #define LED_SHOW_STATUS           4
444 #define LED_FATAL                 8
445 #define LED_SYNC                 16
446 #define LED_GNUK_EXEC            32
447 #define LED_START_COMMAND        64
448 #define LED_FINISH_COMMAND      128
449 #define LED_WAIT_FOR_BUTTON     256
450 #define LED_OFF  LED_FINISH_COMMAND
451 void led_blink (int spec);
452
453 #if defined(PINPAD_SUPPORT)
454 # if defined(PINPAD_CIR_SUPPORT)
455 void cir_init (void);
456 # elif defined(PINPAD_DIAL_SUPPORT)
457 void dial_sw_disable (void);
458 void dial_sw_enable (void);
459 # elif defined(PINPAD_DND_SUPPORT)
460 void msc_init (void);
461 void msc_media_insert_change (int available);
462 int msc_scsi_write (uint32_t lba, const uint8_t *buf, size_t size);
463 int msc_scsi_read (uint32_t lba, const uint8_t **sector_p);
464 void msc_scsi_stop (uint8_t code);
465 # endif
466 #define PIN_INPUT_CURRENT 1
467 #define PIN_INPUT_NEW     2
468 #define PIN_INPUT_CONFIRM 3
469 #define MAX_PIN_CHARS 32
470 extern uint8_t pin_input_buffer[MAX_PIN_CHARS];
471 extern uint8_t pin_input_len;
472
473 int pinpad_getline (int msg_code, uint32_t timeout_usec);
474
475 #endif
476
477
478 extern uint8_t _regnual_start, __heap_end__[];
479
480 uint8_t * sram_address (uint32_t offset);