{"id":19198498,"url":"https://github.com/virgilsecurity/virgil-iotkit","last_synced_at":"2025-05-09T01:19:01.714Z","repository":{"id":146283052,"uuid":"174936475","full_name":"VirgilSecurity/virgil-iotkit","owner":"VirgilSecurity","description":"Virgil IoTKit is a C library for connecting IoT devices to Virgil IoT Security PaaS. IoTKit helps you easily add security to your IoT devices at any lifecycle stage for secure provisioning and authenticating devices, secure updating firmware and trust chain, and for secure exchanging messages using any transport protocols.","archived":false,"fork":false,"pushed_at":"2020-10-13T09:26:03.000Z","size":23824,"stargazers_count":23,"open_issues_count":1,"forks_count":4,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-20T10:41:43.766Z","etag":null,"topics":["c","end-to-end-encryption","firmware-signer","iot","iot-cryptography","iot-device-sdk","iot-security","mbed","sdk","secure-device-provisioning","trustlist-management","virgil-iotkit"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VirgilSecurity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-11T06:10:12.000Z","updated_at":"2024-11-25T04:37:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"92c8f854-f9e0-44e3-a27e-63722bc62a9e","html_url":"https://github.com/VirgilSecurity/virgil-iotkit","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirgilSecurity%2Fvirgil-iotkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirgilSecurity%2Fvirgil-iotkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirgilSecurity%2Fvirgil-iotkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirgilSecurity%2Fvirgil-iotkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VirgilSecurity","download_url":"https://codeload.github.com/VirgilSecurity/virgil-iotkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253171488,"owners_count":21865341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","end-to-end-encryption","firmware-signer","iot","iot-cryptography","iot-device-sdk","iot-security","mbed","sdk","secure-device-provisioning","trustlist-management","virgil-iotkit"],"created_at":"2024-11-09T12:22:29.111Z","updated_at":"2025-05-09T01:19:01.701Z","avatar_url":"https://github.com/VirgilSecurity.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Virgil IoTKit\n[![Documentation Doxygen](https://img.shields.io/badge/docs-doxygen-blue.svg)](https://virgilsecurity.github.io/virgil-iotkit/)\n[![GitHub license](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](https://raw.githubusercontent.com/VirgilSecurity/virgil-iotkit/release/LICENSE)\n\n\n\n\u003ca href=\"https://developer.virgilsecurity.com/docs\"\u003e\u003cimg width=\"230px\" src=\"https://cdn.virgilsecurity.com/assets/images/github/logos/iotkit/IoTKit.png\" align=\"left\" hspace=\"1\" vspace=\"3\"\u003e\u003c/a\u003e\n\n## Introduction\n[Virgil Security](https://virgilsecurity.com) provides a set of APIs for adding security to any application or IoT device.\n\nVirgil IoTKit is a C library for connecting IoT devices to the Virgil IoT Security Platform. IoTKit helps you easily add security to your IoT devices at any lifecycle stage for securely provisioning and authenticating devices, updating firmware and TrustLists, and exchanging messages using any transport protocols.\n\n## Content\n- [Features](#features)\n- [IoT Dev Tools](#iot-dev-tools)\n- [Run IoTKit Sandbox](#run-iotkit-sandbox)\n- [IoTKit Modules](#modules)\n- [Scripts](#scripts)\n- [Installation](#installation)\n  - [Prerequisites](#prerequisites)\n  - [Ubuntu, Debian, Raspbian OS](#ubuntu-debian-raspbian-os)\n  - [Fedora OS](#fedora-os)\n  - [MacOS](#macos)\n  - [Windows OS](#windows-os)\n  - [Ready Linux packets](#ready-linux-packets)\n  - [Qt integration](#qt-integration)\n- [Tests](#tests)\n- [IoTKit Usage](#iotkit-usage)\n  - [Configuration parameters](#config-params)\n  - [Mandatory implementations](#mandatory-implementations)\n  - [Default mandatory implementations](#default-mandatory-implementations)\n- [API Reference](#api-reference)\n- [License](#license)\n- [Support](#support)\n\n\u003cdiv id='features'/\u003e\n\n## Features\nVirgil IoTKit provides a set of features for IoT device security and management:\n- **Crypto Module. Connect any crypto library and Security Module**. Virgil IoTKit provides a flexible and simple API for any types of crypto library and SECMODULE. The framework also provides default Software Security Module implementation based on the Virgil Crypto Library. (Support for ATECC608A and ATECC508A in the next version).\n- **Provision Module. Secure IoT device provision**. In order to securely update firmware and securely register, authenticate or exchange messages between IoT devices, each IoT device must have its own tools that allow the device to perform cryptographic operations. These tools must contain information needed to identify the device or other participants (e.g. the TrustList provider). These tools are the device keys, TrustLists, device card, etc. The process of providing your IoT devices with these tools is called device provisioning, and Virgil IoTKit gives you all the functionality needed to make your IoT devices identifiable and verifiable, as a result, protected from counterfeiting and fabrication.\n- **Firmware Module. Secure firmware and TrustList verification and distribution**. IoTKit provides a set of APIs for secure verification of firmware in a bootloader. Also, IoTKit provides an example of bootloader implementation in the form of emulator.\n- **Secbox Module. Secure storage software for any sensitive data**. IoTKit provides secure storage software that is called **Secbox** for storing any sensitive data, like private keys. The Secbox works in two modes; the first mode - when data is only signed, and the second one - when data is encrypted and then signed.\n- **Protocols Module**. IoTKit provides a flexible, programmable security network adaptive protocol (SNAP) for device-to-device, device-to-cloud, and cloud-to-device communication. SNAP can be used for secure firmware distribution, secure notification about device state, and secure device provision. Also, SNAP contains a set of functions and interfaces that allows you to work with any transport protocol (BLE, Wi-Fi, PLC, NoiseSocket, etc.).  \n- **Cloud Module. API for working with the Virgil IoT Security Platform**. IoTKit interacts with the Virgil IoT Security Platform to provide you with the services for the security, management, and monitoring of IoT devices.\n- **Logger Module**. IoTKit contains a set of functions and interfaces for logging device events.\n- **C/C++ support**. Library is implemented on C99. There is C++ integration based on Qt crossplatform library. Also there are tools implemented on Golang.\n\n\u003cdiv id='iot-dev-tools'/\u003e\n\n## IoT Dev Tools\nVirgil Security also provides a set of tools for secure device lifecycle:\n- **Virgil Trust Provisioner**. The Virgil Trust Provisioner is a CLI used to manage your distributed trust between all parties, including IoT devices, in your IoT solutions. The CLI is aimed at key pairs and TrustList generation and management, which together make each IoT device identifiable, verifiable and trusted by each party of IoT solution. To start working with the tool, read more [here](/tools/virgil-trust-provisioner).\n- **Virgil Device Initializer**. In order to make each IoT device identifiable, verifiable and trusted by each party of IoT solution, you have to provide it with specific provision files, generate private keys and create the digital cards for further device registration on the Virgil Cloud. Virgil Device Initializer allows you to make IoT device provisioning and prepare your IoT device (create digital cards) for its further registration on the Virgil Cloud. To start working with the tool, read more [here](/tools/virgil-device-initializer).\n- **Virgil Device Registrar**. Virgil IoT Device Registrar is used to register IoT devices and their digital cards with the Virgil Security Cloud. To start working with the tool, read more [here](/tools/virgil-device-registrar).\n- **Virgil Firmware Signer**. Virgil Firmware Signer is a CLI that allows you to sign firmware in order to provide integrity before distributing it. To start working with the tool, read more [here](/tools/virgil-firmware-signer).\n- **Virgil SnapD**. Virgil SnapD is a local web utility which allows you to obtain information and statistics about your IoT devices. In order to get such device information, SnapD interacts with Virgil SNAP protocol, which operates directly with your IoT devices. As far as Virgil SnapD is a local service, the obtained information can be displayed in browser under http://localhost:8080/ (by default). If you're working with the Virgil IoT Simulator, you can run SnapD under http://localhost:8081/. To start working with the tool, read more [here](/tools/virgil-snapd).\n\n\u003cdiv id='run-iotkit-sandbox'/\u003e\n\n## Run IoTKit Sandbox\nTo demonstrate our IoTKit in action we developed [Sandbox based on IoTKit](/scripts).\n\nThe Sandbox is conditionally divided into 3 actors (Vendor, Factory and End-user) and shows the secure lifecycle of IoT devices. The Sandbox allows you to:\n- **Generate trusted provisioning package**. To start working with emulated IoT infrastructure, the Sandbox uses Virgil Trust Provisioner utility for generating provisioning files, such as private keys (e.g. for factory, firmware) and a distributed TrustList that contains public keys and signatures of trusted service providers (e.g. factory, cloud).\n- **Emulate IoT devices**. Then, you can emulate two IoT device types: IoT Gateway - an internet-capable smart device that communicates with other IoT devices and the Virgil Cloud; and IoT Device - edge device, like smart bulb, that can be controlled remotely through the IoT Gateway.\n- **Securely perform IoT device provisioning**. Sandbox uses the Virgil Device Initializer for IoT devices provisioning to make them identifiable, verifiable and trusted. Securely integrate TrusList into IoT device, then generate key pair and create digital card, and sign digital card with the device key.\n- **Register IoT devices on the security platform**. On this step, the Virgil Device Registrar is used to register digital cards of IoT devices with the Virgil Cloud for further device authentication and management.\n- **Sign and publish new Firmware and TrustList**. Also, you can emulate the process of creating and publishing new Firmware or TrustList to Virgil Cloud. Sandbox uses Virgil Firmware Signer to sign a firmware before its distributing.\n- **Manage IoT devices**. Sandbox allows you to manage IoT devices and get information about their state. Sandbox uses Virgil services to notify IoT devices about new updates and then securely verify incoming firmware or TrustLists before updating them.\n\n\u003cimg width=\"100%\" src=\"https://cdn.virgilsecurity.com/assets/images/github/web_demo/web_sandbox_demo.png?demo\" align=\"left\" hspace=\"0\" vspace=\"6\"\u003e\n\n\nTo start working with the Sandbox follow [Sandbox README](/scripts).\n\nYou can try to use [Demo IoTKit Qt](https://github.com/VirgilSecurity/demo-iotkit-qt/) open project on your platform to test Qt integration usage. This software grants you modern GUI application able to be started on many desktop and mobile platforms like Linux, Windows, Android, iOS etc.\n\n\u003cdiv id='modules'/\u003e\n\n## IoTKit Modules\nAs we mentioned above, Virgil IoTKit provides a set of features that implemented to modules:\n- **[Cloud Module](https://virgilsecurity.github.io/virgil-iotkit/cloud_8h.html)** is used for for obtaining credentials from Virgil Thing service and downloading firmware images and TrustList files from cloud storage.\n- **Crypto Module** is used for cryptographic operations with callbacks for [Software Security Module](https://virgilsecurity.github.io/virgil-iotkit/secmodule_8h.html) and [cryptographic converters](https://virgilsecurity.github.io/virgil-iotkit/crypto__format__converters_8h.html).\n- **[Firmware Module](https://virgilsecurity.github.io/virgil-iotkit/firmware_8h.html)** is used for firmware downloading, uploading and processing by IoT Gateway or by Thing (IoT Device).\n- **[Logger](https://virgilsecurity.github.io/virgil-iotkit/logger_8h.html)** is a tool is used to output logging messages to screen, file etc.\n- **[Provision](https://virgilsecurity.github.io/virgil-iotkit/provision_8h.html)**. TrustList keys reading and verifying.\n- **[Secbox](https://virgilsecurity.github.io/virgil-iotkit/secbox_8h.html)** is a secure data storage wth signing and authenticating abilities.\n- **Protocols Module** provides the set of services for [SNAP](https://virgilsecurity.github.io/virgil-iotkit/snap_8h.html) protocol:\n  - INFO: service for collecting statistics from devices. See [INFO Server](https://virgilsecurity.github.io/virgil-iotkit/info-server_8h.html) and [INFO Client](https://virgilsecurity.github.io/virgil-iotkit/info-client_8h.html)\n  - FLDT: service for files download from Gateway to Thing. See [FLDT Server](https://virgilsecurity.github.io/virgil-iotkit/fldt-server_8h.html) and [FLDT Client](https://virgilsecurity.github.io/virgil-iotkit/fldt-client_8h.html)\n  - PRVS: service for make provision for device by factory initializer. See [PRVS Server](https://virgilsecurity.github.io/virgil-iotkit/prvs-server_8h.html) and [PRVS Client](https://virgilsecurity.github.io/virgil-iotkit/prvs-client_8h.html)\n\n\u003cdiv id='scripts'/\u003e\n\n## Scripts\nVirgil IoTKit also contains a set of scripts that can be run from the [scripts folder](/scripts).\n- `run-sandbox` is used to run IoTKit sandbox. Read more about the sandbox and its functionality [here](/scripts).\n- `publish-firmware.sh` is used to publish a signed firmware on the Virgil Cloud for its distribution to IoT devices. Read more about firmware distribution [here](/tools/virgil-firmware-signer#firmware-distribution).\n- `publish-trustlist.sh` is used to publish a generated TrustList on the Virgil Cloud for its distribution to IoT devices. Read more about TrustLists distribution [here](/tools/virgil-trust-provisioner#trustlist-distribution).\n- `build-for-qt.sh` is used to generate Virgil IoTKit libraries for different platform. If you run this script without parameters, it will output all supported platforms. Usage examples :\n  - To get a library for Android : `ext/virgil-iotkit/scripts/build-for-qt.sh android armeabi-v7a`\n  - To get a library for iOS : `ext/virgil-iotkit/scripts/build-for-qt.sh ios`\n  - To get a library for iOS-simulator: `ext/virgil-iotkit/scripts/build-for-qt.sh ios-sim`\n  - To get a library for Linux : `ext/virgil-iotkit/scripts/build-for-qt.sh linux`\n  - To get a library for MacOS : `ext/virgil-iotkit/scripts/build-for-qt.sh macos`\n  - To get a library for Windows by using mingw32 on another host platform : `ext/virgil-iotkit/scripts/build-for-qt.sh mingw32`\n  - To get a library for Windows : `ext/virgil-iotkit/scripts/build-for-qt.sh windows`. See [Windows installation](/windows-installation) for running script details.\n\n\u003cdiv id='installation'/\u003e\n\n## Installation\nVirgil IoTKit is distributed as a package. This section demonstrates on how to install Virgil IoTKit for preferred platform.\n\n\u003cdiv id='prerequisites'/\u003e\n\n### Prerequisites\nTo start working with Virgil IoTKit the following components are required:\n- C99 for C.\n- CMake v3.11 or higher, for project building\n- GCC or another toolchain for C/C++ compile\n- [Golang](https://golang.org/) to compile Virgil IoT dev tools\n- [git](https://git-scm.com/) for Virgil Crypto installation and update\n- [curl](https://curl.haxx.se/) for default NIX implementation\n\nAlso Virgil IoTKit has C++/Qt integration based on Qt crossplatform library. Following components are required to use Qt integration:\n- C++14.\n- Qt 5.12.6 or higher.\n- Qt built for your target platform: Android, iOS, Linux, MacOS, Windows etc.\n\n\u003cdiv id='ubuntu-debian-raspbian-os'/\u003e\n\n### Ubuntu, Debian, Raspbian OS\nTo download and install the Virgil IoTKit on Ubuntu, use the following command:\n\n```shell\n$ sudo apt-get install make gcc cmake golang git libcurl4-openssl-dev doxygen swig\n```\n\nTo add repository to preferred OS, use the following command:\n\n#### Ubuntu 19.10 Suite (eoan)\n```shell\necho \"deb http://virgilsecurity.bintray.com/iot-deb/ Ubuntu_19  iot\" \u003e\u003e /etc/apt/sources.list\n```\n\n#### Ubuntu 18.04 (bionic)\n```shell\necho \"deb http://virgilsecurity.bintray.com/iot-deb/ Ubuntu_18 iot\" \u003e\u003e /etc/apt/sources.list\n```\n\n#### Raspbian 9 (stretch)\n```shell\necho \"deb http://virgilsecurity.bintray.com/iot-deb/ Raspbian_9 iot\" \u003e\u003e /etc/apt/sources.list\n```\n\n#### Raspbian 10 (buster)\n```shell\necho \"deb http://virgilsecurity.bintray.com/iot-deb/ Raspbian_10 iot\" \u003e\u003e /etc/apt/sources.list\n```\n\n**Note!** All DEB repositories are not signed, therefore to update lists for them use the following command: `apt-get update --allow-insecure-repositories --allow-unauthenticated`\n\n\u003cdiv id='fedora-os'/\u003e\n\n### Fedora OS\nTo download and install the Virgil IoTKit on Fedora or CentOS, use the following command:\n\n```shell\n$ sudo yum install make cmake golang git gcc gcc-c++ libcurl-devel doxygen swig\n```\nTo add repository to preferred OS use the following command:\n\n#### Fedora 29\n```shell\n$ sudo yum install https://virgilsecurity.bintray.com/iot-rpm/Fedora/29/x86_64/virgil-bintray-release-0.1.0-1.1.noarch.rpm\n```\n\n#### Fedora 30\n```shell\n$ sudo yum install https://virgilsecurity.bintray.com/iot-rpm/Fedora/30/x86_64/virgil-bintray-release-0.1.0-1.1.noarch.rpm\n```\n\n#### Fedora 31\n```shell\n$ sudo yum install https://virgilsecurity.bintray.com/iot-rpm/Fedora/31/x86_64/virgil-bintray-release-0.1.0-1.1.noarch.rpm\n```\n\n\u003cdiv id='macos'/\u003e\n\n### MacOS\nTo download and install the Virgil IoTKit on MacOS, use the following command:\n```shell\n$ brew install make cmake golang git gcc curl doxygen swig\n```\n\n\u003cdiv id='windows-os'/\u003e\n\n### Windows OS\nIt is necessary to install software listed below :\n- [Git](https://git-scm.com/) for Virgil IoTKit components installation and upgrade.\n- [CMake](https://cmake.org/) as Virgil IoTKit framework build system.\n- make. It can be installed separately from [GNUWin32 project](http://gnuwin32.sourceforge.net/packages/make.htm). Also\nit contains in mingw compiler.\n- [MSYS2](https://www.msys2.org/) as shell commands interpreter\n- [mingw-w64](http://mingw-w64.org/) as C/C++ compiler. It is suggested to use mingw to use GCC bytes alignment in\npacket structures.\n- Also you can install [Qt](https://www.qt.io/) that will be used for Qt integration. Qt Maintenance Tool installs mingw,\nCMake and make.\n\nStart MSYS2 and try to see all those software versions :\n\n```shell\ngit --version\ncmake --version\nmake --version\ngcc --version\n```\n\nIf some software has not been found, check PATH system variable.\n\nAfter these steps you can clone Git repository and use `build-for-qt.sh` script.\n\n\u003cdiv id='qt-integration'/\u003e\n\n### Ready Linux packets\nIoTKit also contains ready-made (pre-compiled) packets for Linux OS, that can be installed using an OS package manager.\n- `virgil-iot-sdk-tools` - a set of tools [mentioned above](#iot-dev-tools) for secure device lifecycle management\n- `virgil-iot-sdk-snapd` - a local web utility which allows you to obtain information and statistics from your IoT devices. Virgil SnapD interacts with Virgil SNAP protocol, which operates directly with your IoT devices. Read more [here](/tools/virgil-snapd)\n- `virgil-iot-sdk-libs` - a set of libraries necessary for interacting Virgil IoTKit modules with your IoT devices\n\n\n### Qt integration\n- Setup Qt with your target platforms support. Each platform has its own requirement. See Qt documentation for details.\n- Compile Virgil IoTKit library for target platform. See [Scripts](#scripts) section, `build-for-qt.sh` script description for details.\n- Build and deploy application.\n\n\u003cdiv id='tests'/\u003e\n\n## Tests\nTo make sure that everything goes in the right way, we also provide a set of ready code-snippets for testing all the required features:\n- Crypto: crypto algorithms (e. g. hash, RNG, AES) and crypto operations (key pair, sign/verify etc.).\n- Firmware related functionality: create firmware, save/load/install.\n- Security Box (test storage module): read write for signed or/and encrypted data.\n- SNAP (Secure Network Adjustable Protocol tests): send, receive etc.\n\nNavigate to the [tests folder](https://github.com/VirgilSecurity/demo-iotkit-nix/tree/release/v0.1.0-alpha/tests) of our IoTKit Demo repository to find preferred tests and start working with them.\n\nYou can try to use [Demo IoTKit Qt](https://github.com/VirgilSecurity/demo-iotkit-qt/) open project to test Qt integration usage. To have full testing start any IoT devices in your network and observe its states by using demo-iotkit-qt software. You can use Sandbox as such devices set.\n\n\u003cdiv id='iotkit-usage'/\u003e\n\n## IoTKit Usage\nTo start working with Virgil IoTKit you have to:\n- specify configuration parameters.\n- provide implementations (you can also use default implementations).\n\n\u003cdiv id='config-params'/\u003e\n\n### Configuration parameters\n\n#### Configuration headers directory\nThere are configuration headers that customize Virgil IoTKit, they are stored in **config directory**. You can provide your headers or use standard ones.\nIt's necessary to add `VIRGIL_IOT_CONFIG_DIRECTORY` variable that points to the directory with configuration files.\n\n\u003e For example, if you want to use PC configuration provided by library and library is stored in `virgil-iotkit` directory, you have to set compiler option: `-DVIRGIL_IOT_CONFIG_DIRECTORY virgil-iotkit/config/pc`.\n\n#### MCU Build\nThe `VIRGIL_IOT_MCU_BUILD` variable enables or disables microcontroller features. If some microcontroller features are not compatible with your PC configuration or you don't need to use MCU features, you can disable them through the  `VIRGIL_IOT_MCU_BUILD` variable during compilation: `-DVIRGIL_IOT_MCU_BUILD=OFF`.\n\n#### Mobile platforms Build\nUse integration/qt/iotkit.pri qmake script to include Virgil IoTKit Qt framework.\n\n\u003cdiv id='mandatory-implementations'/\u003e\n\n### Mandatory implementations\nSome IoTKit modules use external implementations, therefore it's necessary to implement HAL (hardware abstraction layer) functions:\n- [Storage context](https://virgilsecurity.github.io/virgil-iotkit/storage__hal_8h.html): structure **vs_storage_op_ctx_t**\ncontains external data operations like open/read/write/close. See [Storage HAL](https://virgilsecurity.github.io/virgil-iotkit/storage__hal_8h.html) for details.\n- [Firmware](https://virgilsecurity.github.io/virgil-iotkit/firmware_8h.html): **vs_firmware_install_prepare_space_hal**,\n**vs_firmware_install_append_data_hal** and **vs_firmware_get_own_firmware_footer_hal** functions have to be implemented for firmware processing. See [Firmware HAL](https://virgilsecurity.github.io/virgil-iotkit/firmware__hal_8h.html#details) for details.\n- [Logger](https://virgilsecurity.github.io/virgil-iotkit/logger_8h.html): depends on [logger-config.h](https://virgilsecurity.github.io/virgil-iotkit/logger-config_8h.html) configurations **vs_logger_output_hal** for string output and/or **vs_logger_current_time_hal** for current time output. See [Logger HAL](https://virgilsecurity.github.io/virgil-iotkit/logger-hal_8h.html) for details.\n- [SNAP protocol](https://virgilsecurity.github.io/virgil-iotkit/snap_8h.html): **vs_netif_t** network interface as\ntransport level for SNAP protocol. As [UDP broadcast example](https://github.com/VirgilSecurity/demo-iotkit-nix/blob/release/v0.1.0-alpha/common/src/sdk-impl/netif/netif-udp-broadcast.c) user can use c-implementation tool.\nSee [SNAP Reference](https://virgilsecurity.github.io/virgil-iotkit/snap-structs_8h.html) for details.\n- [FLDT Server](https://virgilsecurity.github.io/virgil-iotkit/fldt-server_8h.html) is a service that is used by a IoT Gateway for files (e.g. firmware, TrustLists) distribution for IoT devices. Server sends new files in the network to IoT Devices and processes Client requests for new files.\n- [FLDT Client](https://virgilsecurity.github.io/virgil-iotkit/fldt-client_8h.html) is client for FLDT service that used by IoT Devices to receive new files (e.g. Firmware, TrustLists) from IoT Gateway. FLDT Client also can request files versions.\n- [PRVS Client](https://virgilsecurity.github.io/virgil-iotkit/prvs-client_8h.html): there is a need to implement **vs_snap_prvs_client_impl_t** structure. This structure contains wait functions for SNAP interface. You can see example of implementation in the [c-implementation](https://github.com/VirgilSecurity/virgil-iotkit/blob/release/v0.1.0-alpha/tools/c-implementation/src/helpers/ti_wait_functionality.c).\n\n\u003cdiv id='default-mandatory-implementations'/\u003e\n\n### Default Mandatory implementations\nVirgil IoTKit also provides default mandatory implementations:\n- [Cloud](https://virgilsecurity.github.io/virgil-iotkit/cloud_8h.html) : **vs_cloud_impl_t** and **vs_cloud_message_bin_impl_t** are required `by vs_cloud_init`. Function `vs_curl_http_impl` returns cURL HTTP implementation, `vs_cloud_message_bin_impl_t` returns MQTT implementation.\n- [Crypto](https://virgilsecurity.github.io/virgil-iotkit/secmodule_8h.html) introduces security module implementation structure **vs_secmodule_impl_t**. Function `vs_soft_secmodule_impl` returns software implementation.\n\n\u003cdiv id='api-reference'/\u003e\n\n## API Reference\n- [API Reference of IoTKit](https://virgilsecurity.github.io/virgil-iotkit/)\n\n\u003cdiv id='license'/\u003e\n\n## License\n\nThis library is released under the [3-clause BSD License](LICENSE).\n\n\u003cdiv id='support'/\u003e\n\n## Support\nOur developer support team is here to help you. Find more information on our [Help Center](https://help.virgilsecurity.com/).\n\nYou can find us on [Twitter](https://twitter.com/VirgilSecurity) or send us an email at support@VirgilSecurity.com.\n\nAlso, get extra help from our support team on [Slack](https://virgilsecurity.com/join-community).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirgilsecurity%2Fvirgil-iotkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirgilsecurity%2Fvirgil-iotkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirgilsecurity%2Fvirgil-iotkit/lists"}