-- Auxiliary Hardware Functions -- MESA Definitions Module -- Anthony West, October 29, 1981 3:38 PM -- This interface allows MESA programmers to access: -- a) DES Cryptography hardware -- b) Random Bit Generator hardware -- c) Intel Multibus DIRECTORY AltoDefs USING[BYTE]; AuxDefs: DEFINITIONS = { -- DES Cryptography -- NB: Keys, initVectors and blocks are 64 bit entities. -- To, From must point to segments containing an integral number of 64-bit blocks. -- The segments must be totally disjoint or fully congruent! -- For speed, try to align to and from segments on quadword boundaries. -- a) Electronic Code Book. -- No state kept between 64-bit blocks. OPEN AltoDefs; BLOCK: TYPE = PACKED ARRAY [0..7] OF BYTE; DESKey: TYPE = LONG POINTER TO BLOCK; DESVector: TYPE = LONG POINTER TO BLOCK; ECBEncrypt: PROC [ key: DESKey, nBlks: CARDINAL, from, to: LONG POINTER ]; ECBDecrypt: PROC [ key: DESKey, nBlks: CARDINAL, from, to: LONG POINTER ]; -- a) Cipher Block Chaining. -- 64-bits of state kept between blocks. This state is XOR'd -- with the next incoming clear text block before encryption. -- initVec is the 64-bit initial value of this state. CBCEncrypt: PROC [ key: DESKey, initVec: DESVector, nBlks: CARDINAL, from, to: LONG POINTER ]; CBCDecrypt: PROC [ key: DESKey, initVec: DESVector, nBlks: CARDINAL, from, to: LONG POINTER ]; CBCChecksum: PROC [ key: DESKey, initVec: DESVector, nBlks: CARDINAL, from: LONG POINTER ] RETURNS [ BLOCK ]; GetRandomDESKey: PROC RETURNS [ BLOCK ]; -- Random Numbers BIT: TYPE = UNSPECIFIED[0..1]; GetBiassedBit: PROC RETURNS [ BIT ]; GetUnbiassedBit: PROC RETURNS [ BIT ]; GetRandom8: PROC RETURNS [ UNSPECIFIED ]; GetRandom16: PROC RETURNS [ UNSPECIFIED ]; GetRandom32: PROC RETURNS [ LONG UNSPECIFIED ]; GetRandom64: PROC RETURNS [ BLOCK ]; -- Intel Multibus Interface -- Read the Multibus Status MBStatus: PROC RETURNS [UNSPECIFIED]; -- Multibus Byte and Word Transfer operations MBMemReadWord: PROC [MBAddr: CARDINAL] RETURNS [WORD]; MBIOReadWord: PROC [Address: CARDINAL] RETURNS [UNSPECIFIED]; MBMemReadByte: PROC [MBAddr: CARDINAL] RETURNS [BYTE]; MBIOReadByte: PROC [Address: CARDINAL] RETURNS [BYTE]; MBMemWriteWord: PROC [Address: CARDINAL, data: UNSPECIFIED]; MBIOWriteWord: PROC [Address: CARDINAL, data: UNSPECIFIED]; MBMemWriteByte: PROC [Address: CARDINAL, data: BYTE]; MBIOWriteByte: PROC [Address: CARDINAL, data: BYTE]; -- Multibus Block Transfer operations MBMemReadWBLT: PROC [ MBusAddr: CARDINAL, MesaAddr: LONG POINTER, nWords: CARDINAL ]; MBIOReadWBLT: PROC [ MBusAddr: CARDINAL, MesaAddr: LONG POINTER, nWords: CARDINAL ]; MBMemWriteWBLT: PROC [ MesaAddr: LONG POINTER, MBusAddr: CARDINAL, nWords: CARDINAL ]; MBIOWriteWBLT: PROC [ MesaAddr: LONG POINTER, MBusAddr: CARDINAL, nWords: CARDINAL ]; -- Multibus interrupt levels are set by external jumpers Level: TYPE = CARDINAL[0..7]; -- Allow/Prevent Multibus to interrupt Dorado MBIntEnable: PROC; MBIntDisable: PROC; -- Generate interrupts on the Multibus MBInterrupt: PROC [ Level ]; -- Wait for Multibus to interrupt Dorado MBWait: PROC [ Level ]; -- Simulate receiving an interrupt from the Multibus MBPost: PROC [ Level ]; }. (635)\f8