pycrate icon indicating copy to clipboard operation
pycrate copied to clipboard

[asn1dir] AlgorithmIdentifier.from_ber() -- AttributeError: 'SEQ' object has no attribute '_tagc'

Open James-E-A opened this issue 2 years ago • 1 comments

Am I doing something wrong, or does pycrate_asn1dir.X509_2016.AuthenticationFramework.AlgorithmIdentifier not currently work as a stand-alone parser?

from pycrate_asn1dir import X509_2016
# init_modules: different OID objects ... with same OID value ...

AlgId = X509_2016.AuthenticationFramework.AlgorithmIdentifier

AlgId.from_ber(bytes.fromhex('300d06092a864886f70d01010b0500'))
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "...\.venv\Lib\site-packages\pycrate_asn1rt\asnobj.py", line 1618, in from_ber
#     self._from_ber(char, TLV)
#   File "...\.venv\Lib\site-packages\pycrate_asn1rt\asnobj.py", line 1587, in _from_ber
#     for t in self._tagc:
#              ^^^^^^^^^^
# AttributeError: 'SEQ' object has no attribute '_tagc'. Did you mean: '_tag'?

I'm getting this error on CPython 3.11.6, pycrate 0.7.0

The test input should be valid; I lifted it from offset 583 of this file.

James-E-A avatar Dec 06 '23 15:12 James-E-A

The object you are using here AlgorithmIdentifier is a parameterized one, which is not usable for encoding / decoding. This is the reason you get an error here.

Please note a new repository has been setup, including new fixes. This repo will keep being maintained : https://github.com/pycrate-org/pycrate. It includes an explicit exception for your case, to indicate parameterized objects are not to be used for encoding / decoding. In addition, a tiny tool pycrate_certdecode.py has been added to help check whole x.509 certificate.

mitshell avatar Mar 01 '24 09:03 mitshell