mirror of
https://github.com/polhenarejos/pico-hsm.git
synced 2024-09-20 11:20:08 +00:00
8657758cf2
If pin is blocked, is always blocked despite correct login. Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
106 lines
3.0 KiB
C
106 lines
3.0 KiB
C
#ifndef _FILE_H_
|
|
#define _FILE_H_
|
|
|
|
#include <stdlib.h>
|
|
#include "pico/stdlib.h"
|
|
|
|
#define FILE_TYPE_UNKNOWN 0x00
|
|
#define FILE_TYPE_DF 0x04
|
|
#define FILE_TYPE_INTERNAL_EF 0x03
|
|
#define FILE_TYPE_WORKING_EF 0x01
|
|
#define FILE_TYPE_BSO 0x10
|
|
#define FILE_PERSISTENT 0x20
|
|
#define FILE_DATA_FLASH 0x40
|
|
#define FILE_DATA_FUNC 0x80
|
|
|
|
/* EF structures */
|
|
#define FILE_EF_UNKNOWN 0x00
|
|
#define FILE_EF_TRANSPARENT 0x01
|
|
#define FILE_EF_LINEAR_FIXED 0x02
|
|
#define FILE_EF_LINEAR_FIXED_TLV 0x03
|
|
#define FILE_EF_LINEAR_VARIABLE 0x04
|
|
#define FILE_EF_LINEAR_VARIABLE_TLV 0x05
|
|
#define FILE_EF_CYCLIC 0x06
|
|
#define FILE_EF_CYCLIC_TLV 0x07
|
|
|
|
#define ACL_OP_DELETE_SELF 0x00
|
|
#define ACL_OP_CREATE_DF 0x01
|
|
#define ACL_OP_CREATE_EF 0x02
|
|
#define ACL_OP_DELETE_CHILD 0x03
|
|
#define ACL_OP_WRITE 0x04
|
|
#define ACL_OP_UPDATE_ERASE 0x05
|
|
#define ACL_OP_READ_SEARCH 0x06
|
|
|
|
#define SPECIFY_EF 0x1
|
|
#define SPECIFY_DF 0x2
|
|
#define SPECIFY_ANY 0x3
|
|
|
|
#define EF_DKEK 0x108F
|
|
#define EF_PRKDFS 0x6040
|
|
#define EF_PUKDFS 0x6041
|
|
#define EF_CDFS 0x6042
|
|
#define EF_AODFS 0x6043
|
|
#define EF_DODFS 0x6044
|
|
#define EF_SKDFS 0x6045
|
|
|
|
#define MAX_DEPTH 4
|
|
|
|
typedef struct file
|
|
{
|
|
const uint16_t fid;
|
|
const uint8_t parent; //entry number in the whole table!!
|
|
const uint8_t *name;
|
|
const uint8_t type;
|
|
const uint8_t ef_structure;
|
|
uint8_t *data; //should include 2 bytes len at begining
|
|
const uint8_t acl[7];
|
|
} __attribute__((packed)) file_t;
|
|
|
|
typedef struct file_chain
|
|
{
|
|
file_t *file;
|
|
struct file_chain *next;
|
|
} file_chain_t;
|
|
|
|
extern file_t *currentEF;
|
|
extern file_t *currentDF;
|
|
extern const file_t *selected_applet;
|
|
|
|
extern const file_t *MF;
|
|
extern const file_t *file_last;
|
|
extern const file_t *file_openpgp;
|
|
extern const file_t *file_sc_hsm;
|
|
extern bool card_terminated;
|
|
extern file_t *file_pin1;
|
|
extern file_t *file_retries_pin1;
|
|
extern file_t *file_sopin;
|
|
extern file_t *file_retries_sopin;
|
|
|
|
extern file_t *search_by_fid(const uint16_t fid, const file_t *parent, const uint8_t sp);
|
|
extern file_t *search_by_name(uint8_t *name, uint16_t namelen);
|
|
extern file_t *search_by_path(const uint8_t *pe_path, uint8_t pathlen, const file_t *parent);
|
|
extern bool authenticate_action(const file_t *ef, uint8_t op);
|
|
extern void process_fci(const file_t *pe);
|
|
extern void scan_flash();
|
|
extern void initialize_flash(bool);
|
|
|
|
extern file_t file_entries[];
|
|
|
|
extern uint8_t *file_read(const uint8_t *addr);
|
|
extern uint16_t file_read_uint16(const uint8_t *addr);
|
|
extern uint8_t file_read_uint8(const uint8_t *addr);
|
|
extern file_t *file_new(uint16_t);
|
|
file_t *get_parent(file_t *f);
|
|
|
|
extern uint16_t dynamic_files;
|
|
extern file_t dynamic_file[];
|
|
extern file_t *search_dynamic_file(uint16_t);
|
|
extern int delete_dynamic_file(file_t *f);
|
|
|
|
extern file_chain_t *add_file_to_chain(file_t *file, file_chain_t **chain);
|
|
extern file_t *search_file_chain(uint16_t fid, file_chain_t *chain);
|
|
extern bool isUserAuthenticated;
|
|
|
|
#endif
|
|
|