@contrast/agent 4.5.2 → 4.6.0

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 (121) hide show
  1. package/lib/assess/policy/propagators.json +20 -0
  2. package/lib/assess/policy/signatures.json +10 -0
  3. package/lib/core/config/options.js +3 -2
  4. package/lib/core/stacktrace.js +2 -1
  5. package/lib/hooks/frameworks/base.js +8 -2
  6. package/lib/hooks/frameworks/http.js +23 -16
  7. package/lib/hooks/frameworks/http2.js +73 -0
  8. package/lib/hooks/frameworks/index.js +8 -3
  9. package/lib/hooks/http.js +112 -128
  10. package/lib/hooks/require.js +16 -22
  11. package/lib/instrumentation.js +0 -3
  12. package/package.json +12 -15
  13. package/lib/hooks/frameworks/https.js +0 -42
  14. package/node_modules/bindings/LICENSE.md +0 -22
  15. package/node_modules/bindings/README.md +0 -98
  16. package/node_modules/bindings/bindings.js +0 -221
  17. package/node_modules/bindings/package.json +0 -32
  18. package/node_modules/file-uri-to-path/.npmignore +0 -1
  19. package/node_modules/file-uri-to-path/.travis.yml +0 -30
  20. package/node_modules/file-uri-to-path/History.md +0 -21
  21. package/node_modules/file-uri-to-path/LICENSE +0 -20
  22. package/node_modules/file-uri-to-path/README.md +0 -74
  23. package/node_modules/file-uri-to-path/index.d.ts +0 -2
  24. package/node_modules/file-uri-to-path/index.js +0 -66
  25. package/node_modules/file-uri-to-path/package.json +0 -36
  26. package/node_modules/file-uri-to-path/test/test.js +0 -24
  27. package/node_modules/file-uri-to-path/test/tests.json +0 -13
  28. package/node_modules/glossy/LICENSE +0 -19
  29. package/node_modules/glossy/README.md +0 -129
  30. package/node_modules/glossy/index.js +0 -12
  31. package/node_modules/glossy/lib/glossy/parse.js +0 -520
  32. package/node_modules/glossy/lib/glossy/produce.js +0 -459
  33. package/node_modules/glossy/package.json +0 -47
  34. package/node_modules/glossy/test/decide.js +0 -7
  35. package/node_modules/glossy/test/decode_pri.js +0 -24
  36. package/node_modules/glossy/test/parse_3164.js +0 -104
  37. package/node_modules/glossy/test/parse_5424.js +0 -106
  38. package/node_modules/glossy/test/parse_5848.js +0 -40
  39. package/node_modules/glossy/test/parse_8601.js +0 -14
  40. package/node_modules/glossy/test/parse_rfc3339.js +0 -9
  41. package/node_modules/glossy/test/produce.js +0 -162
  42. package/node_modules/glossy/test/runner.js +0 -40
  43. package/node_modules/glossy/test/structure_data.js +0 -24
  44. package/node_modules/nan/CHANGELOG.md +0 -537
  45. package/node_modules/nan/LICENSE.md +0 -13
  46. package/node_modules/nan/README.md +0 -455
  47. package/node_modules/nan/doc/asyncworker.md +0 -146
  48. package/node_modules/nan/doc/buffers.md +0 -54
  49. package/node_modules/nan/doc/callback.md +0 -76
  50. package/node_modules/nan/doc/converters.md +0 -41
  51. package/node_modules/nan/doc/errors.md +0 -226
  52. package/node_modules/nan/doc/json.md +0 -62
  53. package/node_modules/nan/doc/maybe_types.md +0 -583
  54. package/node_modules/nan/doc/methods.md +0 -664
  55. package/node_modules/nan/doc/new.md +0 -147
  56. package/node_modules/nan/doc/node_misc.md +0 -123
  57. package/node_modules/nan/doc/object_wrappers.md +0 -263
  58. package/node_modules/nan/doc/persistent.md +0 -296
  59. package/node_modules/nan/doc/scopes.md +0 -73
  60. package/node_modules/nan/doc/script.md +0 -38
  61. package/node_modules/nan/doc/string_bytes.md +0 -62
  62. package/node_modules/nan/doc/v8_internals.md +0 -199
  63. package/node_modules/nan/doc/v8_misc.md +0 -85
  64. package/node_modules/nan/include_dirs.js +0 -1
  65. package/node_modules/nan/nan.h +0 -2898
  66. package/node_modules/nan/nan_callbacks.h +0 -88
  67. package/node_modules/nan/nan_callbacks_12_inl.h +0 -514
  68. package/node_modules/nan/nan_callbacks_pre_12_inl.h +0 -520
  69. package/node_modules/nan/nan_converters.h +0 -72
  70. package/node_modules/nan/nan_converters_43_inl.h +0 -68
  71. package/node_modules/nan/nan_converters_pre_43_inl.h +0 -42
  72. package/node_modules/nan/nan_define_own_property_helper.h +0 -29
  73. package/node_modules/nan/nan_implementation_12_inl.h +0 -430
  74. package/node_modules/nan/nan_implementation_pre_12_inl.h +0 -263
  75. package/node_modules/nan/nan_json.h +0 -166
  76. package/node_modules/nan/nan_maybe_43_inl.h +0 -356
  77. package/node_modules/nan/nan_maybe_pre_43_inl.h +0 -268
  78. package/node_modules/nan/nan_new.h +0 -340
  79. package/node_modules/nan/nan_object_wrap.h +0 -156
  80. package/node_modules/nan/nan_persistent_12_inl.h +0 -132
  81. package/node_modules/nan/nan_persistent_pre_12_inl.h +0 -242
  82. package/node_modules/nan/nan_private.h +0 -73
  83. package/node_modules/nan/nan_string_bytes.h +0 -305
  84. package/node_modules/nan/nan_typedarray_contents.h +0 -96
  85. package/node_modules/nan/nan_weak.h +0 -437
  86. package/node_modules/nan/package.json +0 -41
  87. package/node_modules/nan/tools/1to2.js +0 -412
  88. package/node_modules/nan/tools/README.md +0 -14
  89. package/node_modules/nan/tools/package.json +0 -19
  90. package/node_modules/unix-dgram/LICENSE +0 -13
  91. package/node_modules/unix-dgram/README.md +0 -107
  92. package/node_modules/unix-dgram/binding.gyp +0 -20
  93. package/node_modules/unix-dgram/build/Makefile +0 -324
  94. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram/src/unix_dgram.o.d +0 -58
  95. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram.node.d +0 -1
  96. package/node_modules/unix-dgram/build/Release/.deps/Release/unix_dgram.node.d +0 -1
  97. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram/src/unix_dgram.o +0 -0
  98. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram.node +0 -0
  99. package/node_modules/unix-dgram/build/Release/unix_dgram.node +0 -0
  100. package/node_modules/unix-dgram/build/binding.Makefile +0 -6
  101. package/node_modules/unix-dgram/build/config.gypi +0 -213
  102. package/node_modules/unix-dgram/build/unix_dgram.target.mk +0 -159
  103. package/node_modules/unix-dgram/lib/unix_dgram.js +0 -168
  104. package/node_modules/unix-dgram/package.json +0 -36
  105. package/node_modules/unix-dgram/src/unix_dgram.cc +0 -404
  106. package/node_modules/unix-dgram/src/win_dummy.cc +0 -7
  107. package/node_modules/unix-dgram/test/test-connect-callback.js +0 -68
  108. package/node_modules/unix-dgram/test/test-connect.js +0 -53
  109. package/node_modules/unix-dgram/test/test-dgram-unix.js +0 -58
  110. package/node_modules/unix-dgram/test/test-send-error.js +0 -26
  111. package/node_modules/winston-syslog/.eslintrc +0 -7
  112. package/node_modules/winston-syslog/.travis.yml +0 -14
  113. package/node_modules/winston-syslog/CHANGELOG.md +0 -9
  114. package/node_modules/winston-syslog/LICENSE +0 -20
  115. package/node_modules/winston-syslog/README.md +0 -135
  116. package/node_modules/winston-syslog/lib/utils.js +0 -26
  117. package/node_modules/winston-syslog/lib/winston-syslog.js +0 -385
  118. package/node_modules/winston-syslog/package.json +0 -56
  119. package/node_modules/winston-syslog/test/format-test.js +0 -122
  120. package/node_modules/winston-syslog/test/syslog-test.js +0 -95
  121. package/node_modules/winston-syslog/test/unix-connect-test.js +0 -133
