1
1
var Buffer = require ( 'buffer' ) . Buffer
2
- var sha = require ( './sha' )
3
- var sha256 = require ( './sha256' )
4
2
var rng = require ( './rng' )
5
- var md5 = require ( './md5' )
6
-
7
- var algorithms = {
8
- sha1 : sha ,
9
- sha256 : sha256 ,
10
- md5 : md5
11
- }
12
-
13
- var blocksize = 64
14
- var zeroBuffer = new Buffer ( blocksize ) ; zeroBuffer . fill ( 0 )
15
- function hmac ( fn , key , data ) {
16
- if ( ! Buffer . isBuffer ( key ) ) key = new Buffer ( key )
17
- if ( ! Buffer . isBuffer ( data ) ) data = new Buffer ( data )
18
-
19
- if ( key . length > blocksize ) {
20
- key = fn ( key )
21
- } else if ( key . length < blocksize ) {
22
- key = Buffer . concat ( [ key , zeroBuffer ] , blocksize )
23
- }
24
-
25
- var ipad = new Buffer ( blocksize ) , opad = new Buffer ( blocksize )
26
- for ( var i = 0 ; i < blocksize ; i ++ ) {
27
- ipad [ i ] = key [ i ] ^ 0x36
28
- opad [ i ] = key [ i ] ^ 0x5C
29
- }
30
-
31
- var hash = fn ( Buffer . concat ( [ ipad , data ] ) )
32
- return fn ( Buffer . concat ( [ opad , hash ] ) )
33
- }
34
-
35
- function hash ( alg , key ) {
36
- alg = alg || 'sha1'
37
- var fn = algorithms [ alg ]
38
- var bufs = [ ]
39
- var length = 0
40
- if ( ! fn ) error ( 'algorithm:' , alg , 'is not yet supported' )
41
- return {
42
- update : function ( data ) {
43
- if ( ! Buffer . isBuffer ( data ) ) data = new Buffer ( data )
44
-
45
- bufs . push ( data )
46
- length += data . length
47
- return this
48
- } ,
49
- digest : function ( enc ) {
50
- var buf = Buffer . concat ( bufs )
51
- var r = key ? hmac ( fn , key , buf ) : fn ( buf )
52
- bufs = null
53
- return enc ? r . toString ( enc ) : r
54
- }
55
- }
56
- }
57
3
58
4
function error ( ) {
59
5
var m = [ ] . slice . call ( arguments ) . join ( ' ' )
@@ -64,8 +10,10 @@ function error () {
64
10
] . join ( '\n' ) )
65
11
}
66
12
67
- exports . createHash = function ( alg ) { return hash ( alg ) }
68
- exports . createHmac = function ( alg , key ) { return hash ( alg , key ) }
13
+ exports . createHash = require ( './create-hash' )
14
+
15
+ exports . createHmac = require ( './create-hmac' )
16
+
69
17
exports . randomBytes = function ( size , callback ) {
70
18
if ( callback && callback . call ) {
71
19
try {
0 commit comments