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.

References

v0.3.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 -> string

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

val encode_into : 'a codec -> 'a -> int * (bytes -> 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 bytes.

type error = [
  1. | `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 -> string -> ('a * string, error) Stdlib.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.

Misc

val random : 'a t -> 'a

random asn is a random inhabitant of 'a.