From a5592f87b39756a2e2df57dd066e3525f3ea24e1 Mon Sep 17 00:00:00 2001 From: rsiddharth Date: Wed, 26 Aug 2020 23:23:53 -0400 Subject: enc/b64.go: flesh it out --- enc/b64.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/enc/b64.go b/enc/b64.go index e69de29..0ea0a4c 100644 --- a/enc/b64.go +++ b/enc/b64.go @@ -0,0 +1,31 @@ +package enc + +const b64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + +func HexToBase64(hex string) string { + hb := []byte(hex) + + b64 := "" + for i := 0; i <= len(hb)-3; i = i + 3 { + a := fromHexChar(hb[i])<<8 | fromHexChar(hb[i+1])<<4 | fromHexChar(hb[i+2]) + b64 += encode(a >> 6) + b64 += encode(a & 0b111111) + } + return b64 +} + +func encode(b uint16) string { + return string(b64_table[b]) +} + +// adapted from +// https://go.googlesource.com/go/+/refs/tags/go1.15/src/encoding/hex/hex.go#83 +func fromHexChar(c byte) uint16 { + switch { + case '0' <= c && c <= '9': + return uint16(c - '0') + case 'a' <= c && c <= 'f': + return uint16(c - 'a' + 10) + } + return 0 +} -- cgit v1.2.3