You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As part of #1491, I needed to implement decoding for the custom extension I wrote for #1490. I encounted several problems:
I need to validate the data present inside the extension. In particular, for the YubiKey PIV attestation policy extension I need to verify that the PIN and touch policies are one of the expected values. However, der::Decode::decode returns der::Result, and AFAICT there is no way to return a type-specific error code in der::Error. None of the existing der::ErrorKinds appear to be usable for this (or at least, I cannot figure out whether returning one of them will cause unexpected side-effects).
Attempting to even construct der::Error was confusing, until I stumbled upon der::Reader::error. The der::Decode trait (as well as der::Error) should document that errors should be created using decoder.error() (or whatever new method is added for defining user errors). It is also unclear to me whether the position that this method uses will be correct, if I am doing post-read validation (in which case I think the position will be one after the actual problem position).
The text was updated successfully, but these errors were encountered:
The Decode trait now has an associated Error type, which would be my suggested way of handling any errors which aren't a direct result of DER decoding (i.e. define a custom error type and do whatever you want error handling-wise).
That's a new addition which may not be properly reflected in the documentation yet.
Regarding speculative decoding and computing the exact position for that, you can use the peek functionality to look ahead without actually modifying the cursor in the buffer, if that's helpful.
Otherwise, Error::new can be used to construct a new der::Error with whatever computed position you'd like.
As part of #1491, I needed to implement decoding for the custom extension I wrote for #1490. I encounted several problems:
der::Decode::decode
returnsder::Result
, and AFAICT there is no way to return a type-specific error code inder::Error
. None of the existingder::ErrorKind
s appear to be usable for this (or at least, I cannot figure out whether returning one of them will cause unexpected side-effects).der::Error
was confusing, until I stumbled uponder::Reader::error
. Theder::Decode
trait (as well asder::Error
) should document that errors should be created usingdecoder.error()
(or whatever new method is added for defining user errors). It is also unclear to me whether the position that this method uses will be correct, if I am doing post-read validation (in which case I think the position will be one after the actual problem position).The text was updated successfully, but these errors were encountered: