@buckless/signed-data
v2.2.0
Published
Sign unsigned numbers using HMAC-SHA1
Downloads
3
Readme
signed-data
Sign data using HMAC-SHA1
Output format
Outputs both data and the signature in buffers
Signature is HMAC-SHA1 and is at least 4 bytes.
+-----------------------------------------------------------+
| | |
| | HMAC-SHA1 signature |
| Data | |
| | (4 to 20 bytes) |
| | |
+-----------------------------------------------------------+
Usage
const SignedData = require('@buckless/signed-data')
const inst = new SignedData(
'secret', // signature key
null, // max bytes (defaults to: auto)
null, // hashing algorithm (defaults to : nodejs crypto sha1)
[
// some number (from 0 to 16777215)
{
name: 'number',
default: '000000',
size: 3,
encode: number => number.toString(16),
decode: data => parseInt(data, 16)
}
]
)
const cipher = inst.encode(value)
const decipher = inst.decode(value)
// decipher === value
Export to string :
const SignedData = require('@buckless/signed-data')
const inst = new SignedData(
'secret', // signature key
null, // max bytes (defaults to: auto)
null, // hashing algorithm (defaults to : nodejs sha1)
[
// some number (from 0 to 16777215)
{
name: 'number',
default: '000000',
size: 3,
encode: number => number.toString(16),
decode: data => parseInt(data, 16)
}
]
)
const cipher = inst.encode(value).toString('hex')
const decipher = inst.decode(cipher) // decode can handle strings as well
// decipher === value
With more signature bytes:
const SignedData = require('@buckless/signed-data')
const inst = new SignedData(
'secret', // signature key
23, // (3 bytes of data + 20 bytes of signature)
null, // hashing algorithm (defaults to : nodejs sha1)
[
// some number (from 0 to 16777215)
{
name: 'number',
default: '000000',
size: 3,
encode: number => number.toString(16),
decode: data => parseInt(data, 16)
}
]
)
const cipher = inst.encode(value)
const decipher = inst.decode(value)
// cipher.length === 23
// decipher === value
With another SHA-1 algorithm (defaults to node's crypto module):
const SignedData = require('@buckless/signed-data')
const Rusha = require('rusha')
const inst = new SignedData(
'secret', // signature key
null, // max bytes (defaults to: auto)
Rusha.createHash, // Rusha.createHash is a great sha1 library
[
// some number (from 0 to 16777215)
{
name: 'number',
default: '000000',
size: 3,
encode: number => number.toString(16),
decode: data => parseInt(data, 16)
}
]
)
const cipher = inst.encode(value)
const decipher = inst.decode(cipher)
// decipher === value
API
constructor(secret: String, [maxBytes: Number], [hashAlgorithm: Function], [scheme: Array])
# Override secret from constructor
key(secret: String) : SignedData
encode(data: Object)
decode(raw: Buffer|String)