43 lines
893 B
Go
43 lines
893 B
Go
//go:build arm64 && !purego
|
|
// +build arm64,!purego
|
|
|
|
package base64
|
|
|
|
import (
|
|
"encoding/base64"
|
|
)
|
|
|
|
const (
|
|
encLutSize = 16
|
|
decLutSize = 2
|
|
minEncodeLen = 16 * 3
|
|
minDecodeLen = 8 * 4
|
|
)
|
|
|
|
func newEncoding(encoder string) *Encoding {
|
|
e := &Encoding{base: base64.NewEncoding(encoder)}
|
|
e.enableEncodeARM64(encoder)
|
|
e.enableDecodeARM64(encoder)
|
|
return e
|
|
}
|
|
|
|
func (e *Encoding) enableEncodeARM64(encoder string) {
|
|
c62, c63 := int8(encoder[62]), int8(encoder[63])
|
|
tab := [encLutSize]int8{
|
|
'a' - 26, '0' - 52, '0' - 52, '0' - 52, '0' - 52, '0' - 52, '0' - 52, '0' - 52,
|
|
'0' - 52, '0' - 52, '0' - 52, c62 - 62, c63 - 63, 'A', 0, 0,
|
|
}
|
|
|
|
e.enc = encodeARM64
|
|
e.enclut = tab
|
|
}
|
|
|
|
func (e *Encoding) enableDecodeARM64(encoder string) {
|
|
if encoder == encodeStd {
|
|
e.dec = decodeStdARM64
|
|
} else {
|
|
e.dec = decodeARM64
|
|
}
|
|
e.declut = [decLutSize]int8{int8(encoder[62]), int8(encoder[63])}
|
|
}
|