aegis-aead 0.1.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.
@@ -0,0 +1,422 @@
1
+ import { aesRoundTo, andBlocksTo, C0, C1, concatBytes, constantTimeEqual, le64, xorBlocks, xorBlocksTo, zeroPad, } from "./aes.js";
2
+ /**
3
+ * AEGIS-256X cipher state with configurable parallelism degree.
4
+ * Extends AEGIS-256 with parallel AES rounds for improved performance on wide SIMD architectures.
5
+ */
6
+ export class Aegis256XState {
7
+ /**
8
+ * Creates a new AEGIS-256X state.
9
+ * @param degree - Parallelism degree (default: 2). Use 2 for AEGIS-256X2, 4 for AEGIS-256X4.
10
+ */
11
+ constructor(degree = 2) {
12
+ this.d = degree;
13
+ this.rate = 128 * degree;
14
+ this.v = Array.from({ length: 6 }, () => Array.from({ length: degree }, () => new Uint8Array(16)));
15
+ this.newV = Array.from({ length: 6 }, () => Array.from({ length: degree }, () => new Uint8Array(16)));
16
+ this.tmp = new Uint8Array(16);
17
+ this.z = new Uint8Array(16 * degree);
18
+ this.ctxBufs = Array.from({ length: degree }, (_, i) => {
19
+ const buf = new Uint8Array(16);
20
+ buf[0] = i;
21
+ buf[1] = degree - 1;
22
+ return buf;
23
+ });
24
+ }
25
+ /**
26
+ * Initializes the state with a key and nonce.
27
+ * @param key - 32-byte encryption key
28
+ * @param nonce - 32-byte nonce (must be unique per message)
29
+ */
30
+ init(key, nonce) {
31
+ const k0 = key.subarray(0, 16);
32
+ const k1 = key.subarray(16, 32);
33
+ const n0 = nonce.subarray(0, 16);
34
+ const n1 = nonce.subarray(16, 32);
35
+ const k0n0 = new Uint8Array(16);
36
+ const k1n1 = new Uint8Array(16);
37
+ const k0c0 = new Uint8Array(16);
38
+ const k1c1 = new Uint8Array(16);
39
+ xorBlocksTo(k0, n0, k0n0);
40
+ xorBlocksTo(k1, n1, k1n1);
41
+ xorBlocksTo(k0, C0, k0c0);
42
+ xorBlocksTo(k1, C1, k1c1);
43
+ for (let i = 0; i < this.d; i++) {
44
+ this.v[0][i].set(k0n0);
45
+ this.v[1][i].set(k1n1);
46
+ this.v[2][i].set(C1);
47
+ this.v[3][i].set(C0);
48
+ this.v[4][i].set(k0c0);
49
+ this.v[5][i].set(k1c1);
50
+ }
51
+ const k0V = new Uint8Array(16 * this.d);
52
+ const k1V = new Uint8Array(16 * this.d);
53
+ const k0n0V = new Uint8Array(16 * this.d);
54
+ const k1n1V = new Uint8Array(16 * this.d);
55
+ for (let i = 0; i < this.d; i++) {
56
+ k0V.set(k0, i * 16);
57
+ k1V.set(k1, i * 16);
58
+ k0n0V.set(k0n0, i * 16);
59
+ k1n1V.set(k1n1, i * 16);
60
+ }
61
+ for (let round = 0; round < 4; round++) {
62
+ for (let i = 0; i < this.d; i++) {
63
+ const ctx = this.ctxBufs[i];
64
+ for (let j = 0; j < 16; j++)
65
+ this.v[3][i][j] ^= ctx[j];
66
+ for (let j = 0; j < 16; j++)
67
+ this.v[5][i][j] ^= ctx[j];
68
+ }
69
+ this.update(k0V);
70
+ for (let i = 0; i < this.d; i++) {
71
+ const ctx = this.ctxBufs[i];
72
+ for (let j = 0; j < 16; j++)
73
+ this.v[3][i][j] ^= ctx[j];
74
+ for (let j = 0; j < 16; j++)
75
+ this.v[5][i][j] ^= ctx[j];
76
+ }
77
+ this.update(k1V);
78
+ for (let i = 0; i < this.d; i++) {
79
+ const ctx = this.ctxBufs[i];
80
+ for (let j = 0; j < 16; j++)
81
+ this.v[3][i][j] ^= ctx[j];
82
+ for (let j = 0; j < 16; j++)
83
+ this.v[5][i][j] ^= ctx[j];
84
+ }
85
+ this.update(k0n0V);
86
+ for (let i = 0; i < this.d; i++) {
87
+ const ctx = this.ctxBufs[i];
88
+ for (let j = 0; j < 16; j++)
89
+ this.v[3][i][j] ^= ctx[j];
90
+ for (let j = 0; j < 16; j++)
91
+ this.v[5][i][j] ^= ctx[j];
92
+ }
93
+ this.update(k1n1V);
94
+ }
95
+ }
96
+ /**
97
+ * Updates the state with a message vector.
98
+ * @param m - Message vector (16*degree bytes)
99
+ */
100
+ update(m) {
101
+ const newV = this.newV;
102
+ const tmp = this.tmp;
103
+ for (let i = 0; i < this.d; i++) {
104
+ const mi = m.subarray(i * 16, (i + 1) * 16);
105
+ xorBlocksTo(this.v[0][i], mi, tmp);
106
+ aesRoundTo(this.v[5][i], tmp, newV[0][i]);
107
+ aesRoundTo(this.v[0][i], this.v[1][i], newV[1][i]);
108
+ aesRoundTo(this.v[1][i], this.v[2][i], newV[2][i]);
109
+ aesRoundTo(this.v[2][i], this.v[3][i], newV[3][i]);
110
+ aesRoundTo(this.v[3][i], this.v[4][i], newV[4][i]);
111
+ aesRoundTo(this.v[4][i], this.v[5][i], newV[5][i]);
112
+ }
113
+ for (let j = 0; j < 6; j++) {
114
+ for (let i = 0; i < this.d; i++) {
115
+ this.v[j][i].set(newV[j][i]);
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Absorbs an associated data block into the state.
121
+ * @param ai - Associated data block (16*degree bytes)
122
+ */
123
+ absorb(ai) {
124
+ this.update(ai);
125
+ }
126
+ computeZ() {
127
+ const z = this.z;
128
+ const tmp = this.tmp;
129
+ for (let i = 0; i < this.d; i++) {
130
+ const off = i * 16;
131
+ xorBlocksTo(this.v[1][i], this.v[4][i], z.subarray(off, off + 16));
132
+ for (let j = 0; j < 16; j++)
133
+ z[off + j] ^= this.v[5][i][j];
134
+ andBlocksTo(this.v[2][i], this.v[3][i], tmp);
135
+ for (let j = 0; j < 16; j++)
136
+ z[off + j] ^= tmp[j];
137
+ }
138
+ }
139
+ /**
140
+ * Encrypts a plaintext block and writes to output buffer.
141
+ * @param xi - Plaintext block (16*degree bytes)
142
+ * @param out - Output buffer (16*degree bytes)
143
+ */
144
+ encTo(xi, out) {
145
+ this.computeZ();
146
+ const z = this.z;
147
+ const rateBytes = this.rate / 8;
148
+ this.update(xi);
149
+ for (let i = 0; i < rateBytes; i++)
150
+ out[i] = xi[i] ^ z[i];
151
+ }
152
+ /**
153
+ * Encrypts a plaintext block.
154
+ * @param xi - Plaintext block (16*degree bytes)
155
+ * @returns Ciphertext block of the same size
156
+ */
157
+ enc(xi) {
158
+ const rateBytes = this.rate / 8;
159
+ const out = new Uint8Array(rateBytes);
160
+ this.encTo(xi, out);
161
+ return out;
162
+ }
163
+ /**
164
+ * Decrypts a ciphertext block and writes to output buffer.
165
+ * @param ci - Ciphertext block (16*degree bytes)
166
+ * @param out - Output buffer (16*degree bytes)
167
+ */
168
+ decTo(ci, out) {
169
+ this.computeZ();
170
+ const z = this.z;
171
+ const rateBytes = this.rate / 8;
172
+ for (let i = 0; i < rateBytes; i++)
173
+ out[i] = ci[i] ^ z[i];
174
+ this.update(out);
175
+ }
176
+ /**
177
+ * Decrypts a ciphertext block.
178
+ * @param ci - Ciphertext block (16*degree bytes)
179
+ * @returns Plaintext block of the same size
180
+ */
181
+ dec(ci) {
182
+ const rateBytes = this.rate / 8;
183
+ const out = new Uint8Array(rateBytes);
184
+ this.decTo(ci, out);
185
+ return out;
186
+ }
187
+ /**
188
+ * Decrypts a partial (final) ciphertext block.
189
+ * @param cn - Partial ciphertext block (smaller than 16*degree bytes)
190
+ * @returns Decrypted plaintext of the same length
191
+ */
192
+ decPartial(cn) {
193
+ this.computeZ();
194
+ const z = this.z;
195
+ const rateBytes = this.rate / 8;
196
+ const t = zeroPad(cn, rateBytes);
197
+ const out = new Uint8Array(rateBytes);
198
+ for (let i = 0; i < rateBytes; i++)
199
+ out[i] = t[i] ^ z[i];
200
+ const xn = new Uint8Array(out.subarray(0, cn.length));
201
+ const v = zeroPad(xn, 16 * this.d);
202
+ this.update(v);
203
+ return xn;
204
+ }
205
+ /**
206
+ * Finalizes encryption/decryption and produces an authentication tag.
207
+ * @param adLenBits - Associated data length in bits
208
+ * @param msgLenBits - Message length in bits
209
+ * @param tagLen - Tag length (16 or 32 bytes)
210
+ * @returns Authentication tag
211
+ */
212
+ finalize(adLenBits, msgLenBits, tagLen = 16) {
213
+ let t = new Uint8Array(0);
214
+ const u = concatBytes(le64(adLenBits), le64(msgLenBits));
215
+ for (let i = 0; i < this.d; i++) {
216
+ t = concatBytes(t, xorBlocks(this.v[3][i], u));
217
+ }
218
+ for (let round = 0; round < 7; round++) {
219
+ this.update(t);
220
+ }
221
+ if (tagLen === 16) {
222
+ let tag = new Uint8Array(16);
223
+ for (let i = 0; i < this.d; i++) {
224
+ let ti = xorBlocks(this.v[0][i], this.v[1][i]);
225
+ ti = xorBlocks(ti, this.v[2][i]);
226
+ ti = xorBlocks(ti, this.v[3][i]);
227
+ ti = xorBlocks(ti, this.v[4][i]);
228
+ ti = xorBlocks(ti, this.v[5][i]);
229
+ tag = xorBlocks(tag, ti);
230
+ }
231
+ return tag;
232
+ }
233
+ else {
234
+ let ti0 = new Uint8Array(16);
235
+ let ti1 = new Uint8Array(16);
236
+ for (let i = 0; i < this.d; i++) {
237
+ ti0 = xorBlocks(ti0, this.v[0][i]);
238
+ ti0 = xorBlocks(ti0, this.v[1][i]);
239
+ ti0 = xorBlocks(ti0, this.v[2][i]);
240
+ ti1 = xorBlocks(ti1, this.v[3][i]);
241
+ ti1 = xorBlocks(ti1, this.v[4][i]);
242
+ ti1 = xorBlocks(ti1, this.v[5][i]);
243
+ }
244
+ return concatBytes(ti0, ti1);
245
+ }
246
+ }
247
+ /**
248
+ * Finalizes MAC computation and produces an authentication tag.
249
+ * Uses a different finalization procedure than encryption/decryption.
250
+ * @param dataLenBits - Data length in bits
251
+ * @param tagLen - Tag length (16 or 32 bytes)
252
+ * @returns Authentication tag
253
+ */
254
+ finalizeMac(dataLenBits, tagLen = 16) {
255
+ let t = new Uint8Array(0);
256
+ const u = concatBytes(le64(dataLenBits), le64(BigInt(tagLen * 8)));
257
+ for (let i = 0; i < this.d; i++) {
258
+ t = concatBytes(t, xorBlocks(this.v[3][i], u));
259
+ }
260
+ for (let round = 0; round < 7; round++) {
261
+ this.update(t);
262
+ }
263
+ let tags = new Uint8Array(0);
264
+ if (tagLen === 16) {
265
+ for (let i = 1; i < this.d; i++) {
266
+ let ti = xorBlocks(this.v[0][i], this.v[1][i]);
267
+ ti = xorBlocks(ti, this.v[2][i]);
268
+ ti = xorBlocks(ti, this.v[3][i]);
269
+ ti = xorBlocks(ti, this.v[4][i]);
270
+ ti = xorBlocks(ti, this.v[5][i]);
271
+ tags = concatBytes(tags, ti);
272
+ }
273
+ }
274
+ else {
275
+ for (let i = 1; i < this.d; i++) {
276
+ let ti0 = xorBlocks(this.v[0][i], this.v[1][i]);
277
+ ti0 = xorBlocks(ti0, this.v[2][i]);
278
+ let ti1 = xorBlocks(this.v[3][i], this.v[4][i]);
279
+ ti1 = xorBlocks(ti1, this.v[5][i]);
280
+ tags = concatBytes(tags, ti0, ti1);
281
+ }
282
+ }
283
+ if (this.d > 1) {
284
+ for (let i = 0; i + 16 <= tags.length; i += 16) {
285
+ const v = zeroPad(tags.subarray(i, i + 16), 16 * this.d);
286
+ this.absorb(v);
287
+ }
288
+ const u2 = concatBytes(le64(BigInt(this.d)), le64(BigInt(tagLen * 8)));
289
+ const t2 = zeroPad(xorBlocks(this.v[3][0], u2), this.rate / 8);
290
+ for (let round = 0; round < 7; round++) {
291
+ this.update(t2);
292
+ }
293
+ }
294
+ if (tagLen === 16) {
295
+ let tag = xorBlocks(this.v[0][0], this.v[1][0]);
296
+ tag = xorBlocks(tag, this.v[2][0]);
297
+ tag = xorBlocks(tag, this.v[3][0]);
298
+ tag = xorBlocks(tag, this.v[4][0]);
299
+ tag = xorBlocks(tag, this.v[5][0]);
300
+ return tag;
301
+ }
302
+ else {
303
+ let t0 = xorBlocks(this.v[0][0], this.v[1][0]);
304
+ t0 = xorBlocks(t0, this.v[2][0]);
305
+ let t1 = xorBlocks(this.v[3][0], this.v[4][0]);
306
+ t1 = xorBlocks(t1, this.v[5][0]);
307
+ return concatBytes(t0, t1);
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Encrypts a message using AEGIS-256X.
313
+ * @param msg - Plaintext message
314
+ * @param ad - Associated data (authenticated but not encrypted)
315
+ * @param key - 32-byte encryption key
316
+ * @param nonce - 32-byte nonce (must be unique per message with the same key)
317
+ * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
318
+ * @param degree - Parallelism degree (default: 2)
319
+ * @returns Object containing ciphertext and authentication tag
320
+ */
321
+ export function aegis256XEncrypt(msg, ad, key, nonce, tagLen = 16, degree = 2) {
322
+ const state = new Aegis256XState(degree);
323
+ const rateBytes = (128 * degree) / 8;
324
+ state.init(key, nonce);
325
+ const adPadded = zeroPad(ad, rateBytes);
326
+ for (let i = 0; i + rateBytes <= adPadded.length; i += rateBytes) {
327
+ state.absorb(adPadded.subarray(i, i + rateBytes));
328
+ }
329
+ const msgPadded = zeroPad(msg, rateBytes);
330
+ const ct = new Uint8Array(msgPadded.length);
331
+ for (let i = 0; i + rateBytes <= msgPadded.length; i += rateBytes) {
332
+ state.encTo(msgPadded.subarray(i, i + rateBytes), ct.subarray(i, i + rateBytes));
333
+ }
334
+ const tag = state.finalize(BigInt(ad.length * 8), BigInt(msg.length * 8), tagLen);
335
+ const ciphertext = new Uint8Array(ct.subarray(0, msg.length));
336
+ return { ciphertext, tag };
337
+ }
338
+ /**
339
+ * Decrypts a message using AEGIS-256X.
340
+ * @param ct - Ciphertext
341
+ * @param tag - Authentication tag (16 or 32 bytes)
342
+ * @param ad - Associated data (must match what was used during encryption)
343
+ * @param key - 32-byte encryption key
344
+ * @param nonce - 32-byte nonce (must match what was used during encryption)
345
+ * @param degree - Parallelism degree (default: 2)
346
+ * @returns Decrypted plaintext, or null if authentication fails
347
+ */
348
+ export function aegis256XDecrypt(ct, tag, ad, key, nonce, degree = 2) {
349
+ const tagLen = tag.length;
350
+ const state = new Aegis256XState(degree);
351
+ const rateBytes = (128 * degree) / 8;
352
+ state.init(key, nonce);
353
+ const adPadded = zeroPad(ad, rateBytes);
354
+ for (let i = 0; i + rateBytes <= adPadded.length; i += rateBytes) {
355
+ state.absorb(adPadded.subarray(i, i + rateBytes));
356
+ }
357
+ const fullBlocksLen = Math.floor(ct.length / rateBytes) * rateBytes;
358
+ const cn = ct.subarray(fullBlocksLen);
359
+ const msg = new Uint8Array(fullBlocksLen + (cn.length > 0 ? cn.length : 0));
360
+ for (let i = 0; i + rateBytes <= ct.length; i += rateBytes) {
361
+ state.decTo(ct.subarray(i, i + rateBytes), msg.subarray(i, i + rateBytes));
362
+ }
363
+ if (cn.length > 0) {
364
+ msg.set(state.decPartial(cn), fullBlocksLen);
365
+ }
366
+ const expectedTag = state.finalize(BigInt(ad.length * 8), BigInt(msg.length * 8), tagLen);
367
+ if (!constantTimeEqual(tag, expectedTag)) {
368
+ msg.fill(0);
369
+ return null;
370
+ }
371
+ return msg;
372
+ }
373
+ /** AEGIS-256X2 encryption (degree=2). */
374
+ export const aegis256X2Encrypt = (msg, ad, key, nonce, tagLen = 16) => aegis256XEncrypt(msg, ad, key, nonce, tagLen, 2);
375
+ /** AEGIS-256X2 decryption (degree=2). */
376
+ export const aegis256X2Decrypt = (ct, tag, ad, key, nonce) => aegis256XDecrypt(ct, tag, ad, key, nonce, 2);
377
+ /** AEGIS-256X4 encryption (degree=4). */
378
+ export const aegis256X4Encrypt = (msg, ad, key, nonce, tagLen = 16) => aegis256XEncrypt(msg, ad, key, nonce, tagLen, 4);
379
+ /** AEGIS-256X4 decryption (degree=4). */
380
+ export const aegis256X4Decrypt = (ct, tag, ad, key, nonce) => aegis256XDecrypt(ct, tag, ad, key, nonce, 4);
381
+ /**
382
+ * Computes a MAC (Message Authentication Code) using AEGIS-256X.
383
+ * @param data - Data to authenticate
384
+ * @param key - 32-byte key
385
+ * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
386
+ * @param tagLen - Tag length: 16 or 32 bytes (default: 16)
387
+ * @param degree - Parallelism degree (default: 2)
388
+ * @returns Authentication tag
389
+ */
390
+ export function aegis256XMac(data, key, nonce = null, tagLen = 16, degree = 2) {
391
+ const state = new Aegis256XState(degree);
392
+ const rateBytes = (128 * degree) / 8;
393
+ state.init(key, nonce ?? new Uint8Array(32));
394
+ const dataPadded = zeroPad(data, rateBytes);
395
+ for (let i = 0; i + rateBytes <= dataPadded.length; i += rateBytes) {
396
+ state.absorb(dataPadded.subarray(i, i + rateBytes));
397
+ }
398
+ return state.finalizeMac(BigInt(data.length * 8), tagLen);
399
+ }
400
+ /**
401
+ * Verifies a MAC computed using AEGIS-256X.
402
+ * @param data - Data to verify
403
+ * @param tag - Expected authentication tag (16 or 32 bytes)
404
+ * @param key - 32-byte key
405
+ * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
406
+ * @param degree - Parallelism degree (default: 2)
407
+ * @returns True if the tag is valid, false otherwise
408
+ */
409
+ export function aegis256XMacVerify(data, tag, key, nonce = null, degree = 2) {
410
+ const tagLen = tag.length;
411
+ const expectedTag = aegis256XMac(data, key, nonce, tagLen, degree);
412
+ return constantTimeEqual(tag, expectedTag);
413
+ }
414
+ /** AEGIS-256X2 MAC computation (degree=2). */
415
+ export const aegis256X2Mac = (data, key, nonce = null, tagLen = 16) => aegis256XMac(data, key, nonce, tagLen, 2);
416
+ /** AEGIS-256X2 MAC verification (degree=2). */
417
+ export const aegis256X2MacVerify = (data, tag, key, nonce = null) => aegis256XMacVerify(data, tag, key, nonce, 2);
418
+ /** AEGIS-256X4 MAC computation (degree=4). */
419
+ export const aegis256X4Mac = (data, key, nonce = null, tagLen = 16) => aegis256XMac(data, key, nonce, tagLen, 4);
420
+ /** AEGIS-256X4 MAC verification (degree=4). */
421
+ export const aegis256X4MacVerify = (data, tag, key, nonce = null) => aegis256XMacVerify(data, tag, key, nonce, 4);
422
+ //# sourceMappingURL=aegis256x.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aegis256x.js","sourceRoot":"","sources":["../src/aegis256x.ts"],"names":[],"mappings":"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"}
package/dist/aes.d.ts ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Performs a single AES round (SubBytes, ShiftRows, MixColumns, AddRoundKey).
3
+ * Writes result to the provided output buffer.
4
+ * @param input - 16-byte input block
5
+ * @param roundKey - 16-byte round key
6
+ * @param out - 16-byte output buffer
7
+ */
8
+ export declare function aesRoundTo(input: ArrayLike<number>, roundKey: ArrayLike<number>, out: Uint8Array): void;
9
+ /**
10
+ * Performs a single AES round (SubBytes, ShiftRows, MixColumns, AddRoundKey).
11
+ * @param input - 16-byte input block
12
+ * @param roundKey - 16-byte round key
13
+ * @returns 16-byte output block
14
+ */
15
+ export declare function aesRound(input: ArrayLike<number>, roundKey: ArrayLike<number>): Uint8Array;
16
+ /**
17
+ * XORs two 16-byte blocks and writes result to destination.
18
+ * @param a - First byte array
19
+ * @param b - Second byte array
20
+ * @param out - Output buffer
21
+ */
22
+ export declare function xorBlocksTo(a: ArrayLike<number>, b: ArrayLike<number>, out: Uint8Array): void;
23
+ /**
24
+ * XORs two byte arrays of equal length.
25
+ * @param a - First byte array
26
+ * @param b - Second byte array
27
+ * @returns XOR result
28
+ */
29
+ export declare function xorBlocks(a: ArrayLike<number>, b: ArrayLike<number>): Uint8Array;
30
+ /**
31
+ * ANDs two 16-byte blocks and writes result to destination.
32
+ * @param a - First byte array
33
+ * @param b - Second byte array
34
+ * @param out - Output buffer
35
+ */
36
+ export declare function andBlocksTo(a: ArrayLike<number>, b: ArrayLike<number>, out: Uint8Array): void;
37
+ /**
38
+ * ANDs two byte arrays of equal length.
39
+ * @param a - First byte array
40
+ * @param b - Second byte array
41
+ * @returns AND result
42
+ */
43
+ export declare function andBlocks(a: ArrayLike<number>, b: ArrayLike<number>): Uint8Array;
44
+ /**
45
+ * Pads data with zeros to a multiple of the block size.
46
+ * @param data - Input data
47
+ * @param blockSizeBytes - Block size in bytes
48
+ * @returns Padded data (or empty array if data is empty)
49
+ */
50
+ export declare function zeroPad(data: ArrayLike<number>, blockSizeBytes: number): Uint8Array;
51
+ /**
52
+ * Concatenates multiple byte arrays into a single Uint8Array.
53
+ * @param arrays - Byte arrays to concatenate
54
+ * @returns Concatenated result
55
+ */
56
+ export declare function concatBytes(...arrays: ArrayLike<number>[]): Uint8Array;
57
+ /**
58
+ * Writes a 64-bit unsigned integer in little-endian format to a buffer.
59
+ * @param value - Value to encode (as bigint)
60
+ * @param out - Output buffer (at least 8 bytes)
61
+ * @param offset - Offset in output buffer (default: 0)
62
+ */
63
+ export declare function le64To(value: bigint, out: Uint8Array, offset?: number): void;
64
+ /**
65
+ * Encodes a 64-bit unsigned integer in little-endian format.
66
+ * @param value - Value to encode (as bigint)
67
+ * @returns 8-byte little-endian representation
68
+ */
69
+ export declare function le64(value: bigint): Uint8Array;
70
+ /**
71
+ * Compares two byte arrays in constant time to prevent timing attacks.
72
+ * @param a - First byte array
73
+ * @param b - Second byte array
74
+ * @returns True if arrays are equal, false otherwise
75
+ */
76
+ export declare function constantTimeEqual(a: ArrayLike<number>, b: ArrayLike<number>): boolean;
77
+ /** AEGIS initialization constant C0 (first bytes of the Fibonacci sequence mod 256). */
78
+ export declare const C0: Uint8Array<ArrayBufferLike>;
79
+ /** AEGIS initialization constant C1 (derived from sqrt(5)). */
80
+ export declare const C1: Uint8Array<ArrayBufferLike>;
81
+ //# sourceMappingURL=aes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes.d.ts","sourceRoot":"","sources":["../src/aes.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,UAAU,GACb,IAAI,CAkCN;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACvB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,GACzB,UAAU,CAIZ;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,GAAG,EAAE,UAAU,GACb,IAAI,CAiBN;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACxB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAClB,UAAU,CAMZ;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,GAAG,EAAE,UAAU,GACb,IAAI,CAiBN;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACxB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAClB,UAAU,CAMZ;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACtB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EACvB,cAAc,EAAE,MAAM,GACpB,UAAU,CAOZ;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAStE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,IAAI,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAI9C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAClB,OAAO,CAOT;AAED,wFAAwF;AACxF,eAAO,MAAM,EAAE,6BAGb,CAAC;AAEH,+DAA+D;AAC/D,eAAO,MAAM,EAAE,6BAGb,CAAC"}