Breaking change:
-
BerObject: convert BmpString data to
&[u8]to properly handle UTF-16 data (#76) -
Upgrade
asn1-rsto 0.7.0 -
Rename feature "bitvec" to "as_bitvec" and update to bitvec 1.0 (#73)
-
Serialize: fix possible wrong encoding of length if exactly 128 (#77)
- Daniel McCarney
- Upgrade
asn1-rsto 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_visiblestringforVisibleString(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-rsto 0.5.0 (new features only: only increment minor number)
- Upgrade
asn1-rsto 0.4.0 This causes an increment of the major number, becauseasn1-rsis 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:
BerSizehas been renamed toLengthBerClasshas been renamed toClassBerTaghas been renamed toTag- Header fields are now private. Getters/setters have been added, and must be used to access/modify fields
BerObjectContent:
Unknownvariant now contains anAnyobject, with both the header and object contentPrivatevariant has been merged intoUnknownBmpString,GeneralString,GraphicString,T61String,VideotexStringandObjectDescriptorare now decodedGeneralizedTimeandUtcTimeare now decoded
BerError:
- Add error types
UnexpectedClassandUnexpectedTag - Store expected and found item in error to help debugging
- Keep
InvalidTagfor tags with invalid form (length/encoding/etc.) - Use
displaydocforBerError - Parsing an indefinite length in DER now raises
IndefiniteLengthUnexpected - Error: when a DER constraint fails, store constraint identifier
DER:
DerClassandDerTaghave been deprecated. UseClassandTaginstead.DerObjectHeaderhas been deprecated. UseHeaderinstead.
Oid:
- The
Oidobject is now the same asasn1_rs::Oid(simply reexported) - Remove dependency on crate
der-oid-macro
Misc:
ber_read_element_content_asnow requires a non-zerodepth, or it will raise aBerMaxDeptherror (previously, 0 allowed one level of parsing)- crate
rusticata-macrosis 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_parsercrate name and path (#46) - Simplify
der-oid-macro, do not depend onnom - Fix
INTEGERsigned/unsigned parsing (#49) - Change
as_bigint()andas_uint()to return aResult - Remove deprecated functions
- Added support for
no_std(#50) - Make
BerErrorCopy + Clone (#51) - Add feature 'bitvec' for
.as_bitslice()methods
- Remove all macros
- @yoguorui for
no_stdsupport - @SergioBenitez for
BerErrortraits - @lilyball for
INTEGERparsing
- 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
InvalidTageverywhere if tag is not expected - Integer parsing functions now all return
IntegerTooLargeinstead ofMapRes - Ensure Indefinite length form is only used in BER constructed objects
- Add new error
StringInvalidCharsetand update string parsing methods - Add methods
parse_ber_sliceandparse_der_sliceto 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_vandparse_ber_set_of_vaccept 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_u64andas_u32methods for BerObjects with contents of typeBerObjectContent::BitString. - Implement the
VideotexString,ObjectDescriptorGraphicString, andVisibleStringstring types. (Non-breaking changes) - Correctly decode
BMPStringas UTF-16 instead of UTF-8 when printing. (Non-breaking change) - Turn
UTCTimeandGeneralizedTimeinto a&strinstead of&[u8], as they inherit fromVisibleStringwhich 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_recursiveandparse_der_recursive, allowing to specify maximum recursion depth when parsing - The string types
IA5String,NumericString,PrintableStringandUTF8Stringdo now only parse if the characters are valid. as_str()was added toBerObjectContentto obtain a&strfor the types above.as_slice()works as before.- Implement
Errortrait forBerError - Add method to extract raw tag from header
BerObjectHeadernow has a lifetime and araw_tagfieldBerObjectnow has araw_tagfield- Implement
PartialEqmanually forBerObject:raw_tagis compared only if both fields provide it
- Add type
BerClass - Start adding serialization support (experimental) using the
serializefeature
- 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
Oidto achieve zero-copy. The following changed:- The
Oidstruct now has a lifetime and usesCowinternally. - The procedural macro
oid!was added. Oid::fromreturns aResultnow.- The
Oidstruct now encodes whether the oid is relative or not. - The
Debugimplementation now shows whether the oid is relative and uses the bigint feature if available. - The
Oid::itermethod now returns anOption.Oid::iter_bigintwas added. Hashis 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_u32andparse_ber_u64functions - Fix typo in description
- Add crate
BerResultandDerResulttypes - Use crate result types, remove uneeded imports
- Crates using
der-parserdo not need to importnomorrusticata-macrosanymore - 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_u32andparse_der_u64to quickly parse integers - Remove
Oid::from_vec,Oid::fromdoes the same - Enforce constraints on DER booleans
- Add
BitStringObjectto 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] EXPLICITor[x] IMPLICITtagged 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_definedbecause it allows using macros - Rename
DerObject::new_inttoDerObject::from_int_slice - Rename
Oid::to_hextoOid::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.