Skip to content

Instantly share code, notes, and snippets.

@viktorbenei
Last active October 14, 2023 00:53
Show Gist options
  • Save viktorbenei/9a0524d9f6de82c5079a7faae840ee6a to your computer and use it in GitHub Desktop.
Save viktorbenei/9a0524d9f6de82c5079a7faae840ee6a to your computer and use it in GitHub Desktop.
sha1 hmac hexdigest signature
package main
import (
"crypto/hmac"
"crypto/sha1"
"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 main() {
var testPayloadBody = `{"message":"test content"}`
fmt.Println("signature:", generateSignature(os.Getenv("SECRET_TOKEN"), testPayloadBody))
}
require 'openssl'
test_payload_body='{"message":"test content"}'
def generate_signature(secret_token, payload_body)
return 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), secret_token, payload_body)
end
puts "signature: #{generate_signature(ENV['SECRET_TOKEN'], test_payload_body)}"
@viktorbenei
Copy link
Author

viktorbenei commented Oct 5, 2018

To compare signatures use constant time compares:

@rayxyz
Copy link

rayxyz commented Jul 19, 2020

YOUR CODE WORKS LIKE A CHARM!

@viktorbenei
Copy link
Author

YOUR CODE WORKS LIKE A CHARM!

Awesome to hear @rayxyz ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment