{"id":47921390,"url":"https://github.com/sunsetjesus/c14","last_synced_at":"2026-04-04T06:07:42.988Z","repository":{"id":57192253,"uuid":"256300699","full_name":"sunsetjesus/c14","owner":"sunsetjesus","description":"c14 is an OP_RETURN protocol on top of bsv core protocol for creating immutable reference points of multimedia files.","archived":false,"fork":false,"pushed_at":"2020-04-17T22:23:06.000Z","size":20,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-08T20:38:29.111Z","etag":null,"topics":["bitcoin","blockchain","bsv","deepfake-detection","deepfakes"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunsetjesus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-16T18:43:59.000Z","updated_at":"2022-05-01T08:21:24.000Z","dependencies_parsed_at":"2022-09-01T00:52:36.380Z","dependency_job_id":null,"html_url":"https://github.com/sunsetjesus/c14","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sunsetjesus/c14","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsetjesus%2Fc14","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsetjesus%2Fc14/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsetjesus%2Fc14/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsetjesus%2Fc14/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunsetjesus","download_url":"https://codeload.github.com/sunsetjesus/c14/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsetjesus%2Fc14/sbom","scorecard":{"id":859003,"data":{"date":"2025-08-11","repo":{"name":"github.com/sunsetjesus/c14","commit":"508c201e787d30f44584e7a9e61b370588072378"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/19 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-24T00:42:33.419Z","repository_id":57192253,"created_at":"2025-08-24T00:42:33.419Z","updated_at":"2025-08-24T00:42:33.419Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31389416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T04:26:24.776Z","status":"ssl_error","status_checked_at":"2026-04-04T04:23:34.147Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bitcoin","blockchain","bsv","deepfake-detection","deepfakes"],"created_at":"2026-04-04T06:07:42.498Z","updated_at":"2026-04-04T06:07:42.975Z","avatar_url":"https://github.com/sunsetjesus.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# c14\n\n\n\u003cbr\u003e\n\u003cbr\u003e\nc14 is an OP_RETURN protocol on top of bsv core protocol for creating immutable reference points of multimedia files.\n\u003cbr\u003e\n\u003cbr\u003e\n\n \n### The Problem\n\u003cbr\u003e\n\nAs advancement in Artificial Intelligence continues at somewhat an exponential rate, we are witnessing a new type of fake content being circulated which is indistinguishable from the real ones to the naked eye. With new breakthroughs in the area of machine learning and artificial intelligence, new tools are being created which in turn create an influx of deepfake contents. Currently, there are no algorithms or tools that can definitively identify the deepfake videos to maximum accuracy. There must be some kind of framework built in order for the current legal systems to deal with this kind of issue in the future.\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n\n### The Solution\n\u003cbr\u003e\n\nAlthough at a simple glance, the solution lies in AI itself, however, As we develop such algorithms to detect fake videos, the feedback from the prediction model could be used in order to improve deep fake algorithms which will accelerate the development of better deepfake algorithms. There are some solutions that being proposed that shows the potential combating deepfakes contents such as -\n1. Watermark - A watermark which is a digital signature of the file metadata could provide a reference point against data modification.\n\nbut in the above case, the point of reference is not verifiable and immutable as it's not on a public blockchain to verify the integrity of the reference. Someone else could create another point of reference for the same videos and there's no way to verify the chronological order of the reference points\nIn order to effectively deal with and legally identify fake contents, c14 protocol requires signing each and every frame of a video and putting that signature in the blockchain for an immutable reference along with its file metadata at the instance of creating the origin reference.\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n### The protocol specifications \n\u003cbr\u003e\n\n##### Protocol Prefix\nc14 uses the following protocol prefix which was generated with the bitcom protocol \n\u003cbr\u003e\n - ##### 1tTm1SsDovUrtZryEusP1zfPpK5AvnMKM\n\n\u003cbr\u003e\n\n##### Payload generation rule : \n1. Each video file is split into individual frames in the jpg format.\n2. Each frame is converted to binary form and signed with the Owner's private key and converted to a base64 string\n3. Each frame signature string is then concatenated to a single string. Each frame signature string is separated by the delimiter  \"_$_\".\n4. The frame signature string then hashed with SHA256 which generates the frame_buffer_sig_hash\n5. The frame_buffer_sig_hash is then added to the file metadata and the file metadata is signed with the owner's private key and the signature is then added as a key in the payload JSON object.\n6. protocol version number is defined in the payload object.\n7. In the final step, the payload is serialized into a base64 string.\n \n##### Cryptography rules - \n1. All hashing operations are done with SHA256 hashing algorithm to be considered valid\n2. All signatures used must be signed with the key generated by the rsa2048 algorithm to be considered valid.\n\n##### Payload data structure rule\n1. A c14 OP_RETURN payload has two components - a. The protocol prefix b. payload string\n\n##### payload data structure rule\n\n\ndata structure of a deserialized json payload  -\n\n```\n{\n\n   version : \u003cversion\u003e\n   sig : \u003csignature generated by signing the metadata with owner's private key\u003e\n   \n   metadata : {   ...{file metadata}\n                  frame_sig_hash: \u003cframe_buffer_sig_hash\u003e \n                  \n                }\n\n}\n```\n\n\n\n\n##### Collision rule\n1. if multiple identical records are found in a block, the lowest topological ordered tx is considered valid\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n### Installation\n\u003cbr\u003e\n\n```sh\n$ npm i c14 --save\n```\n\n\u003cbr\u003e\n\n### Usage\n\u003cbr\u003e\n\nDillinger is currently extended with the following plugins. Instructions on how to use them in your own application are linked below.\n\n```sh\n// import c14 to your project\nconst c14 = require(\"c14\") \nlet config = {\n    key_rsa : \u003crsa2048 private key\u003e,\n    key_bsv : \u003cbsv_private_key\u003e,\n    build_dir : \u003cpath\u003e\n}\n\n//initialize c14 instance \nc14.init(config);\n\nc14.prepare_media(\"./media/src/final.mp4\")\n.then(video_obj=\u003e{\n    return c14.create_frame_sig_hash(video_obj)\n})\n.then(data=\u003e{\n    return c14.build_op_return_payload(data)\n})\n.then(op_return_payload=\u003e{\n    return c14.op_return_push(op_return_payload)\n})\n.then(txid=\u003e{\n    console.log(\"transaction id : \"+txid)\n})\n.catch(e=\u003e{\n    console.log(e)\n})\n```\n\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n\nLicense\n----\n\nMIT\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsetjesus%2Fc14","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunsetjesus%2Fc14","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsetjesus%2Fc14/lists"}