@@ -1,520 +0,0 @@
1
- /*
2
- * Glossy Parser - Parse incoming syslog messages
3
- *
4
- * Copyright Squeeks <privacymyass@gmail.com>.
5
- * This is free software licensed under the MIT License -
6
- * see the LICENSE file that should be included with this package.
7
- */
8
-
9
- /*
10
- * These values replace the integers in message that define the facility.
11
- */
12
- var FacilityIndex = [
13
- 'kern', // kernel messages
14
- 'user', // user-level messages
15
- 'mail', // mail system
16
- 'daemon', // system daemons
17
- 'auth', // security/authorization messages
18
- 'syslog', // messages generated internally by syslogd
19
- 'lpr', // line printer subsystem
20
- 'news', // network news subsystem
21
- 'uucp', // UUCP subsystem
22
- 'clock', // clock daemon
23
- 'sec', // security/authorization messages
24
- 'ftp', // FTP daemon
25
- 'ntp', // NTP subsystem
26
- 'audit', // log audit
27
- 'alert', // log alert
28
- 'clock', // clock daemon (note 2)
29
- 'local0', // local use 0 (local0)
30
- 'local1', // local use 1 (local1)
31
- 'local2', // local use 2 (local2)
32
- 'local3', // local use 3 (local3)
33
- 'local4', // local use 4 (local4)
34
- 'local5', // local use 5 (local5)
35
- 'local6', // local use 6 (local6)
36
- 'local7' // local use 7 (local7)
37
- ];
38
-
39
- // Note 1 - Various operating systems have been found to utilize
40
- // Facilities 4, 10, 13 and 14 for security/authorization,
41
- // audit, and alert messages which seem to be similar.
42
-
43
- // Note 2 - Various operating systems have been found to utilize
44
- // both Facilities 9 and 15 for clock (cron/at) messages.
45
-
46
- /*
47
- * These values replace the integers in message that define the severity.
48
- */
49
- var SeverityIndex = [
50
- 'emerg', // Emergency: system is unusable
51
- 'alert', // Alert: action must be taken immediately
52
- 'crit', // Critical: critical conditions
53
- 'err', // Error: error conditions
54
- 'warn', // Warning: warning conditions
55
- 'notice', // Notice: normal but significant condition
56
- 'info', // Informational: informational messages
57
- 'debug' // Debug: debug-level messages
58
- ];
59
-
60
- /*
61
- * Defines the range matching BSD style months to integers.
62
- */
63
- var BSDDateIndex = {
64
- 'Jan': 0,
65
- 'Feb': 1,
66
- 'Mar': 2,
67
- 'Apr': 3,
68
- 'May': 4,
69
- 'Jun': 5,
70
- 'Jul': 6,
71
- 'Aug': 7,
72
- 'Sep': 8,
73
- 'Oct': 9,
74
- 'Nov': 10,
75
- 'Dec': 11
76
- };
77
-
78
- // These values match the hasing algorithm values as defined in RFC 5848
79
- var signedBlockValues = {
80
-
81
- // Section 4.2.1
82
- hashAlgorithm: [
83
- null,
84
- 'SHA1',
85
- 'SHA256'
86
- ],
87
-
88
- // Section 5.2.1
89
- keyBlobType: {
90
- 'C': 'PKIX Certificate',
91
- 'P': 'OpenPGP KeyID',
92
- 'K': 'Public Key',
93
- 'N': 'No key information',
94
- 'U': 'Unknown'
95
- }
96
-
97
- };
98
-
99
- var GlossyParser = function() {};
100
-
101
- /*
102
- * Parse the raw message received.
103
- *
104
- * @param {String/Buffer} rawMessage Raw message received from socket
105
- * @param {Function} callback Callback to run after parse is complete
106
- * @return {Object} map containing all successfully parsed data.
107
- */
108
- GlossyParser.prototype.parse = function(rawMessage, callback) {
109
-
110
- // Are you node.js? Is this a Buffer?
111
- if(typeof Buffer == 'function' && Buffer.isBuffer(rawMessage)) {
112
- rawMessage = rawMessage.toString('utf8', 0);
113
- } else if(typeof rawMessage != 'string') {
114
- return rawMessage;
115
- }
116
-
117
- // Always return the original message
118
- var parsedMessage = {
119
- originalMessage: rawMessage
120
- };
121
-
122
- var segments = rawMessage.split(' ');
123
- if(segments.length < 2) return parsedMessage;
124
- var priKeys = this.decodePri(segments[0]);
125
- if(priKeys) {
126
- for (var key in priKeys) parsedMessage[key] = priKeys[key];
127
- }
128
-
129
- var timeStamp;
130
- //TODO Could our detection between 3164/5424 be improved?
131
- if(segments[0].match(/^(<\d+>\d)$/)) {
132
- segments.shift(); // Shift the prival off
133
- timeStamp = segments.shift();
134
- parsedMessage.type = 'RFC5424';
135
- parsedMessage.time = this.parseTimeStamp(timeStamp);
136
- parsedMessage.host = this.decideValue(segments.shift());
137
- parsedMessage.appName = this.decideValue(segments.shift());
138
- parsedMessage.pid = this.decideValue(segments.shift());
139
- parsedMessage.msgID = this.decideValue(segments.shift());
140
-
141
- if(segments[0] !== '-') {
142
- var spliceMarker = 0;
143
- for (i = segments.length -1; i > -1; i--) {
144
- if(segments[i].substr(-1) === ']'){
145
- spliceMarker = i;
146
- spliceMarker++;
147
- break;
148
- }
149
- }
150
- if(spliceMarker !== 0) {
151
- var sd = segments.splice(0, spliceMarker).join(' ');
152
- parsedMessage.structuredData = this.parseStructure(sd);
153
-
154
- if(parsedMessage.structuredData.ssign) {
155
- parsedMessage.structuredData.signedBlock =
156
- this.parseSignedBlock(parsedMessage.structuredData);
157
- } else if(parsedMessage.structuredData['ssign-cert']) {
158
- parsedMessage.structuredData.signedBlock =
159
- this.parseSignedCertificate(parsedMessage.structuredData);
160
- }
161
-
162
- }
163
- } else {
164
- segments.shift(); // Shift the SD marker off
165
- }
166
- parsedMessage.message = segments.join(' ');
167
-
168
- } else if (segments[0].match(/^(<\d+>\d+:)$/)) {
169
- parsedMessage.type = 'RFC3164';
170
- timeStamp = segments.splice(0,1).join(' ').replace(/^(<\d+>)/,'');
171
- parsedMessage.time = this.parseBsdTime(timeStamp);
172
- parsedMessage.message = segments.join(' ');
173
-
174
- } else if(segments[0].match(/^(<\d+>\w+)/)) {
175
- parsedMessage.type = 'RFC3164';
176
- if (segments[1] === '') segments.splice(1,1);
177
- timeStamp = segments.splice(0,3).join(' ').replace(/^(<\d+>)/,'');
178
- parsedMessage.time = this.parseBsdTime(timeStamp);
179
- parsedMessage.host = segments.shift();
180
- parsedMessage.message = segments.join(' ');
181
- }
182
-
183
- if(callback) {
184
- callback(parsedMessage);
185
- } else {
186
- return parsedMessage;
187
- }
188
-
189
- };
190
-
191
- /*
192
- * RFC5424 messages are supposed to specify '-' as the null value
193
- * @param {String} a section from an RFC5424 message
194
- * @return {Boolean/String} null if string is entirely '-', or the original value
195
- */
196
- GlossyParser.prototype.decideValue = function(value) {
197
- return value === '-' ? null : value;
198
- };
199
-
200
- /*
201
- * Parses the PRI value from the start of message
202
- *
203
- * @param {String} message Supplied raw primary value and version
204
- * @return {Object} Returns object containing Facility, Severity and Version
205
- * if correctly parsed, empty values on failure.
206
- */
207
- GlossyParser.prototype.decodePri = function(message) {
208
- if(typeof message != 'string') return;
209
-
210
- var privalMatch = message.match(/^<(\d+)>/);
211
- if(!privalMatch) return false;
212
-
213
- var returnVal = {
214
- prival: parseInt(privalMatch[1], 10)
215
- };
216
-
217
- if(privalMatch[2]) returnVal.versio = parseInt(privalMatch[2], 10);
218
-
219
- if(returnVal.prival && returnVal.prival >= 0 && returnVal.prival <= 191) {
220
-
221
- returnVal.facilityID = parseInt(returnVal.prival / 8, 10);
222
- returnVal.severityID = returnVal.prival - (returnVal.facilityID * 8);
223
-
224
- if(returnVal.facilityID < 24 && returnVal.severityID < 8) {
225
- returnVal.facility = FacilityIndex[returnVal.facilityID];
226
- returnVal.severity = SeverityIndex[returnVal.severityID];
227
- }
228
- } else if(returnVal.prival >= 191) {
229
- return false;
230
- }
231
-
232
- return returnVal;
233
- };
234
-
235
-
236
- /*
237
- * Attempts to parse a given timestamp
238
- * @param {String} timeStamp Supplied timestamp, should only be the timestamp,
239
- * not the entire message
240
- * @return {Object} Date object on success
241
- */
242
- GlossyParser.prototype.parseTimeStamp = function(timeStamp) {
243
-
244
- if(typeof timeStamp != 'string') return;
245
- var parsedTime;
246
-
247
- parsedTime = this.parse8601(timeStamp);
248
- if(parsedTime) return parsedTime;
249
-
250
- parsedTime = this.parseRfc3339(timeStamp);
251
- if(parsedTime) return parsedTime;
252
-
253
- parsedTime = this.parseBsdTime(timeStamp);
254
- if(parsedTime) return parsedTime;
255
-
256
- return parsedTime;
257
-
258
- };
259
-
260
- /*
261
- * Parse RFC3339 style timestamps
262
- * @param {String} timeStamp
263
- * @return {Date/false} Timestamp, if parsed correctly
264
- * @see http://blog.toppingdesign.com/2009/08/13/fast-rfc-3339-date-processing-in-javascript/
265
- */
266
- GlossyParser.prototype.parseRfc3339 = function(timeStamp){
267
-   var utcOffset, offsetSplitChar, offsetString,
268
-     offsetMultiplier = 1,
269
-     dateTime = timeStamp.split("T");
270
- if(dateTime.length < 2) return false;
271
-
272
-     var date = dateTime[0].split("-"),
273
-     time = dateTime[1].split(":"),
274
-     offsetField = time[time.length - 1];
275
-
276
-     offsetFieldIdentifier = offsetField.charAt(offsetField.length - 1);
277
-     if (offsetFieldIdentifier === "Z") {
278
-     utcOffset = 0;
279
-         time[time.length - 1] = offsetField.substr(0, offsetField.length - 2);
280
-     } else {
281
-     if (offsetField[offsetField.length - 1].indexOf("+") != -1) {
282
-             offsetSplitChar = "+";
283
-             offsetMultiplier = 1;
284
-         } else {
285
-             offsetSplitChar = "-";
286
-             offsetMultiplier = -1;
287
-         }
288
-
289
-         offsetString = offsetField.split(offsetSplitChar);
290
- if(offsetString.length < 2) return false;
291
-         time[(time.length - 1)] = offsetString[0];
292
-         offsetString = offsetString[1].split(":");
293
-         utcOffset = (offsetString[0] * 60) + offsetString[1];
294
-         utcOffset = utcOffset * 60 * 1000;
295
-     }
296
-                
297
-     var parsedTime = new Date(Date.UTC(date[0], date[1] - 1, date[2], time[0], time[1], time[2]) + (utcOffset * offsetMultiplier ));
298
-     return parsedTime;
299
- };
300
-
301
- /*
302
- * Parse "BSD style" timestamps, as defined in RFC3164
303
- * @param {String} timeStamp
304
- * @return {Date/false} Timestamp, if parsed correctly
305
- */
306
- GlossyParser.prototype.parseBsdTime = function(timeStamp) {
307
- var parsedTime;
308
- var d = timeStamp.match(/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2})\s+(\d{2}):(\d{2}):(\d{2})/);
309
- if(d) {
310
- // Years are absent from the specification, use this year
311
- currDate = new Date();
312
- parsedTime = new Date(
313
- currDate.getUTCFullYear(),
314
- BSDDateIndex[ d[1] ],
315
- d[2],
316
- d[3],
317
- d[4],
318
- d[5]);
319
- }
320
-
321
- return parsedTime;
322
- };
323
-
324
- /*
325
- * Parse ISO 8601 timestamps
326
- * @param {String} timeStamp
327
- * @return {Object/false} Timestamp, if successfully parsed
328
- */
329
- GlossyParser.prototype.parse8601 = function(timeStamp) {
330
- var parsedTime = new Date(Date.parse(timeStamp));
331
- if(parsedTime.toString() === 'Invalid Date') return; //FIXME not the best
332
- return parsedTime;
333
- };
334
-
335
-
336
- /*
337
- * Parse the structured data out of RFC5424 messages
338
- * @param {String} msg The STRUCTURED-DATA section
339
- * @return {Object} sdStructure parsed structure
340
- */
341
- GlossyParser.prototype.parseStructure = function(msg) {
342
- var sdStructure = { };
343
-
344
- var state = 0,
345
- ignore = false,
346
- sdId = '',
347
- sdParam = '',
348
- sdValue = '';
349
-
350
- /*
351
- * Build the structure using a horrible FSM.
352
- * The states we cycle are as following:
353
- * 0 1 2 34 20
354
- * [sdID sdParam="sdValue"]
355
- */
356
- for(var i = 0; i < msg.length; i++) {
357
- var c = msg[i];
358
- switch(state) {
359
- case 0: // SD-ELEMENT
360
- state = (c === '[') ? 1 : 0;
361
- break;
362
- case 1: // SD-ID
363
- if(c != ' ') {
364
- sdId += c;
365
- } else {
366
- sdStructure[sdId] = {};
367
- state = 2;
368
- }
369
- break;
370
- case 2: // SD-PARAM
371
- if(c === '=') {
372
- sdStructure[sdId][sdParam] = '';
373
- state = 3;
374
- } else if(c === ']') {
375
- sdId = '';
376
- state = 0;
377
- } else if(c != ' '){
378
- sdParam += c;
379
- }
380
- break;
381
- case 3: // SD-PARAM/SD-VALUE
382
- state = c === '"' ? 4 : null; // FIXME Handle rubbish better
383
- break;
384
- case 4: // SD-VALUE
385
- if(c === '\\' && !ignore) {
386
- ignore = true;
387
- } else if(c === '"' && !ignore) {
388
- sdStructure[sdId][sdParam] = sdValue;
389
- sdParam = '', sdValue = '';
390
- state = 2;
391
- } else {
392
- sdValue += c;
393
- ignore = false;
394
- }
395
- break;
396
- default:
397
- break;
398
- }
399
- }
400
- return sdStructure;
401
- };
402
-
403
-
404
- /*
405
- * Make sense of signed block messages
406
- * @param {Object} block the parsed structured data containing signed data
407
- * @return {Object} validatedBlock translated and named values, binary
408
- * elements will be Buffer objects, if available
409
- */
410
- GlossyParser.prototype.parseSignedBlock = function(block) {
411
-
412
- if(typeof block != 'object') return false;
413
-
414
- var signedBlock = { };
415
- var validatedBlock = { };
416
- // Figure out where in the object the keys live...
417
- if(block.structuredData && block.structuredData.ssign) {
418
- signedBlock = block.structuredData.ssign;
419
- } else if(block.ssign) {
420
- signedBlock = block.ssign;
421
- } else if(block.VER) {
422
- signedBlock = block;
423
- } else {
424
- return false;
425
- }
426
-
427
- var versionMatch = signedBlock.VER.match(/^(\d{2})(\d|\w)(\d)$/);
428
- if(versionMatch !== null) {
429
- validatedBlock.version = versionMatch[1];
430
- validatedBlock.hashAlgorithm = parseInt(versionMatch[2], 10);
431
- validatedBlock.hashAlgoString = signedBlockValues.hashAlgorithm[validatedBlock.hashAlgorithm];
432
- validatedBlock.sigScheme = parseInt(versionMatch[3], 10);
433
- }
434
-
435
- validatedBlock.rebootSessionID = parseInt(signedBlock.RSID, 10);
436
- validatedBlock.signatureGroup = parseInt(signedBlock.SG, 10);
437
- validatedBlock.signaturePriority = parseInt(signedBlock.SPRI, 10);
438
- validatedBlock.globalBlockCount = parseInt(signedBlock.GBC, 10);
439
- validatedBlock.firstMsgNumber = parseInt(signedBlock.FMN, 10);
440
- validatedBlock.msgCount = parseInt(signedBlock.CNT, 10);
441
- validatedBlock.hashBlock = signedBlock.HB.split(/\s/);
442
-
443
- // Check to see if we're in node or have a Buffer type
444
- if(typeof Buffer == 'function') {
445
- for(var hash in validatedBlock.hashBlock) {
446
- validatedBlock.hashBlock[hash] = new Buffer(
447
- validatedBlock.hashBlock[hash], encoding='base64');
448
- }
449
- validatedBlock.thisSignature = new Buffer(
450
- signedBlock.SIGN, encoding='base64');
451
- } else {
452
- validatedBlock.thisSignature = signedBlock.SIGN;
453
- }
454
-
455
- return validatedBlock;
456
-
457
- };
458
-
459
-
460
- /*
461
- * Make sense of signed certificate messages
462
- * @param {Object} block the parsed structured data containing signed data
463
- * @return {Object} validatedBlock translated and named values, binary
464
- * elements will be Buffer objects, if available
465
- */
466
- GlossyParser.prototype.parseSignedCertificate = function(block) {
467
-
468
- if(typeof block != 'object') return false;
469
-
470
- var signedBlock = { };
471
- var validatedBlock = { };
472
- // Figure out where in the object the keys live...
473
- if(block.structuredData && block.structuredData['ssign-cert']) {
474
- signedBlock = block.structuredData['ssign-cert'];
475
- } else if(block['ssign-cert']) {
476
- signedBlock = block['ssign-cert'];
477
- } else if(block.VER) {
478
- signedBlock = block;
479
- } else {
480
- return false;
481
- }
482
-
483
- var versionMatch = signedBlock.VER.match(/^(\d{2})(\d|\w)(\d)$/);
484
- if(versionMatch !== null) {
485
- validatedBlock.version = versionMatch[1];
486
- validatedBlock.hashAlgorithm = parseInt(versionMatch[2], 10);
487
- validatedBlock.hashAlgoString = signedBlockValues.hashAlgorithm[validatedBlock.hashAlgorithm];
488
- validatedBlock.sigScheme = parseInt(versionMatch[3], 10);
489
- }
490
-
491
- validatedBlock.rebootSessionID = parseInt(signedBlock.RSID, 10);
492
- validatedBlock.signatureGroup = parseInt(signedBlock.SG, 10);
493
- validatedBlock.signaturePriority = parseInt(signedBlock.SPRI, 10);
494
- validatedBlock.totalPayloadLength = parseInt(signedBlock.TPBL, 10);
495
- validatedBlock.payloadIndex = parseInt(signedBlock.INDEX, 10);
496
- validatedBlock.fragmentLength = parseInt(signedBlock.FLEN, 10);
497
-
498
- var payloadFragment = signedBlock.FRAG.split(/\s/);
499
- validatedBlock.payloadTimestamp = this.parseTimeStamp(payloadFragment[0]);
500
- validatedBlock.payloadType = payloadFragment[1];
501
- validatedBlock.payloadName = signedBlockValues.keyBlobType[payloadFragment[1]];
502
-
503
- if(typeof Buffer == 'function') {
504
- validatedBlock.keyBlob = new Buffer(
505
- payloadFragment[2], encoding='base64');
506
- validatedBlock.thisSignature = new Buffer(
507
- signedBlock.SIGN, encoding='base64');
508
- } else {
509
- validatedBlock.keyBlob = payloadFragment[2];
510
- validatedBlock.thisSignature = signedBlock.SIGN;
511
- }
512
-
513
- return validatedBlock;
514
-
515
- };
516
-
517
-
518
- if(typeof module == 'object') {
519
- module.exports = new GlossyParser();
520
- }