{"id":13639231,"url":"https://github.com/urbit/urcrypt","last_synced_at":"2025-04-10T01:31:37.039Z","repository":{"id":227584321,"uuid":"696473882","full_name":"urbit/urcrypt","owner":"urbit","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-13T17:43:05.000Z","size":1933,"stargazers_count":3,"open_issues_count":8,"forks_count":2,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-24T14:21:24.577Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Assembly","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/urbit.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-25T20:16:02.000Z","updated_at":"2024-12-13T17:43:11.000Z","dependencies_parsed_at":"2024-08-05T21:56:01.684Z","dependency_job_id":null,"html_url":"https://github.com/urbit/urcrypt","commit_stats":null,"previous_names":["urbit/urcrypt"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Furcrypt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Furcrypt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Furcrypt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Furcrypt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urbit","download_url":"https://codeload.github.com/urbit/urcrypt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248140394,"owners_count":21054297,"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":"2024-08-02T01:00:58.861Z","updated_at":"2025-04-10T01:31:32.009Z","avatar_url":"https://github.com/urbit.png","language":"Assembly","funding_links":[],"categories":["Infrastructure"],"sub_categories":["Arvo"],"readme":"What is urcrypt?\n----------------\nurcrypt is a library of cryptography routines used by urbit jets.\n\nWhy is urcrypt?\n---------------\nUrbit's C runtime (long the only urbit runtime) has accumulated a collection of\ncryptography dependencies, some with custom additions or patches. These\nlibraries have different conventions and have been managed by u3 in an ad-hoc\nmanner. Reproducing that arrangement in other runtimes is tricky and\nerror-prone. The (sometimes inconsistent) logic must be reproduced and suitable\ncryptography primitives must be found (or worse, written) for the new\nenvironment.\n\nTo ease these burdens, urcrypt isolates the quirks behind a consistent calling\nconvention. Everything is a little-endian byte array, and each jetted operation\nhas a corresponding function in the library. Jets simply unpack their nouns,\ncall urcrypt, and pack the results.\n\nWhat is a cryptography routine?\n-------------------------------\nThis is more of a subjective question than it might appear. Any of the following\nconditions are sufficient, but not necessary, for a function to be included in\nurcrypt:\n\n  * The routine is sensitive to side-channel attacks (encryption, etc)\n  * Some property of the routine is cryptographically useful (SHA, RIPE, etc)\n  * The routine typically lives in a crypto library, for whatever reason.\n\nA word on OpenSSL\n-----------------\nUrcrypt depends on OpenSSL's libcrypto, which has global state. In order\nto avoid dealing with this state, urcrypt refuses to build with an internal\nlibcrypto. Either build statically (pass `--disable-shared` to `./configure`)\nor provide a shared libcrypto for urcrypt to link against. It is the library\nuser's responsibility to initialize openssl, set custom memory functions, etc.\n\nInstallation\n------------\nNote that, in addition to standard `autotools` packages, `urcrypt` requires\n`autoconf-archive` in order to use a macro it provides.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbit%2Furcrypt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furbit%2Furcrypt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbit%2Furcrypt/lists"}