{"id":51085153,"url":"https://github.com/maandree/librecrypt","last_synced_at":"2026-06-23T21:02:00.807Z","repository":{"id":358120806,"uuid":"1240091699","full_name":"maandree/librecrypt","owner":"maandree","description":"Offline-hardenable password hashing","archived":false,"fork":false,"pushed_at":"2026-05-15T19:27:58.000Z","size":153,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-15T22:18:18.800Z","etag":null,"topics":["argon2","authentication","c-library","crypt","password-hashing","security"],"latest_commit_sha":null,"homepage":"https://codeberg.org/maandree/librecrypt","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maandree.png","metadata":{"files":{"readme":"README","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T18:58:39.000Z","updated_at":"2026-05-15T19:28:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/maandree/librecrypt","commit_stats":null,"previous_names":["maandree/librecrypt"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/maandree/librecrypt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maandree%2Flibrecrypt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maandree%2Flibrecrypt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maandree%2Flibrecrypt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maandree%2Flibrecrypt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maandree","download_url":"https://codeload.github.com/maandree/librecrypt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maandree%2Flibrecrypt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34706579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["argon2","authentication","c-library","crypt","password-hashing","security"],"created_at":"2026-06-23T21:01:59.941Z","updated_at":"2026-06-23T21:02:00.798Z","avatar_url":"https://github.com/maandree.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"NAME\n\tlibrecrypt - Offline-hardenable password hashing\n\nSYNOPSIS\n\t#include \u003clibrecrypt.h\u003e\n\n\tLink with -lrecrypt. Static linking may require additional\n\tflags depending on enabled hash algorithms.\n\nDESCRIPTION\n\tThe librecrypt library provides a unified interface for\n\tseveral password hash functions and the ability to chain\n\tpassword hash functions so that a weaking hashed password\n\tcan be hardend, without knowing the plain-text password,\n\tby hashing the hash with a stronger function.\n\n\tlibrecrypt extends crypt(3)'s password hash string syntax\n\tby introducing the '\u003e' character to specifying chaining.\n\tThe left-most hash function is used on the plain-text\n\tpassword, and the next to the right, is used on the binary\n\thash result, and so on, and only the final hash is stored\n\tin the string: as part of the last '\u003e'-delimited section.\n\n\tIt also supports specifying a password hashing configuration\n\twithout specifying actual salt values, but instead how many\n\tbytes of salt to generate. This done using asterisk-encoding:\n\tan ASCII asterisk character ('*') followed by the number of\n\tbytes encoded as a non-negative decimal number in ASCII.\n\n\tThe librecrypt library implements the following functions:\n\n   Password hashing functions:\n\tlibrecrypt_crypt(3)\n\t\tCompute password hash encoded in ASCII with settings\n\t\tprefix.\n\n\tlibrecrypt_hash(3)\n\t\tCompute password hash encoded in ASCII without\n\t\tsettings prefix.\n\n\tlibrecrypt_hash_binary(3)\n\t\tCompute password hash in raw binary form.\n\n\tlibrecrypt_verify(3)\n\t\tValidate password against known password hash.\n\n\tlibrecrypt_add_algorithm(3)\n\t\tAppend an algorithm chain to a password hash string.\n\n   Password hashing configuration functions:\n\tlibrecrypt_test_supported(3)\n\t\tCheck whether an algorithm chain is supported.\n\n\tlibrecrypt_make_settings(3)\n\t\tGenerate a password hash settings string.\n\n\tlibrecrypt_realise_salts(3)\n\t\tRealise asterisk-encoded random salts in a settings\n\t\tstring.\n\n   Application helper functions:\n\tlibrecrypt_equal(3)\n\t\tCompare strings in constant time.\n\n\tlibrecrypt_equal_binary(3)\n\t\tCompare memory segments in constant time.\n\n\tlibrecrypt_wipe(3)\n\t\tSecurely erase a memory buffer.\n\n\tlibrecrypt_wipe_str(3)\n\t\tSecurely erase a string.\n\n\tlibrecrypt_scan_settings(3) (ADVANCED)\n\t\tParse and validate a password hash string.\n\n   Password hash string decomposition functions (ADVANCED):\n\tlibrecrypt_settings_prefix(3)\n\t\tGet length of settings prefix in a password hash\n\t\tstring.\n\n\tlibrecrypt_chain_length(3)\n\t\tGet number of algorithms in a chained password hash\n\t\tstring.\n\n\tlibrecrypt_decompose_chain(3)\n\t\tSplit a chained password hash string into algorithm\n\t\tcomponents.\n\n\tlibrecrypt_decompose_chain1(3)\n\t\tReplace algorithm link delimiters with null bytes.\n\n\tlibrecrypt_next_algorithm(3)\n\t\tIterate over algorithms in a chained password hash\n\t\tstring.\n\n   Binary value encoding functions (ADVANCED):\n\tlibrecrypt_encode(3)\n\t\tEncode binary salt or hash result into ASCII.\n\n\tlibrecrypt_decode(3)\n\t\tDecode ASCII encoding of a salt or hash result into\n\t\tbinary.\n\n\tlibrecrypt_get_encoding(3)\n\t\tGet encoding alphabet for the last algorithm in a\n\t\tchain.\n\n   Library introspection (ADVANCED):\n\tlibrecrypt_is_enabled(3)\n\t\tCheck whenther the library is compiled with support\n\t\tfor a specific hash algorithm.\n\n\tlibrecrypt_hash_algorithm_end(3)\n\t\tNumber of hash algorithms the linked library knows\n\t\tabout.\n\n   Library tweaking functions (ADVANCED):\n\tlibrecrypt_create_context(3)\n\t\tCreate a library configuration object.\n\n\tlibrecrypt_free_context(3)\n\t\tDeallocate a library configuration object.\n\n\tlibrecrypt_set_pepper(3)\n\t\tSet the pepper to use for a hash algorithm.\n\n\tlibrecrypt_set_custom_algorithms(3)\n\t\tSet application-provided hash algorithms.\n\n\tlibrecrypt_set_user_data(3)\n\t\tSet application-defined data.\n\n\tlibrecrypt_get_user_data(3)\n\t\tRetrieve application-defined data.\n\nNOTES\n\tUsing librecrypt_add_algorithm(3) to hash existing password\n\thashes should be used as a transitional mitigation strategy\n\twhen replaing an old password hash function. Once the password\n\tis available in clear text, it should be hashed anew using\n\tonly the new password hash function: this will both increase\n\tsecurity and reducing login it, allowing for stronger hash\n\tfunction configurations. This is especially important if the\n\tpassword is actually a key and longer than the old hash. It\n\tis also a good idea to force password reset, and lock any\n\taccount that hasn't reset its password, because it is\n\tpossibly that the old password hashes has been leaked and it\n\twill force a fresh hashing even one counts that seldom log in.\n\nSEE ALSO\n\tcrypt(3), crypt(5)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaandree%2Flibrecrypt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaandree%2Flibrecrypt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaandree%2Flibrecrypt/lists"}