The ISAAC cipher: Difference between revisions
m
→{{header|Modula-2}}: Some corrections i optimizations based on the C version.
(Dialects of BASIC moved to the BASIC section.) |
m (→{{header|Modula-2}}: Some corrections i optimizations based on the C version.) |
||
Line 3,272:
TMode = (iEncrypt, iDecrypt);
TString = ARRAY [0 .. MaxStrLength - 1] OF CHAR;
THexString = ARRAY [0 .. 2 * MaxStrLength - 1] OF CHAR;
TCardIndexedFrom0To7 = ARRAY [0 .. 7] OF CARDINAL;
Line 3,282 ⟶ 3,283:
XorPlainText: TString = '';
ModPlainText: TString = '';
▲ HexText: TString;
(* ISAAC globals *)
(* external results *)
RandRsl: ARRAY [0 ..
RandCnt: CARDINAL;
(* internal state *)
MM: ARRAY [0 ..
AA: CARDINAL = 0;
BB: CARDINAL = 0;
Line 3,378:
PROCEDURE SeedIsaac(Seed: ARRAY OF CHAR; Flag: BOOLEAN);
VAR
I,
BEGIN
FOR I := 0 TO 255 DO
MM[I] := 0;
END;
FOR I := 0 TO 255 DO
(* In case seed has less than 256 elements *)
IF I >
RandRsl[I] := 0
ELSE
Line 3,439:
OrdMsgI: SHORTCARD;
BEGIN
Assign(
FOR I := 0 TO Length(Msg) - 1 DO
OrdMsgI := ORD(Msg[I]);
END;
END Vernam;
Line 3,475:
I: CARDINAL;
BEGIN
Assign(
FOR I := 0 TO Length(Msg) - 1 DO
END;
END Vigenere;
Line 3,485:
SeedIsaac(Key, TRUE);
(* (2) Encryption *)
(* (a) XOR (Vernam) *)
Vernam(Msg, XorCipherText);
(* (b) MOD (Vigenere) *)
Vigenere(Msg,
(* (3) Decryption *)
SeedIsaac(Key, TRUE);
(* (a) XOR (Vernam) *)
Vernam(XorCipherText, XorPlainText);
(* (b) MOD (Vigenere) *)
Vigenere(ModCipherText,
(* program output *)
WriteString('Message: '); WriteString(Msg); WriteLn;
|