Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80540 views
1
'use strict'
2
var sign = require('./sign')
3
var verify = require('./verify')
4
var stream = require('stream')
5
var inherits = require('inherits')
6
var _algos = require('./algos')
7
var createHash = require('create-hash')
8
var algos = {}
9
Object.keys(_algos).forEach(function (key) {
10
algos[key] = algos[key.toLowerCase()] = _algos[key]
11
})
12
13
exports.createSign = exports.Sign = createSign
14
15
function createSign (algorithm) {
16
return new Sign(algorithm)
17
}
18
19
exports.createVerify = exports.Verify = createVerify
20
21
function createVerify (algorithm) {
22
return new Verify(algorithm)
23
}
24
25
inherits(Sign, stream.Writable)
26
27
function Sign (algorithm) {
28
stream.Writable.call(this)
29
var data = algos[algorithm]
30
if (!data)
31
throw new Error('Unknown message digest')
32
33
this._hashType = data.hash
34
this._hash = createHash(data.hash)
35
this._tag = data.id
36
this._signType = data.sign
37
}
38
39
Sign.prototype._write = function _write (data, _, done) {
40
this._hash.update(data)
41
done()
42
}
43
44
Sign.prototype.update = function update (data, enc) {
45
if (typeof data === 'string')
46
data = new Buffer(data, enc)
47
this._hash.update(data)
48
return this
49
}
50
51
Sign.prototype.sign = function signMethod (key, enc) {
52
this.end()
53
var hash = this._hash.digest()
54
var sig = sign(Buffer.concat([this._tag, hash]), key, this._hashType, this._signType)
55
if (enc) {
56
sig = sig.toString(enc)
57
}
58
return sig
59
}
60
61
inherits(Verify, stream.Writable)
62
function Verify (algorithm) {
63
stream.Writable.call(this)
64
var data = algos[algorithm]
65
if (!data)
66
throw new Error('Unknown message digest')
67
68
this._hash = createHash(data.hash)
69
this._tag = data.id
70
this._signType = data.sign
71
}
72
73
Verify.prototype._write = function _write (data, _, done) {
74
this._hash.update(data)
75
done()
76
}
77
78
Verify.prototype.update = function update (data, enc) {
79
if (typeof data === 'string')
80
data = new Buffer(data, enc)
81
82
this._hash.update(data)
83
return this
84
}
85
86
Verify.prototype.verify = function verifyMethod (key, sig, enc) {
87
this.end()
88
var hash = this._hash.digest()
89
if (typeof sig === 'string')
90
sig = new Buffer(sig, enc)
91
92
return verify(sig, Buffer.concat([this._tag, hash]), key, this._signType)
93
}
94
95