node-forge 0.6.47 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/LICENSE +3 -3
- package/README.md +254 -175
- package/dist/forge.all.min.js +11 -0
- package/dist/forge.all.min.js.map +1 -0
- package/dist/forge.min.js +10 -0
- package/dist/forge.min.js.map +1 -0
- package/dist/prime.worker.min.js +2 -0
- package/dist/prime.worker.min.js.map +1 -0
- package/flash/README.md +48 -0
- package/flash/package.json +28 -0
- package/flash/swf/SocketPool.swf +0 -0
- package/{js → lib}/aes.js +5 -61
- package/{js → lib}/aesCipherSuites.js +4 -58
- package/{js → lib}/asn1.js +371 -132
- package/{js → lib}/cipher.js +3 -59
- package/{js → lib}/cipherModes.js +3 -65
- package/{js → lib}/debug.js +2 -58
- package/{js → lib}/des.js +6 -63
- package/lib/forge.js +13 -0
- package/{js → lib}/form.js +5 -13
- package/{js → lib}/hmac.js +4 -58
- package/{js → lib}/http.js +15 -20
- package/lib/index.all.js +16 -0
- package/lib/index.js +34 -0
- package/{js → lib}/jsbn.js +3 -60
- package/{js → lib}/kem.js +5 -58
- package/{js → lib}/log.js +3 -58
- package/lib/md.all.js +13 -0
- package/lib/md.js +11 -0
- package/{js → lib}/md5.js +4 -60
- package/lib/mgf.js +12 -0
- package/lib/mgf1.js +57 -0
- package/lib/oids.js +159 -0
- package/{js → lib}/pbe.js +29 -79
- package/{js → lib}/pbkdf2.js +10 -64
- package/{js → lib}/pem.js +3 -58
- package/{js → lib}/pkcs1.js +6 -59
- package/{js → lib}/pkcs12.js +15 -74
- package/{js → lib}/pkcs7.js +12 -72
- package/{js → lib}/pkcs7asn1.js +4 -58
- package/{js → lib}/pki.js +12 -71
- package/{js → lib}/prime.js +18 -58
- package/{js → lib}/prime.worker.js +4 -1
- package/{js → lib}/prng.js +5 -62
- package/{js → lib}/pss.js +7 -61
- package/{js → lib}/random.js +11 -57
- package/{js → lib}/rc2.js +13 -73
- package/{js → lib}/rsa.js +13 -71
- package/{js → lib}/sha1.js +4 -60
- package/{js → lib}/sha256.js +4 -60
- package/{js → lib}/sha512.js +19 -61
- package/{js → lib}/socket.js +8 -63
- package/{js → lib}/ssh.js +7 -66
- package/{js → lib}/task.js +5 -58
- package/{js → lib}/tls.js +10 -67
- package/{js → lib}/tlssocket.js +6 -61
- package/{js → lib}/util.js +39 -68
- package/{js → lib}/x509.js +25 -102
- package/{js → lib}/xhr.js +12 -15
- package/package.json +58 -21
- package/js/forge.js +0 -94
- package/js/md.js +0 -75
- package/js/mgf.js +0 -67
- package/js/mgf1.js +0 -112
- package/js/oids.js +0 -288
- package/swf/SocketPool.swf +0 -0
package/{js → lib}/kem.js
RENAMED
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
* Copyright (c) 2014 Lautaro Cozzani <lautaro.cozzani@scytl.com>
|
|
8
8
|
* Copyright (c) 2014 Digital Bazaar, Inc.
|
|
9
9
|
*/
|
|
10
|
-
(
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
var forge = require('./forge');
|
|
11
|
+
require('./util');
|
|
12
|
+
require('./random');
|
|
13
|
+
require('./jsbn');
|
|
13
14
|
|
|
14
|
-
forge.kem = forge.kem || {};
|
|
15
|
+
module.exports = forge.kem = forge.kem || {};
|
|
15
16
|
|
|
16
17
|
var BigInteger = forge.jsbn.BigInteger;
|
|
17
18
|
|
|
@@ -165,57 +166,3 @@ function _createKDF(kdf, md, counterStart, digestLength) {
|
|
|
165
166
|
return key.getBytes();
|
|
166
167
|
};
|
|
167
168
|
}
|
|
168
|
-
|
|
169
|
-
} // end module implementation
|
|
170
|
-
|
|
171
|
-
/* ########## Begin module wrapper ########## */
|
|
172
|
-
var name = 'kem';
|
|
173
|
-
if(typeof define !== 'function') {
|
|
174
|
-
// NodeJS -> AMD
|
|
175
|
-
if(typeof module === 'object' && module.exports) {
|
|
176
|
-
var nodeJS = true;
|
|
177
|
-
define = function(ids, factory) {
|
|
178
|
-
factory(require, module);
|
|
179
|
-
};
|
|
180
|
-
} else {
|
|
181
|
-
// <script>
|
|
182
|
-
if(typeof forge === 'undefined') {
|
|
183
|
-
forge = {};
|
|
184
|
-
}
|
|
185
|
-
return initModule(forge);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// AMD
|
|
189
|
-
var deps;
|
|
190
|
-
var defineFunc = function(require, module) {
|
|
191
|
-
module.exports = function(forge) {
|
|
192
|
-
var mods = deps.map(function(dep) {
|
|
193
|
-
return require(dep);
|
|
194
|
-
}).concat(initModule);
|
|
195
|
-
// handle circular dependencies
|
|
196
|
-
forge = forge || {};
|
|
197
|
-
forge.defined = forge.defined || {};
|
|
198
|
-
if(forge.defined[name]) {
|
|
199
|
-
return forge[name];
|
|
200
|
-
}
|
|
201
|
-
forge.defined[name] = true;
|
|
202
|
-
for(var i = 0; i < mods.length; ++i) {
|
|
203
|
-
mods[i](forge);
|
|
204
|
-
}
|
|
205
|
-
return forge[name];
|
|
206
|
-
};
|
|
207
|
-
};
|
|
208
|
-
var tmpDefine = define;
|
|
209
|
-
define = function(ids, factory) {
|
|
210
|
-
deps = (typeof ids === 'string') ? factory.slice(2) : ids.slice(2);
|
|
211
|
-
if(nodeJS) {
|
|
212
|
-
delete define;
|
|
213
|
-
return tmpDefine.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
214
|
-
}
|
|
215
|
-
define = tmpDefine;
|
|
216
|
-
return define.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
217
|
-
};
|
|
218
|
-
define(['require', 'module', './util','./random','./jsbn'], function() {
|
|
219
|
-
defineFunc.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
220
|
-
});
|
|
221
|
-
})();
|
package/{js → lib}/log.js
RENAMED
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) 2008-2013 Digital Bazaar, Inc.
|
|
7
7
|
*/
|
|
8
|
-
(
|
|
9
|
-
|
|
10
|
-
function initModule(forge) {
|
|
8
|
+
var forge = require('./forge');
|
|
9
|
+
require('./util');
|
|
11
10
|
|
|
12
11
|
/* LOG API */
|
|
13
|
-
forge.log = forge.log || {};
|
|
12
|
+
module.exports = forge.log = forge.log || {};
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Application logging system.
|
|
@@ -316,57 +315,3 @@ if(sConsoleLogger !== null) {
|
|
|
316
315
|
|
|
317
316
|
// provide public access to console logger
|
|
318
317
|
forge.log.consoleLogger = sConsoleLogger;
|
|
319
|
-
|
|
320
|
-
} // end module implementation
|
|
321
|
-
|
|
322
|
-
/* ########## Begin module wrapper ########## */
|
|
323
|
-
var name = 'log';
|
|
324
|
-
if(typeof define !== 'function') {
|
|
325
|
-
// NodeJS -> AMD
|
|
326
|
-
if(typeof module === 'object' && module.exports) {
|
|
327
|
-
var nodeJS = true;
|
|
328
|
-
define = function(ids, factory) {
|
|
329
|
-
factory(require, module);
|
|
330
|
-
};
|
|
331
|
-
} else {
|
|
332
|
-
// <script>
|
|
333
|
-
if(typeof forge === 'undefined') {
|
|
334
|
-
forge = {};
|
|
335
|
-
}
|
|
336
|
-
return initModule(forge);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
// AMD
|
|
340
|
-
var deps;
|
|
341
|
-
var defineFunc = function(require, module) {
|
|
342
|
-
module.exports = function(forge) {
|
|
343
|
-
var mods = deps.map(function(dep) {
|
|
344
|
-
return require(dep);
|
|
345
|
-
}).concat(initModule);
|
|
346
|
-
// handle circular dependencies
|
|
347
|
-
forge = forge || {};
|
|
348
|
-
forge.defined = forge.defined || {};
|
|
349
|
-
if(forge.defined[name]) {
|
|
350
|
-
return forge[name];
|
|
351
|
-
}
|
|
352
|
-
forge.defined[name] = true;
|
|
353
|
-
for(var i = 0; i < mods.length; ++i) {
|
|
354
|
-
mods[i](forge);
|
|
355
|
-
}
|
|
356
|
-
return forge[name];
|
|
357
|
-
};
|
|
358
|
-
};
|
|
359
|
-
var tmpDefine = define;
|
|
360
|
-
define = function(ids, factory) {
|
|
361
|
-
deps = (typeof ids === 'string') ? factory.slice(2) : ids.slice(2);
|
|
362
|
-
if(nodeJS) {
|
|
363
|
-
delete define;
|
|
364
|
-
return tmpDefine.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
365
|
-
}
|
|
366
|
-
define = tmpDefine;
|
|
367
|
-
return define.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
368
|
-
};
|
|
369
|
-
define(['require', 'module', './util'], function() {
|
|
370
|
-
defineFunc.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
371
|
-
});
|
|
372
|
-
})();
|
package/lib/md.all.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js module for all known Forge message digests.
|
|
3
|
+
*
|
|
4
|
+
* @author Dave Longley
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2011-2017 Digital Bazaar, Inc.
|
|
7
|
+
*/
|
|
8
|
+
module.exports = require('./md');
|
|
9
|
+
|
|
10
|
+
require('./md5');
|
|
11
|
+
require('./sha1');
|
|
12
|
+
require('./sha256');
|
|
13
|
+
require('./sha512');
|
package/lib/md.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js module for Forge message digests.
|
|
3
|
+
*
|
|
4
|
+
* @author Dave Longley
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2011-2017 Digital Bazaar, Inc.
|
|
7
|
+
*/
|
|
8
|
+
var forge = require('./forge');
|
|
9
|
+
|
|
10
|
+
module.exports = forge.md = forge.md || {};
|
|
11
|
+
forge.md.algorithms = forge.md.algorithms || {};
|
package/{js → lib}/md5.js
RENAMED
|
@@ -5,13 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) 2010-2014 Digital Bazaar, Inc.
|
|
7
7
|
*/
|
|
8
|
-
(
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
var forge = require('./forge');
|
|
9
|
+
require('./md');
|
|
10
|
+
require('./util');
|
|
11
11
|
|
|
12
|
-
var md5 = forge.md5 = forge.md5 || {};
|
|
13
|
-
forge.md = forge.md || {};
|
|
14
|
-
forge.md.algorithms = forge.md.algorithms || {};
|
|
12
|
+
var md5 = module.exports = forge.md5 = forge.md5 || {};
|
|
15
13
|
forge.md.md5 = forge.md.algorithms.md5 = md5;
|
|
16
14
|
|
|
17
15
|
/**
|
|
@@ -289,57 +287,3 @@ function _update(s, w, bytes) {
|
|
|
289
287
|
len -= 64;
|
|
290
288
|
}
|
|
291
289
|
}
|
|
292
|
-
|
|
293
|
-
} // end module implementation
|
|
294
|
-
|
|
295
|
-
/* ########## Begin module wrapper ########## */
|
|
296
|
-
var name = 'md5';
|
|
297
|
-
if(typeof define !== 'function') {
|
|
298
|
-
// NodeJS -> AMD
|
|
299
|
-
if(typeof module === 'object' && module.exports) {
|
|
300
|
-
var nodeJS = true;
|
|
301
|
-
define = function(ids, factory) {
|
|
302
|
-
factory(require, module);
|
|
303
|
-
};
|
|
304
|
-
} else {
|
|
305
|
-
// <script>
|
|
306
|
-
if(typeof forge === 'undefined') {
|
|
307
|
-
forge = {};
|
|
308
|
-
}
|
|
309
|
-
return initModule(forge);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
// AMD
|
|
313
|
-
var deps;
|
|
314
|
-
var defineFunc = function(require, module) {
|
|
315
|
-
module.exports = function(forge) {
|
|
316
|
-
var mods = deps.map(function(dep) {
|
|
317
|
-
return require(dep);
|
|
318
|
-
}).concat(initModule);
|
|
319
|
-
// handle circular dependencies
|
|
320
|
-
forge = forge || {};
|
|
321
|
-
forge.defined = forge.defined || {};
|
|
322
|
-
if(forge.defined[name]) {
|
|
323
|
-
return forge[name];
|
|
324
|
-
}
|
|
325
|
-
forge.defined[name] = true;
|
|
326
|
-
for(var i = 0; i < mods.length; ++i) {
|
|
327
|
-
mods[i](forge);
|
|
328
|
-
}
|
|
329
|
-
return forge[name];
|
|
330
|
-
};
|
|
331
|
-
};
|
|
332
|
-
var tmpDefine = define;
|
|
333
|
-
define = function(ids, factory) {
|
|
334
|
-
deps = (typeof ids === 'string') ? factory.slice(2) : ids.slice(2);
|
|
335
|
-
if(nodeJS) {
|
|
336
|
-
delete define;
|
|
337
|
-
return tmpDefine.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
338
|
-
}
|
|
339
|
-
define = tmpDefine;
|
|
340
|
-
return define.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
341
|
-
};
|
|
342
|
-
define(['require', 'module', './util'], function() {
|
|
343
|
-
defineFunc.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
344
|
-
});
|
|
345
|
-
})();
|
package/lib/mgf.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js module for Forge mask generation functions.
|
|
3
|
+
*
|
|
4
|
+
* @author Stefan Siegl
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2012 Stefan Siegl <stesie@brokenpipe.de>
|
|
7
|
+
*/
|
|
8
|
+
var forge = require('./forge');
|
|
9
|
+
require('./mgf1');
|
|
10
|
+
|
|
11
|
+
module.exports = forge.mgf = forge.mgf || {};
|
|
12
|
+
forge.mgf.mgf1 = forge.mgf1;
|
package/lib/mgf1.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Javascript implementation of mask generation function MGF1.
|
|
3
|
+
*
|
|
4
|
+
* @author Stefan Siegl
|
|
5
|
+
* @author Dave Longley
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
|
|
8
|
+
* Copyright (c) 2014 Digital Bazaar, Inc.
|
|
9
|
+
*/
|
|
10
|
+
var forge = require('./forge');
|
|
11
|
+
require('./util');
|
|
12
|
+
|
|
13
|
+
forge.mgf = forge.mgf || {};
|
|
14
|
+
var mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Creates a MGF1 mask generation function object.
|
|
18
|
+
*
|
|
19
|
+
* @param md the message digest API to use (eg: forge.md.sha1.create()).
|
|
20
|
+
*
|
|
21
|
+
* @return a mask generation function object.
|
|
22
|
+
*/
|
|
23
|
+
mgf1.create = function(md) {
|
|
24
|
+
var mgf = {
|
|
25
|
+
/**
|
|
26
|
+
* Generate mask of specified length.
|
|
27
|
+
*
|
|
28
|
+
* @param {String} seed The seed for mask generation.
|
|
29
|
+
* @param maskLen Number of bytes to generate.
|
|
30
|
+
* @return {String} The generated mask.
|
|
31
|
+
*/
|
|
32
|
+
generate: function(seed, maskLen) {
|
|
33
|
+
/* 2. Let T be the empty octet string. */
|
|
34
|
+
var t = new forge.util.ByteBuffer();
|
|
35
|
+
|
|
36
|
+
/* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */
|
|
37
|
+
var len = Math.ceil(maskLen / md.digestLength);
|
|
38
|
+
for(var i = 0; i < len; i++) {
|
|
39
|
+
/* a. Convert counter to an octet string C of length 4 octets */
|
|
40
|
+
var c = new forge.util.ByteBuffer();
|
|
41
|
+
c.putInt32(i);
|
|
42
|
+
|
|
43
|
+
/* b. Concatenate the hash of the seed mgfSeed and C to the octet
|
|
44
|
+
* string T: */
|
|
45
|
+
md.start();
|
|
46
|
+
md.update(seed + c.getBytes());
|
|
47
|
+
t.putBuffer(md.digest());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Output the leading maskLen octets of T as the octet string mask. */
|
|
51
|
+
t.truncate(t.length() - maskLen);
|
|
52
|
+
return t.getBytes();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return mgf;
|
|
57
|
+
};
|
package/lib/oids.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object IDs for ASN.1.
|
|
3
|
+
*
|
|
4
|
+
* @author Dave Longley
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2010-2013 Digital Bazaar, Inc.
|
|
7
|
+
*/
|
|
8
|
+
var forge = require('./forge');
|
|
9
|
+
|
|
10
|
+
forge.pki = forge.pki || {};
|
|
11
|
+
var oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {};
|
|
12
|
+
|
|
13
|
+
// set id to name mapping and name to id mapping
|
|
14
|
+
function _IN(id, name) {
|
|
15
|
+
oids[id] = name;
|
|
16
|
+
oids[name] = id;
|
|
17
|
+
}
|
|
18
|
+
// set id to name mapping only
|
|
19
|
+
function _I_(id, name) {
|
|
20
|
+
oids[id] = name;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// algorithm OIDs
|
|
24
|
+
_IN('1.2.840.113549.1.1.1', 'rsaEncryption');
|
|
25
|
+
// Note: md2 & md4 not implemented
|
|
26
|
+
//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');
|
|
27
|
+
//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');
|
|
28
|
+
_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');
|
|
29
|
+
_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');
|
|
30
|
+
_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');
|
|
31
|
+
_IN('1.2.840.113549.1.1.8', 'mgf1');
|
|
32
|
+
_IN('1.2.840.113549.1.1.9', 'pSpecified');
|
|
33
|
+
_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');
|
|
34
|
+
_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');
|
|
35
|
+
_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');
|
|
36
|
+
_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');
|
|
37
|
+
|
|
38
|
+
_IN('1.3.14.3.2.7', 'desCBC');
|
|
39
|
+
|
|
40
|
+
_IN('1.3.14.3.2.26', 'sha1');
|
|
41
|
+
_IN('2.16.840.1.101.3.4.2.1', 'sha256');
|
|
42
|
+
_IN('2.16.840.1.101.3.4.2.2', 'sha384');
|
|
43
|
+
_IN('2.16.840.1.101.3.4.2.3', 'sha512');
|
|
44
|
+
_IN('1.2.840.113549.2.5', 'md5');
|
|
45
|
+
|
|
46
|
+
// pkcs#7 content types
|
|
47
|
+
_IN('1.2.840.113549.1.7.1', 'data');
|
|
48
|
+
_IN('1.2.840.113549.1.7.2', 'signedData');
|
|
49
|
+
_IN('1.2.840.113549.1.7.3', 'envelopedData');
|
|
50
|
+
_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');
|
|
51
|
+
_IN('1.2.840.113549.1.7.5', 'digestedData');
|
|
52
|
+
_IN('1.2.840.113549.1.7.6', 'encryptedData');
|
|
53
|
+
|
|
54
|
+
// pkcs#9 oids
|
|
55
|
+
_IN('1.2.840.113549.1.9.1', 'emailAddress');
|
|
56
|
+
_IN('1.2.840.113549.1.9.2', 'unstructuredName');
|
|
57
|
+
_IN('1.2.840.113549.1.9.3', 'contentType');
|
|
58
|
+
_IN('1.2.840.113549.1.9.4', 'messageDigest');
|
|
59
|
+
_IN('1.2.840.113549.1.9.5', 'signingTime');
|
|
60
|
+
_IN('1.2.840.113549.1.9.6', 'counterSignature');
|
|
61
|
+
_IN('1.2.840.113549.1.9.7', 'challengePassword');
|
|
62
|
+
_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');
|
|
63
|
+
_IN('1.2.840.113549.1.9.14', 'extensionRequest');
|
|
64
|
+
|
|
65
|
+
_IN('1.2.840.113549.1.9.20', 'friendlyName');
|
|
66
|
+
_IN('1.2.840.113549.1.9.21', 'localKeyId');
|
|
67
|
+
_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');
|
|
68
|
+
|
|
69
|
+
// pkcs#12 safe bags
|
|
70
|
+
_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');
|
|
71
|
+
_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');
|
|
72
|
+
_IN('1.2.840.113549.1.12.10.1.3', 'certBag');
|
|
73
|
+
_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');
|
|
74
|
+
_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');
|
|
75
|
+
_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');
|
|
76
|
+
|
|
77
|
+
// password-based-encryption for pkcs#12
|
|
78
|
+
_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');
|
|
79
|
+
_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');
|
|
80
|
+
|
|
81
|
+
_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');
|
|
82
|
+
_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');
|
|
83
|
+
_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');
|
|
84
|
+
_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');
|
|
85
|
+
_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');
|
|
86
|
+
_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');
|
|
87
|
+
|
|
88
|
+
// hmac OIDs
|
|
89
|
+
_IN('1.2.840.113549.2.7', 'hmacWithSHA1');
|
|
90
|
+
_IN('1.2.840.113549.2.8', 'hmacWithSHA224');
|
|
91
|
+
_IN('1.2.840.113549.2.9', 'hmacWithSHA256');
|
|
92
|
+
_IN('1.2.840.113549.2.10', 'hmacWithSHA384');
|
|
93
|
+
_IN('1.2.840.113549.2.11', 'hmacWithSHA512');
|
|
94
|
+
|
|
95
|
+
// symmetric key algorithm oids
|
|
96
|
+
_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');
|
|
97
|
+
_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');
|
|
98
|
+
_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');
|
|
99
|
+
_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');
|
|
100
|
+
|
|
101
|
+
// certificate issuer/subject OIDs
|
|
102
|
+
_IN('2.5.4.3', 'commonName');
|
|
103
|
+
_IN('2.5.4.5', 'serialName');
|
|
104
|
+
_IN('2.5.4.6', 'countryName');
|
|
105
|
+
_IN('2.5.4.7', 'localityName');
|
|
106
|
+
_IN('2.5.4.8', 'stateOrProvinceName');
|
|
107
|
+
_IN('2.5.4.10', 'organizationName');
|
|
108
|
+
_IN('2.5.4.11', 'organizationalUnitName');
|
|
109
|
+
|
|
110
|
+
// X.509 extension OIDs
|
|
111
|
+
_IN('2.16.840.1.113730.1.1', 'nsCertType');
|
|
112
|
+
_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35
|
|
113
|
+
_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15
|
|
114
|
+
_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32
|
|
115
|
+
_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15
|
|
116
|
+
_I_('2.5.29.5', 'policyMapping'); // deprecated use .33
|
|
117
|
+
_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30
|
|
118
|
+
_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17
|
|
119
|
+
_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18
|
|
120
|
+
_I_('2.5.29.9', 'subjectDirectoryAttributes');
|
|
121
|
+
_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19
|
|
122
|
+
_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30
|
|
123
|
+
_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36
|
|
124
|
+
_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19
|
|
125
|
+
_IN('2.5.29.14', 'subjectKeyIdentifier');
|
|
126
|
+
_IN('2.5.29.15', 'keyUsage');
|
|
127
|
+
_I_('2.5.29.16', 'privateKeyUsagePeriod');
|
|
128
|
+
_IN('2.5.29.17', 'subjectAltName');
|
|
129
|
+
_IN('2.5.29.18', 'issuerAltName');
|
|
130
|
+
_IN('2.5.29.19', 'basicConstraints');
|
|
131
|
+
_I_('2.5.29.20', 'cRLNumber');
|
|
132
|
+
_I_('2.5.29.21', 'cRLReason');
|
|
133
|
+
_I_('2.5.29.22', 'expirationDate');
|
|
134
|
+
_I_('2.5.29.23', 'instructionCode');
|
|
135
|
+
_I_('2.5.29.24', 'invalidityDate');
|
|
136
|
+
_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31
|
|
137
|
+
_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28
|
|
138
|
+
_I_('2.5.29.27', 'deltaCRLIndicator');
|
|
139
|
+
_I_('2.5.29.28', 'issuingDistributionPoint');
|
|
140
|
+
_I_('2.5.29.29', 'certificateIssuer');
|
|
141
|
+
_I_('2.5.29.30', 'nameConstraints');
|
|
142
|
+
_IN('2.5.29.31', 'cRLDistributionPoints');
|
|
143
|
+
_IN('2.5.29.32', 'certificatePolicies');
|
|
144
|
+
_I_('2.5.29.33', 'policyMappings');
|
|
145
|
+
_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36
|
|
146
|
+
_IN('2.5.29.35', 'authorityKeyIdentifier');
|
|
147
|
+
_I_('2.5.29.36', 'policyConstraints');
|
|
148
|
+
_IN('2.5.29.37', 'extKeyUsage');
|
|
149
|
+
_I_('2.5.29.46', 'freshestCRL');
|
|
150
|
+
_I_('2.5.29.54', 'inhibitAnyPolicy');
|
|
151
|
+
|
|
152
|
+
// extKeyUsage purposes
|
|
153
|
+
_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');
|
|
154
|
+
_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');
|
|
155
|
+
_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');
|
|
156
|
+
_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');
|
|
157
|
+
_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');
|
|
158
|
+
_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');
|
|
159
|
+
_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');
|
package/{js → lib}/pbe.js
RENAMED
|
@@ -17,9 +17,18 @@
|
|
|
17
17
|
*
|
|
18
18
|
* EncryptedData ::= OCTET STRING
|
|
19
19
|
*/
|
|
20
|
-
(
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
var forge = require('./forge');
|
|
21
|
+
require('./aes');
|
|
22
|
+
require('./asn1');
|
|
23
|
+
require('./des');
|
|
24
|
+
require('./md');
|
|
25
|
+
require('./oids');
|
|
26
|
+
require('./pbkdf2');
|
|
27
|
+
require('./pem');
|
|
28
|
+
require('./random');
|
|
29
|
+
require('./rc2');
|
|
30
|
+
require('./rsa');
|
|
31
|
+
require('./util');
|
|
23
32
|
|
|
24
33
|
if(typeof BigInteger === 'undefined') {
|
|
25
34
|
var BigInteger = forge.jsbn.BigInteger;
|
|
@@ -30,7 +39,7 @@ var asn1 = forge.asn1;
|
|
|
30
39
|
|
|
31
40
|
/* Password-based encryption implementation. */
|
|
32
41
|
var pki = forge.pki = forge.pki || {};
|
|
33
|
-
pki.pbe = forge.pbe = forge.pbe || {};
|
|
42
|
+
module.exports = pki.pbe = forge.pbe = forge.pbe || {};
|
|
34
43
|
var oids = pki.oids;
|
|
35
44
|
|
|
36
45
|
// validator for an EncryptedPrivateKeyInfo structure
|
|
@@ -634,6 +643,9 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
634
643
|
var j, l;
|
|
635
644
|
|
|
636
645
|
if(typeof md === 'undefined' || md === null) {
|
|
646
|
+
if(!('sha1' in forge.md)) {
|
|
647
|
+
throw new Error('"sha1" hash algorithm unavailable.');
|
|
648
|
+
}
|
|
637
649
|
md = forge.md.sha1.create();
|
|
638
650
|
}
|
|
639
651
|
|
|
@@ -665,7 +677,7 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
665
677
|
Note that if the salt is the empty string, then so is S. */
|
|
666
678
|
var Slen = v * Math.ceil(s / v);
|
|
667
679
|
var S = new forge.util.ByteBuffer();
|
|
668
|
-
for(l = 0; l < Slen; l
|
|
680
|
+
for(l = 0; l < Slen; l++) {
|
|
669
681
|
S.putByte(salt.at(l % s));
|
|
670
682
|
}
|
|
671
683
|
|
|
@@ -675,7 +687,7 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
675
687
|
Note that if the password is the empty string, then so is P. */
|
|
676
688
|
var Plen = v * Math.ceil(p / v);
|
|
677
689
|
var P = new forge.util.ByteBuffer();
|
|
678
|
-
for(l = 0; l < Plen; l
|
|
690
|
+
for(l = 0; l < Plen; l++) {
|
|
679
691
|
P.putByte(passBuf.at(l % p));
|
|
680
692
|
}
|
|
681
693
|
|
|
@@ -687,12 +699,12 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
687
699
|
var c = Math.ceil(n / u);
|
|
688
700
|
|
|
689
701
|
/* 6. For i=1, 2, ..., c, do the following: */
|
|
690
|
-
for(var i = 1; i <= c; i
|
|
702
|
+
for(var i = 1; i <= c; i++) {
|
|
691
703
|
/* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */
|
|
692
704
|
var buf = new forge.util.ByteBuffer();
|
|
693
705
|
buf.putBytes(D.bytes());
|
|
694
706
|
buf.putBytes(I.bytes());
|
|
695
|
-
for(var round = 0; round < iter; round
|
|
707
|
+
for(var round = 0; round < iter; round++) {
|
|
696
708
|
md.start();
|
|
697
709
|
md.update(buf.getBytes());
|
|
698
710
|
buf = md.digest();
|
|
@@ -701,7 +713,7 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
701
713
|
/* b) Concatenate copies of Ai to create a string B of length v bytes (the
|
|
702
714
|
final copy of Ai may be truncated to create B). */
|
|
703
715
|
var B = new forge.util.ByteBuffer();
|
|
704
|
-
for(l = 0; l < v; l
|
|
716
|
+
for(l = 0; l < v; l++) {
|
|
705
717
|
B.putByte(buf.at(l % u));
|
|
706
718
|
}
|
|
707
719
|
|
|
@@ -710,10 +722,10 @@ pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
|
|
|
710
722
|
Ij=(Ij+B+1) mod 2v for each j. */
|
|
711
723
|
var k = Math.ceil(s / v) + Math.ceil(p / v);
|
|
712
724
|
var Inew = new forge.util.ByteBuffer();
|
|
713
|
-
for(j = 0; j < k; j
|
|
725
|
+
for(j = 0; j < k; j++) {
|
|
714
726
|
var chunk = new forge.util.ByteBuffer(I.getBytes(v));
|
|
715
727
|
var x = 0x1ff;
|
|
716
|
-
for(l = B.length() - 1; l >= 0; l
|
|
728
|
+
for(l = B.length() - 1; l >= 0; l--) {
|
|
717
729
|
x = x >> 8;
|
|
718
730
|
x += B.at(l) + chunk.at(l);
|
|
719
731
|
chunk.setAt(l, x & 0xff);
|
|
@@ -920,6 +932,9 @@ pki.pbe.getCipherForPKCS12PBE = function(oid, params, password) {
|
|
|
920
932
|
*/
|
|
921
933
|
pki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {
|
|
922
934
|
if(typeof md === 'undefined' || md === null) {
|
|
935
|
+
if(!('md5' in forge.md)) {
|
|
936
|
+
throw new Error('"md5" hash algorithm unavailable.');
|
|
937
|
+
}
|
|
923
938
|
md = forge.md.md5.create();
|
|
924
939
|
}
|
|
925
940
|
if(salt === null) {
|
|
@@ -974,6 +989,9 @@ function prfAlgorithmToMessageDigest(prfAlgorithm) {
|
|
|
974
989
|
'hmacWithSHA512'];
|
|
975
990
|
throw error;
|
|
976
991
|
}
|
|
992
|
+
if(!factory || !(prfAlgorithm in factory)) {
|
|
993
|
+
throw new Error('Unknown hash algorithm: ' + prfAlgorithm);
|
|
994
|
+
}
|
|
977
995
|
return factory[prfAlgorithm].create();
|
|
978
996
|
}
|
|
979
997
|
|
|
@@ -1003,71 +1021,3 @@ function createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {
|
|
|
1003
1021
|
}
|
|
1004
1022
|
return params;
|
|
1005
1023
|
}
|
|
1006
|
-
|
|
1007
|
-
} // end module implementation
|
|
1008
|
-
|
|
1009
|
-
/* ########## Begin module wrapper ########## */
|
|
1010
|
-
var name = 'pbe';
|
|
1011
|
-
if(typeof define !== 'function') {
|
|
1012
|
-
// NodeJS -> AMD
|
|
1013
|
-
if(typeof module === 'object' && module.exports) {
|
|
1014
|
-
var nodeJS = true;
|
|
1015
|
-
define = function(ids, factory) {
|
|
1016
|
-
factory(require, module);
|
|
1017
|
-
};
|
|
1018
|
-
} else {
|
|
1019
|
-
// <script>
|
|
1020
|
-
if(typeof forge === 'undefined') {
|
|
1021
|
-
forge = {};
|
|
1022
|
-
}
|
|
1023
|
-
return initModule(forge);
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
// AMD
|
|
1027
|
-
var deps;
|
|
1028
|
-
var defineFunc = function(require, module) {
|
|
1029
|
-
module.exports = function(forge) {
|
|
1030
|
-
var mods = deps.map(function(dep) {
|
|
1031
|
-
return require(dep);
|
|
1032
|
-
}).concat(initModule);
|
|
1033
|
-
// handle circular dependencies
|
|
1034
|
-
forge = forge || {};
|
|
1035
|
-
forge.defined = forge.defined || {};
|
|
1036
|
-
if(forge.defined[name]) {
|
|
1037
|
-
return forge[name];
|
|
1038
|
-
}
|
|
1039
|
-
forge.defined[name] = true;
|
|
1040
|
-
for(var i = 0; i < mods.length; ++i) {
|
|
1041
|
-
mods[i](forge);
|
|
1042
|
-
}
|
|
1043
|
-
return forge[name];
|
|
1044
|
-
};
|
|
1045
|
-
};
|
|
1046
|
-
var tmpDefine = define;
|
|
1047
|
-
define = function(ids, factory) {
|
|
1048
|
-
deps = (typeof ids === 'string') ? factory.slice(2) : ids.slice(2);
|
|
1049
|
-
if(nodeJS) {
|
|
1050
|
-
delete define;
|
|
1051
|
-
return tmpDefine.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
1052
|
-
}
|
|
1053
|
-
define = tmpDefine;
|
|
1054
|
-
return define.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
1055
|
-
};
|
|
1056
|
-
define([
|
|
1057
|
-
'require',
|
|
1058
|
-
'module',
|
|
1059
|
-
'./aes',
|
|
1060
|
-
'./asn1',
|
|
1061
|
-
'./des',
|
|
1062
|
-
'./md',
|
|
1063
|
-
'./oids',
|
|
1064
|
-
'./pem',
|
|
1065
|
-
'./pbkdf2',
|
|
1066
|
-
'./random',
|
|
1067
|
-
'./rc2',
|
|
1068
|
-
'./rsa',
|
|
1069
|
-
'./util'
|
|
1070
|
-
], function() {
|
|
1071
|
-
defineFunc.apply(null, Array.prototype.slice.call(arguments, 0));
|
|
1072
|
-
});
|
|
1073
|
-
})();
|