GenericTypes
DEFINITIONS
AUTOMATIC TAGS ::=
BEGIN
-- Small Integers
Int8 ::= INTEGER (-128..127)
UInt8 ::= INTEGER (0..255)
Int16 ::= INTEGER (-32768..32767)
UInt16 ::= INTEGER (0..65535)
Int32 ::= INTEGER (-2147483648..2147483647)
UInt32 ::= INTEGER (0..4294967295)
Int64 ::= INTEGER (-9223372036854775808..9223372036854775807)
UInt64 ::= INTEGER (0..18446744073709551615)
-- Large (Cryptographic) Integers
UInt96 ::= OCTET STRING (SIZE(12))
UInt128 ::= OCTET STRING (SIZE(16))
UInt160 ::= OCTET STRING (SIZE(20))
UInt192 ::= OCTET STRING (SIZE(24))
UInt224 ::= OCTET STRING (SIZE(28))
UInt256 ::= OCTET STRING (SIZE(32))
UInt384 ::= OCTET STRING (SIZE(48))
UInt512 ::= OCTET STRING (SIZE(64))
-- Variable-Length Integers
VarInt ::= INTEGER
VarUInt ::= INTEGER (0..MAX)
-- Binary Floating Point (IEEE 754)
Float32 ::= REAL ( -- binary32
0 |
WITH COMPONENTS {
mantissa (-16777215..16777215), -- 23 bits + 1 sign bit
base (2),
-- Note that the exponent range in ASN.1 is given as the exponent relative to
-- the integer mantissa, i.e. mantissa * 2 ^ exponent, whereas in IEEE 754, the
-- exponent is relative to a binary fraction using the 23 fractional bits and
-- an implicit integer part of one. This is why the exponent range is offset
-- by 23, i.e. -149..104 instead of -126..127.
exponent (-149..104)
}
)
Float64 ::= REAL ( -- binary64
0 |
WITH COMPONENTS {
mantissa (-9007199254740991..9007199254740991), -- 52 bits + 1 sign bit
base (2),
-- Note the exponent range in ASN.1 is given as the exponent relative to the
-- integer mantissa, i.e. mantissa * 2 ^ exponent, whereas in IEEE 754, the
-- exponent is relative to a binary fraction using the 52 fractional bits and
-- an implicit integer part of one. This is why the exponent range is offset
-- by 53, i.e. -1075..970 instead of -1022..1023.
-- TODO: Why isn't this offset by 52 instead of 53?
exponent (-1075..970)
}
)
-- Variable-Length Data
VarBytes ::= OCTET STRING
END