{"id":27299852,"url":"https://github.com/clavoie/cryptu","last_synced_at":"2025-04-12T00:49:49.879Z","repository":{"id":57552511,"uuid":"146743537","full_name":"clavoie/cryptu","owner":"clavoie","description":"Injectable base64 symmetric encryption wrappers for Go","archived":false,"fork":false,"pushed_at":"2018-09-03T19:47:30.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T00:49:43.116Z","etag":null,"topics":["base64-encoding","go","golang","symmetric-encryption"],"latest_commit_sha":null,"homepage":null,"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/clavoie.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}},"created_at":"2018-08-30T12:03:47.000Z","updated_at":"2018-09-03T20:28:24.000Z","dependencies_parsed_at":"2022-09-26T18:50:44.143Z","dependency_job_id":null,"html_url":"https://github.com/clavoie/cryptu","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clavoie%2Fcryptu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clavoie%2Fcryptu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clavoie%2Fcryptu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clavoie%2Fcryptu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clavoie","download_url":"https://codeload.github.com/clavoie/cryptu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248501911,"owners_count":21114681,"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":["base64-encoding","go","golang","symmetric-encryption"],"created_at":"2025-04-12T00:49:49.379Z","updated_at":"2025-04-12T00:49:49.858Z","avatar_url":"https://github.com/clavoie.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cryptu [![GoDoc](https://godoc.org/github.com/clavoie/cryptu?status.svg)](http://godoc.org/github.com/clavoie/cryptu) [![Build Status](https://travis-ci.org/clavoie/cryptu.svg?branch=master)](https://travis-ci.org/clavoie/cryptu) [![codecov](https://codecov.io/gh/clavoie/cryptu/branch/master/graph/badge.svg)](https://codecov.io/gh/clavoie/cryptu) [![Go Report Card](https://goreportcard.com/badge/github.com/clavoie/cryptu)](https://goreportcard.com/report/github.com/clavoie/cryptu)\n\nBase64 symmetric encryption wrappers for Go, with hooks to be used by dependency injection.\n\n## Encrypt To Base64\n\nThe package level functions `EncryptToBase64` and `DecryptFromBase64` use the `crypto/aes` package for encryption and `encoding/base64.StdEncoding` for the encoding. \n\n```go\n// keys must be 16, 24, or 32 in length\nkey := \"zqpf8VWyrUP9j1gC\"\nsecret := \"sensitive data\"\n\nencryptedValue, err := cryptu.EncryptToBase64(key, secret)\n\nif err != nil {\n  log.Fatal(err)\n}\n\nfmt.Println(encryptedValue)\n// R+gUlOWekeVALBOntneoP7wQK2IOBiC3ddS+Rj2x\n\ndecodedValue, err := base64.StdEncoding.DecodeString(encryptedValue)\n\nif err != nil {\n  log.Fatal(err)\n}\n\nfmt.Println(string(decodedValue)) \n// G¦¦?¦@,¦¦w¦?¦+b ¦u?F=¦\n\ndecryptedSecret, err := cryptu.DecryptFromBase64(key, encryptedValue)\n\nif err != nil {\n  log.Fatal(err)\n}\n\nfmt.Println(decryptedSecret)\n// sensitive data\n```\nA full example is available [here](https://godoc.org/github.com/clavoie/cryptu#example-EncryptToBase64)\n\n## Dependency Injection\n\nAn interface is provided to wrap all top level package functions. This interface can be injected the into your code instead of calling the package functions directly. There are some [predefined dependency definitions](https://github.com/clavoie/cryptu/blob/master/di.go#L7) provided by the package. If you'd like to start using them you need only supply a definition for `cryptu.Key` and `cryptu.Base64Encoding`:\n\n```go\n\nfunc NewKey() (cryptu.Key, error)                 { return cryptu.NewStrKey(os.Getenv(\"MY_KEY\")) }\nfunc NewEncoding() (cryptu.Base64Encoding, error) { return cryptu.NewBase64Encoding(base64.StdEncoding) }\n\nvar defs = []*di.Def{\n    {NewKey, di.Singleton},\n    {NewEncoding, di.Singleton},\n}\n\nfunc MyHandler(encoder cryptu.Base64) {\n  encryptedValue, err := encoder.Encrypt(\"some value\")\n  // if err\n  \n  myResponse := \u0026MyResponse{Secret: encryptedValue}\n  // write response\n}\n\nfunc main() {\n  resolver, err := di.NewResolver(errFn, cryptu.NewDiDefs(), defs)\n  // if err\n  \n  handler, err := resolver.HttpHandler(MyHandler)\n  // if err\n  \n  http.HandleFunc(\"/foo\", handler)\n  // listen and serve\n}\n```\n\nA full example is available [here](https://godoc.org/github.com/clavoie/cryptu#example-Base64)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclavoie%2Fcryptu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclavoie%2Fcryptu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclavoie%2Fcryptu/lists"}