Skip to content

Instantly share code, notes, and snippets.

@GusGA
Forked from viktorbenei/main.go
Created July 7, 2022 18:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GusGA/5eda1d42d7ad5b4b83f7c705d205b79d to your computer and use it in GitHub Desktop.
Save GusGA/5eda1d42d7ad5b4b83f7c705d205b79d to your computer and use it in GitHub Desktop.
sha1 hmac hexdigest signature
package main
import (
"crypto/hmac"
"crypto/sha1"
"crypto/subtle"
"encoding/hex"
"fmt"
"os"
)
func generateSignature(secretToken, payloadBody string) string {
mac := hmac.New(sha1.New, []byte(secretToken))
mac.Write([]byte(payloadBody))
expectedMAC := mac.Sum(nil)
return "sha1=" + hex.EncodeToString(expectedMAC)
}
func verifySignature(secretToken, payloadBody string, signatureToCompareWith string) bool {
signature := generateSignature(secretToken, payloadBody)
return subtle.ConstantTimeCompare([]byte(signature), []byte(signatureToCompareWith)) == 1
}
func main() {
testPayloadBody := `{"message":"test content"}`
testSignatureToCompareWith := `sha1=33a08e9b5e9c8d5e944d9288e9b499abb298344d`
fmt.Println("signature match? :", verifySignature(os.Getenv("SECRET_TOKEN"), testPayloadBody, testSignatureToCompareWith))
}
require 'openssl'
require 'rack' # gem install rack
test_payload_body='{"message":"test content"}'
test_signature_to_compare_with='sha1=33a08e9b5e9c8d5e944d9288e9b499abb298344d'
def generate_signature(secret_token, payload_body)
return 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), secret_token, payload_body)
end
def verify_signature(secret_token, payload_body, signature_to_compare_with)
signature = generate_signature(secret_token, payload_body)
return Rack::Utils.secure_compare(signature, signature_to_compare_with)
end
puts "signature match? : #{verify_signature(ENV['SECRET_TOKEN'], test_payload_body, test_signature_to_compare_with)}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment