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

WITH COMPONENTS issue: AssertionError or compiler error during asn1 compilation of IEEE1609 #8

Open
majorcs opened this issue Apr 19, 2024 · 4 comments
Assignees
Labels
bug Something isn't working

Comments

@majorcs
Copy link

majorcs commented Apr 19, 2024

I'm trying to compile the IEEE 1609.2.1 ASN with pycrate. The ASN files could be downloaded from here:
IEEE Download

The compilation cycle fails with an assertion. Could it be a bug or it is the limitation of pycrate?

$ pycrate_asn1compile.py -i asn1/1609.2.1/Ieee1609Dot2Asn/ -i asn1/1609.2.1/ -o python/1609_2
[proc] [asn1/1609.2.1/Ieee1609Dot2BaseTypes.asn] module Ieee1609Dot2BaseTypes (oid: [1, 3, 111, 2, 1609, 2, 1, 2, 2, 3]): 74 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1AcaEeInterface.asn] module Ieee1609Dot2Dot1AcaEeInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 1, 2, 3]): 3 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1AcaMaInterface.asn] module Ieee1609Dot2Dot1AcaMaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 3, 2, 1]): 2 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Peer2Peer.asn] module Ieee1609Dot2Peer2Peer (oid: [1, 3, 111, 2, 1609, 2, 2, 1, 2, 2]): 3 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2CrlSsp.asn] module Ieee1609Dot2CrlSsp (oid: [1, 3, 111, 2, 1609, 2, 3, 3, 2, 1]): 4 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1EeMaInterface.asn] module Ieee1609Dot2Dot1EeMaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 10, 2, 1]): 2 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Crl.asn] module Ieee1609Dot2Crl (oid: [1, 3, 111, 2, 1609, 2, 3, 3, 1]): 3 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1LaMaInterface.asn] module Ieee1609Dot2Dot1LaMaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 12, 2, 1]): 2 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1MaRaInterface.asn] module Ieee1609Dot2Dot1MaRaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 14, 2, 1]): 2 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1Acpc.asn] module Ieee1609Dot2Dot1Acpc (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 18, 3, 1]): 11 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2CrlBaseTypes.asn] module Ieee1609Dot2CrlBaseTypes (oid: [1, 3, 111, 2, 1609, 2, 3, 2, 3, 1]): 17 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1Protocol.asn] module Ieee1609Dot2Dot1Protocol (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 17, 3, 1]): 62 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1CamRaInterface.asn] module Ieee1609Dot2Dot1CamRaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 19, 2, 2]): 5 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1AcaRaInterface.asn] module Ieee1609Dot2Dot1AcaRaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 4, 3, 1]): 9 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1CertManagement.asn] module Ieee1609Dot2Dot1CertManagement (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 7, 3, 1]): 22 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2HeaderInfoExtensionBase.asn] module Ieee1609Dot2HeaderInfoExtensionBase (oid: [1, 3, 111, 2, 1609, 2, 1, 3, 2, 1]): 7 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2.asn] module Ieee1609Dot2 (oid: [1, 3, 111, 2, 1609, 2, 1, 1, 2, 5]): 42 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1AcaLaInterface.asn] module Ieee1609Dot2Dot1AcaLaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 2, 2, 1]): 2 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1EeRaInterface.asn] module Ieee1609Dot2Dot1EeRaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 11, 3, 1]): 9 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1EcaEeInterface.asn] module Ieee1609Dot2Dot1EcaEeInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 9, 3, 1]): 4 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Dot1LaRaInterface.asn] module Ieee1609Dot2Dot1LaRaInterface (oid: [1, 3, 111, 2, 1609, 2, 255, 1, 1, 13, 2, 1]): 2 ASN.1 assignments found
--- compilation cycle ---
INF: Ieee1609Dot2Dot1Protocol.ScmsPdu.content, unprocessed CONSTRAINED BY constraint
Traceback (most recent call last):
  File "/home/major/Downloads/asn1-2024-draft/pycrate/bin/pycrate_asn1compile.py", line 264, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/bin/pycrate_asn1compile.py", line 215, in main
    compile_text(txt, **ckw)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnproc.py", line 254, in compile_text
    compile_modules(remain)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnproc.py", line 942, in compile_modules
    ObjNew = asnobj_compile(Obj)
             ^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnproc.py", line 876, in asnobj_compile
    text = Obj.parse_def(Obj._text_def)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 1716, in parse_def
    rest = self._parse_const(text)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 3976, in _parse_const
    self._parse_const_withcomps(const)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 4284, in _parse_const_withcomps
    self.__parse_const_withcomps_comp(rc, const_comp)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 4376, in __parse_const_withcomps_comp
    comp = Comp._parse_const(comp)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 3964, in _parse_const
    self._parse_const_val(const)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 4033, in _parse_const_val
    self.parse_set(const['text'])
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 5844, in parse_set
    rest = self._parse_set_comp(rv, val, dom)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 6040, in _parse_set_comp
    text = ObjProxy.parse_def(text)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 1716, in parse_def
    rest = self._parse_const(text)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 3970, in _parse_const
    self._parse_const_size(const)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 4148, in _parse_const_size
    ObjProxy.parse_set(text)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 5838, in parse_set
    self.__parse_set_comp_path_config(val, dom)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 5910, in __parse_set_comp_path_config
    _path_trunc(2)
  File "/home/major/Downloads/asn1-2024-draft/pycrate/lib/python3.11/site-packages/pycrate_asn1c/asnobj.py", line 191, in _path_trunc
    assert( len(GLOBAL.COMP['NS']['path'][-1]) >= depth )
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
@mitshell mitshell self-assigned this Apr 19, 2024
@mitshell
Copy link
Member

