| [![Build Status](https://travis-ci.org/jimsch/cn-cbor.png?branch=master)](https://travis-ci.org/jimsch/cn-cbor) |
| |
| # cn-cbor: A constrained node implementation of CBOR in C |
| |
| Below is the original README for cn-cbor, a Proof of Concept |
| implementation of [CBOR](https://cbor.io) that I wrote in 2013. |
| People have been sending me fixes and updates to make this |
| implementation more useful for actual use, and for a while I have |
| occasionally integrated them. Jim Schaad now is so far ahead of this |
| repo that you are most likely better off using [his |
| repo](https://github.com/jimsch/cn-cbor) as your upstream. |
| |
| If you *are* here looking for experimental CBOR implementations for |
| constrained nodes, there are many, some of which are listed at |
| [cbor.io](https://cbor.io/impls.html). One more: I have recently |
| [extracted](https://github.com/cabo/bm_cbor) the implementation from |
| ARM-mbed's [SUIT manifest |
| generator](https://github.com/ARMmbed/suit-manifest-generator) (Apache |
| 2.0). SUIT implementers report (CBOR-specific) code sizes in the low |
| hundreds of bytes. Thank you, [ARM](https://github.com/bremoran). |
| |
| # cn-cbor: A constrained node implementation of CBOR in C |
| |
| This is a constrained node implementation of [CBOR](http://cbor.io) in |
| C that I threw together in 2013, before the publication of |
| [RFC 7049](http://tools.ietf.org/html/rfc7049), to validate certain |
| implementability considerations. |
| |
| Its API model was inspired by |
| [nxjson](https://bitbucket.org/yarosla/nxjson). It turns out that |
| this API model actually works even better with the advantages of the |
| CBOR format. |
| |
| This code has been used in a number of research implementations on |
| constrained nodes, with resulting code sizes appreciably under 1 KiB |
| on ARM platforms. |
| |
| I always meant to improve the interface some more with certain API |
| changes, in order to get even closer to 0.5 KiB, but I ran out of |
| time. So here it is. If I do get around to making these changes, the |
| API will indeed change a bit, so please be forewarned. |
| |
| ## Building |
| |
| There is a `Simple-Makefile` for playing around, as well as a complete |
| [`cmake`](http://www.cmake.org)-based build environment. |
| (You can choose what fits your needs better.) |
| |
| Building with `cmake`: |
| |
| ```sh |
| mkdir build |
| cd build |
| cmake .. |
| cmake --build . -- all |
| ``` |
| |
| Generating a test coverage report (requires lcov[^1]; result in `build/lcov/index.html`): |
| |
| ```sh |
| rm -rf build |
| mkdir build |
| cd build |
| cmake .. -DCN_CBOR_COVERALLS_SEND=ON |
| cmake --build . -- all coveralls coverage_report |
| ``` |
| |
| [^1]: Installation with homebrew: `brew install lcov` |
| |
| ## Consuming |
| |
| ### With cmake |
| |
| find_package |
| ```cmake |
| find_package(cn-cbor) |
| add_executable(myapp main.cpp) |
| target_link_libraries(myapp cn-cbor::cn-cbor) |
| ``` |
| |
| add_subdirectory |
| ```cmake |
| add_subdirectory(vendor/cn-cbor) |
| add_executable(myapp main.cpp) |
| target_link_libraries(myapp cn-cbor::cn-cbor) |
| ``` |
| |
| ### With Conan |
| |
| This package is available in the [conan center](https://conan.io/center/cn-cbor/1.0.0) |
| |
| add `cn-cbor/[>=1.0.0]` to you conan file |
| |
| License: MIT |