1d75efeb7Sdjm /* 2d75efeb7Sdjm * Copyright (c) 2018 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 _BLOB_H 8d75efeb7Sdjm #define _BLOB_H 9d75efeb7Sdjm 1032a20e26Sdjm #include <cbor.h> 1132a20e26Sdjm #include <stdlib.h> 1232a20e26Sdjm 13739189a3Sdjm #ifdef __cplusplus 14739189a3Sdjm extern "C" { 15739189a3Sdjm #endif /* __cplusplus */ 16739189a3Sdjm 17d75efeb7Sdjm typedef struct fido_blob { 18d75efeb7Sdjm unsigned char *ptr; 19d75efeb7Sdjm size_t len; 20d75efeb7Sdjm } fido_blob_t; 21d75efeb7Sdjm 22d75efeb7Sdjm typedef struct fido_blob_array { 23d75efeb7Sdjm fido_blob_t *ptr; 24d75efeb7Sdjm size_t len; 25d75efeb7Sdjm } fido_blob_array_t; 26d75efeb7Sdjm 27d75efeb7Sdjm cbor_item_t *fido_blob_encode(const fido_blob_t *); 28d75efeb7Sdjm fido_blob_t *fido_blob_new(void); 29d75efeb7Sdjm int fido_blob_decode(const cbor_item_t *, fido_blob_t *); 30d75efeb7Sdjm int fido_blob_is_empty(const fido_blob_t *); 31*c4a807edSdjm int fido_blob_set(fido_blob_t *, const u_char *, size_t); 32*c4a807edSdjm int fido_blob_append(fido_blob_t *, const u_char *, size_t); 33d75efeb7Sdjm void fido_blob_free(fido_blob_t **); 34*c4a807edSdjm void fido_blob_reset(fido_blob_t *); 3532a20e26Sdjm void fido_free_blob_array(fido_blob_array_t *); 36d75efeb7Sdjm 37739189a3Sdjm #ifdef __cplusplus 38739189a3Sdjm } /* extern "C" */ 39739189a3Sdjm #endif /* __cplusplus */ 40739189a3Sdjm 41d75efeb7Sdjm #endif /* !_BLOB_H */ 42