def rc4.ksa

bend-osdev-legacy-ciphers@0.1.0.0 · rc4.bend:81

import bend-osdev-legacy-ciphers@0.1.0.0/rc4.bend as Rc4
import Base
import bend-osdev-legacy-ciphers@0.1.0.0/legacy_ciphers.bend as L

81# The key-scheduling algorithm: for i = 0 .. 255,
82#   j = j + S[i] + key[i mod keylength]; swap S[i] and S[j]
83def rc4.ksa(n: Nat, +key: List<&2, U32>, +klen: Nat, +s: L.LcTab, +i: U32, +j: U32) -> L.LcTab:
84  match n:
85    case 0n:
86      s
87    case 1n+p:
88      +j2 = U32.and(255, U32.add(U32.add(j, rc4.at(s, i)), L.lc.at(key, Nat.mod(U32.to_nat(i), klen))))
89      rc4.ksa(p, key, klen, rc4.swap(s, i, j2), U32.add(i, 1), j2)

Uses (11)

Used by (1)