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.
Files changed (67) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/LICENSE +3 -3
  3. package/README.md +254 -175
  4. package/dist/forge.all.min.js +11 -0
  5. package/dist/forge.all.min.js.map +1 -0
  6. package/dist/forge.min.js +10 -0
  7. package/dist/forge.min.js.map +1 -0
  8. package/dist/prime.worker.min.js +2 -0
  9. package/dist/prime.worker.min.js.map +1 -0
  10. package/flash/README.md +48 -0
  11. package/flash/package.json +28 -0
  12. package/flash/swf/SocketPool.swf +0 -0
  13. package/{js → lib}/aes.js +5 -61
  14. package/{js → lib}/aesCipherSuites.js +4 -58
  15. package/{js → lib}/asn1.js +371 -132
  16. package/{js → lib}/cipher.js +3 -59
  17. package/{js → lib}/cipherModes.js +3 -65
  18. package/{js → lib}/debug.js +2 -58
  19. package/{js → lib}/des.js +6 -63
  20. package/lib/forge.js +13 -0
  21. package/{js → lib}/form.js +5 -13
  22. package/{js → lib}/hmac.js +4 -58
  23. package/{js → lib}/http.js +15 -20
  24. package/lib/index.all.js +16 -0
  25. package/lib/index.js +34 -0
  26. package/{js → lib}/jsbn.js +3 -60
  27. package/{js → lib}/kem.js +5 -58
  28. package/{js → lib}/log.js +3 -58
  29. package/lib/md.all.js +13 -0
  30. package/lib/md.js +11 -0
  31. package/{js → lib}/md5.js +4 -60
  32. package/lib/mgf.js +12 -0
  33. package/lib/mgf1.js +57 -0
  34. package/lib/oids.js +159 -0
  35. package/{js → lib}/pbe.js +29 -79
  36. package/{js → lib}/pbkdf2.js +10 -64
  37. package/{js → lib}/pem.js +3 -58
  38. package/{js → lib}/pkcs1.js +6 -59
  39. package/{js → lib}/pkcs12.js +15 -74
  40. package/{js → lib}/pkcs7.js +12 -72
  41. package/{js → lib}/pkcs7asn1.js +4 -58
  42. package/{js → lib}/pki.js +12 -71
  43. package/{js → lib}/prime.js +18 -58
  44. package/{js → lib}/prime.worker.js +4 -1
  45. package/{js → lib}/prng.js +5 -62
  46. package/{js → lib}/pss.js +7 -61
  47. package/{js → lib}/random.js +11 -57
  48. package/{js → lib}/rc2.js +13 -73
  49. package/{js → lib}/rsa.js +13 -71
  50. package/{js → lib}/sha1.js +4 -60
  51. package/{js → lib}/sha256.js +4 -60
  52. package/{js → lib}/sha512.js +19 -61
  53. package/{js → lib}/socket.js +8 -63
  54. package/{js → lib}/ssh.js +7 -66
  55. package/{js → lib}/task.js +5 -58
  56. package/{js → lib}/tls.js +10 -67
  57. package/{js → lib}/tlssocket.js +6 -61
  58. package/{js → lib}/util.js +39 -68
  59. package/{js → lib}/x509.js +25 -102
  60. package/{js → lib}/xhr.js +12 -15
  61. package/package.json +58 -21
  62. package/js/forge.js +0 -94
  63. package/js/md.js +0 -75
  64. package/js/mgf.js +0 -67
  65. package/js/mgf1.js +0 -112
  66. package/js/oids.js +0 -288
  67. package/swf/SocketPool.swf +0 -0
@@ -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
- (function() {
11
- /* ########## Begin module implementation ########## */
12
- function initModule(forge) {
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
- })();
@@ -5,12 +5,11 @@
5
5
  *
6
6
  * Copyright (c) 2008-2013 Digital Bazaar, Inc.
7
7
  */
8
- (function() {
9
- /* ########## Begin module implementation ########## */
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 || {};
@@ -5,13 +5,11 @@
5
5
  *
6
6
  * Copyright (c) 2010-2014 Digital Bazaar, Inc.
7
7
  */
8
- (function() {
9
- /* ########## Begin module implementation ########## */
10
- function initModule(forge) {
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');
@@ -17,9 +17,18 @@
17
17
  *
18
18
  * EncryptedData ::= OCTET STRING
19
19
  */
20
- (function() {
21
- /* ########## Begin module implementation ########## */
22
- function initModule(forge) {
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
- })();