git: f55904f2f645 - stable/13 - Import libcbor at 'contrib/libcbor/'

From: Ed Maste <emaste_at_FreeBSD.org>
Date: Wed, 09 Feb 2022 23:58:13 UTC
The branch stable/13 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=f55904f2f645a6b19a516709fa715ec0ed7a618c

commit f55904f2f645a6b19a516709fa715ec0ed7a618c
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2021-10-07 00:26:10 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2022-02-09 21:23:53 +0000

    Import libcbor at 'contrib/libcbor/'
    
    git-subtree-dir: contrib/libcbor
    git-subtree-mainline: 293663f4da9e8b8aeb106ce3b73a8ed2aa2a8a90
    git-subtree-split: 5b2defbd2a1aa991bd0a2855eef8e15107572747
    (cherry picked from commit 10ff414c14eef433d8157f0c17904d740693933b)
---
 contrib/libcbor/.clang-format                      |  151 ++
 contrib/libcbor/.github/workflows/fuzz.yml         |   23 +
 contrib/libcbor/.gitignore                         |    8 +
 contrib/libcbor/.travis.yml                        |   66 +
 contrib/libcbor/CHANGELOG.md                       |  109 +
 contrib/libcbor/CMakeLists.txt                     |  159 ++
 contrib/libcbor/CMakeModules/FindCJSON.cmake       |    9 +
 contrib/libcbor/CMakeModules/FindCMocka.cmake      |   49 +
 contrib/libcbor/CMakeModules/LibFindMacros.cmake   |  120 +
 contrib/libcbor/Doxyfile                           | 2417 ++++++++++++++++++++
 contrib/libcbor/LICENSE.md                         |   21 +
 contrib/libcbor/README.md                          |  122 +
 contrib/libcbor/appveyor.yml                       |   27 +
 contrib/libcbor/clang-format.sh                    |   17 +
 contrib/libcbor/codecov.yml                        |    2 +
 contrib/libcbor/doc/Makefile                       |  180 ++
 contrib/libcbor/doc/doxy_frontpage.md              |   37 +
 contrib/libcbor/doc/make.bat                       |  242 ++
 contrib/libcbor/doc/source/api.rst                 |   39 +
 contrib/libcbor/doc/source/api/decoding.rst        |   53 +
 contrib/libcbor/doc/source/api/encoding.rst        |   23 +
 .../doc/source/api/item_reference_counting.rst     |   41 +
 contrib/libcbor/doc/source/api/item_types.rst      |   41 +
 contrib/libcbor/doc/source/api/type_0_1.rst        |   91 +
 contrib/libcbor/doc/source/api/type_2.rst          |   66 +
 contrib/libcbor/doc/source/api/type_3.rst          |   55 +
 contrib/libcbor/doc/source/api/type_4.rst          |   62 +
 contrib/libcbor/doc/source/api/type_5.rst          |   44 +
 contrib/libcbor/doc/source/api/type_6.rst          |   21 +
 contrib/libcbor/doc/source/api/type_7.rst          |   75 +
 contrib/libcbor/doc/source/changelog.rst           |    4 +
 contrib/libcbor/doc/source/conf.py                 |  296 +++
 contrib/libcbor/doc/source/development.rst         |  143 ++
 contrib/libcbor/doc/source/getting_started.rst     |  190 ++
 contrib/libcbor/doc/source/img/win_1.png           |  Bin 0 -> 29291 bytes
 contrib/libcbor/doc/source/img/win_2.png           |  Bin 0 -> 20179 bytes
 contrib/libcbor/doc/source/img/win_3.png           |  Bin 0 -> 47224 bytes
 contrib/libcbor/doc/source/img/win_4.png           |  Bin 0 -> 11272 bytes
 contrib/libcbor/doc/source/img/win_5.png           |  Bin 0 -> 29490 bytes
 contrib/libcbor/doc/source/img/win_6.png           |  Bin 0 -> 25195 bytes
 contrib/libcbor/doc/source/index.rst               |   40 +
 contrib/libcbor/doc/source/internal.rst            |  128 ++
 contrib/libcbor/doc/source/requirements.txt        |   39 +
 contrib/libcbor/doc/source/rfc_conformance.rst     |   17 +
 contrib/libcbor/doc/source/streaming.rst           |   13 +
 contrib/libcbor/doc/source/streaming/decoding.rst  |   40 +
 contrib/libcbor/doc/source/streaming/encoding.rst  |    4 +
 contrib/libcbor/doc/source/tests.rst               |   39 +
 contrib/libcbor/doc/source/using.rst               |  173 ++
 contrib/libcbor/examples/CMakeLists.txt            |   25 +
 contrib/libcbor/examples/cjson2cbor.c              |  145 ++
 contrib/libcbor/examples/create_items.c            |   33 +
 contrib/libcbor/examples/data/floats.cbor          |  Bin 0 -> 39 bytes
 contrib/libcbor/examples/data/indef_string.cbor    |    1 +
 contrib/libcbor/examples/data/integer.cbor         |    1 +
 contrib/libcbor/examples/data/json_example.json    |    6 +
 contrib/libcbor/examples/data/map.cbor             |  Bin 0 -> 26 bytes
 contrib/libcbor/examples/data/nested_array.cbor    |    1 +
 contrib/libcbor/examples/data/tagged_date.cbor     |    1 +
 contrib/libcbor/examples/hello.c                   |   16 +
 contrib/libcbor/examples/readfile.c                |   78 +
 contrib/libcbor/examples/sort.c                    |   41 +
 contrib/libcbor/examples/streaming_parser.c        |   58 +
 contrib/libcbor/misc/bytes.rb                      |    3 +
 contrib/libcbor/misc/file_to_bytes.rb              |    5 +
 contrib/libcbor/misc/hooks/pre-commit              |   18 +
 contrib/libcbor/misc/repeat.rb                     |    3 +
 contrib/libcbor/misc/seq.rb                        |    3 +
 contrib/libcbor/misc/update_version.py             |   38 +
 contrib/libcbor/oss-fuzz/build.sh                  |   28 +
 contrib/libcbor/oss-fuzz/cbor_load_fuzzer.cc       |   37 +
 contrib/libcbor/release.sh                         |   75 +
 contrib/libcbor/src/CMakeLists.txt                 |   45 +
 contrib/libcbor/src/allocators.c                   |   19 +
 contrib/libcbor/src/cbor.c                         |  345 +++
 contrib/libcbor/src/cbor.h                         |   68 +
 contrib/libcbor/src/cbor/arrays.c                  |  135 ++
 contrib/libcbor/src/cbor/arrays.h                  |  116 +
 contrib/libcbor/src/cbor/bytestrings.c             |  117 +
 contrib/libcbor/src/cbor/bytestrings.h             |  132 ++
 contrib/libcbor/src/cbor/callbacks.c               |  116 +
 contrib/libcbor/src/cbor/callbacks.h               |  187 ++
 contrib/libcbor/src/cbor/common.c                  |  160 ++
 contrib/libcbor/src/cbor/common.h                  |  303 +++
 contrib/libcbor/src/cbor/configuration.h.in        |   16 +
 contrib/libcbor/src/cbor/data.h                    |  255 +++
 contrib/libcbor/src/cbor/encoding.c                |  192 ++
 contrib/libcbor/src/cbor/encoding.h                |  109 +
 contrib/libcbor/src/cbor/floats_ctrls.c            |  189 ++
 contrib/libcbor/src/cbor/floats_ctrls.h            |  212 ++
 .../libcbor/src/cbor/internal/builder_callbacks.c  |  389 ++++
 .../libcbor/src/cbor/internal/builder_callbacks.h  |   81 +
 contrib/libcbor/src/cbor/internal/encoders.c       |   98 +
 contrib/libcbor/src/cbor/internal/encoders.h       |   36 +
 contrib/libcbor/src/cbor/internal/loaders.c        |   80 +
 contrib/libcbor/src/cbor/internal/loaders.h        |   36 +
 contrib/libcbor/src/cbor/internal/memory_utils.c   |   44 +
 contrib/libcbor/src/cbor/internal/memory_utils.h   |   39 +
 contrib/libcbor/src/cbor/internal/stack.c          |   33 +
 contrib/libcbor/src/cbor/internal/stack.h          |   41 +
 contrib/libcbor/src/cbor/internal/unicode.c        |   94 +
 contrib/libcbor/src/cbor/internal/unicode.h        |   32 +
 contrib/libcbor/src/cbor/ints.c                    |  191 ++
 contrib/libcbor/src/cbor/ints.h                    |  210 ++
 contrib/libcbor/src/cbor/maps.c                    |  125 +
 contrib/libcbor/src/cbor/maps.h                    |  112 +
 contrib/libcbor/src/cbor/serialization.c           |  286 +++
 contrib/libcbor/src/cbor/serialization.h           |  135 ++
 contrib/libcbor/src/cbor/streaming.c               |  664 ++++++
 contrib/libcbor/src/cbor/streaming.h               |   37 +
 contrib/libcbor/src/cbor/strings.c                 |  133 ++
 contrib/libcbor/src/cbor/strings.h                 |  153 ++
 contrib/libcbor/src/cbor/tags.c                    |   43 +
 contrib/libcbor/src/cbor/tags.h                    |   65 +
 contrib/libcbor/src/libcbor.pc.in                  |   11 +
 contrib/libcbor/test/CMakeLists.txt                |   29 +
 contrib/libcbor/test/assertions.c                  |   53 +
 contrib/libcbor/test/assertions.h                  |   34 +
 contrib/libcbor/test/bad_inputs_test.c             |  121 +
 contrib/libcbor/test/callbacks_test.c              |   40 +
 contrib/libcbor/test/cbor_serialize_test.c         |  323 +++
 contrib/libcbor/test/cbor_stream_decode_test.c     |  599 +++++
 contrib/libcbor/test/copy_test.c                   |  207 ++
 contrib/libcbor/test/cpp_linkage_test.cpp          |   11 +
 contrib/libcbor/test/data/callbacks.cbor           |  Bin 0 -> 79 bytes
 contrib/libcbor/test/data/callbacks.diag           |    1 +
 contrib/libcbor/test/data/pretty.cbor              |    3 +
 contrib/libcbor/test/data/pretty.diag              |    1 +
 contrib/libcbor/test/fuzz_test.c                   |   87 +
 contrib/libcbor/test/memory_allocation_test.c      |  277 +++
 contrib/libcbor/test/pretty_printer_test.c         |   43 +
 contrib/libcbor/test/stack_over_limit_test.c       |   35 +
 contrib/libcbor/test/stream_expectations.c         |  317 +++
 contrib/libcbor/test/stream_expectations.h         |  151 ++
 contrib/libcbor/test/type_0_encoders_test.c        |   74 +
 contrib/libcbor/test/type_0_test.c                 |  147 ++
 contrib/libcbor/test/type_1_encoders_test.c        |   75 +
 contrib/libcbor/test/type_1_test.c                 |  102 +
 contrib/libcbor/test/type_2_encoders_test.c        |   41 +
 contrib/libcbor/test/type_2_test.c                 |  327 +++
 contrib/libcbor/test/type_3_encoders_test.c        |   41 +
 contrib/libcbor/test/type_3_test.c                 |  242 ++
 contrib/libcbor/test/type_4_encoders_test.c        |   55 +
 contrib/libcbor/test/type_4_test.c                 |  127 +
 contrib/libcbor/test/type_5_encoders_test.c        |   40 +
 contrib/libcbor/test/type_5_test.c                 |  190 ++
 contrib/libcbor/test/type_6_encoders_test.c        |   35 +
 contrib/libcbor/test/type_6_test.c                 |  117 +
 contrib/libcbor/test/type_7_encoders_test.c        |  109 +
 contrib/libcbor/test/type_7_test.c                 |  111 +
 contrib/libcbor/test/unicode_test.c                |   41 +
 151 files changed, 16202 insertions(+)

