• strict warning: Non-static method view::load() should not be called statically in /home/jherzog/jonathanherzog.com/sites/all/modules/views/views.module on line 879.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /home/jherzog/jonathanherzog.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 589.
  • strict warning: Declaration of views_handler_filter::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /home/jherzog/jonathanherzog.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 589.
  • strict warning: Declaration of views_handler_filter_boolean_operator::value_validate() should be compatible with views_handler_filter::value_validate($form, &$form_state) in /home/jherzog/jonathanherzog.com/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc on line 149.
  • strict warning: Declaration of views_plugin_style_default::options() should be compatible with views_object::options() in /home/jherzog/jonathanherzog.com/sites/all/modules/views/plugins/views_plugin_style_default.inc on line 25.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/jherzog/jonathanherzog.com/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/jherzog/jonathanherzog.com/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.
  • strict warning: Non-static method RPX::locales() should not be called statically in /home/jherzog/jonathanherzog.com/sites/all/modules/rpx/rpx.module on line 575.


Unfortunately, most of my software has been written for employers and so is not available for public download. I can, however, briefly describe my major projects here and can answer further questions about them by request.

CPPL: the Cryptographic Protocol Programming Language
A domain-speciļ¬c language for cryptographic protocols, with associated compiler, built on top of strand
spaces and logical programming. Uses external libraries for automated reasoning (Datalog) and cryptographic operations (OpenSSL). Compiler implemented in OCaml. See accompanying paper, Programming Cryptographic Protocols, for language overview and (strand-based) semantics.
CPSA: the Cryptographic Protocol Shape Analyzer.
An automated analysis tool for
security protocols. Efficiently explores possible protocol executions; automatically detects and reports possible attacks. (Distribution limited to government agencies and contractors.) Implemented in OCaml.
Test framework for LibTomCrypt
Test framework, written in C, to test the correctness of cryptographic algorithms implemented as part of the LibTomCrypt library. Measured input and output of LibTomCrypt against test-vectors from standards-bodies and competing cryptographic library (OpenSSL). Written as part of larger evaluation of library for consulting project. Test-framework and resulting patches submitted back to LibTomCrypt developer.
Experimental workbench for machine-learning
Experimental workbench, written in Erlang and Matlab, to support rapid experimentation and evaluation of machine-learning algorithms. Retrieved data from Erlang-based database, intelligently applied algorithms from the Matlab Statisical Toolbox. Evaluated algorithm-performance using standard measures from statistics (e.g., cross-validation). Enabled rapid development and selection of machine-learning algorithms for [REDACTED], supporting future core-business function of employer.
Teaching experience
The above list only contains 'real-world' software projects, written in a commercial / research environment. I have also developed pedagogical sofware projects in OCaml, Java, Erlang, Prolog, Ada, and Perl.