This document describes the changes made to the asn1 system
from version to version. The intention of this document is to
list all incompatibilities as well as all enhancements and
bugfixes for every release of the asn1 application. Each release of asn1
thus constitutes one section in this document. The title of each
section is the version number of asn1.
1 Asn1 1.4.3.1
1.1 Fixed Bugs and Malfunctions
-
The
{internal_error,...,{ unrecognized_type,...}}
error occuring for a SET type when compiling with options
[ber_bin,optimize,der]
is now corrected.
Own Id: OTP-4866
-
False encode of BIT STRING in PER (per_bin,optimize) is fixed. The error occured when there was a type like BIT STRING (SIZE(C)) and C > 16.
Own Id: OTP-4869
2 Asn1 1.4.3
2.1 Fixed errors and malfunctions
-
Functionality to handle parameterized object sets have been added.
Own Id: OTP-4832
-
Bug causing duplicated fuction definitions using exclusive decode is removed.
Own Id: OTP-4833)
-
The race condition when loading asn1 driver is solved.
Own Id: OTP-4835
2.2 Improvements and new features
-
A specialized decode, selective decode is now available. It decodes a chosen internal sub-type of a constructed type.
Own Id: OTP-4856)
3 Asn1 1.4.2.2
3.1 Fixed errors and malfunctions
-
Release of Asn1 1.4.2.1 on R7B, The functionality is the same, but
the layer between the driver and the asn1 erlang code is different.
4 Asn1 1.4.2.1
4.1 Fixed errors and malfunctions
-
ObjectDescriptor does now work as part of a sequence, set or choice.
Own Id: OTP-4773
-
When a SEQUENCE that have extension mark was decoded inside a
SEQUENCE OF it could cause decode error due to a failure in
restbytes2. It is now corrected.
Own Id: OTP-4791)
-
Now the bug is fixed that caused the compiler crash on an untaged
optional open type.
Own Id: OTP-4792
-
The earlier exit caused by bad indata is now fixed so it will
rreturn an {error,Reason} tuple.
Own Id: OTP-4797
-
Open type encoded with indefinite length is now correct decoded.
Own Id: OTP-4798
-
Now is absent optional open types handled correctly.
Own Id: OTP-4799
-
Now is the necessary functions available for sorting in run-time of
SET and SET OF components.
Own Id: OTP-4809
5 Asn1 1.4.2
5.1 Fixed errors and malfunctions
-
When a component in a SEQUENCE is a CHOICE (or reference to a CHOICE)
and the SEQUENCE's component and one of the alternatives in the CHOICE
have identical names, an error may occur if one doesn't use the
'optimized' versions of the compiler. In the older versions (
ber,
ber_bin, per, per_bin
) one could optionally apply a value of a
component as {ComponentName,Value}
, and the generated code
chooses the second element of the tuple. However, a value of a CHOICE
must be applied as a tuple: {AlternativeName,Value}
. Thus,
in the rare case described above and if the value to the SEQUENCE's
component is not in a tuple notation the
{AlternativeName,Value}
will be peeled off in the SEQUENCE
and the value fed to the CHOICE will only be the Value
part of {AlternativeName,Value}
, and the encoder crashes.
The best way to avoid this is to use the optimized version of the
compiler where the unnecessary tuple notation
{ComponentName,Value}
no longer is allowed. Since it isn't
possible to solve this bug in the compiler.
Own Id: OTP-4693
5.2 Improvements and new features
-
Exclusive decode is enabled by a compiler option and a configuration
file. It makes it possible to leave parts of an ASN.1 encoded message
undecoded.
Own Id: OTP-4744
6 Asn1 1.4.1.1
6.1 Fixed errors and malfunctions
-
The documentation about how extensibility is handled is now corrected.
Own Id: OTP-4663
-
Function in object now calls the exported function
Own Id: OTP-4665
-
Now is tags for ObjectClassFieldType analyzed correctly.
Own Id: OTP-4666
7 Asn1 1.4.1
7.1 Fixed errors and malfunctions
-
Now is the Default value for an ENUMERATED returned as the name from
the NamedList when decoding.
Own Id: OTP-4633
-
It was an internal failure when permitted alphabet constraint existed
together with for instance a size constraint. E.g. when a
referenced type is constrained by a size constraint and the defined
type in turn is constrained by a permitted alphabet constraint.
Own Id: OTP-4559
-
Record is generated in hrl file for a CHOICE with extension mark
that has an internal SEQUENCE/SET definition.
Own Id: OTP-4560
-
Now is the length of a SEQUENCE/SET OF correctly encoded/decoded (PER).
Own Id: OTP-4590
-
The problem with unordered decoded terms when a component is a
ObjectClassFieldType has been solved.
Own Id: OTP-4591
7.2 Improvements and new features
-
More complex definitions with TableConstraints where the SimpleTable
and ComponentRelation are on different levels is now fully
supported.
Own Id: OTP-4631
8 Asn1 1.4
8.1 Fixed errors and malfunctions
8.2 Improvements and new features
-
Each generated .erl file have now a function info/0 that returns
information about the used compiler version and options.
Own Id: OTP-4373
-
When compiling an ASN.1 module the compiler generates an Erlang module
that is compiled by the Erlang compiler. Earlier it was not possible to
add options to the final step, the Erlang compilation. By adding any
option that is not recognized as a specific ASN.1 option it will be
passed to the final step like:
erlc +debug_info
Mymodule.asn
or
asn1ct:compile('Mymodule',[debug_info])
.
Own Id: OTP-4491
-
Earlier one couldn't multi file compile modules that had different
tagdefaul, which now is possible. Equal Type/Value names in different
modules are resolved by renaming (concatenate type name and module
name): If two types with the same name T exist in module A and module B
they will get the new names TA and TB.
(Own Id: OTP-4492)
Aux Id: OTP-3983
-
BER: Encode/decode of data have been significantly improved. By use of
the compiler options
ber_bin
and optimize
,
optimized code will be generated and the optimized run-time module will
be used.
Own Id: OTP-4493
9 Asn1 1.3.3.1
9.1 Fixed errors and malfunctions
-
Proper length encoding and padding implemented for a
BIT STRING
with
NamedNumberList and size constraint as value range. This functionality
didn't work in the rare occasion when the NamedNumberList is shorter
than the lower bound of the constraint.As in this example:
TestS ::= BIT STRING {a (0),b (1)} (SIZE (3..8))
(Own Id: OTP-4353)
-
Bug in compiler, when an
OBJECT IDENTIFIER
value consisting of
two identifiers (Defined values or Name form identifiers) was falsely
interpreted causing a compiling error is now corrected.
(Own Id: OTP-4354)
-
Internal error in check phase that caused crash on
ObjectClassFieldType
in ber_bin is corrected.
(Own Id: OTP-4390)
-
Tags for open types are handled according to
x.680 30.6c
, i.e.
open types shall not be tagged IMPLICIT.
(Own Id: OTP-4395)
(Aux Id: OTP-4390)
10 Asn1 1.3.3
10.1 Fixed errors and malfunctions
-
Now gives the compiler an apropriate error report when exported
undefined types are detected.
(Own Id: OTP-4129)
-
The type
ObjectDescriptor
is now supported, previously the
implementation of encode/decode for this rarely used type was
incomplete.
(Own Id: OTP-4161)
(Aux Id: seq7165)
-
In case of per and compact_bit_string the rightmost byte were erronous
truncated when the rightmost bits of that byte were zeros. This is now
corrected.
(Own Id: OTP-4200)
-
Bad match of returnvalue from decode_length in skipvalue/3 has now been
fixed.
(Own Id: OTP-4232)
-
Now is decode of ENUMERATED handled correctly, when tagged EXPLICIT.
(Own Id: OTP-4234)
-
The compiler now parses and handles the ValueFromObject construct.
(Own Id: OTP-4242)
-
Now does the compiler handle the case when the object set in simple
table and componentrelation constraints is of a CLASS without a UNIQUE
field. In this case is the octets, which is assumed to be encoded,
encoded as an open type.
(Own Id: OTP-4248)
(Aux Id: OTP-4242)
-
Compiler handles objects in AdditionalElementSetSpec in ObjectSetSpec,
i.e. the objects that are referred to after the ellipses in an object set.
(Own Id: OTP-4275)
-
Now are values with a component of type CHOICE encoded with indefinite
length correctly decoded.
(Own Id: OTP-4358)
10.2 Improvements and new features
-
The language constructs (from the old 1988 standard)
ANY
and ANY DEFINED BY
are now implemented.
(Own Id: OTP-2741)
(Aux Id: seq 1188)
-
Now it is checked in run-time if a
OBJECT IDENTIFIER
value is unvalid
(Own Id: OTP-4235)
-
The ASN.1 types EXTERNAL,EMBEDDED PDV and CHARACTER STRING now have full support in the compiler.
(Own Id: OTP-4247)
-
A driver in C does the final job (complete) of the PER encoding when
files are compiled with
per_bin
and optimize
flags.
It gives significant faster encoding for PER.
(Own Id: OTP-4355)
-
Encode and decode of PER encoding has been made faster by moving
analysis done in run-time to compile-time. These optimizations are
available by compiling ASN.1 files with options
per_bin
and
optimize
.
(Own Id: OTP-4381)
(Aux Id: OTP-4355)
11 Asn1 1.3.2
11.1 Fixed errors and malfunctions
-
Now does the compiler check values (including referenced values), and
formats the value so it is suitable to use as input to encoding
functions.
(Own Id: OTP-3277)
(Aux Id: OTP-4103)
-
Unnecessary external function calls in generated code are now generated
as internal function calls.
(Own Id: OTP-4073)
11.2 Improvements and new features
-
Now is Information Objects supported in BER encoding.
(Own Id: OTP-3980)
(Aux Id: OTP-3979 OTP-3978)
-
PER: A new option
per_bin
is now supported. When used the
generated encode/decode functions use binaries and the bit syntax to
get better performance than the old per
variant which used
lists. All values input to encode and returned from decode are
compatible between per
and per_bin
except for
open types which are represented as binaries with per_bin and octet
lists with per. We recommend that you use per_bin instead of per from
now on, the use of binaries will be the default in coming versions and
all improvements and optimizations for PER will be concentrated to that
solution.
(Own Id: OTP-4094)
-
Support for DER implemented. Used by flag +der when compiling. Include
the full BER encoding plus: sorting of SET components, sorting of
encoded elements in SET OF, full check of default values in SET and
SEQUENCE. See new documentation on DER in user_guide sections 1.3.1;
1.4.11; 1.4.12; 1.4.14; 1.4.16 and 1.10, in the reference manual for
asn1ct.
(Own Id: OTP-4103)
12 Asn1 1.3.1
12.1 Fixed errors and malfunctions
-
Do not generate record in .hrl file for SET types
Own Id: OTP-4025
-
Fixed internal error when using BIT STRINGs with Named Number List in combination with
compact_bit_string
and ber_bin
options.
Own Id: OTP-4026
Aux Id: OTP-3982
-
The atom 'com' can now be used in ENUMERATED as an EnumerationItem.
Own Id: OTP-4037
Aux Id: Seq 7036
-
ber: Now it is possible (again) to encode data format "{Type,Value}" in a SEQUENCE OF RequestParameter, when RequestParameter is of type ENUMERATED. The {Type,Value}
notation is not recommended for use, it is redundant and exist only for very ancient backwards compatibility reasons. The "feature" might be removed in forthcoming versions.
Own Id: OTP-4057
Aux Id: Seq 7066
-
A bug in the parser, that caused failure on COMPONENTS OF is now removed.
Own Id: OTP-4058
13 Asn1 1.3
13.1 Known problems
-
The compiler will now check that a value referenced by name
does exist.
Own Id: OTP-3277
-
BER:Decode of a type T ::= SEQUENCE OF C fails if C is encoded with indefinite length.
This is know corrected.
Own Id: OTP-3811
Aux Id: seq5040
13.2 Fixed errors and malfunctions
-
The new parser handles imports when one import ends with FROM, a modulename and a reference to a objectidentifier followed by imports from other modules.
Own Id: OTP-3463
-
The compiler did not check that a name mentioned as EXPORTED
actually is defined within the module.
This is now corrected.
Own Id: OTP-3659
-
Removed bug caused by use of nested indefinite length
Own Id: OTP-3994
13.3 Improvements and new features
-
Now supporting most common use of parameterization according to X.683
(Own Id: OTP-3978)
-
PER: Now supporting most common use of Information Objects according to X.681. A new parser has been implemented. The error messages due to syntax errors are slightly different than previous. TableConstraint part of X.682 now also supported.
Own Id: OTP-3979
-
New compiler option added:
ber_bin
. The compiler generates code with new bit syntax. Run time functions uses bit syntax when feasible. Higher encoding/decoding performance in most cases. Se also comments for Asn1 1.2.9.3.
Own Id: OTP-3981
-
A more compact format of BIT STRING in Erlang is now available by use of the compiler option
compact_bit_string
. It is much faster when large BIT STRINGs are used.
Own Id: OTP-3982
-
Now possible to merge many ASN.1 input files to one Erlang file by use of a configuration file that lists the ASN.1 files.
Own Id: OTP-3983
-
New documentation in User's Guide in section:
3.1: New compile-time functions and options are described.
4.6: New compact format of BIT STRING is described.
4.8: Additional comments on character strings.
7: New section describing ASN.1 Information Objects.
8: New section describing Parameterization.
Reference Manual/asn1ct New compile options are described.
Own Id: OTP-3984
Aux Id: OTP-3978, OTP-3979, OTP-3981, OTP-3982, OTP-3983
-
Added the functionality to invoke ASN1Mod:encode (and decode).
Own Id: OTP-3985
-
Performance improvements by removing not necessary use of apply when calling asn1rt:encode. Also other general improvements.
Own Id: OTP-3988
14 Asn1 1.2.9.6
14.1 Known problems
-
The compiler does not check that an exported name actually exists in the ASN.1 module.
Own Id: OTP-3659
-
The compiler does not check that a value referenced by name does exist.
Own Id: OTP-3277
-
BER: The compiler does not take the extensions into account when checking if
the tags are unique in a SEQUENCE or SET.
Own Id: OTP-3304
14.2 Fixed errors and malfunctions
-
PER: Trailing zeroes in a BIT STRING declared without named bits
should not be removed in the encodings.
Own Id: OTP-3830
15 Asn1 1.2.9.5
15.1 Known problems
Same as for 1.2.9.3.
15.2 Fixed errors and malfunctions
16 Asn1 1.2.9.3
16.1 Known problems
-
The compiler does not check that an exported name actually exists in the ASN.1 module.
Own Id: OTP-3659
-
The compiler does not check that a value referenced by name does exist.
Own Id: OTP-3277
-
BER: The compiler does not take the extensions into account when checking if
the tags are unique in a SEQUENCE or SET.
Own Id: OTP-3304
16.2 Fixed errors and malfunctions
16.3 Improvements and new features
-
There is now a new compiler option
ber_bin
available that can be used to
generate encode/decode functions for BER that uses the new "bit-syntax" to
make the functions more efficient. The ber_bin
option is used
as an alternative to the ber
and per
options.
The encode function then produces a
possibly nested list of binaries and integer lists. The decode function does
in this case require a single binary as input instead of a list.
The modules generated with this option require that you have an R7A or later
system, otherwise they will not compile and the runtime module asn1rt_ber_bin
can not be executed.
The ber_bin option is not officially supported in this version (will be
in a later version) but is provided for those who want to try it.
It should be significantly faster at decode and is slightly faster at encode.
Exactly how performance differs between this binary approach and the
list approach depends highly on the type of input.
Another thing worth noting is that both approaches still have a lot of
solutions in common which can be improved a lot to gain even better
performance.
17 Asn1 1.2.9.2
17.1 Fixed errors and malfunctions
-
BER: Encode/decode of extension components did not work properly. This is now corrected.
Own Id: OTP-3395
Aux Id:
PER:The encode/decode of NULL as an open type has been corrected. An open type must always have a length of at least 1 byte even if the contained
value (e.g NULL) encodes to nothing.
Own Id: OTP-3496
Aux Id:
-
BER:In the current implementation extension components of a SEQUENCE are required
to be present when they are specified as mandatory. This is an error, all extension
components are "optional" even if they are not specified to have the OPTIONAL or
DEFAULT property. This is now corrected.
Own Id: OTP-3278
17.2 Improvements and new features
-
The ASN.1 language feature
COMPONENTS OF
is now implemented.
Own Id: OTP-2515
-
The encoding and decoding of ENUMERATED and
INTEGER with NamedNumbers is made more efficient and thus
faster in runtime.
Own Id: OTP-3464
Aux Id:
-
Added support for encode/decode of open type which is
constrained to a specific type. Previously the value of
an open type had to be a list of octets, but now the Erlang
representation of the specific type used in the constraint
is used both as input to encode and as output from decode.
Own Id: OTP-3569
Aux Id:
-
PER: GeneralString, GraphicalString etc. i.e all strings
that are not so called "known-multiplier character
string types" are now supported by the runtime
encode/decode functions.
Own Id: OTP-3573
Aux Id:
18 Asn1 1.2.6
18.1 Known problems
-
The ASN.1 language feature
COMPONENTS OF
is not implemented.
Own Id: OTP-2515
-
The compiler does not check that a value referenced by name does exist.
Own Id: OTP-3277
-
BER:In the current implementation extension components of a SEQUENCE are required
to be present when they are specified as mandatory. This is an error, all extension
components are "optional" even if they are not specified to have the OPTIONAL or
DEFAULT property.
Own Id: OTP-3278
-
BER: The compiler does not take the extensions into account when checking if
the tags are unique in a SEQUENCE or SET.
Own Id: OTP-3304
18.2 Fixed errors and malfunctions
-
This version supports soft upgrade from versions 1.1.1, 1.1.5 and 1.1.6.
Two new runtime modules
asn1rt_ber_v1
and
asn1rt_per_v1
are delivered together with the old ones. This makes
it possible to continue running applications with modules generated with the
previous version of the asn1 compiler while modules generated by this version
will use the new runtime modules. Note that it is only advice-able to continue
running old generates if they are working perfectly and have no need
for the corrections made in this version of the asn1 application.
-
BER: SEQUENCEs encoded with indefinite length was not correctly decoded.
This in now corrected.
Own Id: OTP-3352
Aux Id: Seq 4100
19 Asn1 1.2.4
19.1 Fixed errors and malfunctions
19.2 Improvements and new features
-
The ASN.1 module name and the filename where the ASN.1
specification resides must match each other (has always been the
case). This is now checked by the compiler. The check requires that
the names match in a case or case insensitive way depending on the
characteristics for the current system.
Own Id: OTP-1843
-
PER: Encode/decode of an extension value (i.e not within the root set) for
ENUMERATED
did not work properly. This is now corrected.
If an unknown enumerated value is
decoded (for an extensible enumerated type)
it is returned as {asn1_enum,Value}
where
Value
is an integer. Enumerated values in this format
are also accepted by the encoder (if the value is >= the number of known
extension values).
Own Id: OTP-2930
-
Unnecessary printouts from the compiler are removed.
The compiler version and the compiler options are now
printed to stdout.
Own Id: OTP-3276
-
In order to better suite the use of ASN.1 in embedded systems only
the modules needed in runtime are now listed in the
.app
file.
Own Id: OTP-3279
-
The compiler now supports extensionmarker in constraint specifications.
Example:
INTEGER (0..10, ...)
In previous version this was reported as a syntax error.
Own Id: OTP-3281
-
A very limited part of ITU-T recommendation X.681
Abstract Syntax Notation One (ASN.1): Information
object specification is now implemented. Specifically
TYPE IDENTIFIER is reqognized by the compiler.
Own Id: OTP-3325
-
Parameterization of ASN.1 specifications (ITU-T X.683) is now
supported to a limited extent.
Own Id: OTP-3326
20 Asn1 1.1.3.1
20.1 Fixed errors and malfunctions
-
BER Encoding and decoding of
ENUMERATED
with extensionmark
"..." did not work (crashed with a runtime error). This
has now been corrected. If an unknown enumerated value is
decoded (for an extensible enumerated type)
it is returned as {asn1_enum,Value}
where
Value
is an integer. Enumerated values in this format
are also accepted by the encoder.
ASN.1 modules containing
ENUMERATED
with extensionmark should be
recompiled with the corrected
version of the compiler. The BER runtime functions are also
corrected.
Note that this correction has already been delivered as a
bugfix for R4B (OTP-2951).
Own Id: OTP-3202
Aux Id: Seq3745
21 Asn1 1.1.1
21.1 Known problems
-
The syntactic construct
COMPONENTS OF
is not
implemented.
Own Id: OTP-2515
-
ANY
and ANY DEFINED BY
are currently not
supported.
Own Id: OTP-2741
Aux Id: seq 1188
-
Multiple definitions of the same Type or Value is not detected
by the compiler. The error occurs when the generated Erlang
module is compiled.
Own Id: OTP-3105
22 Asn1 1.1
22.1 Known problems
22.2 Fixed errors and malfunctions
22.3 Improvements and new features
-
The code generated for BER is significantly enhanced resulting
in less code and around 300% better performance in runtime
for the encoding of complex ASN.1 values. The performance of
decoding is unchanged.
Own Id: OTP-2806
23 Asn1 1.0.3
23.1 Fixed errors and malfunctions
-
The
asn1.app
file is corrected.
Own Id: OTP-2640
-
The encoding of integers in BER did not comply with the
standard for all values. The values was not encoded
in the minimum number of octets as required. This is
now corrected in the runtime module
asn1rt_ber
.
Own Id: OTP-2666
23.2 Improvements and new features
-
The compiler now generates explicit exports directives for
all generated
functions that should be exported (instead of -compile(export_all)).
This eliminates the warnings from the Erlang compiler when
compiling the
generated file.
Own Id: OTP-1845
24 R3B02 (Asn1 1.0.2)
24.1 Fixed errors and malfunctions
-
The decoding of a BER encoded SEQUENCE with optional component
of type SEQUENCE (also with optional components) could result
in an error or wrong result if the tags are equal.
Own Id: OTP-2226
-
The encoding of (PER) SEQUENCE with extensionmark was wrong.
This is now corrected.
Own Id: OTP-2349
25 R3A (Asn1 0.9)
25.1 Fixed errors and malfunctions
-
The asn1 compiler now detects the use of an implicit tag before
CHOICE
as an error (in accordance with the standard)
Own Id: OTP-1844
-
An OPTIONAL CHOICE embedded in SEQUENCE when BER coding
caused an error when generating decode code. This is now
corrected.
Own Id: OTP-1857
Aux Id: OTP-1848
26 1 ASN1 0.8.1
This is the first release of the ASN1 application. This version is
released for beta-testing. Some functionality will be added until the
1.0 version is released. See the release notes for the latest version
for the exact details about new features. A list of missing features
and restrictions can be found in the chapter below.
26.1 1.1 Missing features and other restrictions
-
The encoding rules BER and PER (aligned) is supported. PER (unaligned)
IS NOT SUPPORTED.
-
NOT SUPPORTED types
ANY
and ANY DEFINED BY
(is not in the standard any more).
-
NOT SUPPORTED types
EXTERNAL
and EMBEDDED-PDV
.
-
NOT SUPPORTED type
REAL
(planned to be implemented).
-
The code generation support for value definitions in the ASN.1 notation is very limited
(planned to be enhanced).
-
The support for constraints is limited to:
-
SizeConstraint SIZE(X)
-
SingleValue (1)
-
ValueRange (X..Y)
-
PermittedAlpabet FROM (but not for BMPString and UniversalString when generating PER).
-
Complex expressions in constraints is not supported (planned to be extended).
-
The current version of the compiler has very limited error checking:
-
Stops at first syntax error.
-
Does not stop when a reference to an undefined type is found ,
but prints an error message. Compilation of the generated
Erlang module will then fail.
-
A whole number of other semantical controls is currently
missing. This means that the compiler will give little
or bad help to detect what's wrong with an ASN.1
specification, but will mostly work very well when the
ASN.1 specification is correct.
-
The maximum INTEGER supported in this version is a
signed 64 bit integer. This limitation is probably quite
reasonable. (Planned to be extended).
-
Only AUTOMATIC TAGS supported for PER.
-
Only EXPLICIT and IMPLICIT TAGS supported for BER.
-
The compiler supports decoding of BER-data with indefinite
length but it is not possible to produce data with indefinite
length with the encoder.
asn1 1.4.5
Copyright © 1991-2007
Ericsson AB