verify.mx raw

   1  package event
   2  
   3  import (
   4  	"bytes"
   5  
   6  	"smesh.lol/pkg/nostr/signer/p8k"
   7  	"smesh.lol/pkg/lol/chk"
   8  	"smesh.lol/pkg/lol/errorf"
   9  	"smesh.lol/pkg/lol/log"
  10  )
  11  
  12  func (ev *E) Verify() (valid bool, err error) {
  13  	var keys *p8k.Signer
  14  	if keys, err = p8k.New(); chk.E(err) {
  15  		return
  16  	}
  17  	if err = keys.InitPub(ev.Pubkey); chk.E(err) {
  18  		return
  19  	}
  20  	if valid, err = keys.Verify(ev.ID, ev.Sig); chk.T(err) {
  21  		id := ev.GetIDBytes()
  22  		if !bytes.Equal(id, ev.ID) {
  23  			log.E.Ln([]byte("event ID incorrect"))
  24  			ev.ID = id
  25  			err = nil
  26  			if valid, err = keys.Verify(ev.ID, ev.Sig); chk.E(err) {
  27  				return
  28  			}
  29  			err = errorf.W([]byte("event ID incorrect but signature is valid on correct ID"))
  30  		}
  31  		return
  32  	}
  33  	return
  34  }
  35