{"id":28995082,"url":"https://github.com/axiscommunications/signed-video-framework","last_synced_at":"2025-06-25T04:06:31.419Z","repository":{"id":37443145,"uuid":"429729175","full_name":"AxisCommunications/signed-video-framework","owner":"AxisCommunications","description":"Framework for signing videos and validating signed videos","archived":false,"fork":false,"pushed_at":"2025-06-19T04:41:02.000Z","size":1746,"stargazers_count":33,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-19T05:33:53.675Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AxisCommunications.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-19T08:51:29.000Z","updated_at":"2025-06-19T04:36:25.000Z","dependencies_parsed_at":"2023-02-17T19:45:56.751Z","dependency_job_id":"c21f9f90-7455-4bbe-b085-d33e7d892d0b","html_url":"https://github.com/AxisCommunications/signed-video-framework","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/AxisCommunications/signed-video-framework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fsigned-video-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fsigned-video-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fsigned-video-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fsigned-video-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxisCommunications","download_url":"https://codeload.github.com/AxisCommunications/signed-video-framework/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fsigned-video-framework/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261801988,"owners_count":23211664,"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":[],"created_at":"2025-06-25T04:06:29.368Z","updated_at":"2025-06-25T04:06:31.412Z","avatar_url":"https://github.com/AxisCommunications.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"*Copyright (C) 2021, Axis Communications AB, Lund, Sweden. All Rights Reserved.*\n\n# Signed Video Framework\nThis repository holds the framework code of the feature Signed Video. The Signed Video feature secures the video from tampering after signing by adding cryptographic signatures to the video. Each video frame is hashed and signatures are generated repeatedly based on these hashes using a private key set by the signer. The signature data added to the video does not affect the video rendering. The data is added in a Supplemental Enhancement Information (SEI) NALU with type \"user data unregistered\" (OBU Metadata of type \"user private\" for AV1). This SEI has a UUID of `5369676e-6564-2056-6964-656f2e2e2e30` in hexadecimal.\n\nA more detailed description of the Signed Video feature is found in [feature-description](./feature-description.md).\n\n## File structure\n```\nsigned-video-framework\n├── lib\n|   ├── plugins\n|   |   ├── threaded-signing\n|   |   |   └── plugin.c\n|   |   └── unthreaded-signing\n|   |       └── plugin.c\n|   ├── src\n|   |   ├── includes\n|   |   |   └── public header files\n|   |   └── source files\n|   └── vendors\n|       └── axis-communications\n|           └── source files\n└── tests\n```\n\nThe repository is split into a library and tests. The library is further organized in\n[source code](./lib/src/), [plugins](./lib/plugins/) and [vendors](./lib/vendors/). The source code\nincludes all necessary source files for both signing and validation, and there is no conceptual\ndifference in building the library for signing or for validation.\n\nSigning is commonly device specific with separate calls for, e.g., reading and using private keys.\nTherefore, the framework uses the concept of signing plugins which implements a set of\n[interfaces](./lib/src/includes/signed_video_signing_plugin.h). The framework comes with both a\nthreaded and an unthreaded signing plugin.\n\nFurther, the framework allows for vendor specific metadata. Adding that on the signing side, and\ninterpreting it on the validation side is controlled through vendor specific code.\n\nFor instructions on how to use the APIs to integrate the Signed Video Framework in either a signing or a validation application, see [lib/](./lib/). Example applications are available in the [signed-video-framework-examples](https://github.com/AxisCommunications/signed-video-framework-examples) repository.\n\n# Releases\nThere are no pre-built releases. The user is encouraged to build the library from a [release tag](https://github.com/AxisCommunications/signed-video-framework/tags).\n\nThe check tests here in Github run on a Linux platform. Further, integration of the shared library is tested on a Linux platform for both signing and validation, whereas on Windows only validation is tested.\n\n# Getting started\nThe repository uses meson + ninja as default build method. Further, OpenSSL is used for cryptographic operations and to run unittests you need libcheck.\n- [meson](https://mesonbuild.com/Getting-meson.html) Getting meson and ninja. Meson version 0.47.0 or newer is required.\n- [OpenSSL](https://www.openssl.org/) The default library to handle keys, hashes and signatures. OpenSSL version 1.1.1 or newer is required.\n- [libcheck](https://libcheck.github.io/check/) The framework for unittests\n\n# Build Instructions\nBelow are meson instructions on how to build for either signing or validation. For help on meson usage see [mesonbuild.com](https://mesonbuild.com/).\nThe meson instructions in this repository will create a shared library named `libsigned-video-framework`.\n\n## Configure with meson\n```\nmeson path/to/signed-video-framework path/to/build/folder\n```\nwill generate compile instructions for ninja and put them in a folder located at `path/to/build/folder`.\nThe framework comes with an option to build with debug prints\n```\nmeson -Ddebugprints=true path/to/signed-video-framework path/to/build/folder\n```\nWith the `--prefix` meson option it is possible to specify an arbitrary location to where the shared library is installed.\n```\nmeson --prefix /absolute/path/to/your/local/installs path/to/signed-video-framework path/to/build/folder\n```\n\n## Compile and install the shared library\nTo compile signed-video-framework using ninja\n```\nninja -C path/to/build/folder\n```\nand the object file is located at `path/to/build/folder/lib/src/libsigned-video-framework.so`. To install the shared library run\n```\nmeson install -C build\n```\nThe library, named `libsigned-video-framework`, will be installed where libraries are installed, or at `path/to/your/local/installs` if you configured meson with `--prefix`. The header files will be located in a sub-folder of `includes` named `signed-video-framework`.\n\n## Example build commands on Linux\n1. Configure and compile into `./build` without installing from the top level\n```\nmeson . build\nninja -C build\n```\n2. Configure, compile and install in `./my_installs/` from the parent folder of `signed-video-framework/`\n```\nmeson --prefix $PWD/my_installs signed-video-framework build\nmeson install -C build\n```\n\n## Configure, build and run unittests\nNothing extra is needed. Hence, to build and run the unittests call\n```\nmeson . build\nninja -C build test\n```\nAlternatively, you can run the script [tests/test_checks.sh](./tests/test_checks.sh) and the unittests will run both with and without debug prints.\nNote that you need libcheck installed as well.\n\n# License\n[MIT License](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Fsigned-video-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxiscommunications%2Fsigned-video-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Fsigned-video-framework/lists"}