Files

39 lines
1.0 KiB
Go

package update
import (
"bytes"
"crypto/ed25519"
_ "embed"
"encoding/base64"
"errors"
"strings"
)
//go:embed release.pub
var embeddedPublicKey string
var (
ErrPublicKeyFormat = errors.New("the public key is not a base64 encoded 32 byte ed25519 key")
ErrPlaceholderPublicKey = errors.New("the placeholder public key has not been replaced: run task release:keygen and commit the real key as internal/infrastructure/update/release.pub")
)
func EmbeddedPublicKey() (ed25519.PublicKey, error) {
return ParsePublicKey(embeddedPublicKey)
}
func ParsePublicKey(text string) (ed25519.PublicKey, error) {
decoded, err := base64.StdEncoding.DecodeString(strings.TrimSpace(text))
if err != nil || len(decoded) != ed25519.PublicKeySize {
return nil, ErrPublicKeyFormat
}
return ed25519.PublicKey(decoded), nil
}
func IsPlaceholderPublicKey(key ed25519.PublicKey) bool {
return bytes.Equal(key, make([]byte, ed25519.PublicKeySize))
}
func EncodePublicKey(key ed25519.PublicKey) string {
return base64.StdEncoding.EncodeToString(key)
}