dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 232d195743583b25398775ffc305eaafa0662ae4
parent 801554dbaf413cc9a5ba81279536a54c6d908c08
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 29 Jan 2023 05:54:52 -0800

utils fn to verify a tor ed25519 signature

Diffstat:
Mpkg/utils/utils.go | 19+++++++++++++++++++
1 file changed, 19 insertions(+), 0 deletions(-)

diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/aes" "crypto/cipher" + "crypto/ed25519" "crypto/md5" cryptoRand "crypto/rand" "crypto/rsa" @@ -14,6 +15,7 @@ import ( "dkforest/pkg/bfchroma" bf "dkforest/pkg/blackfriday/v2" "dkforest/pkg/utils/crypto" + "encoding/base32" "encoding/binary" "encoding/hex" "encoding/json" @@ -1077,3 +1079,20 @@ func (r Renderer) RenderHeader(w io.Writer, ast *bf.Node) { func (r Renderer) RenderFooter(w io.Writer, ast *bf.Node) { r.Base.RenderFooter(w, ast) } + +func VerifyTorSign(onionAddr, msg, pemSig string) bool { + block, _ := pem.Decode([]byte(pemSig)) + if block == nil { + return false + } + sig := block.Bytes + pub := identityKeyFromAddress(onionAddr) + return ed25519.Verify(pub, []byte(msg), sig) +} + +func identityKeyFromAddress(onionAddr string) ed25519.PublicKey { + trimmedAddr := strings.TrimSuffix(onionAddr, ".onion") + upperAddr := strings.ToUpper(trimmedAddr) + decodedAddr, _ := base32.StdEncoding.DecodeString(upperAddr) + return decodedAddr[:32] +}