Schemata are represented as nested lists with the following grammar.
items is the root production.
|“word”||the literal string
|delimiter||a string which will be used between every item in this counted group|
|count||an integer of the number of times to repeat the items in this group|
|character class||one of
|characters||a string representing a set of characters|
All examples are given in JSON-mini format.
A basic password of 12 alphanumeric characters would be represented like so:
In this example, there is one
item in the
and that item is
"alphanumeric" is a character class.
Another simple example is four space-delimited words:
[[" ", 4, word]]
Again, there is one
Normally there is no delimiter between repeated elements,
item where the first element is a string indicates that its contents should be delimited with the first element as a delimiter.
word is itself a special
item which indicates that something should be selected from the word list.
A slightly more complex example is 12 hexadecimal digits:
[[12, [digit, "abcdef"]]]
And again, there is one
[digit, "abcdef"] is a
character-sets with two
character-sets in it:
digit is a character class
since it does not match any character class name,
matches the literal characters.
Another more complex example is a series of four words, separated by spaces, and with each word followed by a single digit:
[[" ", 4, word, digit]]
there are multiple nested
items in the
[" ", 4, word, digit]:
These two items will be concatenated together before being delimited by spaces.
this might produce the string
spam1 spam2 eggs3 spam4.
One way of expressing a 12-character password that requires at least one letter and one digit is:
[[uppercase, lowercase], digit, [10, alphanumeric]]
This series of
items has three
items in it:
For example, this might produce the string