Skip to content

Instantly share code, notes, and snippets.

@leecade
Created July 3, 2019 15:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save leecade/6c0595d674f549bbc6925f429fea22f3 to your computer and use it in GitHub Desktop.
Save leecade/6c0595d674f549bbc6925f429fea22f3 to your computer and use it in GitHub Desktop.
simple signature with node-crypto api
const crypto = require('crypto')
const sign = (value, secret) => {
return value + '.' + crypto
.createHmac('sha256', secret + '')
.update(value + '')
.digest('base64')
.replace(/\=+$/, '')
}
const unsign = (value, secret) => {
value = value + ''
const str = value.slice(0, value.lastIndexOf('.'))
const macBuffer = Buffer.from(sign(str, secret + ''))
const valBuffer = Buffer.alloc(macBuffer.length)
valBuffer.write(value)
return crypto.timingSafeEqual(macBuffer, valBuffer) ? str : false
}
// example
const value = 'great'
const secret = 'fuck'
console.log('signed:', sign(value, secret))
console.log('unsigned check:', unsign(sign(value, secret), secret) === value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment