summaryrefslogtreecommitdiff
path: root/vendor/github.com/dvsekhvalnov/jose2go/base64url/base64url.go
blob: 7229a85eb7bfd667d07524ab48366e1fdbffccf4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// package base64url provides base64url encoding/decoding support
package base64url

import (
	"strings"
	"encoding/base64"
)

// Decode decodes base64url string to byte array
func Decode(data string) ([]byte,error) {
	data = strings.Replace(data, "-", "+", -1) // 62nd char of encoding
	data = strings.Replace(data, "_", "/", -1) // 63rd char of encoding
	
	switch(len(data) % 4) { // Pad with trailing '='s
		case 0:             // no padding
		case 2: data+="=="  // 2 pad chars
		case 3:	data+="="   // 1 pad char		
	}
		
	return base64.StdEncoding.DecodeString(data)
}

// Encode encodes given byte array to base64url string
func Encode(data []byte) string {
	result := base64.StdEncoding.EncodeToString(data)
	result = strings.Replace(result, "+", "-", -1) // 62nd char of encoding
	result = strings.Replace(result, "/", "_", -1) // 63rd char of encoding
	result = strings.Replace(result, "=", "", -1)  // Remove any trailing '='s
	
	return result
}