Files
des_undes/cryptlib-api-map.md
T

41 lines
1.5 KiB
Markdown

# CRYPTLIB 0.99 API mapping
The supplied `cryptl99.zip` removes the remaining uncertainty about the
CRYPTLIB calls. The executable's call shapes, local structure offsets and the
source in `crypt.h`/`crypt.c` all agree.
| Operation | CRYPTLIB 0.99 function | des.exe target | undes.exe target |
|---|---|---:|---:|
| Initialise library | `initLibrary()` | `00B3:0738` | `00B7:072A` |
| End library | `endLibrary()` | `00B3:0746` | `00B7:0738` |
| Query algorithm/mode | `queryAlgoModeInformation()` | `00B3:0566` | `00B7:0558` |
| Query context | `queryContextInformation()` | `00B3:06EC` | `00B7:06DE` |
| Initialise context | `initCryptContext()` | `00B3:0756` | `00B7:0748` |
| Destroy context | `destroyCryptContext()` | `00B3:0940` | `00B7:0932` |
| Load key | `loadCryptContext()` | `00B3:09C5` | `00B7:09B7` |
| Retrieve IV | `retrieveIV()` | `00B3:0BA9` | — |
| Load IV | `loadIV()` | — | `00B7:0A90` |
| Encrypt | `encryptBuffer()` | `00B3:0C1E` | — |
| Decrypt | `decryptBuffer()` | — | `00B7:0CEC` |
## Algorithm values
Both mains store the integer value `3` for the algorithm and `3` for the mode.
In the supplied `crypt.h` these are:
```c
CRYPT_ALGO_3DES == 3
CRYPT_MODE_CBC == 3
```
So DES/UNDES V1.1.0 uses **two-key triple DES in CBC mode**.
The `CRYPT_QUERY_INFO` offsets used by the machine code also match the supplied
header in the 16-bit large memory model. The program reads:
- `keySize` = 14 bytes (112 bits)
- `ivSize` = 4 bytes (32 bits)
Those are exactly the recommended values in the CRYPTLIB 0.99 `3DES-CBC`
capability entry.