Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

der: add EncodingRules enum #1321

Merged
merged 1 commit into from
Jan 9, 2024
Merged

der: add EncodingRules enum #1321

merged 1 commit into from
Jan 9, 2024

Conversation

tarcieri
Copy link
Member

@tarcieri tarcieri commented Jan 9, 2024

Adds an enum with Ber and Der (default) variants which can be used to selectively allow a limited number of BER productions when decoding certain BER-based security-oriented formats, e.g. CMS, PKCS#8.

Currently this doesn't actually do anything, however the goal is to address #779, where we can't decode CMS generated by Apple tooling.

PR #810 is an example of how the rules could be relaxed to support IndefiniteLengths.

Adds an enum with `Ber` and `Der` (default) variants which can be used
to selectively allow a limited number of BER productions when decoding
certain BER-based security-oriented formats, e.g. CMS, PKCS#8.

Currently this doesn't actually do anything, however the goal is to
address #779, where we can't decode CMS generated by Apple tooling.

PR #810 is an example of how the rules could be relaxed to support
`IndefiniteLength`s.
@tarcieri tarcieri merged commit fb8db96 into master Jan 9, 2024
101 checks passed
@tarcieri tarcieri deleted the der/encoding-rules branch January 9, 2024 04:07
@tarcieri tarcieri mentioned this pull request Apr 12, 2024
dwhjames added a commit to dwhjames/RustCrypto-formats that referenced this pull request Feb 9, 2025
Issue RustCrypto#779 has had some process (PR RustCrypto#1321). However, this helper
function is intended to provide an escape hatch for limited support
of some cases of BER, while not waiting for general support or needing
API changes.

Specifically, the transcoding of occurrences of the constructed,
indefinite-length method into the constructed, definite-length method.
This is likely sufficient to address the examples in the wild, reported
in Issue RustCrypto#779 and elsewhere.

The goal is not to support all possible violations of DER that are still
following valid BER. Examples are non-canonical encodings of lengths
(which would require an alternative `Length`), or constructed string
types (which could be handled by further work on this function, but
usage may not be well motivated).
dwhjames added a commit to dwhjames/RustCrypto-formats that referenced this pull request Feb 9, 2025
Issue RustCrypto#779 has had some process (PR RustCrypto#1321). However, this helper
function is intended to provide an escape hatch for limited support
of some cases of BER, while not waiting for general support or needing
API changes.

Specifically, the transcoding of occurrences of the constructed,
indefinite-length method into the constructed, definite-length method.
This is likely sufficient to address the examples in the wild, reported
in Issue RustCrypto#779 and elsewhere.

The goal is not to support all possible violations of DER that are still
following valid BER. Examples are non-canonical encodings of lengths
(which would require an alternative `Length`), or constructed string
types (which could be handled by further work on this function, but
usage may not be well motivated).
dwhjames added a commit to dwhjames/RustCrypto-formats that referenced this pull request Feb 9, 2025
Issue RustCrypto#779 has had some progress (PR RustCrypto#1321). However, this helper
function is intended to provide an escape hatch for limited support
of some cases of BER, while not waiting for general support or needing
API changes.

Specifically, the transcoding of occurrences of the constructed,
indefinite-length method into the constructed, definite-length method.
This is likely sufficient to address the examples in the wild, reported
in Issue RustCrypto#779 and elsewhere.

The goal is not to support all possible violations of DER that are still
following valid BER. Examples are non-canonical encodings of lengths
(which would require an alternative `Length`), or constructed string
types (which could be handled by further work on this function, but
usage may not be well motivated).
dwhjames added a commit to dwhjames/RustCrypto-formats that referenced this pull request Feb 9, 2025
Issue RustCrypto#779 has had some progress (PR RustCrypto#1321). However, this helper
function is intended to provide an escape hatch for limited support
of some cases of BER, while not waiting for general support or needing
API changes.

Specifically, the transcoding of occurrences of the constructed,
indefinite-length method into the constructed, definite-length method.
This is likely sufficient to address the examples in the wild, reported
in Issue RustCrypto#779 and elsewhere.

The goal is not to support all possible violations of DER that are still
following valid BER. Examples are non-canonical encodings of lengths
(which would require an alternative `Length`), or constructed string
types (which could be handled by further work on this function, but
usage may not be well motivated).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant