@digitaldefiance/ecies-lib 4.12.7 → 4.12.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/ecies-lib",
3
- "version": "4.12.7",
3
+ "version": "4.12.8",
4
4
  "description": "Digital Defiance ECIES Library",
5
5
  "homepage": "https://github.com/Digital-Defiance/ecies-lib",
6
6
  "repository": {
@@ -71,6 +71,7 @@
71
71
  "@noble/hashes": "1.8.0",
72
72
  "@scure/bip32": "1.7.0",
73
73
  "bson": "^6.10.4",
74
+ "crc-32": "^1.2.2",
74
75
  "js-sha3": "^0.9.3",
75
76
  "paillier-bigint": "^3.4.1",
76
77
  "ts-brand": "^0.2.0"
@@ -0,0 +1,25 @@
1
+ export declare class CrcService {
2
+ /**
3
+ * CRC8 lookup table
4
+ */
5
+ private static readonly CRC8_TABLE;
6
+ /**
7
+ * CRC16-CCITT lookup table
8
+ */
9
+ private static readonly CRC16_TABLE;
10
+ private static generateCrc8Table;
11
+ private static generateCrc16Table;
12
+ crc8(data: Uint8Array): Uint8Array;
13
+ crc8Async(input: Uint8Array | ReadableStream<Uint8Array>): Promise<Uint8Array>;
14
+ verifyCrc8(data: Uint8Array, expectedCrc: Uint8Array | number): boolean;
15
+ verifyCrc8Async(data: Uint8Array | ReadableStream<Uint8Array>, expectedCrc8: Uint8Array): Promise<boolean>;
16
+ crc16(data: Uint8Array): Uint8Array;
17
+ crc16Async(input: Uint8Array | ReadableStream<Uint8Array>): Promise<Uint8Array>;
18
+ verifyCrc16(data: Uint8Array, expectedCrc: Uint8Array | number): boolean;
19
+ verifyCrc16Async(data: Uint8Array | ReadableStream<Uint8Array>, expectedCrc16: Uint8Array): Promise<boolean>;
20
+ crc32(data: Uint8Array): Uint8Array;
21
+ crc32Async(input: Uint8Array | ReadableStream<Uint8Array>): Promise<Uint8Array>;
22
+ verifyCrc32(data: Uint8Array, expectedCrc: Uint8Array | number): boolean;
23
+ verifyCrc32Async(data: Uint8Array | ReadableStream<Uint8Array>, expectedCrc32: Uint8Array): Promise<boolean>;
24
+ }
25
+ //# sourceMappingURL=crc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crc.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/crc.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAU;IACrB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAEpE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAEtE,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAYhC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAY1B,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IAU5B,SAAS,CACpB,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,GAC7C,OAAO,CAAC,UAAU,CAAC;IAwBf,UAAU,CACf,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,UAAU,GAAG,MAAM,GAC/B,OAAO;IAOG,eAAe,CAC1B,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,EAC7C,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,OAAO,CAAC;IAKZ,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IAY7B,UAAU,CACrB,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,GAC7C,OAAO,CAAC,UAAU,CAAC;IA2Bf,WAAW,CAChB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,UAAU,GAAG,MAAM,GAC/B,OAAO;IAUG,gBAAgB,CAC3B,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,EAC7C,aAAa,EAAE,UAAU,GACxB,OAAO,CAAC,OAAO,CAAC;IAOZ,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IAO7B,UAAU,CACrB,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,GAC7C,OAAO,CAAC,UAAU,CAAC;IA2Bf,WAAW,CAChB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,UAAU,GAAG,MAAM,GAC/B,OAAO;IAYG,gBAAgB,CAC3B,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,EAC7C,aAAa,EAAE,UAAU,GACxB,OAAO,CAAC,OAAO,CAAC;CAIpB"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CrcService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const CRC32 = tslib_1.__importStar(require("crc-32"));
6
+ class CrcService {
7
+ /**
8
+ * CRC8 lookup table
9
+ */
10
+ static CRC8_TABLE = CrcService.generateCrc8Table();
11
+ /**
12
+ * CRC16-CCITT lookup table
13
+ */
14
+ static CRC16_TABLE = CrcService.generateCrc16Table();
15
+ static generateCrc8Table() {
16
+ const table = new Uint8Array(256);
17
+ for (let i = 0; i < 256; i++) {
18
+ let crc = i;
19
+ for (let j = 0; j < 8; j++) {
20
+ crc = crc & 0x80 ? (crc << 1) ^ 0x07 : crc << 1;
21
+ }
22
+ table[i] = crc & 0xff;
23
+ }
24
+ return table;
25
+ }
26
+ static generateCrc16Table() {
27
+ const table = new Uint16Array(256);
28
+ for (let i = 0; i < 256; i++) {
29
+ let crc = i << 8;
30
+ for (let j = 0; j < 8; j++) {
31
+ crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
32
+ }
33
+ table[i] = crc & 0xffff;
34
+ }
35
+ return table;
36
+ }
37
+ crc8(data) {
38
+ let crc = 0;
39
+ for (let i = 0; i < data.length; i++) {
40
+ crc = CrcService.CRC8_TABLE[crc ^ data[i]];
41
+ }
42
+ const result = new Uint8Array(1);
43
+ result[0] = crc;
44
+ return result;
45
+ }
46
+ async crc8Async(input) {
47
+ if (input instanceof Uint8Array) {
48
+ return this.crc8(input);
49
+ }
50
+ const reader = input.getReader();
51
+ let crc = 0;
52
+ try {
53
+ while (true) {
54
+ const { done, value } = await reader.read();
55
+ if (done)
56
+ break;
57
+ for (let i = 0; i < value.length; i++) {
58
+ crc = CrcService.CRC8_TABLE[crc ^ value[i]];
59
+ }
60
+ }
61
+ const result = new Uint8Array(1);
62
+ result[0] = crc;
63
+ return result;
64
+ }
65
+ finally {
66
+ reader.releaseLock();
67
+ }
68
+ }
69
+ verifyCrc8(data, expectedCrc) {
70
+ const calculated = this.crc8(data);
71
+ return typeof expectedCrc === 'number'
72
+ ? calculated[0] === expectedCrc
73
+ : calculated[0] === expectedCrc[0];
74
+ }
75
+ async verifyCrc8Async(data, expectedCrc8) {
76
+ const calculated = await this.crc8Async(data);
77
+ return calculated[0] === expectedCrc8[0];
78
+ }
79
+ crc16(data) {
80
+ let crc = 0xffff;
81
+ for (let i = 0; i < data.length; i++) {
82
+ crc =
83
+ ((crc << 8) ^ CrcService.CRC16_TABLE[((crc >> 8) ^ data[i]) & 0xff]) &
84
+ 0xffff;
85
+ }
86
+ const result = new Uint8Array(2);
87
+ new DataView(result.buffer).setUint16(0, crc, false);
88
+ return result;
89
+ }
90
+ async crc16Async(input) {
91
+ if (input instanceof Uint8Array) {
92
+ return this.crc16(input);
93
+ }
94
+ const reader = input.getReader();
95
+ let crc = 0xffff;
96
+ try {
97
+ while (true) {
98
+ const { done, value } = await reader.read();
99
+ if (done)
100
+ break;
101
+ for (let i = 0; i < value.length; i++) {
102
+ crc =
103
+ ((crc << 8) ^
104
+ CrcService.CRC16_TABLE[((crc >> 8) ^ value[i]) & 0xff]) &
105
+ 0xffff;
106
+ }
107
+ }
108
+ const result = new Uint8Array(2);
109
+ new DataView(result.buffer).setUint16(0, crc, false);
110
+ return result;
111
+ }
112
+ finally {
113
+ reader.releaseLock();
114
+ }
115
+ }
116
+ verifyCrc16(data, expectedCrc) {
117
+ const calculated = this.crc16(data);
118
+ if (typeof expectedCrc === 'number') {
119
+ return (new DataView(calculated.buffer).getUint16(0, false) === expectedCrc);
120
+ }
121
+ return calculated[0] === expectedCrc[0] && calculated[1] === expectedCrc[1];
122
+ }
123
+ async verifyCrc16Async(data, expectedCrc16) {
124
+ const calculated = await this.crc16Async(data);
125
+ return (calculated[0] === expectedCrc16[0] && calculated[1] === expectedCrc16[1]);
126
+ }
127
+ crc32(data) {
128
+ const crc = CRC32.buf(data) >>> 0;
129
+ const result = new Uint8Array(4);
130
+ new DataView(result.buffer).setUint32(0, crc, false);
131
+ return result;
132
+ }
133
+ async crc32Async(input) {
134
+ if (input instanceof Uint8Array) {
135
+ return this.crc32(input);
136
+ }
137
+ const reader = input.getReader();
138
+ const chunks = [];
139
+ try {
140
+ while (true) {
141
+ const { done, value } = await reader.read();
142
+ if (done)
143
+ break;
144
+ chunks.push(value);
145
+ }
146
+ const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
147
+ const fullBuffer = new Uint8Array(totalLength);
148
+ let offset = 0;
149
+ for (const chunk of chunks) {
150
+ fullBuffer.set(chunk, offset);
151
+ offset += chunk.length;
152
+ }
153
+ return this.crc32(fullBuffer);
154
+ }
155
+ finally {
156
+ reader.releaseLock();
157
+ }
158
+ }
159
+ verifyCrc32(data, expectedCrc) {
160
+ const calculated = this.crc32(data);
161
+ if (typeof expectedCrc === 'number') {
162
+ const calculatedValue = new DataView(calculated.buffer).getUint32(0, false);
163
+ return calculatedValue === expectedCrc >>> 0;
164
+ }
165
+ return calculated.every((val, idx) => val === expectedCrc[idx]);
166
+ }
167
+ async verifyCrc32Async(data, expectedCrc32) {
168
+ const calculated = await this.crc32Async(data);
169
+ return calculated.every((val, idx) => val === expectedCrc32[idx]);
170
+ }
171
+ }
172
+ exports.CrcService = CrcService;
173
+ //# sourceMappingURL=crc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crc.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/crc.ts"],"names":[],"mappings":"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"}