│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
37#ifdef CBOR_EXTERNAL_CFG
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
41#include "tinycbor-version.h"
│ │ │ -
│ │ │ -
43#define TINYCBOR_VERSION ((TINYCBOR_VERSION_MAJOR << 16) | (TINYCBOR_VERSION_MINOR << 8) | TINYCBOR_VERSION_PATCH)
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
59# define SIZE_MAX ((size_t)-1)
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
65#ifndef CBOR_PRIVATE_API
│ │ │ -
66# define CBOR_PRIVATE_API
│ │ │ -
│ │ │ -
68#ifndef CBOR_INLINE_API
│ │ │ -
69# if defined(__cplusplus)
│ │ │ -
70# define CBOR_INLINE inline
│ │ │ -
71# define CBOR_INLINE_API inline
│ │ │ -
│ │ │ -
73# define CBOR_INLINE_API static CBOR_INLINE
│ │ │ -
│ │ │ -
75# define CBOR_INLINE __inline
│ │ │ -
76# elif defined(__GNUC__)
│ │ │ -
77# define CBOR_INLINE __inline__
│ │ │ -
78# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
│ │ │ -
79# define CBOR_INLINE inline
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
86typedef enum CborType {
│ │ │ -
87 CborIntegerType = 0x00,
│ │ │ -
88 CborByteStringType = 0x40,
│ │ │ -
89 CborTextStringType = 0x60,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
93 CborSimpleType = 0xe0,
│ │ │ -
94 CborBooleanType = 0xf5,
│ │ │ -
│ │ │ -
96 CborUndefinedType = 0xf7,
│ │ │ -
97 CborHalfFloatType = 0xf9,
│ │ │ -
│ │ │ -
99 CborDoubleType = 0xfb,
│ │ │ -
│ │ │ -
101 CborInvalidType = 0xff
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
105typedef enum CborKnownTags {
│ │ │ -
106 CborDateTimeStringTag = 0,
│ │ │ -
107 CborUnixTime_tTag = 1,
│ │ │ -
108 CborPositiveBignumTag = 2,
│ │ │ -
109 CborNegativeBignumTag = 3,
│ │ │ -
│ │ │ -
│ │ │ -
112 CborCOSE_Encrypt0Tag = 16,
│ │ │ -
113 CborCOSE_Mac0Tag = 17,
│ │ │ -
114 CborCOSE_Sign1Tag = 18,
│ │ │ -
115 CborExpectedBase64urlTag = 21,
│ │ │ -
116 CborExpectedBase64Tag = 22,
│ │ │ -
117 CborExpectedBase16Tag = 23,
│ │ │ -
118 CborEncodedCborTag = 24,
│ │ │ -
│ │ │ -
120 CborBase64urlTag = 33,
│ │ │ -
│ │ │ -
122 CborRegularExpressionTag = 35,
│ │ │ -
123 CborMimeMessageTag = 36,
│ │ │ -
124 CborCOSE_EncryptTag = 96,
│ │ │ -
125 CborCOSE_MacTag = 97,
│ │ │ -
126 CborCOSE_SignTag = 98,
│ │ │ -
127 CborSignatureTag = 55799
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
131#define CborDateTimeStringTag CborDateTimeStringTag
│ │ │ -
132#define CborUnixTime_tTag CborUnixTime_tTag
│ │ │ -
133#define CborPositiveBignumTag CborPositiveBignumTag
│ │ │ -
134#define CborNegativeBignumTag CborNegativeBignumTag
│ │ │ -
135#define CborDecimalTag CborDecimalTag
│ │ │ -
136#define CborBigfloatTag CborBigfloatTag
│ │ │ -
137#define CborCOSE_Encrypt0Tag CborCOSE_Encrypt0Tag
│ │ │ -
138#define CborCOSE_Mac0Tag CborCOSE_Mac0Tag
│ │ │ -
139#define CborCOSE_Sign1Tag CborCOSE_Sign1Tag
│ │ │ -
140#define CborExpectedBase64urlTag CborExpectedBase64urlTag
│ │ │ -
141#define CborExpectedBase64Tag CborExpectedBase64Tag
│ │ │ -
142#define CborExpectedBase16Tag CborExpectedBase16Tag
│ │ │ -
143#define CborEncodedCborTag CborEncodedCborTag
│ │ │ -
144#define CborUrlTag CborUrlTag
│ │ │ -
145#define CborBase64urlTag CborBase64urlTag
│ │ │ -
146#define CborBase64Tag CborBase64Tag
│ │ │ -
147#define CborRegularExpressionTag CborRegularExpressionTag
│ │ │ -
148#define CborMimeMessageTag CborMimeMessageTag
│ │ │ -
149#define CborCOSE_EncryptTag CborCOSE_EncryptTag
│ │ │ -
150#define CborCOSE_MacTag CborCOSE_MacTag
│ │ │ -
151#define CborCOSE_SignTag CborCOSE_SignTag
│ │ │ -
152#define CborSignatureTag CborSignatureTag
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
156typedef enum CborError {
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
161 CborErrorUnknownLength,
│ │ │ -
162 CborErrorAdvancePastEOF,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
166 CborErrorGarbageAtEnd = 256,
│ │ │ -
167 CborErrorUnexpectedEOF,
│ │ │ -
168 CborErrorUnexpectedBreak,
│ │ │ -
169 CborErrorUnknownType,
│ │ │ -
170 CborErrorIllegalType,
│ │ │ -
171 CborErrorIllegalNumber,
│ │ │ -
172 CborErrorIllegalSimpleType,
│ │ │ -
173 CborErrorNoMoreStringChunks,
│ │ │ -
│ │ │ -
│ │ │ -
176 CborErrorUnknownSimpleType = 512,
│ │ │ -
│ │ │ -
178 CborErrorInappropriateTagForType,
│ │ │ -
179 CborErrorDuplicateObjectKeys,
│ │ │ -
180 CborErrorInvalidUtf8TextString,
│ │ │ -
181 CborErrorExcludedType,
│ │ │ -
182 CborErrorExcludedValue,
│ │ │ -
183 CborErrorImproperValue,
│ │ │ -
184 CborErrorOverlongEncoding,
│ │ │ -
185 CborErrorMapKeyNotString,
│ │ │ -
186 CborErrorMapNotSorted,
│ │ │ -
187 CborErrorMapKeysNotUnique,
│ │ │ -
│ │ │ -
│ │ │ -
190 CborErrorTooManyItems = 768,
│ │ │ -
191 CborErrorTooFewItems,
│ │ │ -
│ │ │ -
│ │ │ -
194 CborErrorDataTooLarge = 1024,
│ │ │ -
195 CborErrorNestingTooDeep,
│ │ │ -
196 CborErrorUnsupportedType,
│ │ │ -
197 CborErrorUnimplementedValidation,
│ │ │ -
│ │ │ -
│ │ │ -
200 CborErrorJsonObjectKeyIsAggregate = 1280,
│ │ │ -
201 CborErrorJsonObjectKeyNotString,
│ │ │ -
202 CborErrorJsonNotImplemented,
│ │ │ -
│ │ │ -
204 CborErrorOutOfMemory = (int) (~0U / 2 + 1),
│ │ │ -
205 CborErrorInternalError = (int) (~0U / 2)
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
212typedef enum CborEncoderAppendType
│ │ │ -
│ │ │ -
214 CborEncoderAppendCborData = 0,
│ │ │ -
215 CborEncoderAppendStringData = 1
│ │ │ -
216} CborEncoderAppendType;
│ │ │ -
│ │ │ -
218typedef CborError (*CborEncoderWriteFunction)(
void *,
const void *, size_t, CborEncoderAppendType);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
222 CborIteratorFlag_WriterFunction = 0x01,
│ │ │ -
223 CborIteratorFlag_ContainerIsMap_ = 0x20
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
230 ptrdiff_t bytes_needed;
│ │ │ -
231 CborEncoderWriteFunction writer;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
241#ifndef CBOR_NO_ENCODER_API
│ │ │ -
│ │ │ -
243CBOR_API
void cbor_encoder_init_writer(
CborEncoder *encoder, CborEncoderWriteFunction writer,
void *);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
275CBOR_INLINE_API uint8_t *_cbor_encoder_get_buffer_pointer(
const CborEncoder *encoder)
│ │ │ -
│ │ │ -
277 return encoder->data.ptr;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
282 return (
size_t)(encoder->data.ptr - buffer);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
287 return encoder->end ? 0 : (size_t)encoder->data.bytes_needed;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
293enum CborParserGlobalFlags
│ │ │ -
│ │ │ -
295 CborParserFlag_ExternalSource = 0x01
│ │ │ -
│ │ │ -
│ │ │ -
298enum CborParserIteratorFlags
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
302 CborIteratorFlag_IntegerValueIs64Bit = 0x01,
│ │ │ -
303 CborIteratorFlag_IntegerValueTooLarge = 0x02,
│ │ │ -
│ │ │ -
│ │ │ -
306 CborIteratorFlag_NegativeInteger = 0x04,
│ │ │ -
│ │ │ -
│ │ │ -
309 CborIteratorFlag_BeforeFirstStringChunk = 0x04,
│ │ │ -
310 CborIteratorFlag_IteratingStringChunks = 0x08,
│ │ │ -
│ │ │ -
│ │ │ -
313 CborIteratorFlag_UnknownLength = 0x10,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
317 CborIteratorFlag_ContainerIsMap = 0x20,
│ │ │ -
318 CborIteratorFlag_NextIsMapKey = 0x40
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
322struct CborParserOperations
│ │ │ -
│ │ │ -
324 bool (*can_read_bytes)(
void *token,
size_t len);
│ │ │ -
325 void *(*read_bytes)(
void *token,
void *dst,
size_t offset,
size_t len);
│ │ │ -
326 void (*advance_bytes)(
void *token,
size_t len);
│ │ │ -
327 CborError (*transfer_string)(
void *token,
const void **userptr,
size_t offset,
size_t len);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
334 const struct CborParserOperations *ops;
│ │ │ -
│ │ │ -
336 enum CborParserGlobalFlags flags;
│ │ │ -
│ │ │ -
338typedef struct CborParser CborParser;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
342 const CborParser *parser;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
354#ifndef CBOR_NO_PARSER_API
│ │ │ -
355CBOR_API CborError
cbor_parser_init(
const uint8_t *buffer,
size_t size, uint32_t flags, CborParser *parser,
CborValue *it);
│ │ │ -
356CBOR_API CborError cbor_parser_init_reader(
const struct CborParserOperations *ops, CborParser *parser,
CborValue *it,
void *token);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
361{
return it->remaining == 0; }
│ │ │ -
│ │ │ -
363{
return it->source.ptr; }
│ │ │ -
364CBOR_API CborError cbor_value_reparse(
CborValue *it);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
368{
return it->type == CborArrayType || it->type == CborMapType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
372CBOR_PRIVATE_API uint64_t _cbor_value_decode_int64_internal(
const CborValue *value);
│ │ │ -
373CBOR_INLINE_API uint64_t _cbor_value_extract_int64_helper(
const CborValue *value)
│ │ │ -
│ │ │ -
375 return value->flags & CborIteratorFlag_IntegerValueTooLarge ?
│ │ │ -
376 _cbor_value_decode_int64_internal(value) : value->extra;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
380{
return value && value->type != CborInvalidType; }
│ │ │ -
│ │ │ -
382{
return (CborType)value->type; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
386{
return value->type == CborNullType; }
│ │ │ -
│ │ │ -
388{
return value->type == CborUndefinedType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
392{
return value->type == CborBooleanType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
396 *result = !!value->extra;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
402{
return value->type == CborSimpleType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
406 *result = (uint8_t)value->extra;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
412{
return value->type == CborIntegerType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
421 *result = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
428 *result = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
435 *result = (int64_t) _cbor_value_extract_int64_helper(value);
│ │ │ -
436 if (value->flags & CborIteratorFlag_NegativeInteger)
│ │ │ -
437 *result = -*result - 1;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
444 *result = (int) _cbor_value_extract_int64_helper(value);
│ │ │ -
445 if (value->flags & CborIteratorFlag_NegativeInteger)
│ │ │ -
446 *result = -*result - 1;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
454{
return (value->flags & CborIteratorFlag_UnknownLength) == 0; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
458{
return value->type == CborTagType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
462 *result = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
469{
return value->type == CborByteStringType; }
│ │ │ -
│ │ │ -
471{
return value->type == CborTextStringType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
478 return CborErrorUnknownLength;
│ │ │ -
479 v = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
482 return CborErrorDataTooLarge;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
486CBOR_PRIVATE_API CborError _cbor_value_copy_string(
const CborValue *value,
void *buffer,
│ │ │ -
│ │ │ -
488CBOR_PRIVATE_API CborError _cbor_value_dup_string(
const CborValue *value,
void **buffer,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
497 return _cbor_value_copy_string(value, buffer, buflen, next);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
503 return _cbor_value_copy_string(value, buffer, buflen, next);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
510 return _cbor_value_dup_string(value, (
void **)buffer, buflen, next);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
516 return _cbor_value_dup_string(value, (
void **)buffer, buflen, next);
│ │ │ -
│ │ │ -
│ │ │ -
519CBOR_PRIVATE_API CborError _cbor_value_get_string_chunk_size(
const CborValue *value,
size_t *len);
│ │ │ -
520CBOR_INLINE_API CborError cbor_value_get_string_chunk_size(
const CborValue *value,
size_t *len)
│ │ │ -
│ │ │ -
522 assert(value->flags & CborIteratorFlag_IteratingStringChunks);
│ │ │ -
523 return _cbor_value_get_string_chunk_size(value, len);
│ │ │ -
│ │ │ -
│ │ │ -
526CBOR_INLINE_API
bool cbor_value_string_iteration_at_end(
const CborValue *value)
│ │ │ -
│ │ │ -
│ │ │ -
529 return cbor_value_get_string_chunk_size(value, &dummy) == CborErrorNoMoreStringChunks;
│ │ │ -
│ │ │ -
│ │ │ -
532CBOR_PRIVATE_API CborError _cbor_value_begin_string_iteration(
CborValue *value);
│ │ │ -
533CBOR_INLINE_API CborError cbor_value_begin_string_iteration(
CborValue *value)
│ │ │ -
│ │ │ -
│ │ │ -
536 assert(!(value->flags & CborIteratorFlag_IteratingStringChunks));
│ │ │ -
537 return _cbor_value_begin_string_iteration(value);
│ │ │ -
│ │ │ -
│ │ │ -
540CBOR_PRIVATE_API CborError _cbor_value_finish_string_iteration(
CborValue *value);
│ │ │ -
541CBOR_INLINE_API CborError cbor_value_finish_string_iteration(
CborValue *value)
│ │ │ -
│ │ │ -
543 assert(cbor_value_string_iteration_at_end(value));
│ │ │ -
544 return _cbor_value_finish_string_iteration(value);
│ │ │ -
│ │ │ -
│ │ │ -
547CBOR_PRIVATE_API CborError _cbor_value_get_string_chunk(
const CborValue *value,
const void **bufferptr,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
553 return _cbor_value_get_string_chunk(value, (
const void **)bufferptr, len, next);
│ │ │ -
│ │ │ -
555CBOR_INLINE_API CborError cbor_value_get_byte_string_chunk(
const CborValue *value,
const uint8_t **bufferptr,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
559 return _cbor_value_get_string_chunk(value, (
const void **)bufferptr, len, next);
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
566{
return value->type == CborArrayType; }
│ │ │ -
│ │ │ -
568{
return value->type == CborMapType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
575 return CborErrorUnknownLength;
│ │ │ -
576 v = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
579 return CborErrorDataTooLarge;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
588 return CborErrorUnknownLength;
│ │ │ -
589 v = _cbor_value_extract_int64_helper(value);
│ │ │ -
│ │ │ -
│ │ │ -
592 return CborErrorDataTooLarge;
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
600{
return value->type == CborHalfFloatType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
605 assert((value->flags & CborIteratorFlag_IntegerValueTooLarge) == 0);
│ │ │ -
│ │ │ -
│ │ │ -
608 memcpy(result, &value->extra,
sizeof(value->extra));
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
613{
return value->type == CborFloatType; }
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
618 assert(value->flags & CborIteratorFlag_IntegerValueTooLarge);
│ │ │ -
619 data = (uint32_t)_cbor_value_decode_int64_internal(value);
│ │ │ -
620 memcpy(result, &data,
sizeof(*result));
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
625{
return value->type == CborDoubleType; }
│ │ │ -
626CBOR_INLINE_API CborError cbor_value_get_double(
const CborValue *value,
double *result)
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
630 assert(value->flags & CborIteratorFlag_IntegerValueTooLarge);
│ │ │ -
631 data = _cbor_value_decode_int64_internal(value);
│ │ │ -
632 memcpy(result, &data,
sizeof(*result));
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
637#ifndef CBOR_NO_VALIDATION_API
│ │ │ -
│ │ │ -
639enum CborValidationFlags {
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
647 CborValidateShortestIntegrals = 0x0001,
│ │ │ -
648 CborValidateShortestFloatingPoint = 0x0002,
│ │ │ -
649 CborValidateShortestNumbers = CborValidateShortestIntegrals | CborValidateShortestFloatingPoint,
│ │ │ -
650 CborValidateNoIndeterminateLength = 0x0100,
│ │ │ -
651 CborValidateMapIsSorted = 0x0200 | CborValidateNoIndeterminateLength,
│ │ │ -
│ │ │ -
653 CborValidateCanonicalFormat = 0x0fff,
│ │ │ -
│ │ │ -
655 CborValidateMapKeysAreUnique = 0x1000 | CborValidateMapIsSorted,
│ │ │ -
656 CborValidateTagUse = 0x2000,
│ │ │ -
657 CborValidateUtf8 = 0x4000,
│ │ │ -
│ │ │ -
659 CborValidateStrictMode = 0xfff00,
│ │ │ -
│ │ │ -
661 CborValidateMapKeysAreString = 0x100000,
│ │ │ -
662 CborValidateNoUndefined = 0x200000,
│ │ │ -
663 CborValidateNoTags = 0x400000,
│ │ │ -
664 CborValidateFiniteFloatingPoint = 0x800000,
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
668 CborValidateNoUnknownSimpleTypesSA = 0x4000000,
│ │ │ -
669 CborValidateNoUnknownSimpleTypes = 0x8000000 | CborValidateNoUnknownSimpleTypesSA,
│ │ │ -
670 CborValidateNoUnknownTagsSA = 0x10000000,
│ │ │ -
671 CborValidateNoUnknownTagsSR = 0x20000000 | CborValidateNoUnknownTagsSA,
│ │ │ -
672 CborValidateNoUnknownTags = 0x40000000 | CborValidateNoUnknownTagsSR,
│ │ │ -
│ │ │ -
674 CborValidateCompleteData = (int)0x80000000,
│ │ │ -
│ │ │ -
676 CborValidateStrictest = (
int)~0U,
│ │ │ -
677 CborValidateBasic = 0
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
684#ifndef CBOR_NO_PRETTY_API
│ │ │ -
│ │ │ -
686enum CborPrettyFlags {
│ │ │ -
687 CborPrettyNumericEncodingIndicators = 0x01,
│ │ │ -
688 CborPrettyTextualEncodingIndicators = 0,
│ │ │ -
│ │ │ -
690 CborPrettyIndicateIndeterminateLength = 0x02,
│ │ │ -
691 CborPrettyIndicateIndetermineLength = CborPrettyIndicateIndeterminateLength,
│ │ │ -
692 CborPrettyIndicateOverlongNumbers = 0x04,
│ │ │ -
│ │ │ -
694 CborPrettyShowStringFragments = 0x100,
│ │ │ -
695 CborPrettyMergeStringFragments = 0,
│ │ │ -
│ │ │ -
697 CborPrettyDefaultFlags = CborPrettyIndicateIndeterminateLength
│ │ │ -
│ │ │ -
│ │ │ -
700typedef CborError (*CborStreamFunction)(
void *token,
const char *fmt, ...)
│ │ │ -
│ │ │ -
702 __attribute__((__format__(printf, 2, 3)))
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
709#if !defined(__STDC_HOSTED__) || __STDC_HOSTED__-0 == 1
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -
CborError cbor_value_to_pretty(FILE *out, const CborValue *value)
Converts the current CBOR type pointed to by value to its textual representation and writes it to the...
Definition cbor.h:712
│ │ │ -
CborError cbor_value_dup_text_string(const CborValue *value, char **buffer, size_t *buflen, CborValue *next)
Allocates memory for the string pointed by value and copies it into this buffer.
Definition cbor.h:506
│ │ │ -
CBOR_API CborError cbor_value_get_half_float_as_float(const CborValue *value, float *result)
Retrieves the CBOR half-precision floating point (16-bit) value that value points to,...
Definition cborparser_float.c:45
│ │ │ -
CBOR_API CborError cbor_value_to_pretty_advance_flags(FILE *out, CborValue *value, int flags)
Converts the current CBOR type pointed to by value to its textual representation and writes it to the...
Definition cborpretty_stdio.c:83
│ │ │ -
CborError cbor_value_dup_byte_string(const CborValue *value, uint8_t **buffer, size_t *buflen, CborValue *next)
Allocates memory for the string pointed by value and copies it into this buffer.
Definition cbor.h:512
│ │ │ -
CBOR_API CborError cbor_value_to_pretty_advance(FILE *out, CborValue *value)
Converts the current CBOR type pointed to by value to its textual representation and writes it to the...
Definition cborpretty_stdio.c:63
│ │ │ -
uint64_t CborTag
This typedef is an unsigned 64-bit integer.
Definition cbor.h:104
│ │ │ -
CBOR_API const char * cbor_error_string(CborError error)
Returns the error string corresponding to the CBOR error condition error.
Definition cborerrorstrings.c:80
│ │ │ -
static const size_t CborIndefiniteLength
This variable is a constant used to indicate that the length of the map or array is not yet determine...
Definition cbor.h:239
│ │ │ -
CBOR_API CborError cbor_encode_negative_int(CborEncoder *encoder, uint64_t absolute_value)
Appends the negative 64-bit integer whose absolute value is absolute_value to the CBOR stream provide...
Definition cborencoder.c:370
│ │ │ -
CBOR_API CborError cbor_encode_byte_string(CborEncoder *encoder, const uint8_t *string, size_t length)
Appends the byte string string of length length to the CBOR stream provided by encoder.
Definition cborencoder.c:472
│ │ │ -
CborError cbor_encode_double(CborEncoder *encoder, double value)
Appends the IEEE 754 double-precision (64-bit) floating point value value to the CBOR stream provided...
Definition cbor.h:267
│ │ │ -
CBOR_API void cbor_encoder_init(CborEncoder *encoder, uint8_t *buffer, size_t size, int flags)
Initializes a CborEncoder structure encoder by pointing it to buffer buffer of size size.
Definition cborencoder.c:204
│ │ │ -
CBOR_API CborError cbor_encode_uint(CborEncoder *encoder, uint64_t value)
Appends the unsigned 64-bit integer value to the CBOR stream provided by encoder.
Definition cborencoder.c:357
│ │ │ -
CborError cbor_encode_null(CborEncoder *encoder)
Appends the CBOR type representing a null value to the CBOR stream provided by encoder.
Definition cbor.h:257
│ │ │ -
CBOR_API CborError cbor_encode_text_string(CborEncoder *encoder, const char *string, size_t length)
Appends the text string string of length length to the CBOR stream provided by encoder.
Definition cborencoder.c:484
│ │ │ -
CborError cbor_encode_text_stringz(CborEncoder *encoder, const char *string)
Appends the null-terminated text string string to the CBOR stream provided by encoder.
Definition cbor.h:250
│ │ │ -
CBOR_API CborError cbor_encoder_close_container(CborEncoder *parentEncoder, const CborEncoder *containerEncoder)
Closes the CBOR container (array or map) provided by containerEncoder and updates the CBOR stream pro...
Definition cborencoder.c:575
│ │ │ -
size_t cbor_encoder_get_buffer_size(const CborEncoder *encoder, const uint8_t *buffer)
Returns the total size of the buffer starting at buffer after the encoding finished without errors.
Definition cbor.h:280
│ │ │ -
CBOR_API CborError cbor_encode_tag(CborEncoder *encoder, CborTag tag)
Appends the CBOR tag tag to the CBOR stream provided by encoder.
Definition cborencoder.c:441
│ │ │ -
CBOR_API CborError cbor_encode_float_as_half_float(CborEncoder *encoder, float value)
Convert the IEEE 754 single-precision (32-bit) floating point value value to the IEEE 754 half-precis...
Definition cborencoder_float.c:37
│ │ │ -
CborError cbor_encode_boolean(CborEncoder *encoder, bool value)
Appends the boolean value value to the CBOR stream provided by encoder.
Definition cbor.h:255
│ │ │ -
CBOR_API CborError cbor_encode_simple_value(CborEncoder *encoder, uint8_t value)
Appends the CBOR Simple Type of value value to the CBOR stream provided by encoder.
Definition cborencoder.c:397
│ │ │ -
CborError cbor_encode_undefined(CborEncoder *encoder)
Appends the CBOR type representing an undefined value to the CBOR stream provided by encoder.
Definition cbor.h:259
│ │ │ -
CBOR_API CborError cbor_encoder_create_array(CborEncoder *parentEncoder, CborEncoder *arrayEncoder, size_t length)
Creates a CBOR array in the CBOR stream provided by parentEncoder and initializes arrayEncoder so tha...
Definition cborencoder.c:532
│ │ │ -
CBOR_API CborError cbor_encoder_close_container_checked(CborEncoder *parentEncoder, const CborEncoder *containerEncoder)
Definition cborencoder_close_container_checked.c:53
│ │ │ -
CBOR_API CborError cbor_encoder_create_map(CborEncoder *parentEncoder, CborEncoder *mapEncoder, size_t length)
Creates a CBOR map in the CBOR stream provided by parentEncoder and initializes mapEncoder so that it...
Definition cborencoder.c:556
│ │ │ -
CBOR_API CborError cbor_encode_int(CborEncoder *encoder, int64_t value)
Appends the signed 64-bit integer value to the CBOR stream provided by encoder.
Definition cborencoder.c:381
│ │ │ -
CBOR_API CborError cbor_encode_floating_point(CborEncoder *encoder, CborType fpType, const void *value)
Appends the floating-point value of type fpType and pointed to by value to the CBOR stream provided b...
Definition cborencoder.c:418
│ │ │ -
CborError cbor_encode_half_float(CborEncoder *encoder, const void *value)
Appends the IEEE 754 half-precision (16-bit) floating point value pointed to by value to the CBOR str...
Definition cbor.h:262
│ │ │ -
CborError cbor_encode_float(CborEncoder *encoder, float value)
Appends the IEEE 754 single-precision (32-bit) floating point value value to the CBOR stream provided...
Definition cbor.h:265
│ │ │ -
size_t cbor_encoder_get_extra_bytes_needed(const CborEncoder *encoder)
Returns how many more bytes the original buffer supplied to cbor_encoder_init() needs to be extended ...
Definition cbor.h:285
│ │ │ -
CborError cbor_value_copy_text_string(const CborValue *value, char *buffer, size_t *buflen, CborValue *next)
Copies the string pointed to by value into the buffer provided at buffer of buflen bytes.
Definition cbor.h:493
│ │ │ -
CborError cbor_value_get_simple_type(const CborValue *value, uint8_t *result)
Retrieves the CBOR Simple Type value that value points to and stores it in result.
Definition cbor.h:403
│ │ │ -
bool cbor_value_is_length_known(const CborValue *value)
Returns true if the length of this type is known without calculation.
Definition cbor.h:453
│ │ │ -
const uint8_t * cbor_value_get_next_byte(const CborValue *it)
Returns a pointer to the next byte that would be decoded if this CborValue object were advanced.
Definition cbor.h:362
│ │ │ -
CBOR_API CborError cbor_value_enter_container(const CborValue *it, CborValue *recursed)
Creates a CborValue iterator pointing to the first element of the container represented by it and sav...
Definition cborparser.c:578
│ │ │ -
bool cbor_value_is_boolean(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR boolean type (true or false).
Definition cbor.h:391
│ │ │ -
bool cbor_value_is_undefined(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR undefined type.
Definition cbor.h:387
│ │ │ -
bool cbor_value_is_null(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR null type.
Definition cbor.h:385
│ │ │ -
CBOR_API CborError cbor_value_validate_basic(const CborValue *it)
Performs a basic validation of the CBOR stream pointed by it and returns the error it found.
Definition cborparser.c:442
│ │ │ -
bool cbor_value_is_map(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR map.
Definition cbor.h:567
│ │ │ -
bool cbor_value_is_tag(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR tag.
Definition cbor.h:457
│ │ │ -
CBOR_API CborError cbor_value_skip_tag(CborValue *it)
Advances the CBOR value it until it no longer points to a tag.
Definition cborparser.c:551
│ │ │ -
CborError cbor_value_get_raw_integer(const CborValue *value, uint64_t *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cbor.h:418
│ │ │ -
bool cbor_value_is_integer(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR integer type.
Definition cbor.h:411
│ │ │ -
CborType cbor_value_get_type(const CborValue *value)
Returns the type of the CBOR value that the iterator value points to.
Definition cbor.h:381
│ │ │ -
bool cbor_value_at_end(const CborValue *it)
Returns true if it has reached the end of the iteration, usually when advancing after the last item i...
Definition cbor.h:360
│ │ │ -
CBOR_API CborError cbor_value_validate(const CborValue *it, uint32_t flags)
Performs a full validation, controlled by the flags options, of the CBOR stream pointed by it and ret...
Definition cborvalidation.c:645
│ │ │ -
CborError cbor_value_get_tag(const CborValue *value, CborTag *result)
Retrieves the CBOR tag value that value points to and stores it in result.
Definition cbor.h:459
│ │ │ -
CBOR_API CborError cbor_value_leave_container(CborValue *it, const CborValue *recursed)
Updates it to point to the next element after the container.
Definition cborparser.c:627
│ │ │ -
CborError cbor_value_get_half_float(const CborValue *value, void *result)
Retrieves the CBOR half-precision floating point (16-bit) value that value points to and stores it in...
Definition cbor.h:602
│ │ │ -
CBOR_API CborError cbor_value_get_int64_checked(const CborValue *value, int64_t *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cborparser.c:812
│ │ │ -
CBOR_API CborError cbor_parser_init(const uint8_t *buffer, size_t size, uint32_t flags, CborParser *parser, CborValue *it)
Initializes the CBOR parser for parsing size bytes beginning at buffer.
Definition cborparser.c:345
│ │ │ -
bool cbor_value_is_double(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR double-precision floating point (64-...
Definition cbor.h:624
│ │ │ -
bool cbor_value_is_simple_type(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR Simple Type type (other than true,...
Definition cbor.h:401
│ │ │ -
bool cbor_value_is_negative_integer(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR negative integer type.
Definition cbor.h:415
│ │ │ -
bool cbor_value_is_half_float(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR single-precision floating point (16-...
Definition cbor.h:599
│ │ │ -
CborError cbor_value_get_uint64(const CborValue *value, uint64_t *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cbor.h:425
│ │ │ -
CborError cbor_value_get_int(const CborValue *value, int *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cbor.h:441
│ │ │ -
CBOR_API CborError cbor_value_advance_fixed(CborValue *it)
Advances the CBOR value it by one fixed-size position.
Definition cborparser.c:463
│ │ │ -
CborError cbor_value_copy_byte_string(const CborValue *value, uint8_t *buffer, size_t *buflen, CborValue *next)
Copies the string pointed by value into the buffer provided at buffer of buflen bytes.
Definition cbor.h:499
│ │ │ -
bool cbor_value_is_unsigned_integer(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR unsigned integer type (positive valu...
Definition cbor.h:413
│ │ │ -
CBOR_API CborError cbor_value_text_string_equals(const CborValue *value, const char *string, bool *result)
Compares the entry value with the string string and stores the result in result.
Definition cborparser.c:1323
│ │ │ -
CborError cbor_value_get_text_string_chunk(const CborValue *value, const char **bufferptr, size_t *len, CborValue *next)
Extracts one text string chunk pointed to by value and stores a pointer to the data in buffer and the...
Definition cbor.h:549
│ │ │ -
CBOR_API CborError cbor_value_calculate_string_length(const CborValue *value, size_t *length)
Calculates the length of the byte or text string that value points to and stores it in len.
Definition cborparser.c:963
│ │ │ -
CborError cbor_value_get_map_length(const CborValue *value, size_t *length)
Extracts the length of the CBOR map that value points to and stores it in result.
Definition cbor.h:583
│ │ │ -
bool cbor_value_is_byte_string(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR byte string.
Definition cbor.h:468
│ │ │ -
CborError cbor_value_get_boolean(const CborValue *value, bool *result)
Retrieves the boolean value that value points to and stores it in result.
Definition cbor.h:393
│ │ │ -
bool cbor_value_is_array(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR array.
Definition cbor.h:565
│ │ │ -
CborError cbor_value_get_int64(const CborValue *value, int64_t *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cbor.h:432
│ │ │ -
CBOR_API CborError cbor_value_advance(CborValue *it)
Advances the CBOR value it by one element, skipping over containers.
Definition cborparser.c:515
│ │ │ -
CborError cbor_value_get_array_length(const CborValue *value, size_t *length)
Extracts the length of the CBOR array that value points to and stores it in result.
Definition cbor.h:570
│ │ │ -
bool cbor_value_is_valid(const CborValue *value)
Returns true if the iterator it contains a valid value.
Definition cbor.h:379
│ │ │ -
bool cbor_value_is_text_string(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR text string.
Definition cbor.h:470
│ │ │ -
CBOR_API CborError cbor_value_map_find_value(const CborValue *map, const char *string, CborValue *element)
Attempts to find the value in map map that corresponds to the text string entry string.
Definition cborparser.c:1411
│ │ │ -
CborError cbor_value_get_string_length(const CborValue *value, size_t *length)
Extracts the length of the byte or text string that value points to and stores it in result.
Definition cbor.h:473
│ │ │ -
bool cbor_value_is_container(const CborValue *it)
Returns true if the it value is a container and requires recursion in order to decode (maps and array...
Definition cbor.h:367
│ │ │ -
CBOR_API CborError cbor_value_get_int_checked(const CborValue *value, int *result)
Retrieves the CBOR integer value that value points to and stores it in result.
Definition cborparser.c:852
│ │ │ -
CborError cbor_value_get_float(const CborValue *value, float *result)
Retrieves the CBOR single-precision floating point (32-bit) value that value points to and stores it ...
Definition cbor.h:614
│ │ │ -
bool cbor_value_is_float(const CborValue *value)
Returns true if the iterator value is valid and points to a CBOR single-precision floating point (32-...
Definition cbor.h:612
│ │ │ -
CBOR_API CborError cbor_value_to_pretty_stream(CborStreamFunction streamFunction, void *token, CborValue *value, int flags)
Converts the current CBOR type pointed by value to its textual representation and writes it to the st...
Definition cborpretty.c:578
│ │ │ -
Structure used to encode to CBOR.
Definition cbor.h:227
│ │ │ -
This type contains one value parsed from the CBOR stream.
Definition cbor.h:341
│ │ │ +
1#define TINYCBOR_VERSION_MAJOR 0
│ │ │ +
2#define TINYCBOR_VERSION_MINOR 6
│ │ │ +
3#define TINYCBOR_VERSION_PATCH 0
│ │ │