1. Goals of this course
  2. Why Spicy?
  3. Prerequisites
  4. Spicy language
    1. Hello world
    2. Basic types
      1. Boolean and integers
      2. Optional
      3. Bytes and strings
      4. Collections
      5. User-defined types: Enums and structs
      6. Exercises
    3. Variables
    4. Conditionals and loops
    5. Functions
      1. Exercises
    6. Modules revisited
  5. Parsing
    1. Structure of a parser
      1. Attributes
      2. Extracting data without storing it
      3. Hooks
      4. Conditional parsing
      5. Controlling byte order
    2. Parsing types
    3. Exercise: A naive CSV parser
    4. Adding additional parser state
    5. Lookahead parsing
    6. Error recovery
  6. Integrating with Zeek
    1. Protocol analyzers
      1. Message and connection semantics
      2. Analyzer lifecycle
      3. Passing data to Zeek
      4. Forwarding to other analyzers
      5. Sharing data across the same connection
    2. Exercises
  7. Testing
    1. Parser unit testing
    2. Testing parsers with shared state
  8. Day-2 parser operation
    1. Debugging
      1. Logging basic parser operation
      2. Exercise: Input not matching parser grammar
    2. Profiling
      1. High-level profiling
      2. Low-level profiling
  9. Project: IRC
    1. Collect data for channel membership analysis
    2. Zeek: Log very active users
    3. Sensitive messages
  10. Resources