Wirepas SDK
cbor.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** Copyright (C) 2017 Intel Corporation
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11**
12** The above copyright notice and this permission notice shall be included in
13** all copies or substantial portions of the Software.
14**
15** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21** THE SOFTWARE.
22**
23****************************************************************************/
24
25#ifndef CBOR_H
26#define CBOR_H
27
28#ifndef assert
29#include <assert.h>
30#endif
31#include <limits.h>
32#include <stddef.h>
33#include <stdint.h>
34#include <string.h>
35#include <stdio.h>
36
37#include "tinycbor-version.h"
38
39#define TINYCBOR_VERSION ((TINYCBOR_VERSION_MAJOR << 16) | (TINYCBOR_VERSION_MINOR << 8) | TINYCBOR_VERSION_PATCH)
40
41#ifdef __cplusplus
42extern "C" {
43#else
44#include <stdbool.h>
45#endif
46
47#ifndef SIZE_MAX
48/* Some systems fail to define SIZE_MAX in <stdint.h>, even though C99 requires it...
49 * Conversion from signed to unsigned is defined in 6.3.1.3 (Signed and unsigned integers) p2,
50 * which says: "the value is converted by repeatedly adding or subtracting one more than the
51 * maximum value that can be represented in the new type until the value is in the range of the
52 * new type."
53 * So -1 gets converted to size_t by adding SIZE_MAX + 1, which results in SIZE_MAX.
54 */
55# define SIZE_MAX ((size_t)-1)
56#endif
57
58#ifndef CBOR_API
59# define CBOR_API
60#endif
61#ifndef CBOR_PRIVATE_API
62# define CBOR_PRIVATE_API
63#endif
64#ifndef CBOR_INLINE_API
65# if defined(__cplusplus)
66# define CBOR_INLINE inline
67# define CBOR_INLINE_API inline
68# else
69# define CBOR_INLINE_API static CBOR_INLINE
70# if defined(_MSC_VER)
71# define CBOR_INLINE __inline
72# elif defined(__GNUC__)
73# define CBOR_INLINE __inline__
74# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
75# define CBOR_INLINE inline
76# else
77# define CBOR_INLINE
78# endif
79# endif
80#endif
81
82typedef enum CborType {
96
97 CborInvalidType = 0xff /* equivalent to the break byte, so it will never be used */
99
100typedef uint64_t CborTag;
125
126/* #define the constants so we can check with #ifdef */
127#define CborDateTimeStringTag CborDateTimeStringTag
128#define CborUnixTime_tTag CborUnixTime_tTag
129#define CborPositiveBignumTag CborPositiveBignumTag
130#define CborNegativeBignumTag CborNegativeBignumTag
131#define CborDecimalTag CborDecimalTag
132#define CborBigfloatTag CborBigfloatTag
133#define CborCOSE_Encrypt0Tag CborCOSE_Encrypt0Tag
134#define CborCOSE_Mac0Tag CborCOSE_Mac0Tag
135#define CborCOSE_Sign1Tag CborCOSE_Sign1Tag
136#define CborExpectedBase64urlTag CborExpectedBase64urlTag
137#define CborExpectedBase64Tag CborExpectedBase64Tag
138#define CborExpectedBase16Tag CborExpectedBase16Tag
139#define CborEncodedCborTag CborEncodedCborTag
140#define CborUrlTag CborUrlTag
141#define CborBase64urlTag CborBase64urlTag
142#define CborBase64Tag CborBase64Tag
143#define CborRegularExpressionTag CborRegularExpressionTag
144#define CborMimeMessageTag CborMimeMessageTag
145#define CborCOSE_EncryptTag CborCOSE_EncryptTag
146#define CborCOSE_MacTag CborCOSE_MacTag
147#define CborCOSE_SignTag CborCOSE_SignTag
148#define CborSignatureTag CborSignatureTag
149
150/* Error API */
151
152typedef enum CborError {
154
155 /* errors in all modes */
157 CborErrorUnknownLength, /* request for length in array, map, or string with indeterminate length */
160
161 /* parser errors streaming errors */
165 CborErrorUnknownType, /* can only happen in major type 7 */
166 CborErrorIllegalType, /* type not allowed here */
168 CborErrorIllegalSimpleType, /* types of value less than 32 encoded in two bytes */
169
170 /* parser errors in strict mode parsing only */
183
184 /* encoder errors */
187
188 /* internal implementation errors */
192
193 /* errors in converting to JSON */
197
198 CborErrorOutOfMemory = (int) (~0U / 2 + 1),
199 CborErrorInternalError = (int) (~0U / 2) /* INT_MAX on two's complement machines */
201
202CBOR_API const char *cbor_error_string(CborError error);
203
204/* Encoder API */
206{
207 union {
208 uint8_t *ptr;
209 ptrdiff_t bytes_needed;
211 const uint8_t *end;
212 size_t remaining;
213 int flags;
214};
215typedef struct CborEncoder CborEncoder;
216
217static const size_t CborIndefiniteLength = SIZE_MAX;
218
219CBOR_API void cbor_encoder_init(CborEncoder *encoder, uint8_t *buffer, size_t size, int flags);
220CBOR_API CborError cbor_encode_uint(CborEncoder *encoder, uint64_t value);
221CBOR_API CborError cbor_encode_int(CborEncoder *encoder, int64_t value);
222CBOR_API CborError cbor_encode_negative_int(CborEncoder *encoder, uint64_t absolute_value);
223CBOR_API CborError cbor_encode_simple_value(CborEncoder *encoder, uint8_t value);
225CBOR_API CborError cbor_encode_text_string(CborEncoder *encoder, const char *string, size_t length);
227{ return cbor_encode_text_string(encoder, string, strlen(string)); }
228CBOR_API CborError cbor_encode_byte_string(CborEncoder *encoder, const uint8_t *string, size_t length);
229CBOR_API CborError cbor_encode_floating_point(CborEncoder *encoder, CborType fpType, const void *value);
230
232{ return cbor_encode_simple_value(encoder, (int)value - 1 + (CborBooleanType & 0x1f)); }
237
244
245CBOR_API CborError cbor_encoder_create_array(CborEncoder *encoder, CborEncoder *arrayEncoder, size_t length);
246CBOR_API CborError cbor_encoder_create_map(CborEncoder *encoder, CborEncoder *mapEncoder, size_t length);
247CBOR_API CborError cbor_encoder_close_container(CborEncoder *encoder, const CborEncoder *containerEncoder);
248CBOR_API CborError cbor_encoder_close_container_checked(CborEncoder *encoder, const CborEncoder *containerEncoder);
249
251{
252 return encoder->data.ptr;
253}
254
255CBOR_INLINE_API size_t cbor_encoder_get_buffer_size(const CborEncoder *encoder, const uint8_t *buffer)
256{
257 return (size_t)(encoder->data.ptr - buffer);
258}
259
261{
262 return encoder->end ? 0 : (size_t)encoder->data.bytes_needed;
263}
264
265/* Parser API */
266
275
277{
278 const uint8_t *end;
279 uint32_t flags;
280};
281typedef struct CborParser CborParser;
282
284{
286 const uint8_t *ptr;
287 uint32_t remaining;
288 uint16_t extra;
289 uint8_t type;
290 uint8_t flags;
291};
292typedef struct CborValue CborValue;
293
294CBOR_API CborError cbor_parser_init(const uint8_t *buffer, size_t size, uint32_t flags, CborParser *parser, CborValue *it);
295
297
299{ return it->remaining == 0; }
301{ return it->ptr; }
308
315
317{ return value && value->type != CborInvalidType; }
320
321/* Null & undefined type */
323{ return value->type == CborNullType; }
325{ return value->type == CborUndefinedType; }
326
327/* Booleans */
329{ return value->type == CborBooleanType; }
331{
332 assert(cbor_value_is_boolean(value));
333 *result = !!value->extra;
334 return CborNoError;
335}
336
337/* Simple types */
339{ return value->type == CborSimpleType; }
341{
342 assert(cbor_value_is_simple_type(value));
343 *result = (uint8_t)value->extra;
344 return CborNoError;
345}
346
347/* Integers */
349{ return value->type == CborIntegerType; }
354
356{
357 assert(cbor_value_is_integer(value));
358 *result = _cbor_value_extract_int64_helper(value);
359 return CborNoError;
360}
361
363{
364 assert(cbor_value_is_unsigned_integer(value));
365 *result = _cbor_value_extract_int64_helper(value);
366 return CborNoError;
367}
368
370{
371 assert(cbor_value_is_integer(value));
372 *result = (int64_t) _cbor_value_extract_int64_helper(value);
374 *result = -*result - 1;
375 return CborNoError;
376}
377
379{
380 assert(cbor_value_is_integer(value));
381 *result = (int) _cbor_value_extract_int64_helper(value);
383 *result = -*result - 1;
384 return CborNoError;
385}
386
387CBOR_API CborError cbor_value_get_int64_checked(const CborValue *value, int64_t *result);
388CBOR_API CborError cbor_value_get_int_checked(const CborValue *value, int *result);
389
392
393/* Tags */
395{ return value->type == CborTagType; }
397{
398 assert(cbor_value_is_tag(value));
399 *result = _cbor_value_extract_int64_helper(value);
400 return CborNoError;
401}
403
404/* Strings */
409
411{
412 uint64_t v;
414 if (!cbor_value_is_length_known(value))
417 *length = (size_t)v;
418 if (*length != v)
420 return CborNoError;
421}
422
424 size_t *buflen, CborValue *next);
426 size_t *buflen, CborValue *next);
427
428CBOR_API CborError cbor_value_calculate_string_length(const CborValue *value, size_t *length);
429
431 size_t *buflen, CborValue *next)
432{
433 assert(cbor_value_is_text_string(value));
434 return _cbor_value_copy_string(value, buffer, buflen, next);
435}
437 size_t *buflen, CborValue *next)
438{
439 assert(cbor_value_is_byte_string(value));
440 return _cbor_value_copy_string(value, buffer, buflen, next);
441}
442
444 size_t *buflen, CborValue *next)
445{
446 assert(cbor_value_is_text_string(value));
447 return _cbor_value_dup_string(value, (void **)buffer, buflen, next);
448}
450 size_t *buflen, CborValue *next)
451{
452 assert(cbor_value_is_byte_string(value));
453 return _cbor_value_dup_string(value, (void **)buffer, buflen, next);
454}
455
456CBOR_API CborError cbor_value_text_string_equals(const CborValue *value, const char *string, bool *result);
457
458/* Maps and arrays */
460{ return value->type == CborArrayType; }
462{ return value->type == CborMapType; }
463
465{
466 uint64_t v;
467 assert(cbor_value_is_array(value));
468 if (!cbor_value_is_length_known(value))
471 *length = (size_t)v;
472 if (*length != v)
474 return CborNoError;
475}
476
478{
479 uint64_t v;
480 assert(cbor_value_is_map(value));
481 if (!cbor_value_is_length_known(value))
484 *length = (size_t)v;
485 if (*length != v)
487 return CborNoError;
488}
489
490CBOR_API CborError cbor_value_map_find_value(const CborValue *map, const char *string, CborValue *element);
491
492/* Floating point */
494{ return value->type == CborHalfFloatType; }
495CBOR_API CborError cbor_value_get_half_float(const CborValue *value, void *result);
496
498{ return value->type == CborFloatType; }
500{
501 uint32_t data;
502 assert(cbor_value_is_float(value));
504 data = (uint32_t)_cbor_value_decode_int64_internal(value);
505 memcpy(result, &data, sizeof(*result));
506 return CborNoError;
507}
508
510{ return value->type == CborDoubleType; }
512{
513 uint64_t data;
514 assert(cbor_value_is_double(value));
517 memcpy(result, &data, sizeof(*result));
518 return CborNoError;
519}
520
521/* Validation API */
522
524 /* Bit mapping:
525 * bits 0-7 (8 bits): canonical format
526 * bits 8-11 (4 bits): canonical format & strict mode
527 * bits 12-20 (8 bits): strict mode
528 * bits 21-31 (10 bits): other
529 */
530
536
538
542
544
549 /* unused = 0x1000000, */
550 /* unused = 0x2000000, */
551
557
558 CborValidateCompleteData = (int)0x80000000,
559
563
564CBOR_API CborError cbor_value_validate(const CborValue *it, uint32_t flags);
565
566/* Human-readable (dump) API */
567
581
582typedef CborError (*CborStreamFunction)(void *token, const char *fmt, ...)
583#ifdef __GNUC__
584 __attribute__((__format__(printf, 2, 3)))
585#endif
586;
587
588CBOR_API CborError cbor_value_to_pretty_stream(CborStreamFunction streamFunction, void *token, CborValue *value, int flags);
589
590/* The following API requires a hosted C implementation (uses FILE*) */
591#if !defined(__STDC_HOSTED__) || __STDC_HOSTED__-0 == 1
595{
596 CborValue copy = *value;
598}
599#endif /* __STDC_HOSTED__ check */
600
601#ifdef __cplusplus
602}
603#endif
604
605#endif /* CBOR_H */
606
static CborType cbor_value_get_type(const CborValue *value)
Definition cbor.h:318
static const uint8_t * cbor_value_get_next_byte(const CborValue *it)
Definition cbor.h:300
static CborError cbor_value_to_pretty(FILE *out, const CborValue *value)
Definition cbor.h:594
CBOR_API CborError cbor_value_skip_tag(CborValue *it)
uint16_t extra
Definition cbor.h:288
static CborError cbor_encode_text_stringz(CborEncoder *encoder, const char *string)
Definition cbor.h:226
CBOR_API CborError cbor_encode_int(CborEncoder *encoder, int64_t value)
#define CborBase64Tag
Definition cbor.h:142
CborError(* CborStreamFunction)(void *token, const char *fmt,...)
Definition cbor.h:582
static CborError cbor_encode_undefined(CborEncoder *encoder)
Definition cbor.h:235
#define CborPositiveBignumTag
Definition cbor.h:129
CborError _cbor_value_copy_string(const CborValue *value, void *buffer, size_t *buflen, CborValue *next)
static CborError cbor_value_get_int(const CborValue *value, int *result)
Definition cbor.h:378
static CborError cbor_value_get_map_length(const CborValue *value, size_t *length)
Definition cbor.h:477
CBOR_API CborError cbor_value_get_half_float(const CborValue *value, void *result)
const uint8_t * end
Definition cbor.h:211
CBOR_API CborError cbor_encoder_create_array(CborEncoder *encoder, CborEncoder *arrayEncoder, size_t length)
uint8_t type
Definition cbor.h:289
uint64_t CborTag
Definition cbor.h:100
static CborError cbor_value_get_simple_type(const CborValue *value, uint8_t *result)
Definition cbor.h:340
#define CborEncodedCborTag
Definition cbor.h:139
uint64_t _cbor_value_decode_int64_internal(const CborValue *value)
#define CborUrlTag
Definition cbor.h:140
static bool cbor_value_is_map(const CborValue *value)
Definition cbor.h:461
CBOR_API CborError cbor_value_calculate_string_length(const CborValue *value, size_t *length)
static CborError cbor_value_get_int64(const CborValue *value, int64_t *result)
Definition cbor.h:369
static bool cbor_value_is_undefined(const CborValue *value)
Definition cbor.h:324
static bool cbor_value_is_negative_integer(const CborValue *value)
Definition cbor.h:352
#define CborNegativeBignumTag
Definition cbor.h:130
static CborError cbor_value_get_float(const CborValue *value, float *result)
Definition cbor.h:499
static size_t cbor_encoder_get_buffer_size(const CborEncoder *encoder, const uint8_t *buffer)
Definition cbor.h:255
CBOR_API CborError cbor_value_to_pretty_stream(CborStreamFunction streamFunction, void *token, CborValue *value, int flags)
CborType
Definition cbor.h:82
@ CborFloatType
Definition cbor.h:94
@ CborUndefinedType
Definition cbor.h:92
@ CborMapType
Definition cbor.h:87
@ CborIntegerType
Definition cbor.h:83
@ CborByteStringType
Definition cbor.h:84
@ CborInvalidType
Definition cbor.h:97
@ CborNullType
Definition cbor.h:91
@ CborDoubleType
Definition cbor.h:95
@ CborArrayType
Definition cbor.h:86
@ CborTagType
Definition cbor.h:88
@ CborTextStringType
Definition cbor.h:85
@ CborBooleanType
Definition cbor.h:90
@ CborSimpleType
Definition cbor.h:89
@ CborHalfFloatType
Definition cbor.h:93
#define SIZE_MAX
Definition cbor.h:55
#define CborUnixTime_tTag
Definition cbor.h:128
#define CborRegularExpressionTag
Definition cbor.h:143
#define CborDateTimeStringTag
Definition cbor.h:127
#define CborSignatureTag
Definition cbor.h:148
#define CBOR_PRIVATE_API
Definition cbor.h:62
CBOR_API CborError cbor_value_enter_container(const CborValue *it, CborValue *recursed)
static bool cbor_value_is_byte_string(const CborValue *value)
Definition cbor.h:405
CBOR_API const char * cbor_error_string(CborError error)
static bool cbor_value_is_container(const CborValue *it)
Definition cbor.h:304
static CborError cbor_value_get_boolean(const CborValue *value, bool *result)
Definition cbor.h:330
CBOR_API CborError cbor_encode_tag(CborEncoder *encoder, CborTag tag)
CBOR_API CborError cbor_value_leave_container(CborValue *it, const CborValue *recursed)
CBOR_API CborError cbor_value_validate(const CborValue *it, uint32_t flags)
static uint64_t _cbor_value_extract_int64_helper(const CborValue *value)
Definition cbor.h:310
CBOR_API CborError cbor_value_get_int64_checked(const CborValue *value, int64_t *result)
CBOR_API CborError cbor_value_validate_basic(const CborValue *it)
static bool cbor_value_is_length_known(const CborValue *value)
Definition cbor.h:390
static bool cbor_value_is_boolean(const CborValue *value)
Definition cbor.h:328
#define CborExpectedBase64Tag
Definition cbor.h:137
static CborError cbor_value_get_tag(const CborValue *value, CborTag *result)
Definition cbor.h:396
static bool cbor_value_is_half_float(const CborValue *value)
Definition cbor.h:493
#define CborCOSE_MacTag
Definition cbor.h:146
CBOR_API CborError cbor_value_advance(CborValue *it)
#define CborMimeMessageTag
Definition cbor.h:144
static CborError cbor_encode_half_float(CborEncoder *encoder, const void *value)
Definition cbor.h:238
static CborError cbor_value_get_double(const CborValue *value, double *result)
Definition cbor.h:511
CBOR_API CborError cbor_value_text_string_equals(const CborValue *value, const char *string, bool *result)
static CborError cbor_value_copy_text_string(const CborValue *value, char *buffer, size_t *buflen, CborValue *next)
Definition cbor.h:430
#define CborBigfloatTag
Definition cbor.h:132
CBOR_API void cbor_encoder_init(CborEncoder *encoder, uint8_t *buffer, size_t size, int flags)
#define CborExpectedBase64urlTag
Definition cbor.h:136
static CborError cbor_value_dup_text_string(const CborValue *value, char **buffer, size_t *buflen, CborValue *next)
Definition cbor.h:443
CborError
Definition cbor.h:152
@ CborErrorInternalError
Definition cbor.h:199
@ CborErrorUnknownType
Definition cbor.h:165
@ CborErrorIllegalSimpleType
Definition cbor.h:168
@ CborErrorInvalidUtf8TextString
Definition cbor.h:175
@ CborErrorDataTooLarge
Definition cbor.h:189
@ CborErrorImproperValue
Definition cbor.h:178
@ CborErrorTooFewItems
Definition cbor.h:186
@ CborErrorUnsupportedType
Definition cbor.h:191
@ CborErrorNestingTooDeep
Definition cbor.h:190
@ CborErrorOverlongEncoding
Definition cbor.h:179
@ CborErrorInappropriateTagForType
Definition cbor.h:173
@ CborErrorMapKeyNotString
Definition cbor.h:180
@ CborErrorJsonObjectKeyIsAggregate
Definition cbor.h:194
@ CborErrorUnknownLength
Definition cbor.h:157
@ CborErrorAdvancePastEOF
Definition cbor.h:158
@ CborErrorUnknownTag
Definition cbor.h:172
@ CborErrorExcludedValue
Definition cbor.h:177
@ CborErrorIO
Definition cbor.h:159
@ CborErrorGarbageAtEnd
Definition cbor.h:162
@ CborErrorMapKeysNotUnique
Definition cbor.h:182
@ CborErrorDuplicateObjectKeys
Definition cbor.h:174
@ CborErrorExcludedType
Definition cbor.h:176
@ CborErrorOutOfMemory
Definition cbor.h:198
@ CborErrorJsonObjectKeyNotString
Definition cbor.h:195
@ CborUnknownError
Definition cbor.h:156
@ CborErrorUnexpectedBreak
Definition cbor.h:164
@ CborErrorMapNotSorted
Definition cbor.h:181
@ CborErrorUnknownSimpleType
Definition cbor.h:171
@ CborNoError
Definition cbor.h:153
@ CborErrorIllegalType
Definition cbor.h:166
@ CborErrorTooManyItems
Definition cbor.h:185
@ CborErrorIllegalNumber
Definition cbor.h:167
@ CborErrorJsonNotImplemented
Definition cbor.h:196
@ CborErrorUnexpectedEOF
Definition cbor.h:163
uint32_t flags
Definition cbor.h:279
static bool cbor_value_is_tag(const CborValue *value)
Definition cbor.h:394
#define CborCOSE_EncryptTag
Definition cbor.h:145
CBOR_API CborError cbor_encoder_create_map(CborEncoder *encoder, CborEncoder *mapEncoder, size_t length)
union CborEncoder::@9 data
static bool cbor_value_is_float(const CborValue *value)
Definition cbor.h:497
CBOR_API CborError cbor_encode_negative_int(CborEncoder *encoder, uint64_t absolute_value)
static uint8_t * _cbor_encoder_get_buffer_pointer(const CborEncoder *encoder)
Definition cbor.h:250
static CborError cbor_value_get_raw_integer(const CborValue *value, uint64_t *result)
Definition cbor.h:355
#define CborDecimalTag
Definition cbor.h:131
CBOR_API CborError cbor_parser_init(const uint8_t *buffer, size_t size, uint32_t flags, CborParser *parser, CborValue *it)
uint8_t flags
Definition cbor.h:290
static bool cbor_value_is_simple_type(const CborValue *value)
Definition cbor.h:338
static CborError cbor_encode_float(CborEncoder *encoder, float value)
Definition cbor.h:240
static bool cbor_value_is_double(const CborValue *value)
Definition cbor.h:509
#define CBOR_INLINE_API
Definition cbor.h:69
static bool cbor_value_is_null(const CborValue *value)
Definition cbor.h:322
const CborParser * parser
Definition cbor.h:285
CBOR_API CborError cbor_encode_uint(CborEncoder *encoder, uint64_t value)
static const size_t CborIndefiniteLength
Definition cbor.h:217
CBOR_API CborError cbor_encode_text_string(CborEncoder *encoder, const char *string, size_t length)
static CborError cbor_value_get_array_length(const CborValue *value, size_t *length)
Definition cbor.h:464
CBOR_API CborError cbor_encoder_close_container(CborEncoder *encoder, const CborEncoder *containerEncoder)
static bool cbor_value_is_unsigned_integer(const CborValue *value)
Definition cbor.h:350
CBOR_API CborError cbor_value_get_int_checked(const CborValue *value, int *result)
static CborError cbor_encode_double(CborEncoder *encoder, double value)
Definition cbor.h:242
uint32_t remaining
Definition cbor.h:287
CBOR_API CborError cbor_encode_simple_value(CborEncoder *encoder, uint8_t value)
static bool cbor_value_is_text_string(const CborValue *value)
Definition cbor.h:407
const uint8_t * ptr
Definition cbor.h:286
CBOR_API CborError cbor_value_map_find_value(const CborValue *map, const char *string, CborValue *element)
#define CborBase64urlTag
Definition cbor.h:141
CborValidationFlags
Definition cbor.h:523
@ CborValidateShortestFloatingPoint
Definition cbor.h:532
@ CborValidateUtf8
Definition cbor.h:541
@ CborValidateBasic
Definition cbor.h:561
@ CborValidateNoUnknownSimpleTypes
Definition cbor.h:553
@ CborValidateCompleteData
Definition cbor.h:558
@ CborValidateNoUndefined
Definition cbor.h:546
@ CborValidateMapIsSorted
Definition cbor.h:535
@ CborValidateMapKeysAreUnique
Definition cbor.h:539
@ CborValidateNoUnknownSimpleTypesSA
Definition cbor.h:552
@ CborValidateNoUnknownTagsSR
Definition cbor.h:555
@ CborValidateNoUnknownTagsSA
Definition cbor.h:554
@ CborValidateStrictest
Definition cbor.h:560
@ CborValidateNoTags
Definition cbor.h:547
@ CborValidateShortestNumbers
Definition cbor.h:533
@ CborValidateCanonicalFormat
Definition cbor.h:537
@ CborValidateFiniteFloatingPoint
Definition cbor.h:548
@ CborValidateNoUnknownTags
Definition cbor.h:556
@ CborValidateShortestIntegrals
Definition cbor.h:531
@ CborValidateStrictMode
Definition cbor.h:543
@ CborValidateNoIndeterminateLength
Definition cbor.h:534
@ CborValidateTagUse
Definition cbor.h:540
@ CborValidateMapKeysAreString
Definition cbor.h:545
#define CborCOSE_Mac0Tag
Definition cbor.h:134
int flags
Definition cbor.h:213
static CborError cbor_value_get_uint64(const CborValue *value, uint64_t *result)
Definition cbor.h:362
static CborError cbor_encode_boolean(CborEncoder *encoder, bool value)
Definition cbor.h:231
static CborError cbor_value_copy_byte_string(const CborValue *value, uint8_t *buffer, size_t *buflen, CborValue *next)
Definition cbor.h:436
CborPrettyFlags
Definition cbor.h:568
@ CborPrettyIndicateIndeterminateLength
Definition cbor.h:572
@ CborPrettyIndicateIndetermineLength
Definition cbor.h:573
@ CborPrettyMergeStringFragments
Definition cbor.h:577
@ CborPrettyNumericEncodingIndicators
Definition cbor.h:569
@ CborPrettyShowStringFragments
Definition cbor.h:576
@ CborPrettyTextualEncodingIndicators
Definition cbor.h:570
@ CborPrettyDefaultFlags
Definition cbor.h:579
@ CborPrettyIndicateOverlongNumbers
Definition cbor.h:574
CborParserIteratorFlags
Definition cbor.h:268
@ CborIteratorFlag_NegativeInteger
Definition cbor.h:270
@ CborIteratorFlag_IntegerValueTooLarge
Definition cbor.h:269
@ CborIteratorFlag_ContainerIsMap
Definition cbor.h:273
@ CborIteratorFlag_IteratingStringChunks
Definition cbor.h:271
@ CborIteratorFlag_UnknownLength
Definition cbor.h:272
CBOR_API CborError cbor_encode_byte_string(CborEncoder *encoder, const uint8_t *string, size_t length)
CBOR_API CborError cbor_encoder_close_container_checked(CborEncoder *encoder, const CborEncoder *containerEncoder)
static CborError cbor_value_get_string_length(const CborValue *value, size_t *length)
Definition cbor.h:410
CborError _cbor_value_dup_string(const CborValue *value, void **buffer, size_t *buflen, CborValue *next)
size_t remaining
Definition cbor.h:212
static size_t cbor_encoder_get_extra_bytes_needed(const CborEncoder *encoder)
Definition cbor.h:260
CBOR_API CborError cbor_value_to_pretty_advance_flags(FILE *out, CborValue *value, int flags)
#define CborCOSE_SignTag
Definition cbor.h:147
CborKnownTags
Definition cbor.h:101
#define CborCOSE_Encrypt0Tag
Definition cbor.h:133
CBOR_API CborError cbor_encode_floating_point(CborEncoder *encoder, CborType fpType, const void *value)
static bool cbor_value_at_end(const CborValue *it)
Definition cbor.h:298
static CborError cbor_value_dup_byte_string(const CborValue *value, uint8_t **buffer, size_t *buflen, CborValue *next)
Definition cbor.h:449
#define CborExpectedBase16Tag
Definition cbor.h:138
CBOR_API CborError cbor_value_to_pretty_advance(FILE *out, CborValue *value)
static bool cbor_value_is_valid(const CborValue *value)
Definition cbor.h:316
static CborError cbor_encode_null(CborEncoder *encoder)
Definition cbor.h:233
static bool cbor_value_is_array(const CborValue *value)
Definition cbor.h:459
CBOR_API CborError cbor_value_advance_fixed(CborValue *it)
#define CborCOSE_Sign1Tag
Definition cbor.h:135
static bool cbor_value_is_integer(const CborValue *value)
Definition cbor.h:348