experimental-cli/project/encoders.go

48 lines
1.2 KiB
Go

package main
import (
"encoding/base32"
"fmt"
"strings"
)
var alphabet = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
var encoder = base32.NewEncoding(alphabet).WithPadding(base32.NoPadding)
// B32Encode does Crockford 32 encoding on a string.
func B32Encode(data []byte) string {
return encoder.EncodeToString(data)
}
func encodePeerMhash(pubKey []byte) string {
return PeerSigil + B32Encode(pubKey)
}
func encodeBlobMhash(sha256 []byte) string {
return BlobSigil + B32Encode(sha256[:])
}
type rawMessage struct {
mhash string
content string
}
func formatMessage(message pigeonMessage) rawMessage {
var str strings.Builder
str.WriteString(fmt.Sprintf("author %s\n", message.author))
str.WriteString(fmt.Sprintf("depth %d\n", message.depth))
str.WriteString(fmt.Sprintf("kind %s\n", message.kind))
str.WriteString(fmt.Sprintf("prev %s\n\n", message.prev))
for _, item := range message.body {
str.WriteString(fmt.Sprintf("%s:%s\n", item.key, item.value))
}
str.WriteString(fmt.Sprintf("\nsignature %s", message.signature))
content := str.String()
raw := []byte(content)
b32 := B32Encode(getSha256(raw))
return rawMessage{
content: content,
mhash: fmt.Sprintf("%s%s", MessageSigil, b32),
}
}