|
|
- package modhex
-
- import (
- "errors"
- "fmt"
- )
-
- const hexChars = "0123456789abcdef"
- const modhexChars = "cbdefghijklnrtuv"
-
- var modhex2HexMap map[byte]byte
- var hex2ModhexMap map[byte]byte
-
- func init() {
- hex2ModhexMap = make(map[byte]byte)
- for i, h := range []byte(hexChars) {
- hex2ModhexMap[h] = modhexChars[i]
- }
-
- modhex2HexMap = make(map[byte]byte)
- for i, m := range []byte(modhexChars) {
- modhex2HexMap[m] = hexChars[i]
- }
- }
-
- // EncodeHex encodes a hex string into a modhex string
- func EncodeHex(hex string) (string, error) {
- size := len([]byte(hex))
-
- if size%2 == 1 {
- return "", errors.New("size of input hex input not even")
- }
-
- var modhex = make([]byte, size)
-
- for i, h := range []byte(hex) {
- if m, ok := hex2ModhexMap[h]; ok {
- modhex[i] = m
- } else {
- return "", fmt.Errorf("input not hex encoded; position %d", i)
- }
- }
-
- return string(modhex), nil
- }
-
- // DecodeHex decodes a modhex string into a hex string
- func DecodeHex(modhex string) (string, error) {
- size := len([]byte(modhex))
-
- if size%2 == 1 {
- return "", errors.New("size of modhex input not even")
- }
-
- var hex = make([]byte, size)
-
- for i, m := range []byte(modhex) {
- if h, ok := modhex2HexMap[m]; ok {
- hex[i] = h
- } else {
- return "", fmt.Errorf("input not modhex encoded; position %d", i)
- }
- }
-
- return string(hex), nil
- }
|