The registers available to the programmer are:
Address | Name | Description | Read/write |
---|---|---|---|
0 | BUFFER | See text | Read/write |
1 | CTEXT | Sets the ciphertext to use | Write only |
2 | PTEXT | Sets the plaintext to use | Write only |
3 | IV | Sets the initialisation vector to use | Write only |
The BUFFER register has the following format:
Bits | Name | Description |
---|---|---|
0–3 | VERSION | Protocol version (2) |
4 | DVALID | Set when the machine is ready for a new command |
5 | unused | |
6 | RW | Specifies whether this command describes a read or write operation |
7 | unused | |
8–15 | ADDR | Specifies the target address for the write or read |
16–63 | DATA | See text |
VERSION and DVALID function identically to the original key search machine. In this version of the machine the BUFFER register indirectly controls the search bus. A write is performed by setting RW to 1 and specifying the data in the DATA register. A read is performed by writing a word with RW set to 0 and then polling the BUFFER register until DVALID goes high. The data will be contained in the space allocated to the DATA field.
A read or write through the BUFFER register always sets or retrieves the key in use by a search unit. The exact interpretation of the DATA field depends on the key generator in use. The intended purpose is for DATA to be interpreted as a block number during a write, and treated as the key number (least significant 32 bits) during a read.
When reading through the BUFFER register, 32 bits are used by the key value. The other 8 bits are used by the search unit to report status information:
Bits | Name | Description |
---|---|---|
0 | KEYVALID | Set when the search unit has a key block to search through |
1 | RUNNING | Set when the search unit is searching its key block |
2–7 | unused | |
8–47 | KEY | The least significant 32 bits of the key value |
For each address where a search unit is believed to exist
Software writes CTEXT, PTEXT and IV registers
For each search unit:
Until correct key is located:
If RUNNING on a search unit is 0:
The key that is read from the key buffer is the value that was in the key generator at the time the search unit was halted, not the key that caused the search unit to halt. The software must be aware of the number of clock cycles required to process a single key and subtract that value from the retrieved value. This value is algorithm dependent.