// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_CBOR_READER_H_ #define COMPONENTS_CBOR_READER_H_ #include <stddef.h> #include <map> #include <optional> #include "base/containers/span.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_span.h" #include "components/cbor/cbor_export.h" #include "components/cbor/values.h" // Concise Binary Object Representation (CBOR) decoder as defined by // https://tools.ietf.org/html/rfc7049. This decoder only accepts canonical CBOR // as defined by section 3.9. // // This implementation supports the following major types: // - 0: Unsigned integers, up to 64-bit values*. // - 1: Signed integers, up to 64-bit values*. // - 2: Byte strings. // - 3: UTF-8 strings. // - 4: Definite-length arrays. // - 5: Definite-length maps. // - 7: Simple values or floating point values. // // * Note: For simplicity, this implementation represents both signed and // unsigned integers with signed int64_t. This reduces the effective range // of unsigned integers. // // Requirements for canonical CBOR representation: // - Duplicate keys in maps are not allowed. // - Keys for maps must be sorted first by length and then by byte-wise // lexical order, as defined in Section 3.9. // // Known limitations and interpretations of the RFC (and the reasons): // - Does not support indefinite-length data streams or semantic tags (major // type 6). (Simplicity; security) // - Does not support the floating point and BREAK stop code value types in // major type 7. (Simplicity) // - Does not support non-character codepoints in major type 3. (Security) // - Treats incomplete CBOR data items as syntax errors. (Security) // - Treats trailing data bytes as errors. (Security) // - Treats unknown additional information formats as syntax errors. // (Simplicity; security) // - Limits CBOR value inputs to at most 16 layers of nesting. Callers can // enforce more shallow nesting by setting |max_nesting_level|. (Efficiency; // security) // - Only supports CBOR maps with integer or string type keys, due to the // cost of serialization when sorting map keys. (Efficiency; simplicity) // - Does not support simple values that are unassigned/reserved as per RFC // 7049, and treats them as errors. (Security) namespace cbor { class CBOR_EXPORT Reader { … }; } // namespace cbor #endif // COMPONENTS_CBOR_READER_H_