[noise] Machine-readable pattern list

Naveen Nathan naveen at lastninja.net
Tue Oct 4 16:32:51 PDT 2016

On Wed, Oct 5, 2016, at 08:31 AM, Rhys Weatherley wrote:
> Since we're making some adjustments to the tokens, perhaps we can do
> some other things at the same time.
> When adding a new pattern to Noise-C/Java, I have been hand-converting
> the pattern into a sequence of tokens and a set of pattern requirement
> flags.  This is error-prone of course.
> To reduce errors, the unit tests cut-and-paste the raw pattern
> definition from the specification.  Using a custom parser, I cross-
> check the definition against the converted token sequence.  However,
> this is still very manual:
> - The two-column format in the specification makes it hard to cut-and-
>   paste the details out for a specific pattern.
> - I have to manually split the definition into header, pre-message,
>   and body because the syntax is context-dependent.
> It is also becoming clear to me that hard-wiring the pattern
> definitions into the library isn't flexible enough.  When it was only
> 15 to 20 patterns it was OK, but now with pattern transformations the
> list is potentially endless.  User-defined patterns are going to be a
> must, but I don't want to push the error-prone hand-conversion process
> onto the user.  The specification says that "message_patterns" is a
> sequence of token sequences but it still requires the user to do the
> conversion.  It would be easier if the user could provide the pattern
> string from the specification directly, with the library parsing and
> verifying it.
> As an example of the context-dependency, consider KN:
>     Noise_KN(s):
>        -> s
>        ...
>        -> e
>        <- e, ee, se
> This cannot be parsed with a straight-forward LL(1) parser because it
> is unclear whether the first "->" is introducing a pre-message or a
> message body until the "..." token is encountered later.  Might I
> suggest instead:
>     Noise_KN(s):
>        => s
>        ...
>        -> e
>        <- e, ee, se
> That is, use a different arrow marker for pre-messages.  Now the
> syntax is context-free.  Any off the shelf parser-generating tool can
> be used to create the parser.  I'm happy to provide the grammar.
> As well as cleaning up the syntax, I'd like the patterns to be
> provided in a machine-readable "patterns.txt" file in parallel with
> the specification.  This will make it easier to bulk-convert patterns
> and to write analysis tools to validate patterns and apply
> transformations.  Sections 8.4 and 8.5 in the specification list
> various properties - a tool would be better suited to generating that
> list, especially for new patterns.
> Thoughts?
> Cheers,
> Rhys.
I would welcome this addition to the spec. I have been working on a
python implementation and found manually writing the patterns both error-
prone and tedious.

- Naveen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://moderncrypto.org/mail-archive/noise/attachments/20161005/1cf8e46d/attachment.html>

More information about the Noise mailing list