Module Asn

module Asn: sig .. end
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.0 — 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 : 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 Asn.error.


val random : 'a t -> 'a
random asn is a random inhabitant of 'a.