{"id":21576321,"url":"https://github.com/sabracrolleton/saslprep","last_synced_at":"2026-02-12T00:35:33.397Z","repository":{"id":179313728,"uuid":"236179778","full_name":"sabracrolleton/saslprep","owner":"sabracrolleton","description":"A common lisp implementation of unicode normalization and saslprep as required by RFC 4013 for usernames and passwords","archived":false,"fork":false,"pushed_at":"2020-02-29T21:23:41.000Z","size":1227,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-18T07:13:51.081Z","etag":null,"topics":["common-lisp","saslprep","unicode-normalization"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","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/sabracrolleton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2020-01-25T14:20:12.000Z","updated_at":"2020-12-30T07:29:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"e42b1ebb-8e80-40fe-b192-d33b8132a356","html_url":"https://github.com/sabracrolleton/saslprep","commit_stats":null,"previous_names":["sabracrolleton/saslprep"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sabracrolleton/saslprep","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabracrolleton%2Fsaslprep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabracrolleton%2Fsaslprep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabracrolleton%2Fsaslprep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabracrolleton%2Fsaslprep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sabracrolleton","download_url":"https://codeload.github.com/sabracrolleton/saslprep/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabracrolleton%2Fsaslprep/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273619478,"owners_count":25138238,"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","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"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":["common-lisp","saslprep","unicode-normalization"],"created_at":"2024-11-24T12:16:11.247Z","updated_at":"2026-02-12T00:35:33.388Z","avatar_url":"https://github.com/sabracrolleton.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# saslprep\n\nThis package provides a common lisp implementation of unicode stringprep functions d Annex #15 found at [http://www.unicode.org/reports/tr15/tr15-22.html](http://www.unicode.org/reports/tr15/tr15-22.html) as well as saslprep and stringprep functions required by  [https://tools.ietf.org/html/rfc5802](https://tools.ietf.org/html/rfc5802) and\nfound in:\n\n  * [https://tools.ietf.org/html/rfc4013](https://tools.ietf.org/html/rfc4013) (2005) SASLprep\n  * [https://tools.ietf.org/html/rfc3454](https://tools.ietf.org/html/rfc3454) (2002) Stringprep\n\nThis is a fork of a subset of work done by Takeru Ohta in 2010. Future work is intended to provide support for:\n\n# Implementation Notes\n\n# Usage\nIt has one major exported function:\n\n  * (saslprep-normalize (str)\n\nSaslprep-normalize example\n```common-lisp\n    (saslprep-normalize \"some-string-here\")\n\n```\n\nExplanation of what saslprep-normalize adds to the process RFC 4013 and RFC 3454:\n\n1. First map non-ascii space characters to space #x0020\n2. Then delete characters that are commonly mapped to nothing\n3. KC Normalization as described in RFC 3454 Table 4\n4. Generate an error if there are any prohibited input characters\n\n    * Non-ascii space characters (RFC 3454 Table c.1.2)\n    * Ascii control characters (RFC 3454 Table c.2.1)\n    * Non-ascii control characters (RFC 3454 Table c.2.2)\n    * Private use characters (RFC 3454 Table c.3)\n    * Non-character code points (RFC 3454 Table c.4)\n    * Surrogate code points (RFC 3454 Table c.5)\n    * Inappropriate for plain text characters (RFC 3454 Table c.6)\n    * Inappropriate for canonical representation characters (RFC 3454 Table, C.7)\n    * Change display properties or deprecated characters (RFC 3454 Table, C.8)\n    * Tagging characters (RFC 3454 Table, C.9)\n\n5. Check for bidirectional strings (RFC 3454 Table Section 6) and ensure that there are no conflicting directions.\n\n# To Do list\n  * Support for RFC 8264 [https://tools.ietf.org/html/rfc8264](https://tools.ietf.org/html/rfc8264) (2017)\n  * Support for RFC 7564 [https://tools.ietf.org/html/rfc7564](https://tools.ietf.org/html/rfc7564) (2015)\n  * Review test failures in ABCL and Allegro\n  * All the things I do not understand yet\n  * Optimization?\n\n\n# Data Files\n  * UnicodeData.txt was downloaded from [http://www.unicode.org/Public/UNIDATA/UnicodeData.txt](http://www.unicode.org/Public/UNIDATA/UnicodeData.txt)\n  * The file CompositionExclusions.txt was downloaded from [http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt](http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt)\n  * The file DerivedNormalizationProps.txt was downloaded from [http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt](http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt)\n  * The test file NormalizationTest.txt was downloaded from [http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt](http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt)\n\n# Other References\n  * [https://tools.ietf.org/html/rfc5802](https://tools.ietf.org/html/rfc5802)\n  * [https://tools.ietf.org/html/rfc4013](https://tools.ietf.org/html/rfc4013)\n  * [https://tools.ietf.org/html/rfc3454#section-3.1](https://tools.ietf.org/html/rfc3454#section-3.1)\n  * [http://www.unicode.org/reports/tr15/#References](http://www.unicode.org/reports/tr15/#References)\n  * [https://www.unicode.org/reports/tr41/tr41-24.html](https://www.unicode.org/reports/tr41/tr41-24.html)\n  * [https://www.unicode.org/charts/normalization/](https://www.unicode.org/charts/normalization/)\n  * [https://towardsdatascience.com/difference-between-nfd-nfc-nfkd-and-nfkc-explained-with-python-code-e2631f96ae6c](https://towardsdatascience.com/difference-between-nfd-nfc-nfkd-and-nfkc-explained-with-python-code-e2631f96ae6c)\n  * [https://en.wikipedia.org/wiki/Unicode_equivalence](https://en.wikipedia.org/wiki/Unicode_equivalence)\n  * [http://www.unicode.org/faq/normalization.html](http://www.unicode.org/faq/normalization.html)\n  * [https://github.com/edicl/cl-unicode/blob/master/specials.lisp](https://github.com/edicl/cl-unicode/blob/master/specials.lisp)\n  * [https://perldoc.perl.org/Unicode/Normalize.html](https://perldoc.perl.org/Unicode/Normalize.html)\n  * [https://www.mkssoftware.com/docs/perl/lib/Unicode/Normalize.asp](https://www.mkssoftware.com/docs/perl/lib/Unicode/Normalize.asp)\n  * [https://github.com/Wisdom/Awesome-Unicode](https://github.com/Wisdom/Awesome-Unicode)\n  * [https://www.postgresql.org/docs/current/multibyte.html](https://www.postgresql.org/docs/current/multibyte.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsabracrolleton%2Fsaslprep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsabracrolleton%2Fsaslprep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsabracrolleton%2Fsaslprep/lists"}