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.

References

v0.2.0 — homepage



Object identifiers


type oid 
ASN.1 OBJECT IDENTIFIER.
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.

Misc


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