Module Asn

Embed typed ASN.1 grammars in OCaml

Skip the notation part of Abstract Syntax Notation, and embed the abstract syntax directly in OCaml.


v0.2.4 — homepage

Object identifiers

type oid


module OID : sig ... end

Object identifiers.

ASN.1 Abstract Syntax

type 'a t

Abstract syntax of values of type 'a.

module S : sig ... end

ASN.1 Abstract Syntax.

Encoding formats

type encoding
val ber : encoding

ber is ASN.1 Basic Encoding Rules (BER).

val der : encoding

der is ASN.1 Distinguished Encoding Rules (DER).

Encoding and decoding

type 'a codec
exception Ambiguous_syntax
val codec : encoding -> 'a t -> 'a codec

codec enc asn represents the syntax asn encoded under the rules enc.

This function performs work up-front, and is generally expected to be called in the static context on statically known syntaxes.

raises Ambiguous_syntax

if asn contains CHOICE constructs over sub-syntaxes with the same tags.

val encode : 'a codec -> 'a -> Cstruct.t

encode codec x is the encoding of x, using codec.

val encode_into : 'a codec -> 'a -> int * (Cstruct.t -> unit)

encode_into codec x is the pair (n, f), where n is the length of x encoded with codec, and f is a function that will write the encoded x to the first n bytes of the provided Cstruct.t.

type error = [
| `Parse of string

Parse errors.

val pp_error : Stdlib.Format.formatter -> error -> unit

pp_error ppf err pretty-prints err on ppf.

val decode : 'a codec -> Cstruct.t -> ('a * Cstruct.t, error) Result.result

decode codec cs is the pair (x, cs'), where x is the result of decoding the prefix of cs with codec and cs' are the trailing bytes, or an error.


val random : 'a t -> 'a

random asn is a random inhabitant of 'a.