-
Notifications
You must be signed in to change notification settings - Fork 172
add support for RFC5914 structs. #356
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
add support for RFC5914 structs. #356
Conversation
… definitions to work around macro-related issues. Notes on non-use of macros
In trust_anchor_format.rs
- Choice was not used on TrustAnchorChoice owing to types not available in Asn1Type enum
- Sequence was not used on TrustAnchorInfo owing to lack of DecodeValue required by context_specific
error[E0277]: the trait bound `TrustAnchorInfo<'a>: DecodeValue<'_>` is not satisfied
--> x509/src/trust_anchor_format.rs:295:22
|
295 | .context_specific::<TrustAnchorInfo<'a>>(TAC_TA_INFO_TAG, TagMode::Explicit)?;
| ^^^^^^^^^^^^^^^^ the trait `DecodeValue<'_>` is not implemented for `TrustAnchorInfo<'a>`
|
note: required by a bound in `Decoder::<'a>::context_specific`
--> der/src/decoder.rs:172:12
|
172 | T: DecodeValue<'a> + FixedTag,
| ^^^^^^^^^^^^^^^ required by this bound in `Decoder::<'a>::context_specific`
- Sequence was not used on CertPathControls to use decode_implicit for each field (trailing bits were left using the default decoder even with mods to Certificate and NameConstraints)
In certificate.rs
- Sequence was not used on Certificate due to same issue as described above for TrustAnchorInfo (i.e., tension between use of DecodeValue and Decodable)
- Sequence was not used on NameConstraints for the same DecodeValue vs Decodable issue.
… Decodable (RustCrypto#375) and remove custom impls on Certificate, NameConstraints and CertPathControls.
|
@carl-wallace can you rebase? I just want to make sure #377 didn't cause any breakages |
|
I pushed changes to use x501 in the trust_anchor_format file. |
| impl<'a> DecodeValue<'a> for TrustAnchorInfo<'a> { | ||
| fn decode_value(decoder: &mut Decoder<'a>, _length: Length) -> der::Result<Self> { | ||
| let version = match decoder.decode()? { | ||
| Some(v) => Some(v), | ||
| _ => Some(1), | ||
| }; | ||
|
|
||
| let pub_key = decoder.decode()?; | ||
| let key_id = decoder.decode()?; | ||
| let ta_title = decoder.decode()?; | ||
| let cert_path = decoder.decode()?; | ||
| let extensions = | ||
| ::der::asn1::ContextSpecific::decode_explicit(decoder, ::der::TagNumber::N1)? | ||
| .map(|cs| cs.value); | ||
| let ta_title_lang_tag = | ||
| ::der::asn1::ContextSpecific::decode_explicit(decoder, ::der::TagNumber::N2)? | ||
| .map(|cs| cs.value); | ||
| Ok(Self { | ||
| version, | ||
| pub_key, | ||
| key_id, | ||
| ta_title, | ||
| cert_path, | ||
| extensions, | ||
| ta_title_lang_tag, | ||
| }) | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this one use the proc macro now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess you left a note here:
Sequencewas not used onTrustAnchorInfoowing to lack ofDecodeValuerequired bycontext_specific
It should probably work now.
|
In the interest of moving things along I'm going to go ahead and merge this. Perhaps @npmccallum can take a look at converting them to a proc macro in #363. |
make adjusts to some prior structure definitions to work around macro-related issues. Notes on non-use of macros
In trust_anchor_format.rs
error[E0277]: the trait bound
TrustAnchorInfo<'a>: DecodeValue<'_>is not satisfied--> x509/src/trust_anchor_format.rs:295:22
|
295 | .context_specific::<TrustAnchorInfo<'a>>(TAC_TA_INFO_TAG, TagMode::Explicit)?;
| ^^^^^^^^^^^^^^^^ the trait
DecodeValue<'_>is not implemented forTrustAnchorInfo<'a>|
note: required by a bound in
Decoder::<'a>::context_specific--> der/src/decoder.rs:172:12
|
172 | T: DecodeValue<'a> + FixedTag,
| ^^^^^^^^^^^^^^^ required by this bound in
Decoder::<'a>::context_specificIn certificate.rs