Please note that this project is now maintained at Codeplex.
Roadmap
Next items to cover:
Testing with OLTP system.
Hot spots to resolve:
Need to determine how the LMK check value is calculated. As a test, the check value of the test LMK set should be calculated.
Downloads
Supported Racal Commands
Command | Description | Simulator Library Version | Notes |
A0 | Generate Key | 0.1 | - |
A2 | Generate and print a component | 0.1 | - |
A4 | Form key from encrypted components | 0.1 | - |
A6 | Import key | 0.1 | - |
A8 | Export key | 0.1 | - |
AE | Translate a TMK, TPK or PVK from LMK to TMP, TPK or PVK encryption | 0.4 | - |
AG | Translate a TAK from LMK to TMK encryption | 0.4 | - |
AS | Generate a VISA CVK pair | 0.5 | - |
AU | Translate a CVK pair from ZMK to LMK encryption | 0.5 | - |
AW | Translate a CVK pair from LMK to ZMK encryption | 0.5 | - |
B0 | Translate key scheme | 0.1 | - |
BQ | Translate a PIN from VISA to Racal encryption | 0.2 | - |
BU | Generate check value | 0.1 | - |
BY | Translate a ZMK from ZMK to LMK encryption | 0.3 | - |
CA | Translate a PIN block from TPK to ZPK encryption | 0.2 | - |
CC | Translate a PIN block from one ZPK to another | 0.2 | - |
CW | Generate a VISA CVV | 0.5 | - |
CY | Verify a VISA CVV | 0.5 | - |
DC | Verify a terminal PIN using the VISA algorithm | 0.2 | - |
DG | Generate a VISA PVV | 0.2 | - |
EC | Verify an interchange PIN using the VISA algorithm | 0.2 | - |
FA | Translate a ZPK from ZMK to LMK encryption | 0.3 | - |
FC | Translate a TMK, TPK or PVK from ZMK to LMK encryption | 0.4 | - |
FE | Translate a TMK, TPK or PVK from LMK to ZMK encryption | 0.4 | - |
FG | Generate a pair of random PVKs | 0.3 | - |
FI | Generate a ZEK or ZAK | 0.6 | - |
FK | Translate a ZEK or ZAK from ZMK to LMK encryption | 0.6 | - |
FM | Translate a ZEK or ZAK from LMK to ZMK encryption | 0.6 | - |
GC | Translate a ZPK from LMK to ZMK encryption | 0.3 | - |
GG | Form ZMK from three components | 0.1 | - |
GY | Form ZMK from two to nine components | 0.3 | - |
HA | Generate a TAK | 0.4 | - |
HC | Generate a TMK, TPK or PVK | 0.7 | - |
IA | Generate a ZPK | 0.3 | - |
JA | Generate a random PIN | 0.2 | - |
JC | Translate a PIN from TPK to LMK encryption | 0.2 | - |
JE | Translate a PIN from ZPK to LMK encryption | 0.2 | - |
JG | Translate a PIN from LMK to ZPK encryption | 0.2 | - |
KA | Generate check value | 0.1 | - |
LG | Set HSM delay | 0.1 | Since this is a TCP simulator, this command has no effect. |
LI | Load PIN text string | 0.1 | This implementation performs no processing whatsoever. |
MA | Generate a MAC | 0.6 | - |
MC | Verify a MAC | 0.6 | - |
ME | Verify and translate a MAC | 0.6 | - |
MG | Translate a TAK from LMK to ZMK encryption | 0.4 | - |
MI | Translate a TAK from ZMK to LMK encryption | 0.4 | - |
MQ | Generate MAC/MAB for large message | 0.6 | - |
NC | Perform HSM diagnostics | 0.1 | Return value of firmware number is configurable. |
NE | Generate and print split components | 0.1 | - |
NO | HSM status | 0.1 | I/O buffer size, type of Ethernet connection and DSP presence are fixed (hard coded). Other values are configurable. |
OA | Print solicitation mailer | 0.1 | This implementation performs no processing whatsoever. |
OC | Generate and print ZMK component | 0.1 | - |
OE | Generate and print a random TMK, TPK or PVK | 0.3 | - |
PA | Load formatting data | 0.1 | This implementation performs no processing whatsoever. |
PC | Load additional formatting data | 0.1 | This implementation performs no processing whatsoever. |
PE | Verify PIN solicitation data | 0.1 | This implementation performs no processing whatsoever. |
PG | Verify PIN solicitation mailer cryptography | 0.1 | This implementation performs no processing whatsoever. |
RA | Cancel the authorization state | 0.1 | - |
RC | Verify solicitation mailer cryptography | 0.1 | This implementation performs no processing whatsoever. |
Project history
2006/06/15: Version 0.7 beta released.
New implemented command: HC.
GUI key type table implemented in simulator executable.
2006/06/12: Version 0.6 released.
New implemented commands: FI, FK, FM, MA, MC, ME, MQ.
2006/06/11: Version 0.5 released.
New implemented commands: AS, CW, CY, AU, AW.
Added new field parser method (field type VariableLengthUntilDelimiter) to facilitate parsing of variable fields whose end is signaled by a following delimiter.
2006/06/10: Version 0.4.3 released.
Added initial version of the simulator service and related installer.
2006/06/07: Version 0.4.2 released.
Added initial version of the simulator executable.
Changed command explorer to ignore multiple classes that implement the same Racal command.
2006/06/05: Version 0.4.1 released.
New classes TranslateFromLMKToKey, TranslateFromKeyToLMK and NoImplementation are inherited by several commands that used similar functionality.
Initial project overview documentation added.
2006/06/04: Version 0.4 released.
New implemented commands: HA, AE, FC, FE, MI, MG, AG.
Added code to allow DES encrypt/decrypt using a DES weak key. The .Net crypto implementation throws an exception when a DES weak key is used in an encrypt or decrypt operation. Although this is simply good practice, it prevents someone from using the standard LMK test suite. The library now logs a major warning when a weak key is encountered.
2006/06/03: Version 0.3 released.
New implemented commands: GY, BY, FA, GC, IA, OE, FG.
Fixed improper termination of TCP listening thread.
2006/05/29: Version 0.2.1 released.
Minor update, added NUnit test cases.
2006/05/28: Version 0.2 released.
New implemented commands: BQ, CA, CC, DC, DG, EC, JA, JC, JE, JG.
Fixed bugs relating to construction and decomposition of Diebold and Docutel PIN block formats.
After some rethink, Log4Net is dropped in favor of the current event system. Log4Net may be incorporated into the final simulator executable.
2006/05/25: Version 0.1 released.
This is the initial version of the library. It contains the initial implementation of a lot of things like cryptography, LMK storage, message parsing methods, host command base class and implementation of several Racal commands, TCP/IP worker class, logic to parse key schemes, key types and other stuff. The only real way to get into the library is to get into the code.
Racal Simulator Library
Version 0.7
Language: VB.Net, build using VS.2003, .Net 1.1.