aegis-aead 0.2.0 → 0.2.2

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.
@@ -4,26 +4,29 @@
4
4
  */
5
5
  /**
6
6
  * Bitsliced AEGIS-256 cipher state.
7
- * Uses 6 AES blocks (96 bytes) stored in bitsliced form.
7
+ * Uses 6 AES blocks stored in packed bitsliced form throughout the lifetime
8
+ * of the state.
8
9
  */
9
10
  export declare class Aegis256BsState {
10
11
  private st;
11
12
  private st1;
13
+ private constantInput;
12
14
  private tmp;
15
+ private z;
13
16
  constructor();
17
+ private aegisRoundPacked;
18
+ private packConstantInput;
14
19
  /**
15
- * AEGIS round function: applies AES round to all blocks and rotates.
16
- * st[i] = AES(st[i]) ^ st[(i+5) mod 6]
20
+ * Extract the keystream block z directly from the packed state.
21
+ *
22
+ * z = S1 ^ S4 ^ S5 ^ (S2 & S3)
23
+ *
24
+ * In the packed layout, logical block j lives at bit position (7 - j) of
25
+ * every byte, so S1 = bit 6, S4 = bit 3, S5 = bit 2, S2 = bit 5,
26
+ * S3 = bit 4. The combination is computed lane-wise into bit position 7
27
+ * and unpack04_6 then extracts the AES block at logical index 0.
17
28
  */
18
- private aegisRound;
19
- /**
20
- * Absorb rate: XOR message block into state position 0.
21
- */
22
- private absorbRate;
23
- /**
24
- * Update state with a message block.
25
- */
26
- private update;
29
+ private keystreamPacked;
27
30
  /**
28
31
  * Initializes the state with a key and nonce.
29
32
  * @param key - 32-byte encryption key
@@ -32,56 +35,28 @@ export declare class Aegis256BsState {
32
35
  init(key: Uint8Array, nonce: Uint8Array): void;
33
36
  /**
34
37
  * Absorbs a 16-byte associated data block into the state.
35
- * @param ai - 16-byte associated data block
36
38
  */
37
39
  absorb(ai: Uint8Array): void;
38
40
  /**
39
41
  * Encrypts a 16-byte plaintext block and writes to output buffer.
40
- * @param xi - 16-byte plaintext block
41
- * @param out - 16-byte output buffer
42
42
  */
43
43
  encTo(xi: Uint8Array, out: Uint8Array): void;
44
- /**
45
- * Encrypts a 16-byte plaintext block.
46
- * @param xi - 16-byte plaintext block
47
- * @returns 16-byte ciphertext block
48
- */
49
44
  enc(xi: Uint8Array): Uint8Array;
50
45
  /**
51
46
  * Decrypts a 16-byte ciphertext block and writes to output buffer.
52
- * @param ci - 16-byte ciphertext block
53
- * @param out - 16-byte output buffer
54
47
  */
55
48
  decTo(ci: Uint8Array, out: Uint8Array): void;
56
- /**
57
- * Decrypts a 16-byte ciphertext block.
58
- * @param ci - 16-byte ciphertext block
59
- * @returns 16-byte plaintext block
60
- */
61
49
  dec(ci: Uint8Array): Uint8Array;
62
- /**
63
- * Decrypts a partial (final) ciphertext block smaller than 16 bytes.
64
- * @param cn - Partial ciphertext block (1-15 bytes)
65
- * @returns Decrypted plaintext of the same length
66
- */
50
+ encInPlace(block: Uint8Array): void;
51
+ decInPlace(block: Uint8Array): void;
67
52
  decPartial(cn: Uint8Array): Uint8Array;
68
53
  /**
69
54
  * Finalizes encryption/decryption and produces an authentication tag.
70
- * @param adLen - Associated data length in bytes
71
- * @param msgLen - Message length in bytes
72
- * @param tagLen - Tag length (16 or 32 bytes)
73
- * @returns Authentication tag
74
55
  */
75
56
  finalize(adLen: number, msgLen: number, tagLen?: 16 | 32): Uint8Array;
76
57
  }
77
58
  /**
78
59
  * Encrypts a message using bitsliced AEGIS-256 (detached mode).
79
- * @param msg - Plaintext message
80
- * @param ad - Associated data (authenticated but not encrypted)
81
- * @param key - 32-byte encryption key
82
- * @param nonce - 32-byte nonce (must be unique per message with the same key)
83
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
84
- * @returns Object containing ciphertext and authentication tag separately
85
60
  */
86
61
  export declare function aegis256BsEncryptDetached(msg: Uint8Array, ad: Uint8Array, key: Uint8Array, nonce: Uint8Array, tagLen?: 16 | 32): {
87
62
  ciphertext: Uint8Array;
@@ -89,63 +64,16 @@ export declare function aegis256BsEncryptDetached(msg: Uint8Array, ad: Uint8Arra
89
64
  };
90
65
  /**
91
66
  * Decrypts a message using bitsliced AEGIS-256 (detached mode).
92
- * @param ct - Ciphertext
93
- * @param tag - Authentication tag (16 or 32 bytes)
94
- * @param ad - Associated data (must match what was used during encryption)
95
- * @param key - 32-byte encryption key
96
- * @param nonce - 32-byte nonce (must match what was used during encryption)
97
- * @returns Decrypted plaintext, or null if authentication fails
98
67
  */
99
68
  export declare function aegis256BsDecryptDetached(ct: Uint8Array, tag: Uint8Array, ad: Uint8Array, key: Uint8Array, nonce: Uint8Array): Uint8Array | null;
69
+ export declare function aegis256BsEncryptDetachedInPlace(data: Uint8Array, ad: Uint8Array, key: Uint8Array, nonce: Uint8Array, tagLen?: 16 | 32): Uint8Array;
70
+ export declare function aegis256BsDecryptDetachedInPlace(data: Uint8Array, tag: Uint8Array, ad: Uint8Array, key: Uint8Array, nonce: Uint8Array): boolean;
100
71
  export declare const AEGIS_256_BS_NONCE_SIZE = 32;
101
72
  export declare const AEGIS_256_BS_KEY_SIZE = 32;
102
- /**
103
- * Encrypts a message using bitsliced AEGIS-256.
104
- * Returns a single buffer containing nonce || ciphertext || tag.
105
- * @param msg - Plaintext message
106
- * @param ad - Associated data (authenticated but not encrypted)
107
- * @param key - 32-byte encryption key
108
- * @param nonce - 32-byte nonce (optional, generates random nonce if not provided)
109
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
110
- * @returns Concatenated nonce || ciphertext || tag
111
- */
112
73
  export declare function aegis256BsEncrypt(msg: Uint8Array, ad: Uint8Array, key: Uint8Array, nonce?: Uint8Array | null, tagLen?: 16 | 32): Uint8Array;
113
- /**
114
- * Decrypts a message using bitsliced AEGIS-256.
115
- * Expects input as nonce || ciphertext || tag.
116
- * @param sealed - Concatenated nonce || ciphertext || tag
117
- * @param ad - Associated data (must match what was used during encryption)
118
- * @param key - 32-byte encryption key
119
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
120
- * @returns Decrypted plaintext, or null if authentication fails
121
- */
122
74
  export declare function aegis256BsDecrypt(sealed: Uint8Array, ad: Uint8Array, key: Uint8Array, tagLen?: 16 | 32): Uint8Array | null;
123
- /**
124
- * Computes a MAC (Message Authentication Code) using bitsliced AEGIS-256.
125
- * @param data - Data to authenticate
126
- * @param key - 32-byte key
127
- * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
128
- * @param tagLen - Tag length: 16 or 32 bytes (default: 16)
129
- * @returns Authentication tag
130
- */
131
75
  export declare function aegis256BsMac(data: Uint8Array, key: Uint8Array, nonce?: Uint8Array | null, tagLen?: 16 | 32): Uint8Array;
132
- /**
133
- * Verifies a MAC computed using bitsliced AEGIS-256.
134
- * @param data - Data to verify
135
- * @param tag - Expected authentication tag (16 or 32 bytes)
136
- * @param key - 32-byte key
137
- * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
138
- * @returns True if the tag is valid, false otherwise
139
- */
140
76
  export declare function aegis256BsMacVerify(data: Uint8Array, tag: Uint8Array, key: Uint8Array, nonce?: Uint8Array | null): boolean;
141
- /**
142
- * Generates a random 32-byte key for bitsliced AEGIS-256.
143
- * @returns 32-byte encryption key
144
- */
145
77
  export declare function aegis256BsCreateKey(): Uint8Array;
146
- /**
147
- * Generates a random 32-byte nonce for bitsliced AEGIS-256.
148
- * @returns 32-byte nonce
149
- */
150
78
  export declare function aegis256BsCreateNonce(): Uint8Array;
151
79
  //# sourceMappingURL=aegis256-bs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aegis256-bs.d.ts","sourceRoot":"","sources":["../src/aegis256-bs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4BH;;;GAGG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,GAAG,CAAW;;IAQtB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,MAAM;IAKd;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAmC9C;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAM5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAuB5C;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU;IAM/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAoB5C;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU;IAM/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU;IA+BtC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,EAAE,GAAG,EAAO,GAAG,UAAU;CAkDzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,EAAE,GAAG,EAAO,GAClB;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAyB7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,GACf,UAAU,GAAG,IAAI,CA6BnB;AAED,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,KAAK,GAAE,UAAU,GAAG,IAAW,EAC/B,MAAM,GAAE,EAAE,GAAG,EAAO,GAClB,UAAU,CAkBZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,MAAM,GAAE,EAAE,GAAG,EAAO,GAClB,UAAU,GAAG,IAAI,CASnB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC5B,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,EACf,KAAK,GAAE,UAAU,GAAG,IAAW,EAC/B,MAAM,GAAE,EAAE,GAAG,EAAO,GAClB,UAAU,CAUZ;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,KAAK,GAAE,UAAU,GAAG,IAAW,GAC7B,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAEhD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,CAElD"}
1
+ {"version":3,"file":"aegis256-bs.d.ts","sourceRoot":"","sources":["../src/aegis256-bs.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Provides constant-time operation by processing state blocks simultaneously.
4
4
  */
5
5
  import { constantTimeEqual, zeroPad } from "./aes.js";
6
- import { aesRound, blockFromBytes, blocksPut, blockToBytes, blockXor, createAesBlock, createAesBlocks, pack, unpack, wordIdx, } from "./aes-bs.js";
6
+ import { aesRound, blockFromBytes, blocksPut, blocksRotr6, blocksXor, blockToBytes, blockXor, createAesBlock, createAesBlocks, pack, pack04_6, unpack, unpack04_6, wordIdx, } from "./aes-bs.js";
7
7
  import { randomBytes } from "./random.js";
8
8
  const RATE = 16;
9
9
  const C0 = new Uint32Array([
@@ -14,49 +14,58 @@ const C1 = new Uint32Array([
14
14
  ]);
15
15
  /**
16
16
  * Bitsliced AEGIS-256 cipher state.
17
- * Uses 6 AES blocks (96 bytes) stored in bitsliced form.
17
+ * Uses 6 AES blocks stored in packed bitsliced form throughout the lifetime
18
+ * of the state.
18
19
  */
19
20
  export class Aegis256BsState {
20
21
  constructor() {
21
22
  this.st = createAesBlocks();
22
23
  this.st1 = createAesBlocks();
24
+ this.constantInput = createAesBlocks();
23
25
  this.tmp = createAesBlock();
26
+ this.z = createAesBlock();
24
27
  }
25
- /**
26
- * AEGIS round function: applies AES round to all blocks and rotates.
27
- * st[i] = AES(st[i]) ^ st[(i+5) mod 6]
28
- */
29
- aegisRound() {
28
+ aegisRoundPacked() {
30
29
  const st = this.st;
31
30
  const st1 = this.st1;
32
31
  st1.set(st);
33
- pack(st1);
34
32
  aesRound(st1);
35
- unpack(st1);
36
- for (let i = 0; i < 6; i++) {
37
- const prev = (i + 5) % 6;
38
- st[wordIdx(i, 0)] = (st[wordIdx(i, 0)] ^ st1[wordIdx(prev, 0)]) >>> 0;
39
- st[wordIdx(i, 1)] = (st[wordIdx(i, 1)] ^ st1[wordIdx(prev, 1)]) >>> 0;
40
- st[wordIdx(i, 2)] = (st[wordIdx(i, 2)] ^ st1[wordIdx(prev, 2)]) >>> 0;
41
- st[wordIdx(i, 3)] = (st[wordIdx(i, 3)] ^ st1[wordIdx(prev, 3)]) >>> 0;
42
- }
33
+ blocksRotr6(st1);
34
+ blocksXor(st, st1);
35
+ blocksXor(st, this.constantInput);
43
36
  }
44
- /**
45
- * Absorb rate: XOR message block into state position 0.
46
- */
47
- absorbRate(m) {
48
- const st = this.st;
49
- st[wordIdx(0, 0)] = (st[wordIdx(0, 0)] ^ m[0]) >>> 0;
50
- st[wordIdx(0, 1)] = (st[wordIdx(0, 1)] ^ m[1]) >>> 0;
51
- st[wordIdx(0, 2)] = (st[wordIdx(0, 2)] ^ m[2]) >>> 0;
52
- st[wordIdx(0, 3)] = (st[wordIdx(0, 3)] ^ m[3]) >>> 0;
37
+ packConstantInput(m) {
38
+ const out = this.constantInput;
39
+ out.fill(0);
40
+ blocksPut(out, m, 0);
41
+ pack04_6(out);
53
42
  }
54
43
  /**
55
- * Update state with a message block.
44
+ * Extract the keystream block z directly from the packed state.
45
+ *
46
+ * z = S1 ^ S4 ^ S5 ^ (S2 & S3)
47
+ *
48
+ * In the packed layout, logical block j lives at bit position (7 - j) of
49
+ * every byte, so S1 = bit 6, S4 = bit 3, S5 = bit 2, S2 = bit 5,
50
+ * S3 = bit 4. The combination is computed lane-wise into bit position 7
51
+ * and unpack04_6 then extracts the AES block at logical index 0.
56
52
  */
57
- update(m) {
58
- this.aegisRound();
59
- this.absorbRate(m);
53
+ keystreamPacked() {
54
+ const st = this.st;
55
+ const zPacked = this.st1;
56
+ for (let i = 0; i < 32; i++) {
57
+ const x = st[i];
58
+ zPacked[i] =
59
+ ((x & 0x40404040) << 1) ^
60
+ ((x & 0x08080808) << 4) ^
61
+ ((x & 0x04040404) << 5) ^
62
+ ((x & (x >>> 1) & 0x10101010) << 3);
63
+ }
64
+ unpack04_6(zPacked);
65
+ const z = this.z;
66
+ for (let i = 0; i < 4; i++) {
67
+ z[i] = zPacked[wordIdx(0, i)];
68
+ }
60
69
  }
61
70
  /**
62
71
  * Initializes the state with a key and nonce.
@@ -87,50 +96,39 @@ export class Aegis256BsState {
87
96
  blocksPut(this.st, C0, 3);
88
97
  blocksPut(this.st, k0c0, 4);
89
98
  blocksPut(this.st, k1c1, 5);
99
+ pack(this.st);
90
100
  for (let i = 0; i < 4; i++) {
91
- this.update(k0);
92
- this.update(k1);
93
- this.update(k0n0);
94
- this.update(k1n1);
101
+ this.packConstantInput(k0);
102
+ this.aegisRoundPacked();
103
+ this.packConstantInput(k1);
104
+ this.aegisRoundPacked();
105
+ this.packConstantInput(k0n0);
106
+ this.aegisRoundPacked();
107
+ this.packConstantInput(k1n1);
108
+ this.aegisRoundPacked();
95
109
  }
96
110
  }
97
111
  /**
98
112
  * Absorbs a 16-byte associated data block into the state.
99
- * @param ai - 16-byte associated data block
100
113
  */
101
114
  absorb(ai) {
102
115
  const msg = this.tmp;
103
116
  blockFromBytes(msg, ai);
104
- this.update(msg);
117
+ this.packConstantInput(msg);
118
+ this.aegisRoundPacked();
105
119
  }
106
120
  /**
107
121
  * Encrypts a 16-byte plaintext block and writes to output buffer.
108
- * @param xi - 16-byte plaintext block
109
- * @param out - 16-byte output buffer
110
122
  */
111
123
  encTo(xi, out) {
112
- const st = this.st;
113
- const z = this.tmp;
114
- const t = createAesBlock();
115
- for (let i = 0; i < 4; i++) {
116
- z[i] =
117
- (st[wordIdx(1, i)] ^
118
- st[wordIdx(4, i)] ^
119
- st[wordIdx(5, i)] ^
120
- (st[wordIdx(2, i)] & st[wordIdx(3, i)])) >>>
121
- 0;
122
- }
124
+ const t = this.tmp;
125
+ this.keystreamPacked();
123
126
  blockFromBytes(t, xi);
124
- const outBlock = createAesBlock();
125
- blockXor(outBlock, t, z);
126
- blockToBytes(out, outBlock);
127
- this.update(t);
127
+ this.packConstantInput(t);
128
+ this.aegisRoundPacked();
129
+ blockXor(t, t, this.z);
130
+ blockToBytes(out, t);
128
131
  }
129
- /**
130
- * Encrypts a 16-byte plaintext block.
131
- * @param xi - 16-byte plaintext block
132
- * @returns 16-byte ciphertext block
133
- */
134
132
  enc(xi) {
135
133
  const out = new Uint8Array(16);
136
134
  this.encTo(xi, out);
@@ -138,69 +136,44 @@ export class Aegis256BsState {
138
136
  }
139
137
  /**
140
138
  * Decrypts a 16-byte ciphertext block and writes to output buffer.
141
- * @param ci - 16-byte ciphertext block
142
- * @param out - 16-byte output buffer
143
139
  */
144
140
  decTo(ci, out) {
145
- const st = this.st;
146
141
  const msg = this.tmp;
147
142
  blockFromBytes(msg, ci);
148
- for (let i = 0; i < 4; i++) {
149
- msg[i] =
150
- (msg[i] ^
151
- st[wordIdx(1, i)] ^
152
- st[wordIdx(4, i)] ^
153
- st[wordIdx(5, i)] ^
154
- (st[wordIdx(2, i)] & st[wordIdx(3, i)])) >>>
155
- 0;
156
- }
157
- this.update(msg);
143
+ this.keystreamPacked();
144
+ blockXor(msg, msg, this.z);
145
+ this.packConstantInput(msg);
146
+ this.aegisRoundPacked();
158
147
  blockToBytes(out, msg);
159
148
  }
160
- /**
161
- * Decrypts a 16-byte ciphertext block.
162
- * @param ci - 16-byte ciphertext block
163
- * @returns 16-byte plaintext block
164
- */
165
149
  dec(ci) {
166
150
  const out = new Uint8Array(16);
167
151
  this.decTo(ci, out);
168
152
  return out;
169
153
  }
170
- /**
171
- * Decrypts a partial (final) ciphertext block smaller than 16 bytes.
172
- * @param cn - Partial ciphertext block (1-15 bytes)
173
- * @returns Decrypted plaintext of the same length
174
- */
154
+ encInPlace(block) {
155
+ this.encTo(block, block);
156
+ }
157
+ decInPlace(block) {
158
+ this.decTo(block, block);
159
+ }
175
160
  decPartial(cn) {
176
- const st = this.st;
177
161
  const msg = this.tmp;
178
162
  const padded = zeroPad(cn, RATE);
179
163
  blockFromBytes(msg, padded);
180
- for (let i = 0; i < 4; i++) {
181
- msg[i] =
182
- (msg[i] ^
183
- st[wordIdx(1, i)] ^
184
- st[wordIdx(4, i)] ^
185
- st[wordIdx(5, i)] ^
186
- (st[wordIdx(2, i)] & st[wordIdx(3, i)])) >>>
187
- 0;
188
- }
164
+ this.keystreamPacked();
165
+ blockXor(msg, msg, this.z);
189
166
  const pad = new Uint8Array(RATE);
190
167
  blockToBytes(pad, msg);
191
168
  const xn = new Uint8Array(pad.subarray(0, cn.length));
192
169
  pad.fill(0, cn.length);
193
170
  blockFromBytes(msg, pad);
194
- this.aegisRound();
195
- this.absorbRate(msg);
171
+ this.packConstantInput(msg);
172
+ this.aegisRoundPacked();
196
173
  return xn;
197
174
  }
198
175
  /**
199
176
  * Finalizes encryption/decryption and produces an authentication tag.
200
- * @param adLen - Associated data length in bytes
201
- * @param msgLen - Message length in bytes
202
- * @param tagLen - Tag length (16 or 32 bytes)
203
- * @returns Authentication tag
204
177
  */
205
178
  finalize(adLen, msgLen, tagLen = 16) {
206
179
  const st = this.st;
@@ -209,13 +182,18 @@ export class Aegis256BsState {
209
182
  tmp[1] = Math.floor((adLen * 8) / 0x100000000) >>> 0;
210
183
  tmp[2] = ((msgLen * 8) & 0xffffffff) >>> 0;
211
184
  tmp[3] = Math.floor((msgLen * 8) / 0x100000000) >>> 0;
212
- tmp[0] = (tmp[0] ^ st[wordIdx(3, 0)]) >>> 0;
213
- tmp[1] = (tmp[1] ^ st[wordIdx(3, 1)]) >>> 0;
214
- tmp[2] = (tmp[2] ^ st[wordIdx(3, 2)]) >>> 0;
215
- tmp[3] = (tmp[3] ^ st[wordIdx(3, 3)]) >>> 0;
185
+ const unpacked = this.st1;
186
+ unpacked.set(st);
187
+ unpack(unpacked);
188
+ tmp[0] = (tmp[0] ^ unpacked[wordIdx(3, 0)]) >>> 0;
189
+ tmp[1] = (tmp[1] ^ unpacked[wordIdx(3, 1)]) >>> 0;
190
+ tmp[2] = (tmp[2] ^ unpacked[wordIdx(3, 2)]) >>> 0;
191
+ tmp[3] = (tmp[3] ^ unpacked[wordIdx(3, 3)]) >>> 0;
192
+ this.packConstantInput(tmp);
216
193
  for (let i = 0; i < 7; i++) {
217
- this.update(tmp);
194
+ this.aegisRoundPacked();
218
195
  }
196
+ unpack(st);
219
197
  if (tagLen === 16) {
220
198
  const tag = new Uint8Array(16);
221
199
  const tagBlock = createAesBlock();
@@ -252,12 +230,6 @@ export class Aegis256BsState {
252
230
  }
253
231
  /**
254
232
  * Encrypts a message using bitsliced AEGIS-256 (detached mode).
255
- * @param msg - Plaintext message
256
- * @param ad - Associated data (authenticated but not encrypted)
257
- * @param key - 32-byte encryption key
258
- * @param nonce - 32-byte nonce (must be unique per message with the same key)
259
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
260
- * @returns Object containing ciphertext and authentication tag separately
261
233
  */
262
234
  export function aegis256BsEncryptDetached(msg, ad, key, nonce, tagLen = 16) {
263
235
  const state = new Aegis256BsState();
@@ -281,12 +253,6 @@ export function aegis256BsEncryptDetached(msg, ad, key, nonce, tagLen = 16) {
281
253
  }
282
254
  /**
283
255
  * Decrypts a message using bitsliced AEGIS-256 (detached mode).
284
- * @param ct - Ciphertext
285
- * @param tag - Authentication tag (16 or 32 bytes)
286
- * @param ad - Associated data (must match what was used during encryption)
287
- * @param key - 32-byte encryption key
288
- * @param nonce - 32-byte nonce (must match what was used during encryption)
289
- * @returns Decrypted plaintext, or null if authentication fails
290
256
  */
291
257
  export function aegis256BsDecryptDetached(ct, tag, ad, key, nonce) {
292
258
  const tagLen = tag.length;
@@ -311,18 +277,53 @@ export function aegis256BsDecryptDetached(ct, tag, ad, key, nonce) {
311
277
  }
312
278
  return msg;
313
279
  }
280
+ export function aegis256BsEncryptDetachedInPlace(data, ad, key, nonce, tagLen = 16) {
281
+ const state = new Aegis256BsState();
282
+ state.init(key, nonce);
283
+ const adPadded = zeroPad(ad, RATE);
284
+ for (let i = 0; i + RATE <= adPadded.length; i += RATE) {
285
+ state.absorb(adPadded.subarray(i, i + RATE));
286
+ }
287
+ const msgLen = data.length;
288
+ const fullBlocksLen = Math.floor(msgLen / RATE) * RATE;
289
+ for (let i = 0; i < fullBlocksLen; i += RATE) {
290
+ state.encInPlace(data.subarray(i, i + RATE));
291
+ }
292
+ if (msgLen > fullBlocksLen) {
293
+ const lastPartial = data.subarray(fullBlocksLen);
294
+ const lastBlock = zeroPad(lastPartial, RATE);
295
+ const encBlock = state.enc(lastBlock);
296
+ lastPartial.set(encBlock.subarray(0, lastPartial.length));
297
+ }
298
+ return state.finalize(ad.length, msgLen, tagLen);
299
+ }
300
+ export function aegis256BsDecryptDetachedInPlace(data, tag, ad, key, nonce) {
301
+ const tagLen = tag.length;
302
+ const state = new Aegis256BsState();
303
+ state.init(key, nonce);
304
+ const adPadded = zeroPad(ad, RATE);
305
+ for (let i = 0; i + RATE <= adPadded.length; i += RATE) {
306
+ state.absorb(adPadded.subarray(i, i + RATE));
307
+ }
308
+ const msgLen = data.length;
309
+ const fullBlocksLen = Math.floor(msgLen / RATE) * RATE;
310
+ for (let i = 0; i < fullBlocksLen; i += RATE) {
311
+ state.decInPlace(data.subarray(i, i + RATE));
312
+ }
313
+ if (msgLen > fullBlocksLen) {
314
+ const lastPartial = data.subarray(fullBlocksLen);
315
+ const decrypted = state.decPartial(lastPartial);
316
+ lastPartial.set(decrypted);
317
+ }
318
+ const expectedTag = state.finalize(ad.length, msgLen, tagLen);
319
+ if (!constantTimeEqual(tag, expectedTag)) {
320
+ data.fill(0);
321
+ return false;
322
+ }
323
+ return true;
324
+ }
314
325
  export const AEGIS_256_BS_NONCE_SIZE = 32;
315
326
  export const AEGIS_256_BS_KEY_SIZE = 32;
316
- /**
317
- * Encrypts a message using bitsliced AEGIS-256.
318
- * Returns a single buffer containing nonce || ciphertext || tag.
319
- * @param msg - Plaintext message
320
- * @param ad - Associated data (authenticated but not encrypted)
321
- * @param key - 32-byte encryption key
322
- * @param nonce - 32-byte nonce (optional, generates random nonce if not provided)
323
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
324
- * @returns Concatenated nonce || ciphertext || tag
325
- */
326
327
  export function aegis256BsEncrypt(msg, ad, key, nonce = null, tagLen = 16) {
327
328
  const actualNonce = nonce ?? randomBytes(AEGIS_256_BS_NONCE_SIZE);
328
329
  const { ciphertext, tag } = aegis256BsEncryptDetached(msg, ad, key, actualNonce, tagLen);
@@ -332,15 +333,6 @@ export function aegis256BsEncrypt(msg, ad, key, nonce = null, tagLen = 16) {
332
333
  result.set(tag, AEGIS_256_BS_NONCE_SIZE + ciphertext.length);
333
334
  return result;
334
335
  }
335
- /**
336
- * Decrypts a message using bitsliced AEGIS-256.
337
- * Expects input as nonce || ciphertext || tag.
338
- * @param sealed - Concatenated nonce || ciphertext || tag
339
- * @param ad - Associated data (must match what was used during encryption)
340
- * @param key - 32-byte encryption key
341
- * @param tagLen - Authentication tag length: 16 or 32 bytes (default: 16)
342
- * @returns Decrypted plaintext, or null if authentication fails
343
- */
344
336
  export function aegis256BsDecrypt(sealed, ad, key, tagLen = 16) {
345
337
  const nonceSize = AEGIS_256_BS_NONCE_SIZE;
346
338
  if (sealed.length < nonceSize + tagLen) {
@@ -351,14 +343,6 @@ export function aegis256BsDecrypt(sealed, ad, key, tagLen = 16) {
351
343
  const tag = sealed.subarray(sealed.length - tagLen);
352
344
  return aegis256BsDecryptDetached(ct, tag, ad, key, nonce);
353
345
  }
354
- /**
355
- * Computes a MAC (Message Authentication Code) using bitsliced AEGIS-256.
356
- * @param data - Data to authenticate
357
- * @param key - 32-byte key
358
- * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
359
- * @param tagLen - Tag length: 16 or 32 bytes (default: 16)
360
- * @returns Authentication tag
361
- */
362
346
  export function aegis256BsMac(data, key, nonce = null, tagLen = 16) {
363
347
  const state = new Aegis256BsState();
364
348
  state.init(key, nonce ?? new Uint8Array(32));
@@ -368,30 +352,14 @@ export function aegis256BsMac(data, key, nonce = null, tagLen = 16) {
368
352
  }
369
353
  return state.finalize(data.length, tagLen, tagLen);
370
354
  }
371
- /**
372
- * Verifies a MAC computed using bitsliced AEGIS-256.
373
- * @param data - Data to verify
374
- * @param tag - Expected authentication tag (16 or 32 bytes)
375
- * @param key - 32-byte key
376
- * @param nonce - 32-byte nonce (optional, uses zero nonce if null)
377
- * @returns True if the tag is valid, false otherwise
378
- */
379
355
  export function aegis256BsMacVerify(data, tag, key, nonce = null) {
380
356
  const tagLen = tag.length;
381
357
  const expectedTag = aegis256BsMac(data, key, nonce, tagLen);
382
358
  return constantTimeEqual(tag, expectedTag);
383
359
  }
384
- /**
385
- * Generates a random 32-byte key for bitsliced AEGIS-256.
386
- * @returns 32-byte encryption key
387
- */
388
360
  export function aegis256BsCreateKey() {
389
361
  return randomBytes(AEGIS_256_BS_KEY_SIZE);
390
362
  }
391
- /**
392
- * Generates a random 32-byte nonce for bitsliced AEGIS-256.
393
- * @returns 32-byte nonce
394
- */
395
363
  export function aegis256BsCreateNonce() {
396
364
  return randomBytes(AEGIS_256_BS_NONCE_SIZE);
397
365
  }
@@ -1 +1 @@
1
- {"version":3,"file":"aegis256-bs.js","sourceRoot":"","sources":["../src/aegis256-bs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aegis256-bs.js","sourceRoot":"","sources":["../src/aegis256-bs.ts"],"names":[],"mappings":"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"}