...

Source file src/github.com/lestrrat-go/jwx/internal/base64/base64.go

Documentation: github.com/lestrrat-go/jwx/internal/base64

     1  package base64
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/base64"
     6  	"encoding/binary"
     7  
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  func Encode(src []byte) []byte {
    12  	enc := base64.RawURLEncoding
    13  	dst := make([]byte, enc.EncodedLen(len(src)))
    14  	enc.Encode(dst, src)
    15  	return dst
    16  }
    17  
    18  func EncodeToStringStd(src []byte) string {
    19  	return base64.StdEncoding.EncodeToString(src)
    20  }
    21  
    22  func EncodeToString(src []byte) string {
    23  	return base64.RawURLEncoding.EncodeToString(src)
    24  }
    25  
    26  func EncodeUint64ToString(v uint64) string {
    27  	data := make([]byte, 8)
    28  	binary.BigEndian.PutUint64(data, v)
    29  
    30  	i := 0
    31  	for ; i < len(data); i++ {
    32  		if data[i] != 0x0 {
    33  			break
    34  		}
    35  	}
    36  
    37  	return EncodeToString(data[i:])
    38  }
    39  
    40  func Decode(src []byte) ([]byte, error) {
    41  	var enc *base64.Encoding
    42  
    43  	var isRaw = !bytes.HasSuffix(src, []byte{'='})
    44  	var isURL = !bytes.ContainsAny(src, "+/")
    45  	switch {
    46  	case isRaw && isURL:
    47  		enc = base64.RawURLEncoding
    48  	case isURL:
    49  		enc = base64.URLEncoding
    50  	case isRaw:
    51  		enc = base64.RawStdEncoding
    52  	default:
    53  		enc = base64.StdEncoding
    54  	}
    55  
    56  	dst := make([]byte, enc.DecodedLen(len(src)))
    57  	n, err := enc.Decode(dst, src)
    58  	if err != nil {
    59  		return nil, errors.Wrap(err, `failed to decode source`)
    60  	}
    61  	return dst[:n], nil
    62  }
    63  
    64  func DecodeString(src string) ([]byte, error) {
    65  	return Decode([]byte(src))
    66  }
    67  

View as plain text