{"id":17964777,"url":"https://github.com/processone/stringprep","last_synced_at":"2025-10-05T01:18:32.205Z","repository":{"id":7845813,"uuid":"9217565","full_name":"processone/stringprep","owner":"processone","description":"Fast Stringprep implementation for Erlang / Elixir","archived":false,"fork":false,"pushed_at":"2025-02-21T09:32:34.000Z","size":207,"stargazers_count":16,"open_issues_count":0,"forks_count":25,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-09T00:05:39.575Z","etag":null,"topics":["erlang","stringprep"],"latest_commit_sha":null,"homepage":"http://www.ejabberd.im","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/processone.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.ALL","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2013-04-04T12:24:13.000Z","updated_at":"2025-02-21T09:32:33.000Z","dependencies_parsed_at":"2024-12-14T11:11:22.474Z","dependency_job_id":"98c88747-4535-4348-bfdd-84f058cdd27b","html_url":"https://github.com/processone/stringprep","commit_stats":{"total_commits":108,"total_committers":13,"mean_commits":8.307692307692308,"dds":0.6759259259259259,"last_synced_commit":"7688cf9ce3e875ae667010af5aa6b038a48c1625"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/processone%2Fstringprep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/processone%2Fstringprep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/processone%2Fstringprep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/processone%2Fstringprep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/processone","download_url":"https://codeload.github.com/processone/stringprep/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253166518,"owners_count":21864476,"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":["erlang","stringprep"],"created_at":"2024-10-29T12:08:30.829Z","updated_at":"2025-10-05T01:18:27.164Z","avatar_url":"https://github.com/processone.png","language":"C","readme":"# Fast Stringprep implementation for Erlang / Elixir\n\n[![CI](https://github.com/processone/stringprep/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/processone/stringprep/actions/workflows/ci.yml)\n[![Coverage Status](https://coveralls.io/repos/processone/stringprep/badge.svg?branch=master\u0026service=github)](https://coveralls.io/github/processone/stringprep?branch=master)\n[![Hex version](https://img.shields.io/hexpm/v/stringprep.svg \"Hex version\")](https://hex.pm/packages/stringprep)\n\nStringprep is a framework for preparing Unicode test strings in order\nto increase the likelihood that string input and string comparison\nwork.\n\nThe principle are defined in [RFC-3454: Preparation of\nInternationalized Strings ](http://tools.ietf.org/html/rfc3454).\n\nThis library is leverage Erlang native NIF mechanism to provide\nextremely fast and efficient processing.\n\nThe library includes support for several Stringprep profiles used in\nXMPP protocole like:\n\n* Nodeprep\n* Nameprep\n* Resourceprep\n\nFor those profiles, the rules are applied according to\n[RFC6122](http://xmpp.org/rfcs/rfc6122.html#security-stringprep). The\nvarious functions perform check on the allowed / forbidden chars for a\ngiven profile or prevent combining left-to-right and right-to-left\nchars.\n\nIt the binary string passed to a function of the API is valid, it will\nreturn its normalized version according to Stringprep\nprofile. Otherwise, if the binary string is invalid, for example\nbecause it contains invalid chars, the function will return error.\n\nThe library is heavily used in XMPP string processing. However, the\nlibrary is more generally useful in code that need to manipulate and\ncompare Unicode strings.\n\n## Building\n\nFast Stringprep processing tool can be build as follow:\n\n    ./configure \u0026\u0026 make\n\nConfigure script recognizes one flag - pass `--enable-gcov` to enable gcov\ncoverage reporting.\n\nIt is a rebar-compatible OTP application. Alternatively, you can build\nit with rebar:\n\n    rebar get-deps compile\n\n## Usage\n\nYou can start the application with the command:\n\n```\n$ erl -pa ebin/\nErlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]\n\nEshell V7.1  (abort with ^G)\n1\u003e application:start(p1_stringprep).\n```\n\nYou can then call any of the stringprep function to apply a profile:\n\n```\nstringprep:nodeprep(\u003c\u003c\u003e\u003e).\nstringprep:nameprep(\u003c\u003c\u003e\u003e).\nstringprep:resourceprep(\u003c\u003c\u003e\u003e).\nstringprep:tolower(\u003c\u003c\u003e\u003e)).\n```\n\n## Development\n\n### Test\n\n#### Unit test\n\nYou can run eunit test with the command:\n\n    $ make test\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprocessone%2Fstringprep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprocessone%2Fstringprep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprocessone%2Fstringprep/lists"}