encoder.go 668 B

123456789101112131415161718192021222324252627282930313233343536
  1. package derivationpath
  2. import (
  3. "bytes"
  4. "encoding/binary"
  5. "fmt"
  6. "strings"
  7. )
  8. func Encode(rawPath []uint32) string {
  9. segments := []string{string(tokenMaster)}
  10. for _, i := range rawPath {
  11. suffix := ""
  12. if i >= hardenedStart {
  13. i = i - hardenedStart
  14. suffix = string(tokenHardened)
  15. }
  16. segments = append(segments, fmt.Sprintf("%d%s", i, suffix))
  17. }
  18. return strings.Join(segments, string(tokenSeparator))
  19. }
  20. func EncodeFromBytes(data []byte) (string, error) {
  21. buf := bytes.NewBuffer(data)
  22. rawPath := make([]uint32, buf.Len()/4)
  23. err := binary.Read(buf, binary.BigEndian, &rawPath)
  24. if err != nil {
  25. return "", err
  26. }
  27. return Encode(rawPath), nil
  28. }