24 lines
622 B
Go
24 lines
622 B
Go
package utilities
|
|
|
|
import (
|
|
"encoding/base64"
|
|
|
|
"maunium.net/go/mautrix/crypto/goolm"
|
|
"maunium.net/go/mautrix/crypto/goolm/crypto"
|
|
"maunium.net/go/mautrix/id"
|
|
)
|
|
|
|
// VerifySignature verifies an ed25519 signature.
|
|
func VerifySignature(message []byte, key id.Ed25519, signature []byte) (ok bool, err error) {
|
|
keyDecoded, err := base64.RawStdEncoding.DecodeString(string(key))
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
signatureDecoded, err := goolm.Base64Decode(signature)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
publicKey := crypto.Ed25519PublicKey(keyDecoded)
|
|
return publicKey.Verify(message, signatureDecoded), nil
|
|
}
|