# BNF for Maker.jj

## NON-TERMINALS

Specification | ::= | ( TestModule )+ <EOF>
TestModule | ::= | MessageDigestTest
| | | CipherTest
| | | IncludedTest
MessageDigestTest | ::= | <MESSAGE_DIGEST> Identifier ( ( MessageDigestProperties )? <DATA> ( MessageDigestData )+ )+
MessageDigestProperties | ::= | <PROPERTIES> ( AlgorithmSpecificProperty )+
MessageDigestData | ::= | SingleIterationData
| | | MultiIterationData
SingleIterationData | ::= | HexOrASCIIData HexadecimalData
MultiIterationData | ::= | LongValue "*" HexOrASCIIData HexadecimalData
CipherTest | ::= | <CIPHER> Identifier ( ( CipherProperties )? <DATA> ( CipherData )+ )+
CipherProperties | ::= | <PROPERTIES> ( <MODE> Identifier )? ( <PADDING> Identifier )? ( <IV> HexadecimalData )? ( ( AlgorithmSpecificProperty )+ )?
CipherData | ::= | TwoWayTestData
| | | SymmetricTestData
| | | SpeedTestData
TwoWayTestData | ::= | HexadecimalData HexOrASCIIData HexadecimalData
SymmetricTestData | ::= | HexadecimalData HexOrASCIIData <AUTO>
SpeedTestData | ::= | HexadecimalData HexOrASCIIData <SPEED>
AlgorithmSpecificProperty | ::= | Identifier "=" ( IntegerValue | StringValue | HexadecimalData )
Identifier | ::= | <ID>
StringValue | ::= | <STRING_LITERAL>
IntegerValue | ::= | <NUMBER>
LongValue | ::= | <NUMBER>
HexadecimalData | ::= | <HEX_LITERAL>
HexOrASCIIData | ::= | ( HexadecimalData | StringValue )
IncludedTest | ::= | <INCLUDE> ( StringValue | Identifier )