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:
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]
+}