bireader 1.0.19 → 1.0.21
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/README.md +26 -23
- package/lib/cjs/src/common.js +155 -45
- package/lib/cjs/src/common.js.map +1 -1
- package/lib/cjs/src/reader.js +119 -47
- package/lib/cjs/src/reader.js.map +1 -1
- package/lib/cjs/src/writer.js +119 -47
- package/lib/cjs/src/writer.js.map +1 -1
- package/lib/cjs/types/src/common.d.ts +5 -5
- package/lib/cjs/types/src/common.d.ts.map +1 -1
- package/lib/cjs/types/src/reader.d.ts +25 -21
- package/lib/cjs/types/src/reader.d.ts.map +1 -1
- package/lib/cjs/types/src/writer.d.ts +25 -21
- package/lib/cjs/types/src/writer.d.ts.map +1 -1
- package/lib/esm/src/common.js +155 -45
- package/lib/esm/src/common.js.map +1 -1
- package/lib/esm/src/reader.js +119 -47
- package/lib/esm/src/reader.js.map +1 -1
- package/lib/esm/src/writer.js +119 -47
- package/lib/esm/src/writer.js.map +1 -1
- package/lib/esm/types/src/common.d.ts +5 -5
- package/lib/esm/types/src/common.d.ts.map +1 -1
- package/lib/esm/types/src/reader.d.ts +25 -21
- package/lib/esm/types/src/reader.d.ts.map +1 -1
- package/lib/esm/types/src/writer.d.ts +25 -21
- package/lib/esm/types/src/writer.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -263,6 +263,7 @@ function write_webp(data){
|
|
|
263
263
|
default:
|
|
264
264
|
break;
|
|
265
265
|
}
|
|
266
|
+
bw.trim() //remove any remaining bytes
|
|
266
267
|
bw.goto(4)
|
|
267
268
|
bw.uint32le(bw.size - 8) //write file size
|
|
268
269
|
return bw.return()
|
|
@@ -420,12 +421,14 @@ Common functions for setup, movement, manipulation and math shared by both.
|
|
|
420
421
|
<tr>
|
|
421
422
|
<td>Name</td>
|
|
422
423
|
<td>delete(startOffset, endOffset, consume)</td>
|
|
423
|
-
<td align="center"
|
|
424
|
-
<td
|
|
424
|
+
<td align="center">Start byte of data (default 0), end byte of data (default current byte position), move byte position to after data read (default false)</td>
|
|
425
|
+
<td >Removes and returns data. <br><b>Note:</b> Errors on strict mode</td>
|
|
425
426
|
</tr>
|
|
426
427
|
<tr>
|
|
427
|
-
<td>
|
|
428
|
-
<td>clip(
|
|
428
|
+
<td>Preset</td>
|
|
429
|
+
<td>clip()<br>trim()</td>
|
|
430
|
+
<td align="center">None</td>
|
|
431
|
+
<td >Removes data after the current byte position and returns data. <br><b>Note:</b> Errors on strict mode</td>
|
|
429
432
|
</tr>
|
|
430
433
|
<tr>
|
|
431
434
|
<td>Name</td>
|
|
@@ -507,7 +510,7 @@ Common functions for setup, movement, manipulation and math shared by both.
|
|
|
507
510
|
<tr>
|
|
508
511
|
<td>Name</td>
|
|
509
512
|
<td>xorThis(<b>xorKey</b>, length, consume)
|
|
510
|
-
<td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for
|
|
513
|
+
<td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
511
514
|
<td>XOR data <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
512
515
|
</tr>
|
|
513
516
|
<tr>
|
|
@@ -519,31 +522,31 @@ Common functions for setup, movement, manipulation and math shared by both.
|
|
|
519
522
|
<tr>
|
|
520
523
|
<td>Name</td>
|
|
521
524
|
<td>orThis(<b>orKey</b>, length, consume)
|
|
522
|
-
<td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for
|
|
525
|
+
<td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
523
526
|
<td>OR data <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
524
527
|
</tr>
|
|
525
528
|
<tr>
|
|
526
529
|
<td>Name</td>
|
|
527
530
|
<td>and(<b>andKey</b>, startOffset, endOffset, consume)
|
|
528
|
-
<td align="center"><b>Byte value, string,
|
|
531
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
529
532
|
<td >AND data <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
530
533
|
</tr>
|
|
531
534
|
<tr>
|
|
532
535
|
<td>Name</td>
|
|
533
536
|
<td>andThis(<b>andKey</b>, length, consume)
|
|
534
|
-
<td align="center"><b>Byte value, string,
|
|
537
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
535
538
|
<td>AND data <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
536
539
|
</tr>
|
|
537
540
|
<tr>
|
|
538
541
|
<td>Name</td>
|
|
539
|
-
<td>add(<b>
|
|
540
|
-
<td align="center"><b>
|
|
541
|
-
<td >Add value to data (per byte)
|
|
542
|
+
<td>add(<b>addKey</b>, startOffset, endOffset, consume)
|
|
543
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
544
|
+
<td >Add value to data (per byte). <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
542
545
|
</tr>
|
|
543
546
|
<tr>
|
|
544
547
|
<td>Name</td>
|
|
545
|
-
<td>addThis(<b>
|
|
546
|
-
<td align="center"><b>
|
|
548
|
+
<td>addThis(<b>addKey</b>, length, consume)
|
|
549
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
547
550
|
<td>Add value to data (per byte)</td>
|
|
548
551
|
</tr>
|
|
549
552
|
<tr>
|
|
@@ -560,26 +563,26 @@ Common functions for setup, movement, manipulation and math shared by both.
|
|
|
560
563
|
</tr>
|
|
561
564
|
<tr>
|
|
562
565
|
<td>Name</td>
|
|
563
|
-
<td>lShift(<b>
|
|
564
|
-
<td align="center"><b>
|
|
565
|
-
<td >Left shift data (per byte)
|
|
566
|
+
<td>lShift(<b>shiftKey</b>, startOffset, endOffset, consume)
|
|
567
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
568
|
+
<td >Left shift data (per byte). <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
566
569
|
</tr>
|
|
567
570
|
<tr>
|
|
568
571
|
<td>Name</td>
|
|
569
|
-
<td>lShiftThis(<b>
|
|
570
|
-
<td align="center"><b>
|
|
572
|
+
<td>lShiftThis(<b>shiftKey</b>, length, consume)
|
|
573
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
571
574
|
<td>Left shift data (per byte)</td>
|
|
572
575
|
</tr>
|
|
573
576
|
<tr>
|
|
574
577
|
<td>Name</td>
|
|
575
|
-
<td>rShift(<b>
|
|
576
|
-
<td align="center"><b>
|
|
577
|
-
<td >Right shift data (per byte)
|
|
578
|
+
<td>rShift(<b>shiftKey</b>, startOffset, endOffset, consume)
|
|
579
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
580
|
+
<td >Right shift data (per byte). <b>Note:</b> Will loop if operation length is longer than supplied key.</td>
|
|
578
581
|
</tr>
|
|
579
582
|
<tr>
|
|
580
583
|
<td>Name</td>
|
|
581
|
-
<td>rShiftThis(<b>
|
|
582
|
-
<td align="center"><b>
|
|
584
|
+
<td>rShiftThis(<b>shiftKey</b>, length, consume)
|
|
585
|
+
<td align="center"><b>Byte value, string, number array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
|
|
583
586
|
<td>Right shift data (per byte)</td>
|
|
584
587
|
</tr>
|
|
585
588
|
</tbody>
|
package/lib/cjs/src/common.js
CHANGED
|
@@ -48,8 +48,13 @@ function skip(_this, bytes, bits) {
|
|
|
48
48
|
const new_size = (((bytes || 0) + _this.offset) + Math.ceil((_this.bitoffset + (bits || 0)) / 8));
|
|
49
49
|
_this.check_size(bytes || 0, bits || 0);
|
|
50
50
|
if (new_size > _this.size) {
|
|
51
|
-
_this.
|
|
52
|
-
|
|
51
|
+
if (_this.strict == false) {
|
|
52
|
+
_this.extendArray(new_size - _this.size);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
_this.errorDump ? "\x1b[31m[Error]\x1b[0m hexdump:\n" + _this.hexdump() : "";
|
|
56
|
+
throw new Error("\x1b[33m[Strict mode]\x1b[0m: Seek of range of data: seek " + new_size + " of " + _this.size);
|
|
57
|
+
}
|
|
53
58
|
}
|
|
54
59
|
_this.bitoffset += (bits || 0) % 8;
|
|
55
60
|
_this.offset += (bytes || 0);
|
|
@@ -57,12 +62,14 @@ function skip(_this, bytes, bits) {
|
|
|
57
62
|
exports.skip = skip;
|
|
58
63
|
function goto(_this, byte, bit) {
|
|
59
64
|
const new_size = (byte + Math.ceil((bit || 0) / 8));
|
|
60
|
-
if (new_size > _this.size
|
|
61
|
-
_this.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
if (new_size > _this.size) {
|
|
66
|
+
if (_this.strict == false) {
|
|
67
|
+
_this.extendArray(new_size - _this.size);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
_this.errorDump ? "\x1b[31m[Error]\x1b[0m hexdump:\n" + _this.hexdump() : "";
|
|
71
|
+
throw new Error("\x1b[33m[Strict mode]\x1b[0m: Goto utside of range of data: goto " + new_size + " of " + _this.size);
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
74
|
_this.offset = byte;
|
|
68
75
|
_this.bitoffset = (bit || 0) % 8;
|
|
@@ -112,9 +119,11 @@ function remove(_this, startOffset, endOffset, consume, remove, fillValue) {
|
|
|
112
119
|
if (consume == true) {
|
|
113
120
|
if (remove != true) {
|
|
114
121
|
_this.offset = new_offset;
|
|
122
|
+
_this.bitoffset = 0;
|
|
115
123
|
}
|
|
116
124
|
else {
|
|
117
125
|
_this.offset = new_start;
|
|
126
|
+
_this.bitoffset = 0;
|
|
118
127
|
}
|
|
119
128
|
}
|
|
120
129
|
return data_removed;
|
|
@@ -136,8 +145,13 @@ function addData(_this, data, consume, offset, repalce) {
|
|
|
136
145
|
needed_size = offset || _this.offset + data.length;
|
|
137
146
|
}
|
|
138
147
|
if (needed_size > _this.size) {
|
|
139
|
-
|
|
140
|
-
|
|
148
|
+
if (_this.strict == false) {
|
|
149
|
+
_this.extendArray(needed_size - _this.size);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
_this.errorDump ? "\x1b[31m[Error]\x1b[0m: hexdump:\n" + _this.hexdump() : "";
|
|
153
|
+
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + needed_size + " of " + _this.size);
|
|
154
|
+
}
|
|
141
155
|
_this.size = _this.data.length;
|
|
142
156
|
}
|
|
143
157
|
if (repalce) {
|
|
@@ -170,6 +184,7 @@ function addData(_this, data, consume, offset, repalce) {
|
|
|
170
184
|
}
|
|
171
185
|
if (consume) {
|
|
172
186
|
_this.offset = needed_size;
|
|
187
|
+
_this.bitoffset = 0;
|
|
173
188
|
}
|
|
174
189
|
}
|
|
175
190
|
exports.addData = addData;
|
|
@@ -356,7 +371,7 @@ function hexDump(_this, options) {
|
|
|
356
371
|
console.log(rows.join("\n"));
|
|
357
372
|
}
|
|
358
373
|
exports.hexDump = hexDump;
|
|
359
|
-
function AND(_this,
|
|
374
|
+
function AND(_this, and_key, start, end, consume) {
|
|
360
375
|
const input = _this.data;
|
|
361
376
|
if ((end || 0) > _this.size) {
|
|
362
377
|
if (_this.strict == false) {
|
|
@@ -367,27 +382,29 @@ function AND(_this, xor_key, start, end, consume) {
|
|
|
367
382
|
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
|
|
368
383
|
}
|
|
369
384
|
}
|
|
370
|
-
if (typeof
|
|
385
|
+
if (typeof and_key == "number") {
|
|
371
386
|
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
372
|
-
input[i] = input[i] & (
|
|
387
|
+
input[i] = input[i] & (and_key & 0xff);
|
|
373
388
|
if (consume) {
|
|
374
389
|
_this.offset = i;
|
|
390
|
+
_this.bitoffset = 0;
|
|
375
391
|
}
|
|
376
392
|
}
|
|
377
393
|
}
|
|
378
394
|
else {
|
|
379
|
-
if (_this.isBufferOrUint8Array(
|
|
395
|
+
if (_this.isBufferOrUint8Array(and_key)) {
|
|
380
396
|
let number = -1;
|
|
381
397
|
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
382
|
-
if (number !=
|
|
398
|
+
if (number != and_key.length - 1) {
|
|
383
399
|
number = number + 1;
|
|
384
400
|
}
|
|
385
401
|
else {
|
|
386
402
|
number = 0;
|
|
387
403
|
}
|
|
388
|
-
input[i] = input[i] &
|
|
404
|
+
input[i] = input[i] & and_key[number];
|
|
389
405
|
if (consume) {
|
|
390
406
|
_this.offset = i;
|
|
407
|
+
_this.bitoffset = 0;
|
|
391
408
|
}
|
|
392
409
|
}
|
|
393
410
|
}
|
|
@@ -397,7 +414,7 @@ function AND(_this, xor_key, start, end, consume) {
|
|
|
397
414
|
}
|
|
398
415
|
}
|
|
399
416
|
exports.AND = AND;
|
|
400
|
-
function OR(_this,
|
|
417
|
+
function OR(_this, or_key, start, end, consume) {
|
|
401
418
|
const input = _this.data;
|
|
402
419
|
if ((end || 0) > _this.size) {
|
|
403
420
|
if (_this.strict == false) {
|
|
@@ -408,27 +425,29 @@ function OR(_this, xor_key, start, end, consume) {
|
|
|
408
425
|
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
|
|
409
426
|
}
|
|
410
427
|
}
|
|
411
|
-
if (typeof
|
|
428
|
+
if (typeof or_key == "number") {
|
|
412
429
|
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
413
|
-
input[i] = input[i] | (
|
|
430
|
+
input[i] = input[i] | (or_key & 0xff);
|
|
414
431
|
if (consume) {
|
|
415
432
|
_this.offset = i;
|
|
433
|
+
_this.bitoffset = 0;
|
|
416
434
|
}
|
|
417
435
|
}
|
|
418
436
|
}
|
|
419
437
|
else {
|
|
420
|
-
if (_this.isBufferOrUint8Array(
|
|
438
|
+
if (_this.isBufferOrUint8Array(or_key)) {
|
|
421
439
|
let number = -1;
|
|
422
440
|
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
423
|
-
if (number !=
|
|
441
|
+
if (number != or_key.length - 1) {
|
|
424
442
|
number = number + 1;
|
|
425
443
|
}
|
|
426
444
|
else {
|
|
427
445
|
number = 0;
|
|
428
446
|
}
|
|
429
|
-
input[i] = input[i] |
|
|
447
|
+
input[i] = input[i] | or_key[number];
|
|
430
448
|
if (consume) {
|
|
431
449
|
_this.offset = i;
|
|
450
|
+
_this.bitoffset = 0;
|
|
432
451
|
}
|
|
433
452
|
}
|
|
434
453
|
}
|
|
@@ -454,6 +473,7 @@ function XOR(_this, xor_key, start, end, consume) {
|
|
|
454
473
|
input[i] = input[i] ^ (xor_key & 0xff);
|
|
455
474
|
if (consume) {
|
|
456
475
|
_this.offset = i;
|
|
476
|
+
_this.bitoffset = 0;
|
|
457
477
|
}
|
|
458
478
|
}
|
|
459
479
|
}
|
|
@@ -470,6 +490,7 @@ function XOR(_this, xor_key, start, end, consume) {
|
|
|
470
490
|
input[i] = input[i] ^ xor_key[number];
|
|
471
491
|
if (consume) {
|
|
472
492
|
_this.offset = i;
|
|
493
|
+
_this.bitoffset = 0;
|
|
473
494
|
}
|
|
474
495
|
}
|
|
475
496
|
}
|
|
@@ -493,11 +514,13 @@ function NOT(_this, start, end, consume) {
|
|
|
493
514
|
_this.data[i] = ~_this.data[i];
|
|
494
515
|
if (consume) {
|
|
495
516
|
_this.offset = i;
|
|
517
|
+
_this.bitoffset = 0;
|
|
496
518
|
}
|
|
497
519
|
}
|
|
498
520
|
}
|
|
499
521
|
exports.NOT = NOT;
|
|
500
|
-
function LSHIFT(_this,
|
|
522
|
+
function LSHIFT(_this, shift_key, start, end, consume) {
|
|
523
|
+
const input = _this.data;
|
|
501
524
|
if ((end || 0) > _this.size) {
|
|
502
525
|
if (_this.strict == false) {
|
|
503
526
|
_this.extendArray((end || 0) - _this.size);
|
|
@@ -507,15 +530,40 @@ function LSHIFT(_this, value, start, end, consume) {
|
|
|
507
530
|
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
|
|
508
531
|
}
|
|
509
532
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
533
|
+
if (typeof shift_key == "number") {
|
|
534
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
535
|
+
input[i] = input[i] << shift_key;
|
|
536
|
+
if (consume) {
|
|
537
|
+
_this.offset = i;
|
|
538
|
+
_this.bitoffset = 0;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
if (_this.isBufferOrUint8Array(shift_key)) {
|
|
544
|
+
let number = -1;
|
|
545
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
546
|
+
if (number != shift_key.length - 1) {
|
|
547
|
+
number = number + 1;
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
number = 0;
|
|
551
|
+
}
|
|
552
|
+
input[i] = input[i] << shift_key[number];
|
|
553
|
+
if (consume) {
|
|
554
|
+
_this.offset = i;
|
|
555
|
+
_this.bitoffset = 0;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
|
|
514
561
|
}
|
|
515
562
|
}
|
|
516
563
|
}
|
|
517
564
|
exports.LSHIFT = LSHIFT;
|
|
518
|
-
function RSHIFT(_this,
|
|
565
|
+
function RSHIFT(_this, shift_key, start, end, consume) {
|
|
566
|
+
const input = _this.data;
|
|
519
567
|
if ((end || 0) > _this.size) {
|
|
520
568
|
if (_this.strict == false) {
|
|
521
569
|
_this.extendArray((end || 0) - _this.size);
|
|
@@ -525,15 +573,40 @@ function RSHIFT(_this, value, start, end, consume) {
|
|
|
525
573
|
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
|
|
526
574
|
}
|
|
527
575
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
576
|
+
if (typeof shift_key == "number") {
|
|
577
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
578
|
+
input[i] = input[i] >> shift_key;
|
|
579
|
+
if (consume) {
|
|
580
|
+
_this.offset = i;
|
|
581
|
+
_this.bitoffset = 0;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
if (_this.isBufferOrUint8Array(shift_key)) {
|
|
587
|
+
let number = -1;
|
|
588
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
589
|
+
if (number != shift_key.length - 1) {
|
|
590
|
+
number = number + 1;
|
|
591
|
+
}
|
|
592
|
+
else {
|
|
593
|
+
number = 0;
|
|
594
|
+
}
|
|
595
|
+
input[i] = input[i] >> shift_key[number];
|
|
596
|
+
if (consume) {
|
|
597
|
+
_this.offset = i;
|
|
598
|
+
_this.bitoffset = 0;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
|
|
532
604
|
}
|
|
533
605
|
}
|
|
534
606
|
}
|
|
535
607
|
exports.RSHIFT = RSHIFT;
|
|
536
|
-
function ADD(_this,
|
|
608
|
+
function ADD(_this, add_key, start, end, consume) {
|
|
609
|
+
const input = _this.data;
|
|
537
610
|
if ((end || 0) > _this.size) {
|
|
538
611
|
if (_this.strict == false) {
|
|
539
612
|
_this.extendArray((end || 0) - _this.size);
|
|
@@ -543,10 +616,34 @@ function ADD(_this, value, start, end, consume) {
|
|
|
543
616
|
throw new Error("\x1b[33m[Strict mode]\x1b[0m: End offset outside of data: endOffset" + (end || 0) + " of " + _this.size);
|
|
544
617
|
}
|
|
545
618
|
}
|
|
546
|
-
|
|
547
|
-
_this.
|
|
548
|
-
|
|
549
|
-
|
|
619
|
+
if (typeof add_key == "number") {
|
|
620
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
621
|
+
input[i] = input[i] + add_key;
|
|
622
|
+
if (consume) {
|
|
623
|
+
_this.offset = i;
|
|
624
|
+
_this.bitoffset = 0;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
if (_this.isBufferOrUint8Array(add_key)) {
|
|
630
|
+
let number = -1;
|
|
631
|
+
for (let i = (start || 0); i < Math.min(end || _this.size, _this.size); i++) {
|
|
632
|
+
if (number != add_key.length - 1) {
|
|
633
|
+
number = number + 1;
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
number = 0;
|
|
637
|
+
}
|
|
638
|
+
input[i] = input[i] + add_key[number];
|
|
639
|
+
if (consume) {
|
|
640
|
+
_this.offset = i;
|
|
641
|
+
_this.bitoffset = 0;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
throw new Error("XOR key must be a byte value, string, Uint8Array or Buffer");
|
|
550
647
|
}
|
|
551
648
|
}
|
|
552
649
|
}
|
|
@@ -675,12 +772,14 @@ function wbyte(_this, value, unsigned) {
|
|
|
675
772
|
}
|
|
676
773
|
_this.data[_this.offset] = (unsigned == undefined || unsigned == false) ? value : value & 0xFF;
|
|
677
774
|
_this.offset += 1;
|
|
775
|
+
_this.bitoffset = 0;
|
|
678
776
|
}
|
|
679
777
|
exports.wbyte = wbyte;
|
|
680
778
|
function rbyte(_this, unsigned) {
|
|
681
779
|
_this.check_size(1);
|
|
682
780
|
var read = _this.data[_this.offset];
|
|
683
781
|
_this.offset += 1;
|
|
782
|
+
_this.bitoffset = 0;
|
|
684
783
|
if (unsigned == true) {
|
|
685
784
|
return read & 0xFF;
|
|
686
785
|
}
|
|
@@ -714,6 +813,7 @@ function wint16(_this, value, unsigned, endian) {
|
|
|
714
813
|
_this.data[_this.offset + 1] = (unsigned == undefined || unsigned == false) ? value : value & 0xff;
|
|
715
814
|
}
|
|
716
815
|
_this.offset += 2;
|
|
816
|
+
_this.bitoffset = 0;
|
|
717
817
|
}
|
|
718
818
|
exports.wint16 = wint16;
|
|
719
819
|
function rint16(_this, unsigned, endian) {
|
|
@@ -726,6 +826,7 @@ function rint16(_this, unsigned, endian) {
|
|
|
726
826
|
read = (_this.data[_this.offset] << 8) | _this.data[_this.offset + 1];
|
|
727
827
|
}
|
|
728
828
|
_this.offset += 2;
|
|
829
|
+
_this.bitoffset = 0;
|
|
729
830
|
if (unsigned == undefined || unsigned == false) {
|
|
730
831
|
return read & 0x8000 ? -(0x10000 - read) : read;
|
|
731
832
|
}
|
|
@@ -762,6 +863,8 @@ function rhalffloat(_this, endian) {
|
|
|
762
863
|
// Normalized number
|
|
763
864
|
floatValue = (sign === 0 ? 1 : -1) * Math.pow(2, exponent - 15) * (1 + fraction / 0x0400);
|
|
764
865
|
}
|
|
866
|
+
_this.offset += 2;
|
|
867
|
+
_this.bitoffset = 0;
|
|
765
868
|
return floatValue;
|
|
766
869
|
}
|
|
767
870
|
exports.rhalffloat = rhalffloat;
|
|
@@ -806,6 +909,7 @@ function whalffloat(_this, value, endian) {
|
|
|
806
909
|
_this.data[_this.offset + 1] = halfFloatBits & 0xFF;
|
|
807
910
|
}
|
|
808
911
|
_this.offset += 2;
|
|
912
|
+
_this.bitoffset = 0;
|
|
809
913
|
}
|
|
810
914
|
exports.whalffloat = whalffloat;
|
|
811
915
|
function wint32(_this, value, unsigned, endian) {
|
|
@@ -837,6 +941,7 @@ function wint32(_this, value, unsigned, endian) {
|
|
|
837
941
|
_this.data[_this.offset + 3] = (unsigned == undefined || unsigned == false) ? value : value & 0xFF;
|
|
838
942
|
}
|
|
839
943
|
_this.offset += 4;
|
|
944
|
+
_this.bitoffset = 0;
|
|
840
945
|
}
|
|
841
946
|
exports.wint32 = wint32;
|
|
842
947
|
function rint32(_this, unsigned, endian) {
|
|
@@ -849,6 +954,7 @@ function rint32(_this, unsigned, endian) {
|
|
|
849
954
|
read = (_this.data[_this.offset] << 24) | (_this.data[_this.offset + 1] << 16) | (_this.data[_this.offset + 2] << 8) | _this.data[_this.offset + 3];
|
|
850
955
|
}
|
|
851
956
|
_this.offset += 4;
|
|
957
|
+
_this.bitoffset = 0;
|
|
852
958
|
if (unsigned == undefined || unsigned == false) {
|
|
853
959
|
return read;
|
|
854
960
|
}
|
|
@@ -879,6 +985,8 @@ function rfloat(_this, endian) {
|
|
|
879
985
|
// Normalized number
|
|
880
986
|
floatValue = Math.pow(-1, isNegative) * Math.pow(2, exponent - 127) * (1 + fraction / Math.pow(2, 23));
|
|
881
987
|
}
|
|
988
|
+
_this.offset += 4;
|
|
989
|
+
_this.bitoffset = 0;
|
|
882
990
|
return floatValue;
|
|
883
991
|
}
|
|
884
992
|
exports.rfloat = rfloat;
|
|
@@ -902,6 +1010,7 @@ function wfloat(_this, value, endian) {
|
|
|
902
1010
|
shift += 8;
|
|
903
1011
|
}
|
|
904
1012
|
_this.offset += 4;
|
|
1013
|
+
_this.bitoffset = 0;
|
|
905
1014
|
}
|
|
906
1015
|
exports.wfloat = wfloat;
|
|
907
1016
|
function rint64(_this, unsigned, endian) {
|
|
@@ -917,10 +1026,6 @@ function rint64(_this, unsigned, endian) {
|
|
|
917
1026
|
if (value & (BigInt(1) << BigInt(63))) {
|
|
918
1027
|
value -= BigInt(1) << BigInt(64);
|
|
919
1028
|
}
|
|
920
|
-
return value;
|
|
921
|
-
}
|
|
922
|
-
else {
|
|
923
|
-
return value;
|
|
924
1029
|
}
|
|
925
1030
|
}
|
|
926
1031
|
else {
|
|
@@ -932,12 +1037,11 @@ function rint64(_this, unsigned, endian) {
|
|
|
932
1037
|
if (value & (BigInt(1) << BigInt(63))) {
|
|
933
1038
|
value -= BigInt(1) << BigInt(64);
|
|
934
1039
|
}
|
|
935
|
-
return value;
|
|
936
|
-
}
|
|
937
|
-
else {
|
|
938
|
-
return value;
|
|
939
1040
|
}
|
|
940
1041
|
}
|
|
1042
|
+
_this.offset += 8;
|
|
1043
|
+
_this.bitoffset = 0;
|
|
1044
|
+
return value;
|
|
941
1045
|
}
|
|
942
1046
|
exports.rint64 = rint64;
|
|
943
1047
|
function wint64(_this, value, unsigned, endian) {
|
|
@@ -992,6 +1096,7 @@ function wint64(_this, value, unsigned, endian) {
|
|
|
992
1096
|
}
|
|
993
1097
|
}
|
|
994
1098
|
_this.offset += 8;
|
|
1099
|
+
_this.bitoffset = 0;
|
|
995
1100
|
}
|
|
996
1101
|
exports.wint64 = wint64;
|
|
997
1102
|
function wdfloat(_this, value, endian) {
|
|
@@ -1015,6 +1120,7 @@ function wdfloat(_this, value, endian) {
|
|
|
1015
1120
|
}
|
|
1016
1121
|
}
|
|
1017
1122
|
_this.offset += 8;
|
|
1123
|
+
_this.bitoffset = 0;
|
|
1018
1124
|
}
|
|
1019
1125
|
exports.wdfloat = wdfloat;
|
|
1020
1126
|
function rdfloat(_this, endian) {
|
|
@@ -1045,6 +1151,8 @@ function rdfloat(_this, endian) {
|
|
|
1045
1151
|
// Normalized number
|
|
1046
1152
|
floatValue = (sign == 0n ? 1 : -1) * Math.pow(2, exponent) * (1 + fraction);
|
|
1047
1153
|
}
|
|
1154
|
+
_this.offset += 8;
|
|
1155
|
+
_this.bitoffset = 0;
|
|
1048
1156
|
return floatValue;
|
|
1049
1157
|
}
|
|
1050
1158
|
exports.rdfloat = rdfloat;
|
|
@@ -1225,6 +1333,7 @@ function wstring(_this, string, options) {
|
|
|
1225
1333
|
}
|
|
1226
1334
|
}
|
|
1227
1335
|
_this.offset += totalLength;
|
|
1336
|
+
_this.bitoffset = 0;
|
|
1228
1337
|
}
|
|
1229
1338
|
else if (stringType == 'pascal' || stringType == 'wide-pascal') {
|
|
1230
1339
|
if (encoding == undefined) {
|
|
@@ -1290,6 +1399,7 @@ function wstring(_this, string, options) {
|
|
|
1290
1399
|
}
|
|
1291
1400
|
}
|
|
1292
1401
|
_this.offset += totalLength;
|
|
1402
|
+
_this.bitoffset = 0;
|
|
1293
1403
|
}
|
|
1294
1404
|
else {
|
|
1295
1405
|
throw new Error('Unsupported string type: ' + stringType);
|