{"id":20473718,"url":"https://github.com/okdshin/picosha2","last_synced_at":"2025-04-04T08:08:34.556Z","repository":{"id":14133771,"uuid":"16839201","full_name":"okdshin/PicoSHA2","owner":"okdshin","description":"a header-file-only, SHA256 hash generator in C++","archived":false,"fork":false,"pushed_at":"2022-08-08T10:38:04.000Z","size":59,"stargazers_count":680,"open_issues_count":5,"forks_count":155,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-03-28T07:08:50.455Z","etag":null,"topics":["cpp","cpp-library","header-only","mit-license","sha256"],"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/okdshin.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}},"created_at":"2014-02-14T14:22:59.000Z","updated_at":"2025-03-26T05:38:39.000Z","dependencies_parsed_at":"2022-07-08T00:09:06.496Z","dependency_job_id":null,"html_url":"https://github.com/okdshin/PicoSHA2","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okdshin%2FPicoSHA2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okdshin%2FPicoSHA2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okdshin%2FPicoSHA2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okdshin%2FPicoSHA2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/okdshin","download_url":"https://codeload.github.com/okdshin/PicoSHA2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247142066,"owners_count":20890652,"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":["cpp","cpp-library","header-only","mit-license","sha256"],"created_at":"2024-11-15T14:26:29.832Z","updated_at":"2025-04-04T08:08:34.538Z","avatar_url":"https://github.com/okdshin.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PicoSHA2 - a C++ SHA256 hash generator\n\nCopyright \u0026copy; 2017 okdshin\n\n## Introduction\n\nPicoSHA2 is a tiny SHA256 hash generator for C++ with following properties:\n\n- header-file only\n- no external dependencies (only uses standard C++ libraries)\n- STL-friendly\n- licensed under MIT License\n\n## Generating SHA256 hash and hash hex string\n\n```c++\n// any STL sequantial container (vector, list, dequeue...)\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\n\nstd::vector\u003cunsigned char\u003e hash(picosha2::k_digest_size);\npicosha2::hash256(src_str.begin(), src_str.end(), hash.begin(), hash.end());\n\nstd::string hex_str = picosha2::bytes_to_hex_string(hash.begin(), hash.end());\n```\n\n## Generating SHA256 hash and hash hex string from byte stream\n\n```c++\npicosha2::hash256_one_by_one hasher;\n...\nhasher.process(block.begin(), block.end());\n...\nhasher.finish();\n\nstd::vector\u003cunsigned char\u003e hash(picosha2::k_digest_size);\nhasher.get_hash_bytes(hash.begin(), hash.end());\n\nstd::string hex_str = picosha2::get_hash_hex_string(hasher);\n```\n\nThe file `example/interactive_hasher.cpp` has more detailed information.\n\n## Generating SHA256 hash from a binary file\n\n```c++\nstd::ifstream f(\"file.txt\", std::ios::binary);\nstd::vector\u003cunsigned char\u003e s(picosha2::k_digest_size);\npicosha2::hash256(f, s.begin(), s.end());\n```\n\nThis `hash256` may use less memory than reading whole of the file.\n\n## Generating SHA256 hash hex string from std::string\n\n```c++\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\nstd::string hash_hex_str;\npicosha2::hash256_hex_string(src_str, hash_hex_str);\nstd::cout \u003c\u003c hash_hex_str \u003c\u003c std::endl;\n//this output is \"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592\"\n```\n\n```c++\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\nstd::string hash_hex_str = picosha2::hash256_hex_string(src_str);\nstd::cout \u003c\u003c hash_hex_str \u003c\u003c std::endl;\n//this output is \"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592\"\n```\n\n```c++\nstd::string src_str = \"The quick brown fox jumps over the lazy dog.\";//add '.'\nstd::string hash_hex_str = picosha2::hash256_hex_string(src_str.begin(), src_str.end());\nstd::cout \u003c\u003c hash_hex_str \u003c\u003c std::endl;\n//this output is \"ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c\"\n```\n\n## Generating SHA256 hash hex string from byte sequence\n\n```c++\nstd::vector\u003cunsigned char\u003e src_vect(...);\nstd::string hash_hex_str;\npicosha2::hash256_hex_string(src_vect, hash_hex_str);\n```\n\n```c++\nstd::vector\u003cunsigned char\u003e src_vect(...);\nstd::string hash_hex_str = picosha2::hash256_hex_string(src_vect);\n```\n\n```c++\nunsigned char src_c_array[picosha2::k_digest_size] = {...};\nstd::string hash_hex_str;\npicosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size, hash_hex_str);\n```\n\n```c++\nunsigned char src_c_array[picosha2::k_digest_size] = {...};\nstd::string hash_hex_str = picosha2::hash256_hex_string(src_c_array, src_c_array+picosha2::k_digest_size);\n```\n\n\n## Generating SHA256 hash byte sequence from STL sequential container\n\n```c++\n//any STL sequantial container (vector, list, dequeue...)\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\n\n//any STL sequantial containers (vector, list, dequeue...)\nstd::vector\u003cunsigned char\u003e hash(picosha2::k_digest_size);\n\n// in: container, out: container\npicosha2::hash256(src_str, hash);\n```\n\n```c++\n//any STL sequantial container (vector, list, dequeue...)\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\n\n//any STL sequantial containers (vector, list, dequeue...)\nstd::vector\u003cunsigned char\u003e hash(picosha2::k_digest_size);\n\n// in: iterator pair, out: contaner\npicosha2::hash256(src_str.begin(), src_str.end(), hash);\n```\n\n```c++\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\nunsigned char hash_byte_c_array[picosha2::k_digest_size];\n// in: container, out: iterator(pointer) pair\npicosha2::hash256(src_str, hash_byte_c_array, hash_byte_c_array+picosha2::k_digest_size);\n```\n\n```c++\nstd::string src_str = \"The quick brown fox jumps over the lazy dog\";\nstd::vector\u003cunsigned char\u003e hash(picosha2::k_digest_size);\n// in: iterator pair, out: iterator pair\npicosha2::hash256(src_str.begin(), src_str.end(), hash.begin(), hash.end());\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokdshin%2Fpicosha2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fokdshin%2Fpicosha2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokdshin%2Fpicosha2/lists"}