From c481b80ec39ec533790ed3bef1245ed54b9c8d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hitalo=20de=20Jesus=20do=20Ros=C3=A1rio=20Souza?= <63821277+enghitalo@users.noreply.github.com> Date: Wed, 29 Jun 2022 05:57:05 -0300 Subject: [PATCH] docs: add a jwt example to vlib/crypto/README.md (#14872) --- vlib/crypto/README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/vlib/crypto/README.md b/vlib/crypto/README.md index 76ed2961ab..34125116e4 100644 --- a/vlib/crypto/README.md +++ b/vlib/crypto/README.md @@ -15,6 +15,7 @@ The implementations here are loosely based on [Go's crypto package](https://pkg. ## Examples: +### AES: ```v import crypto.aes import crypto.rand @@ -43,3 +44,40 @@ fn main() { assert decrypted == data } ``` + +### JWT: +```v +import crypto.hmac +import crypto.sha256 +import encoding.base64 +import json + +struct JwtHeader { + alg string + typ string +} + +struct JwtPayload { + sub string + name string + iat int +} + +fn main() { + token := make_token() + println(token) +} + +fn make_token() string { + secret := 'your-256-bit-secret' + + header := base64.url_encode(json.encode(JwtHeader{'HS256', 'JWT'}).bytes()) + payload := base64.url_encode(json.encode(JwtPayload{'1234567890', 'John Doe', 1516239022}).bytes()) + signature := base64.url_encode(hmac.new(secret.bytes(), '${header}.$payload'.bytes(), + sha256.sum, sha256.block_size).bytestr().bytes()) + + jwt := '${header}.${payload}.$signature' + + return jwt +} +```