|
@@ -1,7 +1,7 @@
|
|
|
MODULE CryptoAES;
|
|
|
IMPORT S := SYSTEM, Ciphers := CryptoCiphers, U := CryptoUtils;
|
|
|
CONST
|
|
|
- MaxR = 14;
|
|
|
+ MaxRounds = 14;
|
|
|
ECB = Ciphers.ECB;
|
|
|
CBC = Ciphers.CBC;
|
|
|
CTR = Ciphers.CTR;
|
|
@@ -12,18 +12,18 @@ CONST
|
|
|
TYPE
|
|
|
RTable = ARRAY 256 OF SET;
|
|
|
|
|
|
- Ind4 = RECORD
|
|
|
- a, b, c, d: LONGINT;
|
|
|
- END;
|
|
|
-
|
|
|
- RKeys = ARRAY (4 * (MaxR + 1)) OF SET;
|
|
|
+ Cipher* = OBJECT (Ciphers.Cipher)
|
|
|
+ TYPE
|
|
|
+ Key = ARRAY (4 * (MaxRounds + 1)) OF SET;
|
|
|
|
|
|
- Block = ARRAY 4 OF SET;
|
|
|
+ Block = ARRAY 4 OF SET;
|
|
|
|
|
|
- Cipher* = OBJECT (Ciphers.Cipher)
|
|
|
+ Ind4 = RECORD
|
|
|
+ a, b, c, d: LONGINT;
|
|
|
+ END;
|
|
|
VAR
|
|
|
rounds: SHORTINT;
|
|
|
- erkeys, drkeys: RKeys;
|
|
|
+ key, dkey: Key;
|
|
|
iv: Block;
|
|
|
|
|
|
PROCEDURE ^ InitKey*(CONST src: ARRAY OF CHAR; keybits: LONGINT);
|
|
@@ -31,21 +31,37 @@ TYPE
|
|
|
PROCEDURE ^ IncIV;
|
|
|
PROCEDURE ^ Encrypt*(VAR buf: ARRAY OF CHAR; ofs, len: LONGINT);
|
|
|
PROCEDURE ^ Decrypt*(VAR buf: ARRAY OF CHAR; ofs, len: LONGINT);
|
|
|
+ PROCEDURE ^ RoundE(VAR b: Block);
|
|
|
+ PROCEDURE ^ RoundD(VAR b: Block);
|
|
|
+ PROCEDURE - split(s: SET; VAR b: Ind4);
|
|
|
+ BEGIN
|
|
|
+ b.a := (S.VAL(LONGINT, s) MOD 256);
|
|
|
+ b.b := ((S.VAL(LONGINT, s) DIV 256) MOD 256);
|
|
|
+ b.c := ((S.VAL(LONGINT, s) DIV 65536) MOD 256);
|
|
|
+ b.d := ((S.VAL(LONGINT, s) DIV 16777216) MOD 256)
|
|
|
+ END split;
|
|
|
+ PROCEDURE ^ Init128(CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
+ PROCEDURE ^ Init192(CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
+ PROCEDURE ^ Init256(CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
+ PROCEDURE ^ InvertKey;
|
|
|
PROCEDURE ^ & Init*;
|
|
|
END Cipher;
|
|
|
+
|
|
|
+ ConstBuffer = OBJECT
|
|
|
+ VAR
|
|
|
+ buf: ARRAY 2048 OF CHAR;
|
|
|
+ ib: LONGINT;
|
|
|
+
|
|
|
+ PROCEDURE ^ & Initialize;
|
|
|
+ PROCEDURE ^ Append(CONST str: ARRAY OF CHAR);
|
|
|
+ PROCEDURE ^ GetInt(): LONGINT;
|
|
|
+ END ConstBuffer;
|
|
|
VAR
|
|
|
- e0, e1, e2, e3, e4, d0, d1, d2, d3, d4: RTable;
|
|
|
+ e0, e1, e2, e3, e4: RTable;
|
|
|
+ d0, d1, d2, d3, d4: RTable;
|
|
|
rcon: ARRAY 10 OF SET;
|
|
|
|
|
|
PROCEDURE ^ NewCipher*(): Ciphers.Cipher;
|
|
|
PROCEDURE ^ Initialize;
|
|
|
- PROCEDURE ^ ind(s: SET): LONGINT;
|
|
|
- PROCEDURE ^ split(s: SET; VAR b: Ind4);
|
|
|
- PROCEDURE ^ Init128(VAR rk: RKeys; CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
- PROCEDURE ^ Init192(VAR rk: RKeys; CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
- PROCEDURE ^ Init256(VAR rk: RKeys; CONST src: ARRAY OF CHAR): SHORTINT;
|
|
|
- PROCEDURE ^ Invert(VAR rk: RKeys; rounds: SHORTINT);
|
|
|
- PROCEDURE ^ RoundE(CONST rk: RKeys; VAR b: Block; rounds: SHORTINT);
|
|
|
- PROCEDURE ^ RoundD(CONST rk: RKeys; VAR b: Block; rounds: SHORTINT);
|
|
|
BEGIN
|
|
|
END CryptoAES.
|