In my recollection, these specs rely heavily on WITH COMPONENTS, which is not perfectly supported within pycrate. This will need some more investigation...

@mitshell
Copy link
Member

When trying to reproduce, I get a different error:

pycrate_asn1c.err.ASN1ProcTextErr: Ieee1609Dot2Data-Unsecured: missing mandatory components in WITH COMPONENTS

That means pycrate is not happy when the WITH COMPONENTS sub-select CHOICE components, which seems legit according to ASN.1. This confirms this overall pattern is not properly implemented in pycrate. The code lies here:

def _parse_const_withcomps(self, const):

This will need a dive into the code for proper support...

@mitshell mitshell added the bug Something isn't working label Apr 21, 2024
@mitshell mitshell changed the title AssertionError during asn1 compilation WITH COMPONENTS issue: AssertionError or compiler error during asn1 compilation of IEEE1609 Apr 21, 2024
@majorcs
Copy link
Author

majorcs commented Apr 22, 2024

I think I made some changes to the ASN1 and didn't revert it fully, so this is why I got a different error message.

I also tried to compile only the 1609.2 part which is the 1609.2.1 built on

$ pycrate_asn1compile.py -i asn1/1609.2.1/Ieee1609Dot2Asn/ -o python/1609_2
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2BaseTypes.asn] module Ieee1609Dot2BaseTypes (oid: [1, 3, 111, 2, 1609, 2, 1, 2, 2, 3]): 74 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2Peer2Peer.asn] module Ieee1609Dot2Peer2Peer (oid: [1, 3, 111, 2, 1609, 2, 2, 1, 2, 2]): 3 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2CrlSsp.asn] module Ieee1609Dot2CrlSsp (oid: [1, 3, 111, 2, 1609, 2, 3, 3, 2, 1]): 4 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2Crl.asn] module Ieee1609Dot2Crl (oid: [1, 3, 111, 2, 1609, 2, 3, 3, 1]): 3 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2CrlBaseTypes.asn] module Ieee1609Dot2CrlBaseTypes (oid: [1, 3, 111, 2, 1609, 2, 3, 2, 3, 1]): 17 ASN.1 assignments found
[proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2HeaderInfoExtensionBase.asn] module Ieee1609Dot2HeaderInfoExtensionBase (oid: [1, 3, 111, 2, 1609, 2, 1, 3, 2, 1]): 7 ASN.1 assignments found
Traceback (most recent call last):
  File "/usr/bin/pycrate_asn1compile.py", line 264, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/bin/pycrate_asn1compile.py", line 215, in main
    compile_text(txt, **ckw)
  File "/home/major/.local/lib/python3.11/site-packages/pycrate_asn1c/asnproc.py", line 234, in compile_text
    mod_names.extend( _compile_text_pass(t, with_order, **kwargs) )
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/major/.local/lib/python3.11/site-packages/pycrate_asn1c/asnproc.py", line 389, in _compile_text_pass
    raise(ASN1ProcTextErr('[proc]{0} module {1}: duplicate object, {2}'\
pycrate_asn1c.err.ASN1ProcTextErr: [proc] [asn1/1609.2.1/Ieee1609Dot2Asn/Ieee1609Dot2.asn] module Ieee1609Dot2: duplicate object, IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION

@mitshell
Copy link
Member

I don't have time currently to dive in the ASN.1 compiler code, so I'll keep this issue on hold unless someone volunteers to give it a try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants