This commit is contained in:
2026-06-24 16:28:42 +02:00
commit 1922f2db62
19 changed files with 571 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
export const preprocessKey = (key: string): number[][] => {
/**
* @param {string} key - A string of 128, 192, or 256 bits.
* @returns {number[][]} A 4x4/6/8 matrix representing the key.
*/
const encoder = new TextEncoder()
const byteArray = encoder.encode(key)
const validKeyLengths = [128, 192, 256]
if (!validKeyLengths.includes(byteArray.length * 8)) {
throw new Error('Invalid Key!')
}
const N_k = (byteArray.length * 8) / 32
const matrix: number[][] = [
Array(N_k).fill(0),
Array(N_k).fill(0),
Array(N_k).fill(0),
Array(N_k).fill(0)
]
// Fill the matrix in column-major order, i.e., top-to-bottom + left-to-right
// byteArray.length is either 16, 24, or 32.
for (let i = 0;i < byteArray.length;i++) {
const row = i % 4
const col = Math.floor(i / 4)
matrix[row][col] = byteArray[i]
}
return matrix
}