-- Michael D. Schroeder, October 30, 1981 3:11 PM -- MESA access the DES encryption facilities DESDefs: DEFINITIONS = BEGIN -- Public types and constants Block: TYPE = ARRAY [0 .. 3] OF UNSPECIFIED; Key: TYPE = PACKED ARRAY [0 .. 7] OF MACHINE DEPENDENT RECORD[b: [0 .. 127], p: [0 .. 1]]; nullKey: Key = ALL[[b:0, p:0]]; -- Key generation and conversion GetRandomKey: PROC RETURNS [Key]; MakeKey: PROC [source: LONG STRING] RETURNS [Key]; BadKey: ERROR; -- key parity bad -- To, From must point to segments containing an integral number of Blocks -- The segments must be totally disjoint or fully congruent! -- For speed, try to align to and from segments on quadword boundaries. -- Electronic Code Book. -- No state kept between 64-bit blocks. ECBEncrypt: PROC [ key: Key, nBlks: CARDINAL, from, to: LONG POINTER] = INLINE {CryptData[@key, nBlks, from, to, encrypt, ecb, NIL, NIL]}; ECBDecrypt: PROC [ key: Key, nBlks: CARDINAL, from, to: LONG POINTER] = INLINE {CryptData[@key, nBlks, from, to, decrypt, ecb, NIL, NIL]}; -- Cipher Block Chaining. -- 64-bits of state kept between blocks. -- This state is XOR'd with the next incoming clear text block before encryption. -- seed is the 64-bit initial value of this state. CBCEncrypt: PROC [ key: Key, seed: Block, nBlks: CARDINAL, from, to: LONG POINTER] RETURNS [newSeed: Block] = INLINE {CryptData[@key, nBlks, from, to, encrypt, cbc, @seed, @newSeed];}; CBCDecrypt: PROC [ key: Key, seed: Block, nBlks: CARDINAL, from, to: LONG POINTER] RETURNS [newSeed: Block]= INLINE {CryptData[@key, nBlks, from, to, decrypt, cbc, @seed, @newSeed];}; -- ??? CBCCheksum: PROC [key: Key, seed: Block, nBlks: CARDINAL, from: LONG POINTER ] RETURNS [Key]; -- Internal types and procedures Direction: PRIVATE TYPE = {encrypt, decrypt}; Mode: PRIVATE TYPE = {ecb, cbc}; CryptData: PRIVATE PROC [keyP: POINTER TO Key, nBlks: CARDINAL, from, to: LONG POINTER, direction: Direction, mode: Mode, seedP, newSeedP: LONG POINTER TO Block]; END. --DESDefs--(635)\f1 99b7B57b5B40b3B119b7B63b12B23b7B46b6B316b10B132b10B343b10B190b10B201b10B