UNPKG

1.23 kBJavaScriptView Raw
1'use strict'
2var cl = require('chloride')
3
4exports.hash = function (data, enc) {
5 data = (
6 'string' === typeof data && enc == null
7 ? new Buffer(data, 'binary')
8 : new Buffer(data, enc)
9 )
10 return cl.crypto_hash_sha256(data).toString('base64')+'.sha256'
11}
12
13exports.hasSigil = function hasSigil (s) {
14 return /^(@|%|&)/.test(s)
15}
16
17function tag (key, tag) {
18 if(!tag) throw new Error('no tag for:' + key.toString('base64'))
19 return key.toString('base64')+'.' + tag.replace(/^\./, '')
20}
21
22exports.keysToJSON = function keysToJSON(keys, curve) {
23 curve = (keys.curve || curve)
24
25 var pub = tag(keys.public.toString('base64'), curve)
26 return {
27 curve: curve,
28 public: pub,
29 private: keys.private ? tag(keys.private.toString('base64'), curve) : undefined,
30 id: '@'+(curve === 'ed25519' ? pub : exports.hash(pub))
31 }
32}
33
34exports.getTag = function getTag (string) {
35 var i = string.indexOf('.')
36 return string.substring(i+1)
37}
38
39exports.toBuffer = function (buf) {
40 if(buf == null) return buf
41 if(Buffer.isBuffer(buf)) throw new Error('already a buffer')
42 var i = buf.indexOf('.')
43 var start = (exports.hasSigil(buf)) ? 1 : 0
44 return new Buffer(buf.substring(start, ~i ? i : buf.length), 'base64')
45}