1d75efeb7Sdjm /* 2*c4a807edSdjm * Copyright (c) 2019-2021 Yubico AB. All rights reserved. 3d75efeb7Sdjm * Use of this source code is governed by a BSD-style 4d75efeb7Sdjm * license that can be found in the LICENSE file. 5d75efeb7Sdjm */ 6d75efeb7Sdjm 7d75efeb7Sdjm #ifndef _FIDO_CREDMAN_H 8d75efeb7Sdjm #define _FIDO_CREDMAN_H 9d75efeb7Sdjm 10d75efeb7Sdjm #include <stdint.h> 11d75efeb7Sdjm #include <stdlib.h> 12d75efeb7Sdjm 1332a20e26Sdjm #ifdef _FIDO_INTERNAL 1432a20e26Sdjm #include "blob.h" 15d75efeb7Sdjm #include "fido/err.h" 16d75efeb7Sdjm #include "fido/param.h" 1732a20e26Sdjm #include "fido/types.h" 1832a20e26Sdjm #else 1932a20e26Sdjm #include <fido.h> 2032a20e26Sdjm #include <fido/err.h> 2132a20e26Sdjm #include <fido/param.h> 2232a20e26Sdjm #endif 23d75efeb7Sdjm 24739189a3Sdjm #ifdef __cplusplus 25739189a3Sdjm extern "C" { 26739189a3Sdjm #endif /* __cplusplus */ 27739189a3Sdjm 28d75efeb7Sdjm #ifdef _FIDO_INTERNAL 29d75efeb7Sdjm struct fido_credman_metadata { 30d75efeb7Sdjm uint64_t rk_existing; 31d75efeb7Sdjm uint64_t rk_remaining; 32d75efeb7Sdjm }; 33d75efeb7Sdjm 34d75efeb7Sdjm struct fido_credman_single_rp { 35d75efeb7Sdjm fido_rp_t rp_entity; 36d75efeb7Sdjm fido_blob_t rp_id_hash; 37d75efeb7Sdjm }; 38d75efeb7Sdjm 39d75efeb7Sdjm struct fido_credman_rp { 40d75efeb7Sdjm struct fido_credman_single_rp *ptr; 41d75efeb7Sdjm size_t n_alloc; /* number of allocated entries */ 42d75efeb7Sdjm size_t n_rx; /* number of populated entries */ 43d75efeb7Sdjm }; 44d75efeb7Sdjm 45d75efeb7Sdjm struct fido_credman_rk { 46d75efeb7Sdjm fido_cred_t *ptr; 47d75efeb7Sdjm size_t n_alloc; /* number of allocated entries */ 48d75efeb7Sdjm size_t n_rx; /* number of populated entries */ 49d75efeb7Sdjm }; 50d75efeb7Sdjm #endif 51d75efeb7Sdjm 52d75efeb7Sdjm typedef struct fido_credman_metadata fido_credman_metadata_t; 53d75efeb7Sdjm typedef struct fido_credman_rk fido_credman_rk_t; 54d75efeb7Sdjm typedef struct fido_credman_rp fido_credman_rp_t; 55d75efeb7Sdjm 56d75efeb7Sdjm const char *fido_credman_rp_id(const fido_credman_rp_t *, size_t); 57d75efeb7Sdjm const char *fido_credman_rp_name(const fido_credman_rp_t *, size_t); 58d75efeb7Sdjm 59d75efeb7Sdjm const fido_cred_t *fido_credman_rk(const fido_credman_rk_t *, size_t); 60d75efeb7Sdjm const unsigned char *fido_credman_rp_id_hash_ptr(const fido_credman_rp_t *, 61d75efeb7Sdjm size_t); 62d75efeb7Sdjm 63d75efeb7Sdjm fido_credman_metadata_t *fido_credman_metadata_new(void); 64d75efeb7Sdjm fido_credman_rk_t *fido_credman_rk_new(void); 65d75efeb7Sdjm fido_credman_rp_t *fido_credman_rp_new(void); 66d75efeb7Sdjm 67d75efeb7Sdjm int fido_credman_del_dev_rk(fido_dev_t *, const unsigned char *, size_t, 68d75efeb7Sdjm const char *); 69d75efeb7Sdjm int fido_credman_get_dev_metadata(fido_dev_t *, fido_credman_metadata_t *, 70d75efeb7Sdjm const char *); 71d75efeb7Sdjm int fido_credman_get_dev_rk(fido_dev_t *, const char *, fido_credman_rk_t *, 72d75efeb7Sdjm const char *); 73d75efeb7Sdjm int fido_credman_get_dev_rp(fido_dev_t *, fido_credman_rp_t *, const char *); 74*c4a807edSdjm int fido_credman_set_dev_rk(fido_dev_t *, fido_cred_t *, const char *); 75d75efeb7Sdjm 76d75efeb7Sdjm size_t fido_credman_rk_count(const fido_credman_rk_t *); 77d75efeb7Sdjm size_t fido_credman_rp_count(const fido_credman_rp_t *); 78d75efeb7Sdjm size_t fido_credman_rp_id_hash_len(const fido_credman_rp_t *, size_t); 79d75efeb7Sdjm 80d75efeb7Sdjm uint64_t fido_credman_rk_existing(const fido_credman_metadata_t *); 81d75efeb7Sdjm uint64_t fido_credman_rk_remaining(const fido_credman_metadata_t *); 82d75efeb7Sdjm 83d75efeb7Sdjm void fido_credman_metadata_free(fido_credman_metadata_t **); 84d75efeb7Sdjm void fido_credman_rk_free(fido_credman_rk_t **); 85d75efeb7Sdjm void fido_credman_rp_free(fido_credman_rp_t **); 86d75efeb7Sdjm 87739189a3Sdjm #ifdef __cplusplus 88739189a3Sdjm } /* extern "C" */ 89739189a3Sdjm #endif /* __cplusplus */ 90739189a3Sdjm 91d75efeb7Sdjm #endif /* !_FIDO_CREDMAN_H */ 92