Skip to main navigation Skip to search Skip to main content

Narcissus: Correct-by-construction derivation of decoders and encoders from binary formats

  • Benjamin Delaware
  • , Sorawit Suriyakarn
  • , Clément Pit-Claudel
  • , Qianchuan Ye
  • , Adam Chlipala
  • Purdue University
  • Band Protocol
  • Massachusetts Institute of Technology

Research output: Contribution to journalArticlepeer-review

29 Scopus citations

Abstract

It is a neat result from functional programming that libraries of parser combinators can support rapid construction of decoders for quite a range of formats. With a little more work, the same combinator program can denote both a decoder and an encoder. Unfortunately, the real world is full of gnarly formats, as with the packet formats that make up the standard Internet protocol stack. Most past parser-combinator approaches cannot handle these formats, and the few exceptions require redundancy ś one part of the natural grammar needs to be hand-translated into hints in multiple parts of a parser program. We show how to recover very natural and nonredundant format specifications, covering all popular network packet formats and generating both decoders and encoders automatically. The catch is that we use the Coq proof assistant to derive both kinds of artifacts using tactics, automatically, in a way that guarantees that they form inverses of each other. We used our approach to reimplement packet processing for a full Internet protocol stack, inserting our replacement into the OCaml-based MirageOS unikernel, resulting in minimal performance degradation.

Original languageEnglish
Article number82
JournalProceedings of the ACM on Programming Languages
Volume3
Issue numberICFP
DOIs
StatePublished - Aug 2019

Keywords

  • Deductive Synthesis
  • Deserialization
  • Parser Combinators
  • Program Synthesis
  • Serialization

Fingerprint

Dive into the research topics of 'Narcissus: Correct-by-construction derivation of decoders and encoders from binary formats'. Together they form a unique fingerprint.

Cite this