{"id":17931091,"url":"https://github.com/rdner/uncrypticated","last_synced_at":"2025-12-15T15:08:50.331Z","repository":{"id":119127824,"uuid":"153339127","full_name":"rdner/uncrypticated","owner":"rdner","description":"cryptography in Go made easy as it should be","archived":false,"fork":false,"pushed_at":"2021-12-12T14:06:04.000Z","size":10,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-08T23:46:06.706Z","etag":null,"topics":["cryptography","security"],"latest_commit_sha":null,"homepage":"","language":"Go","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/rdner.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-10-16T19:02:47.000Z","updated_at":"2021-12-12T14:06:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"ee99852f-e937-419d-a9fd-7e2c839c29bd","html_url":"https://github.com/rdner/uncrypticated","commit_stats":null,"previous_names":["pragmader/uncrypticated"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdner%2Funcrypticated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdner%2Funcrypticated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdner%2Funcrypticated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdner%2Funcrypticated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdner","download_url":"https://codeload.github.com/rdner/uncrypticated/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246982858,"owners_count":20864169,"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":["cryptography","security"],"created_at":"2024-10-28T21:19:38.554Z","updated_at":"2025-12-15T15:08:49.923Z","avatar_url":"https://github.com/rdner.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# uncrypticated - cryptography in Go made easy as it should be\n\nNo dependencies. Small and reliable.\n\n## Features\n\n### Encrypt/Decrypt bytes\n```go\nkey := PassphraseToKey(\"some very secure passphrase no hacker can hack\")\nplainText := []byte(\"some very secret text to encrypt\")\ncipherText, err := Encrypt(text, key) // encryption done\n\n// to decrypt back\nplainText, err := Decrypt(cipherText, key)\n```\n\n### Encrypt/Decrypt strings\n```go\nkey := PassphraseToKey(\"some very secure passphrase no hacker can hack\")\nplainText := []byte(\"some very secret text to encrypt\")\ncipherText, err := EncryptToString(text, key) // encryption done\n\n// to decrypt back\nplainText, err := DecryptFromString(cipherText, key)\n```\n\n### Generate random string with a given length\n```go\nrandomString, err := RandomString(16)\n```\n\n### Generate/Validate an [encrypted token](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet#Encryption_based_Token_Pattern)\n```go\nid := \"some user ID or basically any ID you can use\"\nkey := PassphraseToKey(\"some very secure passphrase no hacker can hack\")\ntoken, err := CreateToken(key, id)\n\n// then you can send this token to a user, or publish anywhere\n// and of course you can validate it when you get it back\nlifetime := 5 * time.Minute // let's say the token is valid for 5 minutes\nerr := ValidateToken(token, key, id, lifetime)\n```\n\nCan return following errors:\n```go\nvar (\n\t// ErrTokenInvalid occurs when `ValidateToken` failed to decode the token\n\tErrTokenInvalid = errors.New(\"crypto: invalid token, failed to decode\")\n\t// ErrTokenExpired occurs when `ValidateToken` succeeded\n\t// to decode the token but it's expired\n\tErrTokenExpired = errors.New(\"crypto: token expired\")\n\t// ErrTokenNoIDMatch occurs when `ValidateToken` succeeded\n\t// to decode the token but its ID does not match the validation request\n\tErrTokenNoIDMatch = errors.New(\"crypto: token ID does not match\")\n)\n```\n\nMIT License\n\nDenis Rechkunov denis@rdner.de\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdner%2Funcrypticated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdner%2Funcrypticated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdner%2Funcrypticated/lists"}