- Upgrade
asn1-rs
to 0.6.0 - Set MSRV to 1.63.0
- Update hex-literal to 0.4.0
- Implement
BerObject::try_from(Any)
(#67)
- Fix parser name to
parse_der_visiblestring
forVisibleString
(Closes #64). Keep previous function for compatibility (mark it as deprecated). - Fix clippy warnings (rustc 1.67.1)
- Update test-case from 2.0 to 3.0
- Upgrade
asn1-rs
to 0.5.0 (new features only: only increment minor number)
- Upgrade
asn1-rs
to 0.4.0 This causes an increment of the major number, becauseasn1-rs
is re-exported
This release marks the beginning of the merge with the asn1-rs
crate. This will break things.
However, this is necessary, because the asn1-rs
crate is much cleaner and supports more types
and features (like serialization, custom derive, etc.).
Ultimately, this crate will become a frontend to asn1-rs
, that will be optional: crate users can
switch to asn1-rs
and use it directly.
MSRV: The minimum supported rust version is now 1.53.
BerObjectHeader
:
BerSize
has been renamed toLength
BerClass
has been renamed toClass
BerTag
has been renamed toTag
- Header fields are now private. Getters/setters have been added, and must be used to access/modify fields
BerObjectContent
:
Unknown
variant now contains anAny
object, with both the header and object contentPrivate
variant has been merged intoUnknown
BmpString
,GeneralString
,GraphicString
,T61String
,VideotexString
andObjectDescriptor
are now decodedGeneralizedTime
andUtcTime
are now decoded
BerError
:
- Add error types
UnexpectedClass
andUnexpectedTag
- Store expected and found item in error to help debugging
- Keep
InvalidTag
for tags with invalid form (length/encoding/etc.) - Use
displaydoc
forBerError
- Parsing an indefinite length in DER now raises
IndefiniteLengthUnexpected
- Error: when a DER constraint fails, store constraint identifier
DER
:
DerClass
andDerTag
have been deprecated. UseClass
andTag
instead.DerObjectHeader
has been deprecated. UseHeader
instead.
Oid
:
- The
Oid
object is now the same asasn1_rs::Oid
(simply reexported) - Remove dependency on crate
der-oid-macro
Misc:
ber_read_element_content_as
now requires a non-zerodepth
, or it will raise aBerMaxDepth
error (previously, 0 allowed one level of parsing)- crate
rusticata-macros
is now re-exported (#55)
- @lilyball
- @erikmarkmartin
This release has several major changes:
- upgrade to nom 7
- add support for
no_std
- remove all macros
- update MSRV to 1.48
- Do not attempt to parse PRIVATE object contents (closes #48)
- BER: raise error if using Indefinite length and not constructed
- Fix
oid!
macro to be independant ofder_parser
crate name and path (#46) - Simplify
der-oid-macro
, do not depend onnom
- Fix
INTEGER
signed/unsigned parsing (#49) - Change
as_bigint()
andas_uint()
to return aResult
- Remove deprecated functions
- Added support for
no_std
(#50) - Make
BerError
Copy + Clone (#51) - Add feature 'bitvec' for
.as_bitslice()
methods
- Remove all macros
- @yoguorui for
no_std
support - @SergioBenitez for
BerError
traits - @lilyball for
INTEGER
parsing
- Remove dependency on proc-macro-hack (attempt to fix #36)
- Update pretty_assertions requirement from 0.6 to 0.7
- Update num-bigint to 0.4 (Closes #42)
- Fix typos in the
parse_[ber|der]_[u32|u64]
doc comments - Add documentation for BerObjectContent variants (#41)
- Fixes for clippy
See changelog entries for 5.0.0-beta1 and -beta2 for changes since 4.1
The following changes applies since 5.0.0-beta1, and do not affect 4.x
- Fix potential integer underflow in
bytes_to_u64
- Fix potential stack recursion overflow for indefinite length objects (Add maximum depth).
- Fix potential UB in bitstring_to_u64 with large input and many ignored bits
- Fix constructed objects parsing with indefinite length (do not include EOC)
- Constructed objects: use
InvalidTag
everywhere if tag is not expected - Integer parsing functions now all return
IntegerTooLarge
instead ofMapRes
- Ensure Indefinite length form is only used in BER constructed objects
- Add new error
StringInvalidCharset
and update string parsing methods - Add methods
parse_ber_slice
andparse_der_slice
to parse an expected Tag and get content as slice
- Consistency: reorder arguments or function callbacks, always set input slice as first argument
(
parse_ber_sequence_defined_g
,parse_ber_container
,parse_ber_tagged_explicit_g
, ...) - Make functions
parse_ber_sequence_of_v
andparse_ber_set_of_v
accept generic error types
- Add
parse_ber_content2
, owned version ofparse_ber_content
, which can directly be combined withparse_ber_tagged_implicit_g
- Add methods to parse DER tagged values and containers (with constraints)
- Upgrade to nom 6
- Switch all parsers to function-based parsers
- Change representation of size (new type
BerSize
) to support BER indefinite lengths - Rewrite BER/DER parsing macros to use functional parsing combinators
- The constructed bit is now tested for explicit tagged structures
- Some checks (for ex. tags in constructed objects) now return specific errors (
InvalidTag
) instead of generic errors (Verify
) - Refactor BerObject for parsing of tagged and optional values
- Add method
as_bitslice()
to BerObject - Remove Copy trait from BerObjectHeader, copy is non-trivial and should be explicit
- Fix the bug that caused OIDs longer than two subidentifiers which started by subidentifiers "0.0" ("itu-t recommenation") not to be decoded correctly
- Implement the
as_u64
andas_u32
methods for BerObjects with contents of typeBerObjectContent::BitString
. - Implement the
VideotexString
,ObjectDescriptor
GraphicString
, andVisibleString
string types. (Non-breaking changes) - Correctly decode
BMPString
as UTF-16 instead of UTF-8 when printing. (Non-breaking change) - Turn
UTCTime
andGeneralizedTime
into a&str
instead of&[u8]
, as they inherit fromVisibleString
which is a subset of ASCII. (Breaking change)
- Add combinator
parse_ber_optional
By alphabetic order of handle:
@cccs-sadugas
@nickelc
@p1-mmr
- Re-export num-bigint so crate users do not have to import it
- Add function versions to parse BER sequences/sets (#20)
- Add function versions to parse BER tagged objects (#20)
- Add generic error type to structured parsing functions
- Add function to parse a generic BER container object
- Document that trailing bytes from SEQUENCE/SET are ignored
- Deprecate functions
parse_{ber,der}_explicit
(use_optional
)
- Upgrade dependencies on num-bigint and der-oid-macro
- Add workaround to fix parsing of empty sequence or set
Attention This is a major release, with several API-breaking changes. See UPGRADING.md
for instructions.
- Jannik Schürg (oid, string verifications)
- Add functions
parse_ber_recursive
andparse_der_recursive
, allowing to specify maximum recursion depth when parsing - The string types
IA5String
,NumericString
,PrintableString
andUTF8String
do now only parse if the characters are valid. as_str()
was added toBerObjectContent
to obtain a&str
for the types above.as_slice()
works as before.- Implement
Error
trait forBerError
- Add method to extract raw tag from header
BerObjectHeader
now has a lifetime and araw_tag
fieldBerObject
now has araw_tag
field- Implement
PartialEq
manually forBerObject
:raw_tag
is compared only if both fields provide it
- Add type
BerClass
- Start adding serialization support (experimental) using the
serialize
feature
- Make header part of
BerObject
, remove duplicate fields - Maximum recursion logic has changed. Instead of providing the current depth, the argument is now the maximum possible depth.
- Change the api around
Oid
to achieve zero-copy. The following changed:- The
Oid
struct now has a lifetime and usesCow
internally. - The procedural macro
oid!
was added. Oid::from
returns aResult
now.- The
Oid
struct now encodes whether the oid is relative or not. - The
Debug
implementation now shows whether the oid is relative and uses the bigint feature if available. - The
Oid::iter
method now returns anOption
.Oid::iter_bigint
was added. Hash
is now derived forOid
.
- The
- Minimum rust version is now 1.34
- Make the pretty-printer function public
- Fix DER datestring sanity check
- CI
- add rusfmt check
- add cargo clippy
- Add
parse_ber_u32
andparse_ber_u64
functions - Fix typo in description
- Add crate
BerResult
andDerResult
types - Use crate result types, remove uneeded imports
- Crates using
der-parser
do not need to importnom
orrusticata-macros
anymore - Result types are aliases, so API is unchanged
- Crates using
- Upgrade to nom 5 (breaks API)
- New error types, now all functions use
BerError
- Handle BER/DER tags that are longer than one byte.
- Set edition to 2018
- Revert 2.0.1 release, breaks API
- Handle BER/DER tags that are longer than one byte.
- Refactor code, split BER and DER, check DER constraints
- Add recursion limit for sequences and sets
- Rustfmt
- Documentation
- Remove unused function
ber_read_element_content
- Fix OID parsing, and add support for relative OIDs
- Add FromStr trait for Oid
- Use num-bigint over num and upgrade to 0.2
- Upgrade to nom 4
- Add functions
parse_der_u32
andparse_der_u64
to quickly parse integers - Remove
Oid::from_vec
,Oid::from
does the same - Enforce constraints on DER booleans
- Add
BitStringObject
to wrap BitString objects - Mark constructed BitStrings as unsupported
- Do not try to parse application-specific data in
parse_der
- Add function
DerObject::as_u64
- Add function
DerObject::as_oid_val
- Add
parse_der_struct!
variant to check tag
- Add functions to test object class and primitive/constructed state
- Add macro
parse_der_application!
- Add macro
parse_der_tagged!
to parse[x] EXPLICIT
or[x] IMPLICIT
tagged values
- Add type GeneralString
- Add macro
parse_der_struct!
- Allow use of crate without extra use statements
- Use constants for u32 errors instead of magical numbers
- Rename
tag_of_der_content()
toDerObjectContent::tag
- Rename DerElementxxx structs to have a consistent naming scheme
- Add documentation for parsing DER sequences and sets, and fix wrong return type for sets
- Fix a lot of clippy warnings
- QA: add pragma rules (disable unsafe code, unstable features etc.)
- More documentation
- Switch license to MIT + APLv2
- Add macro parse_der_defined_m, to parse a defined sequence or set
This macro differs from
parse_der_defined
because it allows using macros - Rename
DerObject::new_int
toDerObject::from_int_slice
- Rename
Oid::to_hex
toOid::to_string
- Document more functions
- Add new feature 'bigint' to export DER integers
- OID is now a specific type
- Add new types T61String and BmpString
- Fix wrong expected tag in parse_der_set_of
- Der Integers are now represented as slices (byte arrays) since they can be larger than u64.