generate manual pages from Markdown instead of writing directly

This commit is contained in:
Lev Walkin 2016-01-23 06:35:34 -08:00
parent 483c14fcec
commit c6080fdd93
13 changed files with 784 additions and 309 deletions

View File

@ -20,8 +20,6 @@ bin_PROGRAMS = asn1c unber enber
noinst_HEADERS = sys-common.h
dist_man1_MANS = asn1c.1 unber.1 enber.1
dist_check_SCRIPTS = check-xxber.sh check-parsing.sh
TESTS_ENVIRONMENT= top_srcdir=${top_srcdir}
TESTS = $(dist_check_SCRIPTS)

View File

@ -1,125 +0,0 @@
.TH asn1c 1 "2014-10-23" "ASN.1 Compiler"
.if n .ad l \" Turn off justifications
.nh \" Turn off hyphenation; can damage formatting in technical documents.
.SH NAME
asn1c \(em the ASN.1 Compiler
.SH SYNOPSIS
asn1c [\fB\-E\fR [\fB-F\fR] | \fB\-P\fR | \fB\-R\fR]
[\fB\-S\fR\fIdir\fR] [\fB-X\fR]
[\fB\-W\fR\fIdebug-\fR...] [\fB\-f\fR\fIoption\fR] [\fB\-gen-\fR\fIoption\fR] [\fB\-pdu=\fR{\fBall\fR|\fBauto\fR|\fIType\fR}\fR]
[\fB\-print-\fR\fIoption\fR]
\fIinput-filenames\fR...
.SH DESCRIPTION
asn1c compiles ASN.1 specifications into a set of
target language (C/C++) encoders and decoders for BER, DER, PER, XER
and other encoding rules.
.SH OPTIONS
.SS Stage Selection Options
.TP 4
.B \-E
Run the parsing stage only.
Print the reconstructed ASN.1 text.
.TP 4
.B \-F
Used together with
.B \-E\c
, instructs the compiler to stop after the ASN.1 syntax
tree fixing stage and dump the reconstructed ASN.1 specification
to the standard output.
.TP 4
.B \-P
Dump the compiled output to the standard output instead of creating the
target language files on disk.
.TP 4
.B \-R
Restrict the compiler to generate only the ASN.1 tables,
omitting the usual support code.
.TP 4
\fB\-S\fR \fIdirectory\fR
Use the specified directory with ASN.1 skeleton files.
.TP 4
.B \-X
Generate an XML DTD schema for the specified ASN.1 files.
.SS Warning Options
.TP 4
.B \-Werror
Treat warnings as errors; abort if any warning is produced.
.TP 4
.B \-Wdebug-lexer
Enable lexer debugging during the ASN.1 parsing stage.
.TP 4
.B \-Wdebug-fixer
Enable ASN.1 syntax tree fixer debugging during the fixing stage.
.TP 4
.B \-Wdebug-compiler
Enable debugging during the actual compile time.
.SS Language Options
.TP 4
.B \-fbless-SIZE
Allow SIZE() constraint for INTEGER, ENUMERATED, and other types for which this
constraint is normally prohibited by the standard.
This is a violation of ASN.1 standard, and the compiler may
fail to\ produce a meaningful code.
.TP 4
.B \-fcompound-names
Using this option prevents name collisions in the target source code
by using complex names for target language structures.
(Name\ collisions may occur if the ASN.1 module reuses the same identifiers
in multiple contexts).
.TP 4
.B \-findirect-choice
When generating code for a CHOICE type, compile the CHOICE members as indirect
pointers instead of declaring them inline.
Consider using this option together with
.B \-fno-include-deps
to prevent circular references.
.TP 4
.B \-fincludes-quoted
Generate #include lines in "double" instead of <angle> quotes.
.TP 4
.BI "\-fknown-extern-type="<name>
Pretend the specified type is known.
The compiler will assume the target language source files
for the given type have been provided manually.
.TP 4
.B \-fline-refs
Include ASN.1 module's line numbers in generated code comments.
.TP 4
.B \-fno-constraints
Do not generate ASN.1 subtype constraint checking code.
This may make a shorter executable.
.TP 4
.B \-fno-include-deps
Do not generate courtesy #include lines for non-critical type dependencies.
Helps prevent namespace collisions.
.TP 4
.B \-funnamed-unions
Enable unnamed unions in the definitions of target language's structures.
.TP 4
.B \-fwide-types
Use the unbounded size data types (INTEGER_t, ENUMERATED_t, REAL_t) by default,
instead of the native machine's data types (long, double).
.SS Codecs Generation Options
.TP 4
.B \-gen-PER
Generate the Packed Encoding Rules (PER) support code.
.TP 4
.B \-pdu=\fR{\fBall\fR|\fBauto\fR|\fIType\fR}
Create a PDU table for specified types, or discover Protocol Data Units automatically.
In case of -pdu=\fBall\fR, all ASN.1 types defined in all modules will form a PDU table.
In case of -pdu=\fBauto\fR, all types not referenced by any other type will form a PDU table.
If\ \fIType\fR is an ASN.1 type identifier, it is added to a PDU table.
The\ last form may be specified multiple times to add any number of PDUs.
.SS Output Options
.TP 4
.B \-print-constraints
When -EF are also specified, this option forces the compiler to explain
its internal understanding of subtype constraints.
.TP 4
.B \-print-lines
Generate "-- #line" comments in \fB-E\fR output.
.SH SEE ALSO
.TP 4
\&\fIunber\fR\|(1), \&\fIenber\fR\|(1)
.SH AUTHORS
Lev Walkin <vlm@lionet.info>

View File

@ -1,53 +0,0 @@
.TH enber 1 "2014-10-23" "unber counterpart"
.if n .ad l \" Turn off justifications
.nh \" Turn off hyphenation; can damage formatting in technical documents.
.de Vb \" Verbatim begin.
.sp
.in +4
.ft CW
.nf
..
.de Ve \" Verbatim end.
.ft R
.in
.fi
..
.SH NAME
enber \(em Convert the unber XML output back into BER
.SH SYNOPSIS
enber [\fB\-n\fR] [\fB\-\fR] [\fIinput-filenames\fR...]
.SH DESCRIPTION
enber convers the XML-formatted files produced by \fIunber\fR\|(1) back into the BER format.
A single dash denotes the standard input.
.SH OPTIONS
.TP 4
\fB\-n\fR
Disable input validation.
By default, enber performs some basic validity checks
against XML input.
.SH EXAMPLES
Decode a BER sequence and immediately encode it back
.Vb
unber \fB\-p\fR \fIfilename.ber\fR | enber \fB\-\fR > \fIreconstructed.ber\fR
.Ve
.SH FOOTNOTES
This program does not attempt to perform full-fledged XML parsing.
It is merely compatible with \fIunber\fR\|(1)'s output.
In particular, XML style comments are not supported.
A hash "\fB#\fR" or two dashes "\fB--\fR" following a whitespace is treated as a beginning of a comment line, which is ignored completely.
Empty lines are ignored as well.
.P
The following example demostrates the use of comments:
.Vb
<C O="0" T="[1]" TL="2" V="2">
<I O="2" T="[1]" TL="2" V="Indefinite">
\fB--\fR </I O="4" T="[UNIVERSAL 0]" L="4">
\fB#\fR Do not terminate:
\fB#\fR the absence of end-of-content octets is intentional!
</C O="6" T="[1]" L="6">
.Ve
.SH SEE ALSO
.TP
\fIunber\fR\|(1), \&\fIasn1c\fR\|(1)
.SH AUTHORS
Lev Walkin <vlm@lionet.info>

View File

@ -1,128 +0,0 @@
.TH unber 1 "2014-10-23" "ASN.1 BER Decoder"
.if n .ad l \" Turn off justifications
.nh \" Turn off hyphenation; can damage formatting in technical documents.
.de Vb \" Verbatim.
.sp
.ft CW
.nf
..
.de Vbi \" Verbatim, indented.
.sp
.ft CW
.nf
.in +4
..
.de Ve \" Verbatim end.
.ft R
.in
.fi
.sp
..
.SH NAME
unber \(em the ASN.1 BER Decoder
.SH SYNOPSIS
unber [\fB\-1\fR] [\fB\-i\fRindent] [\fB\-m\fR] [\fB\-p\fR] [\fB\-s\fR\fIskip\fR] [\fB\-t\fR\fIhex\-string\fR] [\fB\-\fR] [\fIinput-filenames\fR...]
.SH DESCRIPTION
unber presents the internal structure of BER-encoded files as human readable text.
A single dash denotes the standard input.
.sp
(The DER and CER formats are subsets of the BER and are also supported.)
.SH OPTIONS
.TP
\fB\-1\fR
Do \fInot\fR attempt to read the next BER structure after the first one.
This may be useful if the input contains garbage past the single BER sequence.
By default, unber continues decoding until the end of file (input stream).
.TP
\fB\-i\fR \fIindent\fR
Use the specified number of spaces for output indentation.
Default is 4 spaces.
.TP
\fB\-m\fR
Generate shorter output while still preserving BER encoding information.
.TP
\fB\-p\fR
Do \fInot\fR attempt pretty-printing of known ASN.1 types (BOOLEAN, INTEGER, OBJECT IDENTIFIER, etc).
By default, some ASN.1 types are converted into the text representation.
This option is required for \&\fIenber\fR\|(1).
.TP
\fB\-s\fR \fIskip\fR
Ignore the first \fIskip\fR bytes in the input stream; useful for stripping off
lower level protocol framing data.
.TP
\fB\-t\fR \fIhex-string\fR
Interpret the hex-string as a sequence of hexadecimal values representing
the start of BER TLV encoding.
Print the human readable explanation.
.SH XML FORMAT
unber dumps the output in the regular XML format which preserves most of the
information from the underlying binary encoding.
.P
The XML opening tag format is as follows:
.Vb
<\fBtform\fR O="\fBoff\fR" T="\fBtag\fR" TL="\fBtl_len\fR" V="{Indefinite|\fBv_len\fR}" [A="\fBtype\fR"] [\fBF\fR]>
.Ve
Where:
.TP
\fBtform\fR
Encoding form the value is in: primitive ("P") or constructed ("C") or constructed with indefinite length ("I")
.TP
\fBoff\fR
Offset of the encoded element in the unber input stream.
.TP
\fBtag\fR
The tag class and value in human readable form.
.TP
\fBtl_len\fR
The length of the TL (BER Tag and Length) encoding.
.TP
\fBv_len\fR
The length of the value (V, encoded by the L), may be "Indefinite".
.TP
\fBtype\fR
Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
.TP
[\fBF\fR]
Indicates that the value was reformatted (pretty-printed).
This will never appear in the output produced using \fB\-p\fR command line option.
.P
Sample XML output:
.Vb
<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
<P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US</P>
<C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
<P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER" F>832970823</P>
</C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
.Ve
.SH EXAMPLES
Decode the given Tag/Length sequence specified in hexadecimal form:
.Vbi
unber \fB\-t\fR "\fIbf 20\fR"
.Ve
Decode the DER file using two-spaces indentation:
.Vbi
unber \fB\-i\fR \fI2\fR \fIfilename.der\fR
.Ve
Decode the binary stream taken from the standard input:
.Vbi
cat \fIfilename.der\fR | unber \fB\-\fR
.Ve
Decode the binary stream and encode it back into an identical stream (see \&\fIenber\fR\|(1)):
.Vbi
cat \fIfilename.der\fR | unber \fB\-p\fR \fB\-\fR | enber \fB\-\fR > \fIfilename.ber\fR
.Ve
.SH FOOTNOTES
The constructed XML output is not necessarily well-formed.
.P
When indefinite length encoding is being used, the BER sequence, which is not
terminated with the end-of-content octets, will cause the terminating \fB</I>\fR
XML tag to disappear.
Thus, invalid BER framing directly causes invalid XML output.
.P
The \fIenber\fR\|(1) utility understands such XML correctly.
.SH SEE ALSO
.TP
\fIenber\fR\|(1), \fIasn1c\fR\|(1)
.SH AUTHORS
Lev Walkin <vlm@lionet.info>

View File

@ -111,6 +111,10 @@ AC_CHECK_FUNCS(timegm)
AC_CHECK_DECLS(alloca strcasecmp)
AC_TRY_LINK_FUNC([symlink],[AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the symlink function.])])
dnl Use pandoc to generate manual pages.
AC_PATH_PROG([PANDOC], pandoc)
AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
AC_OUTPUT( \
skeletons/tests/Makefile \
libasn1compiler/Makefile \
@ -121,6 +125,7 @@ libasn1fix/Makefile \
doc/docsrc/Makefile \
skeletons/Makefile \
examples/Makefile \
doc/man/Makefile \
asn1c/Makefile \
doc/Makefile \
asn1c.spec \

View File

@ -1,5 +1,5 @@
SUBDIRS = docsrc
SUBDIRS = docsrc man
docsdir = $(datadir)/doc/asn1c

16
doc/man/Makefile.am Normal file
View File

@ -0,0 +1,16 @@
dist_man1_MANS = asn1c.1 unber.1 enber.1
if HAVE_PANDOC
PANDOC_OPTIONS= --from markdown --to man \
--variable header="Version ${VERSION}" \
--variable adjusting:l \
--variable hyphenate:"" \
--standalone
%.1: %.man.md
${PANDOC} ${PANDOC_OPTIONS} -o $@ $<
endif

199
doc/man/asn1c.1 Normal file
View File

@ -0,0 +1,199 @@
.\" Automatically generated by Pandoc 1.16.0.2
.\"
.ad l
.TH "asn1c" "1" "2016\-01\-23" "ASN.1 Compiler" "Version 0.9.28"
.nh \" Turn off hyphenation by default.
.SH NAME
.PP
asn1c \-\- the ASN.1 Compiler
.SH SYNOPSIS
.PP
asn1c [\f[B]\-E\f[] [\f[B]\-F\f[]] | \f[B]\-P\f[] | \f[B]\-R\f[]]
.PD 0
.P
.PD
[\f[B]\-S\f[]\f[I]dir\f[]] [\f[B]\-X\f[]]
.PD 0
.P
.PD
[\f[B]\-W\f[]\f[I]debug\-\f[]...] [\f[B]\-f\f[]\f[I]option\f[]]
[\f[B]\-gen\-\f[]\f[I]option\f[]]
[\f[B]\-pdu\f[]={\f[B]all\f[]|\f[B]auto\f[]|\f[I]Type\f[]}]
.PD 0
.P
.PD
[\f[B]\-print\-\f[]\f[I]option\f[]]
.PD 0
.P
.PD
\f[I]input\-filenames\f[]...
.SH DESCRIPTION
.PP
asn1c compiles ASN.1 specifications into a set of target language
(C/C++) encoders and decoders for BER, DER, PER, XER and other encoding
rules.
.SH OPTIONS
.SS Stage Selection Options
.TP
.B \-E
Run the parsing stage only.
Print the reconstructed ASN.1 text.
.RS
.RE
.TP
.B \-F
Used together with \f[B]\-E\f[], instructs the compiler to stop after
the ASN.1 syntax tree fixing stage and dump the reconstructed ASN.1
specification to the standard output.
.RS
.RE
.TP
.B \-P
Dump the compiled output to the standard output instead of creating the
target language files on disk.
.RS
.RE
.TP
.B \-R
Restrict the compiler to generate only the ASN.1 tables, omitting the
usual support code.
.RS
.RE
.TP
.B \-S \f[I]directory\f[]
Use the specified directory with ASN.1 skeleton files.
.RS
.RE
.TP
.B \-X
Generate an XML DTD schema for the specified ASN.1 files.
.RS
.RE
.SS Warning Options
.TP
.B \-Werror
Treat warnings as errors; abort if any warning is produced.
.RS
.RE
.TP
.B \-Wdebug\-lexer
Enable lexer debugging during the ASN.1 parsing stage.
.RS
.RE
.TP
.B \-Wdebug\-fixer
Enable ASN.1 syntax tree fixer debugging during the fixing stage.
.RS
.RE
.TP
.B \-Wdebug\-compiler
Enable debugging during the actual compile time.
.RS
.RE
.SS Language Options
.TP
.B \-fbless\-SIZE
Allow \f[C]SIZE()\f[] constraint for \f[C]INTEGER\f[],
\f[C]ENUMERATED\f[], and other types for which this constraint is
normally prohibited by the standard.
This is a violation of ASN.1 standard, and the compiler may fail to
produce a meaningful code.
.RS
.RE
.TP
.B \-fcompound\-names
Using this option prevents name collisions in the target source code by
using complex names for target language structures.
(Name collisions may occur if the ASN.1 module reuses the same
identifiers in multiple contexts).
.RS
.RE
.TP
.B \-findirect\-choice
When generating code for a \f[C]CHOICE\f[] type, compile the
\f[C]CHOICE\f[] members as indirect pointers instead of declaring them
inline.
Consider using this option together with \f[B]\-fno\-include\-deps\f[]
to prevent circular references.
.RS
.RE
.TP
.B \-fincludes\-quoted
Refer to header files in \f[C]#include\f[]s using
\f[B]"\f[]double\f[B]"\f[] instead of \f[B]<\f[]angle\f[B]>\f[] quotes.
.RS
.RE
.TP
.B \-fknown\-extern\-type=\f[I]name\f[]
Pretend the specified type is known.
The compiler will assume the target language source files for the given
type have been provided manually.
.RS
.RE
.TP
.B \-fline\-refs
Include ASN.1 module\[aq]s line numbers in generated code comments.
.RS
.RE
.TP
.B \-fno\-constraints
Do not generate ASN.1 subtype constraint checking code.
This may make a shorter executable.
.RS
.RE
.TP
.B \-fno\-include\-deps
Do not generate courtesy #include lines for non\-critical type
dependencies.
Helps prevent namespace collisions.
.RS
.RE
.TP
.B \-funnamed\-unions
Enable unnamed unions in the definitions of target language\[aq]s
structures.
.RS
.RE
.TP
.B \-fwide\-types
Use the unbounded size data types (\f[C]INTEGER_t\f[],
\f[C]ENUMERATED_t\f[], \f[C]REAL_t\f[]) by default, instead of using the
native machine\[aq]s data types (long, double).
.RS
.RE
.SS Codecs Generation Options
.TP
.B \-gen\-PER
Generate the Packed Encoding Rules (PER) support code.
.RS
.RE
.TP
.B \-pdu={all|auto|\f[I]Type\f[]}
Create a PDU table for specified types, or discover Protocol Data Units
automatically.
In case of \f[B]\-pdu=all\f[], all ASN.1 types defined in all modules
will form a PDU table.
In case of \f[B]\-pdu=auto\f[], all types not referenced by any other
type will form a PDU table.
If \f[I]Type\f[] is an ASN.1 type identifier, the identifier is added to
the generated PDU table.
The last form may be specified multiple times to add any number of PDUs.
.RS
.RE
.SS Output Options
.TP
.B \-print\-constraints
When \f[B]\-EF\f[] options are also specified, this option forces the
compiler to explain its internal understanding of subtype constraints.
.RS
.RE
.TP
.B \-print\-lines
Generate "\f[C]\-\-\ #line\f[]" comments in \f[B]\-E\f[] output.
.RS
.RE
.SH SEE ALSO
.PP
\f[C]unber\f[](1), \f[C]enber\f[](1).
.SH AUTHORS
Lev Walkin <vlm@lionet.info>.

140
doc/man/asn1c.man.md Normal file
View File

@ -0,0 +1,140 @@
% asn1c(1) ASN.1 Compiler
% Lev Walkin <vlm@lionet.info>
% 2016-01-23
# NAME
asn1c -- the ASN.1 Compiler
# SYNOPSIS
asn1c [**-E** [**-F**] | **-P** | **-R**] \
[**-S***dir*] [**-X**] \
[**-W***debug-*...] [**-f***option*] [**-gen-***option*]
[**-pdu**={**all**|**auto**|*Type*}] \
[**-print-***option*] \
*input-filenames*...
# DESCRIPTION
asn1c compiles ASN.1 specifications into a set of
target language (C/C++) encoders and decoders for BER, DER, PER, XER
and other encoding rules.
# OPTIONS
## Stage Selection Options
-E
: Run the parsing stage only. Print the reconstructed ASN.1 text.
-F
: Used together with **-E**,
instructs the compiler to stop after the ASN.1 syntax
tree fixing stage and dump the reconstructed ASN.1 specification
to the standard output.
-P
: Dump the compiled output to the standard output instead of creating the
target language files on disk.
-R
: Restrict the compiler to generate only the ASN.1 tables,
omitting the usual support code.
-S *directory*
: Use the specified directory with ASN.1 skeleton files.
-X
: Generate an XML DTD schema for the specified ASN.1 files.
## Warning Options
-Werror
: Treat warnings as errors; abort if any warning is produced.
-Wdebug-lexer
: Enable lexer debugging during the ASN.1 parsing stage.
-Wdebug-fixer
: Enable ASN.1 syntax tree fixer debugging during the fixing stage.
-Wdebug-compiler
: Enable debugging during the actual compile time.
## Language Options
-fbless-SIZE
: Allow `SIZE()` constraint for `INTEGER`, `ENUMERATED`,
and other types for which this constraint is normally prohibited
by the standard.
This is a violation of ASN.1 standard, and the compiler may
fail to produce a meaningful code.
-fcompound-names
: Using this option prevents name collisions in the target source code
by using complex names for target language structures.
(Name collisions may occur if the ASN.1 module reuses the same identifiers
in multiple contexts).
-findirect-choice
: When generating code for a `CHOICE` type, compile the `CHOICE` members
as indirect pointers instead of declaring them inline.
Consider using this option together with **-fno-include-deps**
to prevent circular references.
-fincludes-quoted
: Refer to header files in `#include`s using **"**double**"** instead of **\<**angle**>** quotes.
-fknown-extern-type=*name*
: Pretend the specified type is known.
The compiler will assume the target language source files
for the given type have been provided manually.
-fline-refs
: Include ASN.1 module's line numbers in generated code comments.
-fno-constraints
: Do not generate ASN.1 subtype constraint checking code.
This may make a shorter executable.
-fno-include-deps
: Do not generate courtesy #include lines for non-critical type dependencies.
Helps prevent namespace collisions.
-funnamed-unions
: Enable unnamed unions in the definitions of target language's structures.
-fwide-types
: Use the unbounded size data types (`INTEGER_t`, `ENUMERATED_t`, `REAL_t`)
by default, instead of using the native machine's data types (long, double).
## Codecs Generation Options
-gen-PER
: Generate the Packed Encoding Rules (PER) support code.
-pdu={all|auto|*Type*}
: Create a PDU table for specified types, or discover Protocol Data Units
automatically. In case of **-pdu=all**,
all ASN.1 types defined in all modules will form a PDU table.
In case of **-pdu=auto**, all types not referenced by any other type will
form a PDU table.
If *Type* is an ASN.1 type identifier, the identifier is added to
the generated PDU table.
The last form may be specified multiple times to add any number of PDUs.
## Output Options
-print-constraints
: When **-EF** options are also specified,
this option forces the compiler to explain its internal understanding
of subtype constraints.
-print-lines
: Generate "`-- #line`" comments in **-E** output.
# SEE ALSO
`unber`(1), `enber`(1).

71
doc/man/enber.1 Normal file
View File

@ -0,0 +1,71 @@
.\" Automatically generated by Pandoc 1.16.0.2
.\"
.ad l
.TH "enber" "1" "2016\-01\-23" "unber(1) counterpart" "Version 0.9.28"
.nh \" Turn off hyphenation by default.
.SH NAME
.PP
enber \-\- Convert the unber XML output back into BER
.SH SYNOPSIS
.PP
enber [\f[B]\-n\f[]] [\f[B]\-\f[]] [\f[I]input\-filenames\f[]...]
.SH DESCRIPTION
.PP
enber converts the XML\-formatted files produced by \f[C]unber\f[](1)
back into the BER format.
A single dash denotes the standard input.
.SH OPTIONS
.TP
.B \-n
Disable input validation.
By default, enber performs some basic validity checks against XML input.
.RS
.RE
.SH EXAMPLES
.PP
Decode a BER sequence and immediately encode it back
.RS
.PP
unber \f[B]\-p\f[] \f[I]filename.ber\f[] | enber \f[B]\-\f[] >
\f[I]reconstructed.ber\f[]
.RE
.SH FOOTNOTES
.PP
This program does not attempt to perform full\-fledged XML parsing.
It is merely compatible with \f[C]unber\f[](1)\[aq]s output.
In particular, the XML style comments are not supported.
A hash "\f[B]#\f[]" or two dashes "\f[B]\-\-\f[]" following a whitespace
is treated as a beginning of a comment line, which is ignored
completely.
Empty lines are ignored as well.
.PP
The following example \f[C]enber\f[](1) input demostrates the use of
comments:
.PP
<C O="0" T="[1]" TL="2" V="2">
.PD 0
.P
.PD
\ \ \ \ <I O="2" T="[1]" TL="2" V="Indefinite">
.PD 0
.P
.PD
\ \ \ \ \f[B]\-\-\f[] </I O="4" T="[UNIVERSAL 0]" L="4">
.PD 0
.P
.PD
\ \ \ \ \f[B]#\f[] Do not terminate:
.PD 0
.P
.PD
\ \ \ \ \f[B]#\f[] the absence of end\-of\-content octets is
intentional!
.PD 0
.P
.PD
</C O="6" T="[1]" L="6">
.SH SEE ALSO
.PP
\f[C]unber\f[](1), \f[C]asn1c\f[](1).
.SH AUTHORS
Lev Walkin <vlm@lionet.info>.

50
doc/man/enber.man.md Normal file
View File

@ -0,0 +1,50 @@
% enber(1) unber(1) counterpart
% Lev Walkin <vlm@lionet.info>
% 2016-01-23
# NAME
enber -- Convert the unber XML output back into BER
# SYNOPSIS
enber [**-n**] [**-**] [*input-filenames*...]
# DESCRIPTION
enber converts the XML-formatted files produced by `unber`(1) back into the BER format.
A single dash denotes the standard input.
# OPTIONS
-n
: Disable input validation.
By default, enber performs some basic validity checks
against XML input.
# EXAMPLES
Decode a BER sequence and immediately encode it back
> unber **-p** *filename.ber* | enber **-** > *reconstructed.ber*
# FOOTNOTES
This program does not attempt to perform full-fledged XML parsing.
It is merely compatible with `unber`(1)'s output.
In particular, the XML style comments are not supported.
A hash "**#**" or two dashes "**--**" following a whitespace is treated as a beginning of a comment line, which is ignored completely.
Empty lines are ignored as well.
The following example `enber`(1) input demostrates the use of comments:
| \<C O="0" T="[1]" TL="2" V="2">
| \<I O="2" T="[1]" TL="2" V="Indefinite">
| **--** \</I O="4" T="[UNIVERSAL 0]" L="4">
| **#** Do not terminate:
| **#** the absence of end-of-content octets is intentional!
| \</C O="6" T="[1]" L="6">
# SEE ALSO
`unber`(1), `asn1c`(1).

181
doc/man/unber.1 Normal file
View File

@ -0,0 +1,181 @@
.\" Automatically generated by Pandoc 1.16.0.2
.\"
.ad l
.TH "unber" "1" "2016\-01\-23" "ASN.1 BER Decoder" "Version 0.9.28"
.nh \" Turn off hyphenation by default.
.SH NAME
.PP
unber \-\- the ASN.1 BER Decoder
.SH SYNOPSIS
.PP
unber [\f[B]\-1\f[]] [\f[B]\-i\f[]\f[I]indent\f[]] [\f[B]\-m\f[]]
[\f[B]\-p\f[]] [\f[B]\-s\f[]\f[I]skip\f[]]
[\f[B]\-t\f[]\f[I]hex\-string\f[]] [\f[B]\-\f[]]
[\f[I]input\-filenames\f[]...]
.SH DESCRIPTION
.PP
unber presents the internal structure of BER\-encoded files as a human
readable text.
A single dash denotes the standard input.
.PP
(The DER and CER formats are subsets of the BER and are also supported.)
.SH OPTIONS
.TP
.B \-1
Do \f[I]not\f[] attempt to read the next BER structure after the first
one.
This may be useful if the input contains garbage past the single BER
sequence.
By default, unber continues decoding until the end of file (input
stream).
.RS
.RE
.TP
.B \-i \f[I]indent\f[]
Use the specified number of spaces for output indentation.
Default is 4 spaces.
.RS
.RE
.TP
.B \-m
Generate shorter output while still preserving BER encoding information.
.RS
.RE
.TP
.B \-p
Do \f[I]not\f[] attempt to pretty\-print known ASN.1 types
(\f[C]BOOLEAN\f[], \f[C]INTEGER\f[], \f[C]OBJECT\ IDENTIFIER\f[], etc).
By default, some ASN.1 types are converted into the text representation.
.RS
.PP
This option is required if the \f[C]unber\f[](1) output is used as an
input to \f[C]enber\f[](1).
.RE
.TP
.B \-s \f[I]skip\f[]
Ignore the first \f[I]skip\f[] bytes in the input stream; useful for
stripping off lower level protocol framing data.
.RS
.RE
.TP
.B \-t \f[I]hex\-string\f[]
Interpret the hex\-string as a sequence of hexadecimal values
representing the start of BER TLV encoding.
Print the human readable explanation.
.RS
.RE
.SH XML FORMAT
.PP
unber dumps the output in the regular XML format which preserves most of
the information from the underlying binary encoding.
.PP
The XML opening tag format is as follows:
.PP
<\f[B]tform\f[] O="\f[B]off\f[]" T="\f[B]tag\f[]" TL="\f[B]t_len\f[]"
V="{Indefinite|\f[B]v_len\f[]}" [A="\f[B]type\f[]"] [\f[B]F\f[]]>
.PP
Where:
.TP
.B \f[B]tform\f[]
Encoding form the value is in: primitive ("P") or constructed ("C") or
constructed with indefinite length ("I")
.RS
.RE
.TP
.B \f[B]off\f[]
Offset of the encoded element in the unber input stream.
.RS
.RE
.TP
.B \f[B]tag\f[]
The tag class and value in human readable form.
.RS
.RE
.TP
.B \f[B]t_len\f[]
The length of the TL (BER Tag and Length) encoding.
.RS
.RE
.TP
.B \f[B]v_len\f[]
The length of the value (V, encoded by the L), may be "Indefinite".
.RS
.RE
.TP
.B \f[B]type\f[]
Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
.RS
.RE
.TP
.B [\f[B]F\f[]]
Indicates that the value was reformatted (pretty\-printed).
This will never appear in the output produced using the \f[B]\-p\f[]
command line option.
.RS
.RE
.SS Example XML output:
.PP
<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
.PD 0
.P
.PD
\ <P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US</P>
.PD 0
.P
.PD
\ \ <C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
.PD 0
.P
.PD
\ \ \ \ <P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER"
F>832970823</P>
.PD 0
.P
.PD
\ \ </C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
.PD 0
.P
.PD
</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
.SH EXAMPLES
.PP
Decode the given Tag/Length sequence specified in hexadecimal form:
.RS
.PP
unber\ \f[B]\-t\f[] "\f[I]bf 20\f[]"
.RE
.PP
Decode the DER file using two\-spaces indentation:
.RS
.PP
unber\ \f[B]\-i\f[] \f[I]2\f[]\ \f[I]filename.der\f[]
.RE
.PP
Decode the binary stream taken from the standard input:
.RS
.PP
cat \f[I]filename.der\f[] | unber \f[B]\-\f[]
.RE
.PP
Decode the binary stream and encode it back into an identical stream
(see \f[C]enber\f[](1)):
.RS
.PP
cat \f[I]filename.der\f[] | unber \f[B]\-p\f[] \f[B]\-\f[] | enber
\f[B]\-\f[] > \f[I]filename.ber\f[]
.RE
.SH FOOTNOTES
.PP
The constructed XML output is not necessarily well\-formed.
.PP
When indefinite length encoding is being used, the BER sequence which is
not terminated with the end\-of\-content octets will cause the
terminating \f[B]</I>\f[] XML tag to disappear.
Thus, invalid BER framing directly causes invalid XML output.
.PP
The \f[C]enber\f[](1) utility understands such XML correctly.
.SH SEE ALSO
.PP
\f[C]enber\f[](1), \f[C]asn1c\f[](1).
.SH AUTHORS
Lev Walkin <vlm@lionet.info>.

121
doc/man/unber.man.md Normal file
View File

@ -0,0 +1,121 @@
% unber(1) ASN.1 BER Decoder
% Lev Walkin <vlm@lionet.info>
% 2016-01-23
# NAME
unber -- the ASN.1 BER Decoder
# SYNOPSIS
unber [**-1**] [**-i***indent*] [**-m**] [**-p**] [**-s***skip*] [**-t***hex-string*] [**-**] [*input-filenames*...]
# DESCRIPTION
unber presents the internal structure of BER-encoded files as a human readable text.
A single dash denotes the standard input.
(The DER and CER formats are subsets of the BER and are also supported.)
# OPTIONS
-1
: Do *not* attempt to read the next BER structure after the first one.
This may be useful if the input contains garbage past the single BER sequence.
By default, unber continues decoding until the end of file (input stream).
-i *indent*
: Use the specified number of spaces for output indentation.
Default is 4 spaces.
-m
: Generate shorter output while still preserving BER encoding information.
-p
: Do *not* attempt to pretty-print known ASN.1 types (`BOOLEAN`, `INTEGER`, `OBJECT IDENTIFIER`, etc).
By default, some ASN.1 types are converted into the text representation.
This option is required if the `unber`(1) output is used as an input to `enber`(1).
-s *skip*
: Ignore the first *skip* bytes in the input stream;
useful for stripping off lower level protocol framing data.
-t *hex-string*
: Interpret the hex-string as a sequence of hexadecimal values representing
the start of BER TLV encoding.
Print the human readable explanation.
# XML FORMAT
unber dumps the output in the regular XML format which preserves most of the
information from the underlying binary encoding.
The XML opening tag format is as follows:
<**tform** O="**off**" T="**tag**" TL="**t_len**" V="{Indefinite|**v_len**}" [A="**type**"] [**F**]>
Where:
**tform**
: Encoding form the value is in: primitive ("P") or constructed ("C") or constructed with indefinite length ("I")
**off**
: Offset of the encoded element in the unber input stream.
**tag**
: The tag class and value in human readable form.
**t_len**
: The length of the TL (BER Tag and Length) encoding.
**v_len**
: The length of the value (V, encoded by the L), may be "Indefinite".
**type**
: Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
[**F**]
: Indicates that the value was reformatted (pretty-printed).
This will never appear in the output produced using the **-p**
command line option.
## Example XML output:
| \<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
| \<P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US\</P>
| \<C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
| \<P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER" F>832970823\</P>
| \</C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
| \</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
# EXAMPLES
Decode the given Tag/Length sequence specified in hexadecimal form:
> unber\ **-t** "*bf 20*"
Decode the DER file using two-spaces indentation:
> unber\ **-i** *2*\ *filename.der*
Decode the binary stream taken from the standard input:
> cat *filename.der* | unber **-**
Decode the binary stream and encode it back into an identical stream (see `enber`(1)):
> cat *filename.der* | unber **-p** **-** | enber **-** > *filename.ber*
# FOOTNOTES
The constructed XML output is not necessarily well-formed.
When indefinite length encoding is being used, the BER sequence which is not
terminated with the end-of-content octets will cause the terminating **\</I>**
XML tag to disappear.
Thus, invalid BER framing directly causes invalid XML output.
The `enber`(1) utility understands such XML correctly.
# SEE ALSO
`enber`(1), `asn1c`(1).