Formally Verifiable Generated ASN.1/ACN Encoders and Decoders: A Case Study

Fuente: arXiv
Saved in:
Bibliographic Details
Main Authors: Bucev, Mario, Chassot, Samuel, Felix, Simon, Schramka, Filip, Kunčak, Viktor
Format: Preprint
Published: 2024
Subjects:
Online Access:
Tags: Add Tag
No Tags, Be the first to tag this record!
_version_ 1866910736124477440
author Bucev, Mario
Chassot, Samuel
Felix, Simon
Schramka, Filip
Kunčak, Viktor
author_facet Bucev, Mario
Chassot, Samuel
Felix, Simon
Schramka, Filip
Kunčak, Viktor
contents We propose a verified executable Scala backend for ASN1SCC, a compiler for ASN.1/ACN. ASN.1 is a language for describing data structures widely employed in ground and space telecommunications. ACN can be used along ASN.1 to describe complex binary formats and legacy protocols. To avoid error-prone and time-consuming manual writing of serializers, we show how to port an ASN.1/ACN code generator to generate Scala code. We then enhance the generator to emit not only the executable code but also strong enough pre-conditions, post-conditions, and lemmas for inductive proofs. This allowed us to verify the resulting generated annotated code using Stainless, a program verifier for Scala. The properties we prove include the absence of runtime errors, such as out-of-bound accesses or divisions by zero. For the base library, we also prove the invertibility of the decoding and encoding functions, showing that decoding yields the encoded value back. Furthermore, our system automatically inserts invertibility proofs for arbitrary records in the generated code, proving over 300'000 verification conditions. We establish key steps towards such proofs for sums and arrays as well.
format Preprint
id arxiv_https___arxiv_org_abs_2412_07235
institution arXiv
publishDate 2024
record_format arxiv
spellingShingle Formally Verifiable Generated ASN.1/ACN Encoders and Decoders: A Case Study
Bucev, Mario
Chassot, Samuel
Felix, Simon
Schramka, Filip
Kunčak, Viktor
Software Engineering
Programming Languages
We propose a verified executable Scala backend for ASN1SCC, a compiler for ASN.1/ACN. ASN.1 is a language for describing data structures widely employed in ground and space telecommunications. ACN can be used along ASN.1 to describe complex binary formats and legacy protocols. To avoid error-prone and time-consuming manual writing of serializers, we show how to port an ASN.1/ACN code generator to generate Scala code. We then enhance the generator to emit not only the executable code but also strong enough pre-conditions, post-conditions, and lemmas for inductive proofs. This allowed us to verify the resulting generated annotated code using Stainless, a program verifier for Scala. The properties we prove include the absence of runtime errors, such as out-of-bound accesses or divisions by zero. For the base library, we also prove the invertibility of the decoding and encoding functions, showing that decoding yields the encoded value back. Furthermore, our system automatically inserts invertibility proofs for arbitrary records in the generated code, proving over 300'000 verification conditions. We establish key steps towards such proofs for sums and arrays as well.
title Formally Verifiable Generated ASN.1/ACN Encoders and Decoders: A Case Study
topic Software Engineering
Programming Languages
url https://arxiv.org/abs/2412.07235