module Value:`sig`

..`end`

`type `

pc =

`|` |
`Primitive` |

`|` |
`Constructed` |

`type `

value =

`|` |
`Bool of ` |
`(*` | Boolean (primitive) | `*)` |

`|` |
`Integer of ` |
`(*` | Integer (primitive) | `*)` |

`|` |
`Enum of ` |
`(*` | Enumeration (primitive) | `*)` |

`|` |
`Real of ` |
`(*` | Floating-point number, using either base 2 or base 10 (primitive) | `*)` |

`|` |
`Bitstring of ` |
`(*` | Bit strings (primitive or constructed) | `*)` |

`|` |
`Octetstring of ` |
`(*` | Octet strings (primitive or constructed) | `*)` |

`|` |
`Null` |
`(*` | Null (primitive) | `*)` |

`|` |
`Seq of ` |
`(*` | Sequences (records or arrays) (constructed) | `*)` |

`|` |
`Set of ` |
`(*` | Sets (constructed) | `*)` |

`|` |
`Tagptr of ` |
`(*` | Pointer to an undecoded value that was implicitly tagged.
The | `*)` |

`|` |
`Tag of ` |
`(*` | Explicit tag (primitive or constructed depending on inner value) | `*)` |

`|` |
`ITag of ` |
`(*` | Implicit tag (never returned by the decoder, but needed for encoding such tags) | `*)` |

`|` |
`OID of ` |
|||

`|` |
`ROID of ` |
|||

`|` |
`ObjectDescriptor of ` |
`(*` | A placeholder with a comment (primitive) | `*)` |

`|` |
`External of ` |
`(*` | Something complex I don't understand (constructed) | `*)` |

`|` |
`Embedded_PDV of ` |
`(*` | Something complex I don't understand (constructed) | `*)` |

`|` |
`NumericString of ` |
`(*` | String made of digits and spaces (primitive or constructed) | `*)` |

`|` |
`PrintableString of ` |
`(*` | A small subset of ASCII (primitive or constructed) | `*)` |

`|` |
`TeletexString of ` |
|||

`|` |
`VideotexString of ` |
|||

`|` |
`VisibleString of ` |
`(*` | 7 bit ASCII w/o control characters (primitive or constructed) | `*)` |

`|` |
`IA5String of ` |
`(*` | 7 bit ASCII (primitive or constructed) | `*)` |

`|` |
`GraphicString of ` |
`(*` | ISO-2022-encoded string w/o control characters | `*)` |

`|` |
`GeneralString of ` |
`(*` | ISO-2022-encoded string | `*)` |

`|` |
`UniversalString of ` |
`(*` | Any ISO-10646-1 character string represented as UTF-32-BE (primitive or constructed). Roughly, ISO-10646-1 equals to Unicode. | `*)` |

`|` |
`BMPString of ` |
`(*` | Any ISO-10646-1 character string from only the basic multilingual plane, i.e. with code points <= 65535, represented as UTF-16-BE (primitive or constructed) | `*)` |

`|` |
`UTF8String of ` |
`(*` | Any ISO-10646-1 character string represented as UTF-8 (primitive or constructed) | `*)` |

`|` |
`CharString of ` |
`(*` | A complicated description of an arbitrary charset encoding (primitive or constructed) | `*)` |

`|` |
`UTCTime of ` |
`(*` | Like GeneralizedTime but less precise, and with 2-digit year | `*)` |

`|` |
`GeneralizedTime of ` |
`(*` | Calendar date with time of day, including timezone (primitive) | `*)` |

`type `

tag_class =

`|` |
`Universal` |

`|` |
`Application` |

`|` |
`Context` |

`|` |
`Private` |

`type `

int_value

`type `

real_value

`type `

bitstring_value

`type `

time_value

type`time_subtype =`

`[ `G | `U ]`

`val type_of_value : ``value -> Netasn1.Type_name.type_name option`

Returns the type, or `None`

for `Tag`

, `ITag`

and `Tagptr`

`val get_int_repr : ``int_value -> string`

Get an integer as bytes

`val get_int_b256 : ``int_value -> int array`

Get an integer in base 256 notation, big endian. Negative values are represented using two's complement (i.e. the first array element is >= 128). The empty array means 0.

`val get_int : ``int_value -> int`

Get an integer as `int`

if representable, or raise `Out_of_range`

`val get_int32 : ``int_value -> int32`

Get an integer as `int32`

if representable, or raise `Out_of_range`

`val get_int64 : ``int_value -> int64`

Get an integer as `int64`

if representable, or raise `Out_of_range`

`val int : ``int -> int_value`

Create an int

`val int32 : ``int32 -> int_value`

Create an int

`val int64 : ``int64 -> int_value`

Create an int

`val int_b256 : ``int array -> int_value`

Create an int from a base 256 number, big endian, signed

Reals are not really supported ;-(

`val get_real_repr : ``real_value -> string`

Get the byte representation of the real

In some contexts it is usual that trailing zero bits are truncated.

`val get_bitstring_size : ``bitstring_value -> int`

Get the number of bits

`val get_bitstring_data : ``bitstring_value -> string`

Get the data. The last byte may be partial. The order of the bits in every byte: bit 7 (MSB) contains the first bit

`val get_bitstring_bits : ``?size:int -> bitstring_value -> bool array`

Get the bitstring as bool array. If `size`

is specified the array
will have exactly this number of bits (by dropping exceeding data,
or by adding `false`

at the end)

`val get_bitstring_repr : ``bitstring_value -> string`

Get the representation

`val bitstring_of_bits : ``bool array -> bitstring_value`

Get the bitstring from a bool array

`val bitstring_of_string : ``string -> int -> bitstring_value`

Get the bitstring from a string and the total number of bits. The bits are taken from the beginning of the string (MSB first). If the string is shorter than the number of bits suggests, the remaining bits are assumed to be zero. If the string is longer than the number of bits suggests, the exceeding data is ignored.

`val truncate_trailing_zero_bits : ``bitstring_value -> bitstring_value`

Truncates the biggest trailing part that only consist of 0 bits

Time values referring to the local time zone are not supported

`val get_time_subtype : ``time_value -> time_subtype`

Whether this is for UTCTime (``U`

) or GeneralizedTime (``G`

)

`val get_time_repr : ``time_value -> string`

Get the raw time string

`val get_time : ``time_value -> Netdate.t`

Get the time. Notes:

- UTCTime years are two-digit years, and interpreted so that 0-49 is understood as 2000-2049, and 50-99 is understood as 1950-1999 (as required by X.509).
- This function is restricted to the time formats occurring in DER (string terminates with "Z", i.e. UTC time zone)

`val utctime : ``Netdate.t -> time_value`

Create a time value for UTCTime. This function is restricted to years between 1950 and 2049.

`val gentime : ``digits:int -> Netdate.t -> time_value`

Create a time value for GeneralizedTime. `digits`

is the number
of fractional (subsecond) digits

`val equal : ``value -> value -> bool`

Checks for equality. Notes:

`Tag`

and`Tagptr`

are considered different`Tagptr`

is checked by comparing the equality of the substring`Set`

is so far not compared as set, but as sequence (i.e. order matters)