github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/templates/signer/util.go (about) 1 package signer 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "errors" 7 "fmt" 8 ) 9 10 const ( 11 SignaturePattern = "# digest: " 12 SignatureFmt = SignaturePattern + "%x" 13 ) 14 15 func RemoveSignatureFromData(data []byte) []byte { 16 return bytes.Trim(ReDigest.ReplaceAll(data, []byte("")), "\n") 17 } 18 19 func Sign(sign *Signer, data []byte) (string, error) { 20 if sign == nil { 21 return "", errors.New("invalid nil signer") 22 } 23 cleanedData := RemoveSignatureFromData(data) 24 signatureData, err := sign.Sign(cleanedData) 25 if err != nil { 26 return "", err 27 } 28 29 return fmt.Sprintf(SignatureFmt, signatureData), nil 30 } 31 32 func Verify(sign *Signer, data []byte) (bool, error) { 33 if sign == nil { 34 return false, errors.New("invalid nil verifier") 35 } 36 digestData := ReDigest.Find(data) 37 if len(digestData) == 0 { 38 return false, errors.New("digest not found") 39 } 40 41 digestData = bytes.TrimSpace(bytes.TrimPrefix(digestData, []byte(SignaturePattern))) 42 digest, err := hex.DecodeString(string(digestData)) 43 if err != nil { 44 return false, err 45 } 46 47 cleanedData := RemoveSignatureFromData(data) 48 49 return sign.Verify(cleanedData, digest) 50 }