diff --git a/contrib/libcbor/.clang-format b/contrib/libcbor/.clang-format
new file mode 100644
index 000000000000..de0dc5e77907
--- /dev/null
+++ b/contrib/libcbor/.clang-format
@@ -0,0 +1,151 @@
+---
+Language:        Cpp
+# BasedOnStyle:  Google
+AccessModifierOffset: -1
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlines: Left
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: true
+AllowShortLoopsOnASingleLine: true
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:   
+  AfterClass:      false
+  AfterControlStatement: false
+  AfterEnum:       false
+  AfterFunction:   false
+  AfterNamespace:  false
+  AfterObjCDeclaration: false
+  AfterStruct:     false
+  AfterUnion:      false
+  AfterExternBlock: false
+  BeforeCatch:     false
+  BeforeElse:      false
+  IndentBraces:    false
+  SplitEmptyFunction: true
+  SplitEmptyRecord: true
+  SplitEmptyNamespace: true
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Attach
+BreakBeforeInheritanceComma: false
+BreakInheritanceList: BeforeColon
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakConstructorInitializers: BeforeColon
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: true
+ColumnLimit:     80
+CommentPragmas:  '^ IWYU pragma:'
+CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: true
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros:   
+  - foreach
+  - Q_FOREACH
+  - BOOST_FOREACH
+IncludeBlocks:   Preserve
+IncludeCategories: 
+  - Regex:           '^<ext/.*\.h>'
+    Priority:        2
+  - Regex:           '^<.*\.h>'
+    Priority:        1
+  - Regex:           '^<.*'
+    Priority:        2
+  - Regex:           '.*'
+    Priority:        3
+IncludeIsMainRegex: '([-_](test|unittest))?$'
+IndentCaseLabels: true
+IndentPPDirectives: None
+IndentWidth:     2
+IndentWrappedFunctionNames: false
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBinPackProtocolList: Never
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakAssignment: 2
+PenaltyBreakBeforeFirstCallParameter: 1
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyBreakTemplateDeclaration: 10
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 200
+PointerAlignment: Left
+RawStringFormats: 
+  - Language:        Cpp
+    Delimiters:      
+      - cc
+      - CC
+      - cpp
+      - Cpp
+      - CPP
+      - 'c++'
+      - 'C++'
+    CanonicalDelimiter: ''
+    BasedOnStyle:    google
+  - Language:        TextProto
+    Delimiters:      
+      - pb
+      - PB
+      - proto
+      - PROTO
+    EnclosingFunctions: 
+      - EqualsProto
+      - EquivToProto
+      - PARSE_PARTIAL_TEXT_PROTO
+      - PARSE_TEST_PROTO
+      - PARSE_TEXT_PROTO
+      - ParseTextOrDie
+      - ParseTextProtoOrDie
+    CanonicalDelimiter: ''
+    BasedOnStyle:    google
+ReflowComments:  true
+SortIncludes:    true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeCpp11BracedList: false
+SpaceBeforeCtorInitializerColon: true
+SpaceBeforeInheritanceColon: true
+SpaceBeforeParens: ControlStatements
+SpaceBeforeRangeBasedForLoopColon: true
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 2
+SpacesInAngles:  false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Auto
+StatementMacros: 
+  - Q_UNUSED
+  - QT_REQUIRE_VERSION
+TabWidth:        8
+UseTab:          Never
+...
+
diff --git a/contrib/libcbor/.github/workflows/fuzz.yml b/contrib/libcbor/.github/workflows/fuzz.yml
new file mode 100644
index 000000000000..c5275121868f
--- /dev/null
+++ b/contrib/libcbor/.github/workflows/fuzz.yml
@@ -0,0 +1,23 @@
+name: CIFuzz
+on: [pull_request]
+jobs:
+  Fuzzing:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Build Fuzzers
+      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'libcbor'
+        dry-run: false
+    - name: Run Fuzzers
+      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'libcbor'
+        fuzz-seconds: 600
+        dry-run: false
+    - name: Upload Crash
+      uses: actions/upload-artifact@v1
+      if: failure()
+      with:
+        name: artifacts
+        path: ./out/artifacts
diff --git a/contrib/libcbor/.gitignore b/contrib/libcbor/.gitignore
new file mode 100644
index 000000000000..b6fe00f938ad
--- /dev/null
+++ b/contrib/libcbor/.gitignore
@@ -0,0 +1,8 @@
+build
+*~
+nbproject
+.idea
+doxygen_docs
+*/*.out
+cmake-build-debug
+venv
diff --git a/contrib/libcbor/.travis.yml b/contrib/libcbor/.travis.yml
new file mode 100644
index 000000000000..288de2903399
--- /dev/null
+++ b/contrib/libcbor/.travis.yml
@@ -0,0 +1,66 @@
+language: c
+
+matrix:
+  include:
+    - arch: amd64
+      os: linux
+      dist: bionic
+      compiler: clang
+      env: TRAVIS_ARCH="amd64"
+    - arch: amd64
+      os: linux
+      dist: bionic
+      compiler: gcc
+      env: TRAVIS_ARCH="amd64"
+    - arch: arm64
+      os: linux
+      dist: bionic
+      compiler: gcc
+      env: TRAVIS_ARCH="arm64"
+    - arch: ppc64le
+      os: linux
+      dist: bionic
+      compiler: gcc
+      env: TRAVIS_ARCH="ppc64le"
+    - arch: amd64
+      os: osx
+      compiler: gcc
+      env: TRAVIS_ARCH="amd64"
+
+before_install:
+  - pushd ${HOME}
+  - git clone https://gitlab.com/cmocka/cmocka.git
+  - cd cmocka && mkdir build && cd build
+  - cmake .. && make -j2 && sudo make install
+  - cd .. && popd
+  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; sudo apt-get install -y clang-format-8 cppcheck; fi
+  - if [ "$TRAVIS_OS_NAME" = "linux" -a "$CC" = "gcc" -a "$TRAVIS_ARCH" = "amd64" ]; then pip install --user codecov; export CFLAGS="-coverage"; fi
+
+script:
+  - >
+    if [ "$TRAVIS_OS_NAME" = "linux" ]; then
+      cppcheck . --error-exitcode=1
+      # Fail if re-formatting creates diffs (implying bad formatting)
+      /clang-format.sh --verbose
+      git diff-index --quiet HEAD
+    fi;
+  - mkdir build && cd build
+  - cmake -DWITH_TESTS=ON
+          -DCBOR_CUSTOM_ALLOC=ON
+          -DCMAKE_BUILD_TYPE=Debug
+          -DSANITIZE=OFF
+          ..
+  - make VERBOSE=1
+  - ctest -VV
+  - ctest -T memcheck | tee memcheck.out
+  - >
+    if grep -q 'Memory Leak\|IPW\|Uninitialized Memory Conditional\|Uninitialized Memory Read' memcheck.out; then
+      exit 1
+    fi;
+
+
+after_success:
+  - if [ "$TRAVIS_OS_NAME" = "linux" -a "$CC" = "gcc" -a "$TRAVIS_ARCH" = "amd64" ]; then codecov; fi
+
+notifications:
+  email: false
diff --git a/contrib/libcbor/CHANGELOG.md b/contrib/libcbor/CHANGELOG.md
new file mode 100644
index 000000000000..0f13a45d6b24
--- /dev/null
+++ b/contrib/libcbor/CHANGELOG.md
@@ -0,0 +1,109 @@
+Next
+---------------------
+
+0.8.0 (2020-09-20)
+---------------------
+- BUILD BREAKING: Use BUILD_SHARED_LIBS to determine how to build libraries (fixed Windows linkage) [[#148]](https://github.com/PJK/libcbor/pull/148) (by [intelligide@](https://github.com/intelligide))
+- BREAKING: Fix `cbor_tag_item` not increasing the reference count on the tagged item reference it returns [[Fixes #109](https://github.com/PJK/libcbor/issues/109)] (discovered bt [JohnGilmour](https://github.com/JohnGilmour))
+  - If you have previously relied on the broken behavior, you can use `cbor_move` to emulate as long as the returned handle is an "rvalue"
+- BREAKING: [`CBOR_DECODER_EBUFFER` removed from `cbor_decoder_status`](https://github.com/PJK/libcbor/pull/156)
+    - `cbor_stream_decode` will set `CBOR_DECODER_NEDATA` instead if the input buffer is empty
+- [Fix `cbor_stream_decode`](https://github.com/PJK/libcbor/pull/156) to set `cbor_decoder_result.required` to the minimum number of input bytes necessary to receive the next callback (as long as at least one byte was passed) (discovered by [woefulwabbit](https://github.com/woefulwabbit))
+- Fixed several minor manpage issues [[#159]](https://github.com/PJK/libcbor/pull/159) (discovered by [kloczek@](https://github.com/kloczek))
+
+0.7.0 (2020-04-25)
+---------------------
+- Fix bad encoding of NaN half-floats [[Fixes #53]](https://github.com/PJK/libcbor/issues/53) (discovered by [BSipos-RKF](https://github.com/BSipos-RKF))
+    - **Warning**: Previous versions encoded NaNs as `0xf9e700` instead of `0xf97e00`; if you rely on the broken behavior, this will be a breaking change
+- Fix potentially bad encoding of negative half-float with exponent < -14 [[Fixes #112]](https://github.com/PJK/libcbor/issues/112) (discovered by [yami36](https://github.com/yami36))
+- BREAKING: Improved bool support [[Fixes #63]](https://github.com/PJK/libcbor/issues/63)
+    - Rename `cbor_ctrl_is_bool` to `cbor_get_bool` and fix the behavior
+    - Add `cbor_set_bool`
+- Fix memory_allocation_test breaking the build without CBOR_CUSTOM_ALLOC [[Fixes #128]](https://github.com/PJK/libcbor/issues/128) (by [panlinux](https://github.com/panlinux))
+- [Fix a potential build issue where cJSON includes may be misconfigured](https://github.com/PJK/libcbor/pull/132)
+- Breaking: [Add a limit on the size of the decoding context stack](https://github.com/PJK/libcbor/pull/138) (by [James-ZHANG](https://github.com/James-ZHANG))
+    - If your usecase requires parsing very deeply nested structures, you might need to increase the default 2k limit via `CBOR_MAX_STACK_SIZE` 
+- Enable LTO/IPO based on [CheckIPOSupported](https://cmake.org/cmake/help/latest/module/CheckIPOSupported.html#module:CheckIPOSupported) [[#143]](https://github.com/PJK/libcbor/pull/143) (by [xanderlent](https://github.com/xanderlent))
+    - If you rely on LTO being enabled and use CMake version older than 3.9, you will need to re-enable it manually or upgrade your CMake 
+
+0.6.1 (2020-03-26)
+---------------------
+- [Fix bad shared library version number](https://github.com/PJK/libcbor/pull/131)
+    - **Warning**: Shared library built from the 0.6.0 release is erroneously marked as version "0.6.0", which makes it incompatible with future releases *including the v0.6.X line* even though they may be compatible API/ABI-wise. Refer to the documentation for the new SO versioning scheme.
+
+0.6.0 (2020-03-15)
+---------------------
+- Correctly set .so version [[Fixes #52]](https://github.com/PJK/libcbor/issues/52). 
+    - **Warning**: All previous releases will be identified as 0.0 by the linker.
+- Fix & prevent heap overflow error in example code [[#74]](https://github.com/PJK/libcbor/pull/74) [[#76]](https://github.com/PJK/libcbor/pull/76) (by @nevun)
+- Correctly set OSX dynamic library version [[Fixes #75]](https://github.com/PJK/libcbor/issues/75)
+- [Fix misplaced 0xFF bytes in maps possibly causing memory corruption](https://github.com/PJK/libcbor/pull/82)
+- BREAKING: Fix handling & cleanup of failed memory allocation in constructor
+  and builder helper functions [[Fixes #84]](https://github.com/PJK/libcbor/issues/84)
+  - All cbor_new_* and cbor_build_* functions will now explicitly return NULL when memory allocation fails
+  - It is up to the client to handle such cases
+- Globally enforced code style [[Fixes #83]](https://github.com/PJK/libcbor/issues/83)
+- Fix issue possible memory corruption bug on repeated 
+  cbor_(byte)string_add_chunk calls with intermittently failing realloc calls
+- Fix possibly misaligned reads and writes when endian.h is uses or when
+  running on a big-endian machine [[Fixes #99](https://github.com/PJK/libcbor/issues/99), [#100](https://github.com/PJK/libcbor/issues/100)]
+- [Improved CI setup with Travis-native arm64 support](https://github.com/PJK/libcbor/pull/116)
+- [Docs migrated to Sphinx 2.4 and Python3](https://github.com/PJK/libcbor/pull/117)
+
+0.5.0 (2017-02-06)
+---------------------
+- Remove cmocka from the subtree (always rely on system or user-provided version)
+- Windows CI
+- Only build tests if explicitly enabled (`-DWITH_TESTS=ON`)
+- Fixed static header declarations (by cedric-d)
+- Improved documentation (by Michael Richardson)
+- Improved `examples/readfile.c`
+- Reworked (re)allocation to handle huge inputs and overflows in size_t [[Fixes #16]](https://github.com/PJK/libcbor/issues/16)
+- Improvements to C++ linkage (corrected `cbor_empty_callbacks`, fixed `restrict` pointers) (by Dennis Bijwaard)
+- Fixed Linux installation directory depending on architecture [[Fixes #34]](https://github.com/PJK/libcbor/issues/34) (by jvymazal)
+- Improved 32-bit support [[Fixes #35]](https://github.com/PJK/libcbor/issues/35)
+- Fixed MSVC compatibility [[Fixes #31]](https://github.com/PJK/libcbor/issues/31)
+- Fixed and improved half-float encoding [[Fixes #5](https://github.com/PJK/libcbor/issues/5), [#11](https://github.com/PJK/libcbor/issues/11)]
+
+0.4.0 (2015-12-25)
+---------------------
+Breaks build & header compatibility due to:
+
+- Improved build configuration and feature check macros
+- Endianess configuration fixes (by Erwin Kroon and David Grigsby)
+- pkg-config compatibility (by Vincent Bernat)
+- enable use of versioned SONAME (by Vincent Bernat)
+- better fuzzer (wasn't random until now, ooops)
+
+0.3.1 (2015-05-21)
+---------------------
+- documentation and comments improvements, mostly for the API reference
+
+0.3.0 (2015-05-21)
+---------------------
+
+- Fixes, polishing, niceties across the code base
+- Updated examples
+- `cbor_copy`
+- `cbor_build_negint8`, 16, 32, 64, matching asserts
+- `cbor_build_stringn`
+- `cbor_build_tag`
+- `cbor_build_float2`, ...
+
+0.2.1 (2015-05-17)
+---------------------
+- C99 support
+
+0.2.0 (2015-05-17)
+---------------------
+
+- `cbor_ctrl_bool` -> `cbor_ctrl_is_bool`
+- Added `cbor_array_allocated` & map equivalent
+- Overhauled endianess conversion - ARM now works as expected
+- 'sort.c' example added
+- Significantly improved and doxyfied documentation
+
+0.1.0 (2015-05-06)
+---------------------
+
+The initial release, yay!
diff --git a/contrib/libcbor/CMakeLists.txt b/contrib/libcbor/CMakeLists.txt
new file mode 100644
index 000000000000..edba03720d2f
--- /dev/null
+++ b/contrib/libcbor/CMakeLists.txt
@@ -0,0 +1,159 @@
+cmake_minimum_required(VERSION 2.8)
+project(libcbor)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
+include(CTest)
+
+SET(CBOR_VERSION_MAJOR "0")
+SET(CBOR_VERSION_MINOR "8")
+SET(CBOR_VERSION_PATCH "0")
+SET(CBOR_VERSION ${CBOR_VERSION_MAJOR}.${CBOR_VERSION_MINOR}.${CBOR_VERSION_PATCH})
+
+set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true)
+include(CheckIncludeFiles)
+
+include(TestBigEndian)
+test_big_endian(BIG_ENDIAN)
+if(BIG_ENDIAN)
+    add_definitions(-DIS_BIG_ENDIAN)
+endif()
+
+option(CBOR_CUSTOM_ALLOC "Custom, dynamically defined allocator support" OFF)
+option(CBOR_PRETTY_PRINTER "Include a pretty-printing routine" ON)
+set(CBOR_BUFFER_GROWTH "2" CACHE STRING "Factor for buffer growth & shrinking")
+set(CBOR_MAX_STACK_SIZE "2048" CACHE STRING "maximum size for decoding context stack")
+
+option(WITH_TESTS "[TEST] Build unit tests (requires CMocka)" OFF)
+if(WITH_TESTS)
+    add_definitions(-DWITH_TESTS)
+endif(WITH_TESTS)
+
+option(WITH_EXAMPLES "Build examples" ON)
+
+option(HUGE_FUZZ "[TEST] Fuzz through 8GB of data in the test. Do not use with memory instrumentation!" OFF)
+if(HUGE_FUZZ)
+    add_definitions(-DHUGE_FUZZ)
+endif(HUGE_FUZZ)
+
+option(SANE_MALLOC "[TEST] Assume that malloc will not allocate multi-GB blocks. Tests only, platform specific" OFF)
+if(SANE_MALLOC)
+    add_definitions(-DSANE_MALLOC)
+endif(SANE_MALLOC)
+
+option(PRINT_FUZZ "[TEST] Print the fuzzer input" OFF)
+if(PRINT_FUZZ)
+    add_definitions(-DPRINT_FUZZ)
+endif(PRINT_FUZZ)
+
+option(SANITIZE "Enable ASan & a few compatible sanitizers in Debug mode" ON)
+
+set(CPACK_GENERATOR "DEB" "TGZ" "RPM")
+set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Pavel Kalvoda")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6")
+set(CPACK_PACKAGE_VERSION_MAJOR ${CBOR_VERSION_MAJOR})
+set(CPACK_PACKAGE_VERSION_MINOR ${CBOR_VERSION_MINOR})
+set(CPACK_PACKAGE_VERSION_PATCH ${CBOR_VERSION_PATCH})
+
+include(CPack)
+
+if(MINGW)
+    # https://github.com/PJK/libcbor/issues/13
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+elseif(NOT MSVC)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic")
+endif()
+
+if(MSVC)
+    # This just doesn't work right -- https://msdn.microsoft.com/en-us/library/5ft82fed.aspx
+    set(CBOR_RESTRICT_SPECIFIER "")
+else()
+    set(CBOR_RESTRICT_SPECIFIER "restrict")
+
+    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -Wall -g -ggdb -DDEBUG=true")
+    set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -Wall -DNDEBUG")
+
+    if(SANITIZE)
+        set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} \
+            -fsanitize=undefined -fsanitize=address \
+            -fsanitize=bounds -fsanitize=alignment")
+    endif()
+endif()
+
+set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-g")
+
+
+include(CheckTypeSize)
+check_type_size("size_t" SIZEOF_SIZE_T)
+if(SIZEOF_SIZE_T LESS 8)
+    message(WARNING "Your size_t is less than 8 bytes. Long items with 64b length specifiers might not work as expected. Make sure to run the tests!")
+else()
+    add_definitions(-DEIGHT_BYTE_SIZE_T)
+endif()
+
+enable_testing()
+
+set(CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind")
+set(MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --track-origins=yes --leak-check=full --error-exitcode=1")
+
+add_custom_target(coverage
+                  COMMAND ctest
+                  COMMAND lcov --capture --directory . --output-file coverage.info
+                  COMMAND genhtml coverage.info --highlight --legend --output-directory coverage_html
+                  COMMAND echo "Coverage report ready: file://${CMAKE_CURRENT_BINARY_DIR}/coverage_html/index.html")
+include_directories(src)
+
+
+option(COVERAGE "Enable code coverage instrumentation" OFF)
+if (COVERAGE)
+    message("Configuring code coverage instrumentation")
+    if(NOT CMAKE_C_COMPILER MATCHES "gcc")
+        message(WARNING "Gcov instrumentation only works with GCC")
+    endif()
+    # https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fprofile-arcs -ftest-coverage --coverage")
+    set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -g -fprofile-arcs -ftest-coverage --coverage")
+endif (COVERAGE)
+
+
+# We want to generate configuration.h from the template and make it so that it is accessible using the same
+# path during both library build and installed header use, without littering the source dir.
+# Using cbor/configuration.h in the build dir works b/c headers will be installed to <prefix>/cbor
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/cbor/configuration.h.in ${PROJECT_BINARY_DIR}/cbor/configuration.h)
+install(FILES ${PROJECT_BINARY_DIR}/cbor/configuration.h DESTINATION include/cbor)
+# Make the header visible at compile time
+include_directories(${PROJECT_BINARY_DIR})
+
+# CMake >= 3.9.0 enables LTO for GCC and Clang with INTERPROCEDURAL_OPTIMIZATION
+# Policy CMP0069 enables this behavior when we set the minimum CMake version < 3.9.0
+# Checking for LTO support before setting INTERPROCEDURAL_OPTIMIZATION is mandatory with CMP0069 set to NEW.
+set(use_lto FALSE)
+if(${CMAKE_VERSION} VERSION_GREATER "3.9.0" OR ${CMAKE_VERSION} VERSION_EQUAL "3.9.0")
+    cmake_policy(SET CMP0069 NEW)
+    # Require LTO support to build libcbor with newer CMake versions
+    include(CheckIPOSupported)
+    check_ipo_supported(RESULT use_lto)
+endif(${CMAKE_VERSION} VERSION_GREATER "3.9.0" OR ${CMAKE_VERSION} VERSION_EQUAL "3.9.0")
+if(use_lto)
+    message(STATUS "LTO is enabled")
+else()
+    message(STATUS "LTO is not enabled")
+endif(use_lto)
+
+subdirs(src)
+if(use_lto)
+    set_property(DIRECTORY src PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+endif(use_lto)
+
+if (WITH_TESTS)
+    subdirs(test)
+    if(use_lto)
+        set_property(DIRECTORY test PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+    endif(use_lto)
+endif (WITH_TESTS)
+
+if (WITH_EXAMPLES)
+    subdirs(examples)
+    if(use_lto)
+        set_property(DIRECTORY examples PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+    endif(use_lto)
+endif (WITH_EXAMPLES)
diff --git a/contrib/libcbor/CMakeModules/FindCJSON.cmake b/contrib/libcbor/CMakeModules/FindCJSON.cmake
new file mode 100644
index 000000000000..e0629057def7
--- /dev/null
+++ b/contrib/libcbor/CMakeModules/FindCJSON.cmake
@@ -0,0 +1,9 @@
+include (LibFindMacros)
+
+find_path(CJSON_INCLUDE_DIR NAMES cjson/cJSON.h)
+find_library(CJSON_LIBRARY NAMES cjson)
+
+set(CJSON_PROCESS_INCLUDES CJSON_INCLUDE_DIR)
+set(CJSON_PROCESS_LIBS CJSON_LIBRARY)
+
+libfind_process(CJSON)
diff --git a/contrib/libcbor/CMakeModules/FindCMocka.cmake b/contrib/libcbor/CMakeModules/FindCMocka.cmake
new file mode 100644
index 000000000000..770b44afc426
--- /dev/null
+++ b/contrib/libcbor/CMakeModules/FindCMocka.cmake
@@ -0,0 +1,49 @@
+# - Try to find CMocka
+# Once done this will define
+#
+#  CMOCKA_ROOT_DIR - Set this variable to the root installation of CMocka
+#
+# Read-Only variables:
+#  CMOCKA_FOUND - system has CMocka
+#  CMOCKA_INCLUDE_DIR - the CMocka include directory
+#  CMOCKA_LIBRARIES - Link these to use CMocka
+#  CMOCKA_DEFINITIONS - Compiler switches required for using CMocka
+#
+#=============================================================================
+#  Copyright (c) 2011-2012 Andreas Schneider <asn@cryptomilk.org>
+#
+#  Distributed under the OSI-approved BSD License (the "License");
+#  see accompanying file Copyright.txt for details.
+#
+#  This software is distributed WITHOUT ANY WARRANTY; without even the
+#  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#  See the License for more information.
+#=============================================================================
+#
+
+find_path(CMOCKA_INCLUDE_DIR
+    NAMES
+        cmocka.h
+    PATHS
+        ${CMOCKA_ROOT_DIR}/include
+)
+
+find_library(CMOCKA_LIBRARY
+    NAMES
+        cmocka cmocka_shared
+    PATHS
+        ${CMOCKA_ROOT_DIR}/include
+)
+
+if (CMOCKA_LIBRARY)
+  set(CMOCKA_LIBRARIES
+      ${CMOCKA_LIBRARIES}
+      ${CMOCKA_LIBRARY}
+  )
+endif (CMOCKA_LIBRARY)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CMocka DEFAULT_MSG CMOCKA_LIBRARIES CMOCKA_INCLUDE_DIR)
+
+# show the CMOCKA_INCLUDE_DIR and CMOCKA_LIBRARIES variables only in the advanced view
+mark_as_advanced(CMOCKA_INCLUDE_DIR CMOCKA_LIBRARIES)
diff --git a/contrib/libcbor/CMakeModules/LibFindMacros.cmake b/contrib/libcbor/CMakeModules/LibFindMacros.cmake
new file mode 100644
index 000000000000..baea8c2be928
--- /dev/null
+++ b/contrib/libcbor/CMakeModules/LibFindMacros.cmake
@@ -0,0 +1,120 @@
+#    Fetched from https://github.com/JonathanSalwan/Triton/blob/master/CMakeModules/LibFindMacros.cmake
+#
+#    Copyright:
+#
+#    * Jonathan Salwan (Quarkslab)
+#    * Pierrick Brunet (Quarkslab)
+#    * Romain Thomas (Quarkslab)
+#    * Florent Saudel (Bordeaux University)
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+
+# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments
+# used for the current package. For this to work, the first parameter must be the
+# prefix of the current package, then the prefix of the new package etc, which are
+# passed to find_package.
+macro (libfind_package PREFIX)
+    set (LIBFIND_PACKAGE_ARGS ${ARGN})
+    if (${PREFIX}_FIND_QUIETLY)
+        set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET)
+    endif (${PREFIX}_FIND_QUIETLY)
+    if (${PREFIX}_FIND_REQUIRED)
+        set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED)
+    endif (${PREFIX}_FIND_REQUIRED)
+    find_package(${LIBFIND_PACKAGE_ARGS})
+endmacro (libfind_package)
+
+# CMake developers made the UsePkgConfig system deprecated in the same release (2.6)
+# where they added pkg_check_modules. Consequently I need to support both in my scripts
+# to avoid those deprecated warnings. Here's a helper that does just that.
+# Works identically to pkg_check_modules, except that no checks are needed prior to use.
+macro (libfind_pkg_check_modules PREFIX PKGNAME)
+    if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+        include(UsePkgConfig)
+        pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS)
+    else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+        find_package(PkgConfig)
+        if (PKG_CONFIG_FOUND)
+            pkg_check_modules(${PREFIX} ${PKGNAME})
+        endif (PKG_CONFIG_FOUND)
+    endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+endmacro (libfind_pkg_check_modules)
+
+# Do the final processing once the paths have been detected.
+# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain
+# all the variables, each of which contain one include directory.
+# Ditto for ${PREFIX}_PROCESS_LIBS and library files.
+# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES.
+# Also handles errors in case library detection was required, etc.
+macro (libfind_process PREFIX)
+    # Skip processing if already processed during this run
+    if (NOT ${PREFIX}_FOUND)
+        # Start with the assumption that the library was found
+        set (${PREFIX}_FOUND TRUE)
+
+        # Process all includes and set _FOUND to false if any are missing
+        foreach (i ${${PREFIX}_PROCESS_INCLUDES})
+            if (${i})
+                set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}})
+                mark_as_advanced(${i})
+            else (${i})
+                set (${PREFIX}_FOUND FALSE)
+            endif (${i})
+        endforeach (i)
+
+        # Process all libraries and set _FOUND to false if any are missing
+        foreach (i ${${PREFIX}_PROCESS_LIBS})
+            if (${i})
+                set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}})
+                mark_as_advanced(${i})
+            else (${i})
+                set (${PREFIX}_FOUND FALSE)
+            endif (${i})
+        endforeach (i)
+
+        # Print message and/or exit on fatal error
+        if (${PREFIX}_FOUND)
+            if (NOT ${PREFIX}_FIND_QUIETLY)
+                message (STATUS "Found ${PREFIX} include directory: ${${PREFIX}_INCLUDE_DIR}")
+                message (STATUS "Found ${PREFIX} library: ${${PREFIX}_LIBRARY}")
+            endif (NOT ${PREFIX}_FIND_QUIETLY)
+        else (${PREFIX}_FOUND)
+            if (${PREFIX}_FIND_REQUIRED)
+                foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS})
+                    message("${i}=${${i}}")
+                endforeach (i)
+                message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.")
+            endif (${PREFIX}_FIND_REQUIRED)
+        endif (${PREFIX}_FOUND)
+    endif (NOT ${PREFIX}_FOUND)
+endmacro (libfind_process)
+
+macro(libfind_library PREFIX basename)
+    set(TMP "")
+    if(MSVC80)
+        set(TMP -vc80)
+    endif(MSVC80)
+    if(MSVC90)
+        set(TMP -vc90)
+    endif(MSVC90)
+    set(${PREFIX}_LIBNAMES ${basename}${TMP})
+    if(${ARGC} GREATER 2)
+        set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2})
+        string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES})
+        set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP})
+    endif(${ARGC} GREATER 2)
+    find_library(${PREFIX}_LIBRARY
+            NAMES ${${PREFIX}_LIBNAMES}
+            PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS}
+            )
+endmacro(libfind_library)
diff --git a/contrib/libcbor/Doxyfile b/contrib/libcbor/Doxyfile
new file mode 100644
index 000000000000..b197d2bcdedc
--- /dev/null
+++ b/contrib/libcbor/Doxyfile
@@ -0,0 +1,2417 @@
+# Doxyfile 1.8.12
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "libcbor"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         = 0.8.0
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "libcbor is a C library for parsing and generating CBOR, the general-purpose schema-less binary data format."
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc/build/doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
*** 16279 LINES SKIPPED ***