Code Monkey home page Code Monkey logo

Comments (17)

reox avatar reox commented on June 9, 2024 1

I tested again with version 0.3.4 directly from pypi and it works fine! looks like I had pyasn1 half installed or something.
Thanks a lot for fixing!

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Thank you for rising this!

It looks like a bug to me. I am able to reproduce it. Hold on... ;)

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Alright, this should be fixed in master by now (commit 9441a1c). I'd appreciate you giving it a try.

from pyasn1.

etingof avatar etingof commented on June 9, 2024

If your certificate is actually encapsulated into a PKCS#7 container (as variable name suggests), may be you'd better decode (or try decoding) the PKCS#7 container along with the X.509 certificate being stored inside?

If it is not PKCS#7, why do you need to remove part of the serialised data manually? That does not sound right. ;-)

from pyasn1.

reox avatar reox commented on June 9, 2024

Thanks for the quick fix! I'll test it tomorrow!

regarding the pkcs7: These are android/jar signing certificates. They are inside the APK/JAR file and contain the public key of the developer. The ASN1JS tool says that the OID 1.2.840.113549.1.7.2 is signedData(PKCS #7), so this might be actually right.
What I did in the code is quite sloppy (but works :D): The certificate is always the 4th item in the sequence, thus I take message[1][3]. If I do this, there is still the A0 82 02 D0 in front...
But I'll look at the container!

from pyasn1.

reox avatar reox commented on June 9, 2024

This is interesting! I checked it now with the latest master, and it seems it removes now the tag in front, thus this is all I need to do:

message, _ = decode(pkcs7message)
cert = encode(message[1][3])
certificate = x509.load_der_x509_certificate(cert, default_backend())

Was this actually a bug, that the tag would stay there?

from pyasn1.

reox avatar reox commented on June 9, 2024

I also tested the SignedData but it does not work. I had a closer look and it appears that it is not SignedData, but some custom format, which is partly explained here: http://securitypad.blogspot.co.at/2014/12/jar-signature-block-file-format.html

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Could you give me a simple reproducer that shows the difference in the decoding (?) result across pyasn1 versions please? I'm not sure I understand where the problem is yet.

Thanks!

from pyasn1.

reox avatar reox commented on June 9, 2024

Sure!
Here is an example:

import binascii
from pyasn1.codec.der.decoder import decode
from pyasn1.codec.der.encoder import encode

from cryptography import x509
from cryptography.hazmat.backends import default_backend

certhex  = b"3082039506092a864886f70d010702a082038630820382020101310b300906052b0e03021a0500300b06092a864886f70d010701a08202d0308202cc30820289a003020102020466eda548300b06072a8648ce380403050030363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e06035504031307736961766173683020170d3136303132353037323533305a180f32303534303532353037323533305a30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100e9b46a500aabcbb7b42e93477db9f8ac7c819eadd392f4fa2dd7c10973c399d00d45796052bfb376567a518cfe1432a0f845e4be75aa76462335bf7f84b6c634bb6c884b6ae2e7b6f1cc78c3be6f98b65980832c40d9da3d2b047cba98b24c877b2ace7908b0af56fd62367df355e011a0482c9b8751c373a8d131076cd01421a321301f301d0603551d0e04160414eeac32e5f08781bb6f2f392814951b328868ae4c300b06072a8648ce3804030500033000302d0215009209eb12e966aafae281620e7da9743774d7846302144bf36a9634967ca47639bbc10712571b036e13d531818e30818b020101303e30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368020466eda548300906052b0e03021a0500300b06072a8648ce3804010500042e302c02145de23a86f0c2e45dcad93ef8cab675ec56a6ff4b021404c1a9f7f791631ae00d61fe8ae23f502c33fe84"

pkcs7message = binascii.unhexlify(certhex)

message, _ = decode(pkcs7message)
cert = encode(message[1][3])

res = binascii.hexlify(cert)
print(res)

# pyasn1 0.2.1:
output_021 = b'a08202d0308202cc30820289a003020102020466eda548300b06072a8648ce380403050030363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e06035504031307736961766173683020170d3136303132353037323533305a180f32303534303532353037323533305a30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100e9b46a500aabcbb7b42e93477db9f8ac7c819eadd392f4fa2dd7c10973c399d00d45796052bfb376567a518cfe1432a0f845e4be75aa76462335bf7f84b6c634bb6c884b6ae2e7b6f1cc78c3be6f98b65980832c40d9da3d2b047cba98b24c877b2ace7908b0af56fd62367df355e011a0482c9b8751c373a8d131076cd01421a321301f301d0603551d0e04160414eeac32e5f08781bb6f2f392814951b328868ae4c300b06072a8648ce3804030500033000302d0215009209eb12e966aafae281620e7da9743774d7846302144bf36a9634967ca47639bbc10712571b036e13d5'
# pyasn1 0.3.4:
output_034 = b'308202ca30820287a003020102020466eda548300b06072a8648ce380403050030363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e06035504031307736961766173683020170d3136303132353037323533305a180f32303534303532353037323533305a30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100e9b46a500aabcbb7b42e93477db9f8ac7c819eadd392f4fa2dd7c10973c399d00d45796052bfb376567a518cfe1432a0f845e4be75aa76462335bf7f84b6c634bb6c884b6ae2e7b6f1cc78c3be6f98b65980832c40d9da3d2b047cba98b24c877b2ace7908b0af56fd62367df355e011a0482c9b8751c373a8d131076cd01421301f301d0603551d0e04160414eeac32e5f08781bb6f2f392814951b328868ae4c300b06072a8648ce3804030500033000302d0215009209eb12e966aafae281620e7da9743774d7846302144bf36a9634967ca47639bbc10712571b036e13d5'

if res == output_034:
    print("looks like pyasn1 0.3.4")
    # but this one will fail:
    certificate = x509.load_der_x509_certificate(cert, default_backend())
else:

    if res == output_021:
        print("at least we know how to transform")

    if cert[0] == 0xA0:
        l = cert[1]
        # Python2 compliance
        if not isinstance(l, int):
            l = ord(l)
        cert = cert[2 + (l & 0x7F) if l & 0x80 > 1 else 2:]

        certificate = x509.load_der_x509_certificate(cert, default_backend())

        if binascii.hexlify(cert) == output_034:
            print("Now everything matches again.")
        else:
            print("That did not worked.")
            print(binascii.hexlify(cert))
            print(output_034)

I also found out that the output is slightly different now and pycryptography fails to load the certificate.

from pyasn1.

etingof avatar etingof commented on June 9, 2024

So far I am unable to reproduce the output_021 blob with pyasn1-0.2.1 and Python 2.7/3.6 on Linux. Is your environment anyhow different? Can you still reproduce it with the script above?

Now I am trying to locate the X.509 certificate in the printout of the parsed blob. I am not sure it is strictly PKCS#7 as mentioned by the link you referred to. If you need to extract the certificate out of the data, I believe it's better to do with the parsed structure compared to peeking at blob...

This is what message.prettyPrint() returns:

Sequence:
 field-0=1.2.840.113549.1.7.2
 field-1=Sequence:
  field-0=1
  field-1=SetOf:
   Sequence:
    field-0=1.3.14.3.2.26
    field-1=

  field-2=SequenceOf:
   1.2.840.113549.1.7.1
  field-3=Sequence:
   field-0=Sequence:
    field-0=2
    field-1=1726850376
    field-2=Sequence:
     field-0=1.2.840.10040.4.3
     field-1=

    field-3=Sequence:
     field-0=SetOf:
      Sequence:
       field-0=2.5.4.6
       field-1=siavash

     field-1=SetOf:
      Sequence:
       field-0=2.5.4.10
       field-1=siavash

     field-2=SetOf:
      Sequence:
       field-0=2.5.4.3
       field-1=siavash


    field-4=Sequence:
     field-0=160125072530Z
     field-1=20540525072530Z

    field-5=Sequence:
     field-0=SetOf:
      Sequence:
       field-0=2.5.4.6
       field-1=siavash

     field-1=SetOf:
      Sequence:
       field-0=2.5.4.10
       field-1=siavash

     field-2=SetOf:
      Sequence:
       field-0=2.5.4.3
       field-1=siavash


    field-6=Sequence:
     field-0=Sequence:
      field-0=1.2.840.10040.4.1
      field-1=Sequence:
       field-0=178011905478542266528237562450159990145232156369120674273274450314442865788737020770612695252123463079567156784778466449970650770920727857050009668388144034129745221171818506047231150039301079959358067395348717066319802262019714966524135060945913707594956514672855690606794135837542707371727429551343320695239
       field-1=864205495604807476120572616017955259175325408501
       field-2=174068207532402095185811980123523436538604490794561350978495831040599953488455823147851597408940950725307797094915759492368300574252438761037084473467180148876118103083043754985190983472601550494691329488083395492313850000361646482644608492304078721818959999056496097769368017749273708962006689187956744210730


     field-1='000000101000000110000001000000001110100110110100011010100101000000001010101010111100101110110111101101000010111010010011010001110111110110111001111110001010110001111100100000011001111010101101110100111001001011110100111110100010110111010111110000010000100101110011110000111001100111010000000011010100010101111001011000000101001010111111101100110111011001010110011110100101000110001100111111100001010000110010101000001111100001000101111001001011111001110101101010100111011001000110001000110011010110111111011111111000010010110110110001100011010010111011011011001000100001001011011010101110001011100111101101101111000111001100011110001100001110111110011011111001100010110110010110011000000010000011001011000100000011011001110110100011110100101011000001000111110010111010100110001011001001001100100001110111101100101010110011100111100100001000101100001010111101010110111111010110001000110110011111011111001101010101111000000001000110100000010010000010110010011011100001110101000111000011011100111010100011010001001100010000011101101100110100000001010000100001'

    field-7=SequenceOf:
     Sequence:
      field-0=2.5.29.14
      field-1=0x0414eeac32e5f08781bb6f2f392814951b328868ae4c


   field-1=Sequence:
    field-0=1.2.840.10040.4.3
    field-1=

   field-2='0011000000101101000000100001010100000000100100100000100111101011000100101110100101100110101010101111101011100010100000010110001000001110011111011010100101110100001101110111010011010111100001000110001100000010000101000100101111110011011010101001011000110100100101100111110010100100011101100011100110111011110000010000011100010010010101110001101100000011011011100001001111010101'

  field-4=SetOf:
   Sequence:
    field-0=1
    field-1=Sequence:
     field-0=Sequence:
      field-0=SetOf:
       Sequence:
        field-0=2.5.4.6
        field-1=siavash

      field-1=SetOf:
       Sequence:
        field-0=2.5.4.10
        field-1=siavash

      field-2=SetOf:
       Sequence:
        field-0=2.5.4.3
        field-1=siavash


     field-1=1726850376

    field-2=Sequence:
     field-0=1.3.14.3.2.26
     field-1=

    field-3=Sequence:
     field-0=1.2.840.10040.4.1
     field-1=

    field-4=0x302c02145de23a86f0c2e45dcad93ef8cab675ec56a6ff4b021404c1a9f7f791631ae00d61fe8ae23f502c33fe84

from pyasn1.

reox avatar reox commented on June 9, 2024

Yes, the format is quite weird... And there is not much docoumentation out there, even this format is used in million of APK files and JAR's.
I put the thing into the asn1js thing and marked the part red, which is actually the certificate:
2017-09-01-160745_2560x1440_scrot
Hope that helps!

When I extract it using message[1][3] I'll get the red part plus A0 82 02 D0 in front (which is the tag plus the length of it's content).
So the result of message[1][3] should be a08202d0308202cc30820289a003020102020466eda548300b06072a8648ce380403050030363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e06035504031307736961766173683020170d3136303132353037323533305a180f32303534303532353037323533305a30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100e9b46a500aabcbb7b42e93477db9f8ac7c819eadd392f4fa2dd7c10973c399d00d45796052bfb376567a518cfe1432a0f845e4be75aa76462335bf7f84b6c634bb6c884b6ae2e7b6f1cc78c3be6f98b65980832c40d9da3d2b047cba98b24c877b2ace7908b0af56fd62367df355e011a0482c9b8751c373a8d131076cd01421a321301f301d0603551d0e04160414eeac32e5f08781bb6f2f392814951b328868ae4c300b06072a8648ce3804030500033000302d0215009209eb12e966aafae281620e7da9743774d7846302144bf36a9634967ca47639bbc10712571b036e13d5
Then I remove the tag in front manually and should get the correct result.

I can still reproduce it on my machine using Python 2.7.13 and pyasn1 (0.1.9) and pyasn1-modules (0.0.7).

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Thank you for the detailed report!

It now looks to me that there is a bug in pyasn1 0.3.3 which reveals when you decode explicitly tagged item and not passing ASN.1 schema to the decoder.

I am looking into it...

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Just to let you know that the encoding bug you run into is fixed by now in the master branch.

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Here is how you could strip the unwanted tag off the certificate:

...
message, _ = decode(pkcs7message)

# strip the non-standard EXPLICIT tag at the outermost SEQUENCE 
# by re-creating the Sequence object and copying over the contents
tagged_cert = message[1][3]
untagged_cert = univ.Sequence()
for idx, component in enumerate(tagged_cert.values()):
    untagged_cert[idx] = component

# print out the structure and tags of the certs
print(tagged_cert.prettyPrintType())
print(untagged_cert.prettyPrintType())

# canonical X.509 cert structure, just for reference
# from pyasn1_modules import rfc2459
print(rfc2459.Certificate().prettyPrintType())

ber_cert = encode(cert)

from pyasn1.

reox avatar reox commented on June 9, 2024

I tested it but it does not work:

import binascii
from pyasn1.codec.der.decoder import decode
from pyasn1.codec.der.encoder import encode
from pyasn1.type import univ

from cryptography import x509
from cryptography.hazmat.backends import default_backend

certhex  = b"3082039506092a864886f70d010702a082038630820382020101310b300906052b0e03021a0500300b06092a864886f70d010701a08202d0308202cc30820289a003020102020466eda548300b06072a8648ce380403050030363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e06035504031307736961766173683020170d3136303132353037323533305a180f32303534303532353037323533305a30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368308201b83082012c06072a8648ce3804013082011f02818100fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c70215009760508f15230bccb292b982a2eb840bf0581cf502818100f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a0381850002818100e9b46a500aabcbb7b42e93477db9f8ac7c819eadd392f4fa2dd7c10973c399d00d45796052bfb376567a518cfe1432a0f845e4be75aa76462335bf7f84b6c634bb6c884b6ae2e7b6f1cc78c3be6f98b65980832c40d9da3d2b047cba98b24c877b2ace7908b0af56fd62367df355e011a0482c9b8751c373a8d131076cd01421a321301f301d0603551d0e04160414eeac32e5f08781bb6f2f392814951b328868ae4c300b06072a8648ce3804030500033000302d0215009209eb12e966aafae281620e7da9743774d7846302144bf36a9634967ca47639bbc10712571b036e13d531818e30818b020101303e30363110300e06035504061307736961766173683110300e060355040a1307736961766173683110300e0603550403130773696176617368020466eda548300906052b0e03021a0500300b06072a8648ce3804010500042e302c02145de23a86f0c2e45dcad93ef8cab675ec56a6ff4b021404c1a9f7f791631ae00d61fe8ae23f502c33fe84"

pkcs7message = binascii.unhexlify(certhex)

message, _ = decode(pkcs7message)

print(message.prettyPrintType())

gives me

[0:32:16] -> Sequence {

}

I used the master 4d9db10

from pyasn1.

etingof avatar etingof commented on June 9, 2024

Could you please make sure you are testing against 4d9db10? The script above that I cut&pasted into Python2/3 prompt seems to work like this:

[0:32:16] -> Sequence {
 "field-0" = [0:0:6] -> ObjectIdentifier
 "field-1" = [0:32:16]+[128:32:0] -> Sequence {
  "field-0" = [0:0:2] -> Integer
  "field-1" = [0:32:17] -> SetOf {

  }
  "field-2" = [0:32:16] -> SequenceOf {

  }
  "field-3" = [0:32:16]+[128:32:0] -> Sequence {
   "field-0" = [0:32:16] -> Sequence {
    "field-0" = [0:0:2]+[128:32:0] -> Integer
    "field-1" = [0:0:2] -> Integer
    "field-2" = [0:32:16] -> Sequence {
     "field-0" = [0:0:6] -> ObjectIdentifier
     "field-1" = [0:0:5] -> Null

    }
    "field-3" = [0:32:16] -> Sequence {
     "field-0" = [0:32:17] -> SetOf {

     }
     "field-1" = [0:32:17] -> SetOf {

     }
     "field-2" = [0:32:17] -> SetOf {

     }

    }
    "field-4" = [0:32:16] -> Sequence {
     "field-0" = [0:0:23] -> UTCTime
     "field-1" = [0:0:24] -> GeneralizedTime

    }
    "field-5" = [0:32:16] -> Sequence {
     "field-0" = [0:32:17] -> SetOf {

     }
     "field-1" = [0:32:17] -> SetOf {

     }
     "field-2" = [0:32:17] -> SetOf {

     }

    }
    "field-6" = [0:32:16] -> Sequence {
     "field-0" = [0:32:16] -> Sequence {
      "field-0" = [0:0:6] -> ObjectIdentifier
      "field-1" = [0:32:16] -> Sequence {
       "field-0" = [0:0:2] -> Integer
       "field-1" = [0:0:2] -> Integer
       "field-2" = [0:0:2] -> Integer

      }

     }
     "field-1" = [0:0:3] -> BitString

    }
    "field-7" = [0:32:16]+[128:32:3] -> SequenceOf {

    }

   }
   "field-1" = [0:32:16] -> Sequence {
    "field-0" = [0:0:6] -> ObjectIdentifier
    "field-1" = [0:0:5] -> Null

   }
   "field-2" = [0:0:3] -> BitString

  }
  "field-4" = [0:32:17] -> SetOf {

  }

 }

}

And the .prettyPrint() reports populated schema like this:

Sequence:
 field-0=1.2.840.113549.1.7.2
 field-1=Sequence:
  field-0=1
  field-1=SetOf:
   Sequence:
    field-0=1.3.14.3.2.26
    field-1=

  field-2=SequenceOf:
   1.2.840.113549.1.7.1
  field-3=Sequence:
   field-0=Sequence:
    field-0=2
    field-1=1726850376
    field-2=Sequence:
     field-0=1.2.840.10040.4.3
     field-1=

    field-3=Sequence:
     field-0=SetOf:
      Sequence:
       field-0=2.5.4.6
       field-1=siavash

     field-1=SetOf:
      Sequence:
       field-0=2.5.4.10
       field-1=siavash

     field-2=SetOf:
      Sequence:
       field-0=2.5.4.3
       field-1=siavash


    field-4=Sequence:
     field-0=160125072530Z
     field-1=20540525072530Z

    field-5=Sequence:
     field-0=SetOf:
      Sequence:
       field-0=2.5.4.6
       field-1=siavash

     field-1=SetOf:
      Sequence:
       field-0=2.5.4.10
       field-1=siavash

     field-2=SetOf:
      Sequence:
       field-0=2.5.4.3
       field-1=siavash


    field-6=Sequence:
     field-0=Sequence:
      field-0=1.2.840.10040.4.1
      field-1=Sequence:
       field-0=178011905478542266528237562450159990145232156369120674273274450314442865788737020770612695252123463079567156784778466449970650770920727857050009668388144034129745221171818506047231150039301079959358067395348717066319802262019714966524135060945913707594956514672855690606794135837542707371727429551343320695239
       field-1=864205495604807476120572616017955259175325408501
       field-2=174068207532402095185811980123523436538604490794561350978495831040599953488455823147851597408940950725307797094915759492368300574252438761037084473467180148876118103083043754985190983472601550494691329488083395492313850000361646482644608492304078721818959999056496097769368017749273708962006689187956744210730


     field-1='000000101000000110000001000000001110100110110100011010100101000000001010101010111100101110110111101101000010111010010011010001110111110110111001111110001010110001111100100000011001111010101101110100111001001011110100111110100010110111010111110000010000100101110011110000111001100111010000000011010100010101111001011000000101001010111111101100110111011001010110011110100101000110001100111111100001010000110010101000001111100001000101111001001011111001110101101010100111011001000110001000110011010110111111011111111000010010110110110001100011010010111011011011001000100001001011011010101110001011100111101101101111000111001100011110001100001110111110011011111001100010110110010110011000000010000011001011000100000011011001110110100011110100101011000001000111110010111010100110001011001001001100100001110111101100101010110011100111100100001000101100001010111101010110111111010110001000110110011111011111001101010101111000000001000110100000010010000010110010011011100001110101000111000011011100111010100011010001001100010000011101101100110100000001010000100001'

    field-7=SequenceOf:
     Sequence:
      field-0=2.5.29.14
      field-1=0x0414eeac32e5f08781bb6f2f392814951b328868ae4c


   field-1=Sequence:
    field-0=1.2.840.10040.4.3
    field-1=

   field-2='0011000000101101000000100001010100000000100100100000100111101011000100101110100101100110101010101111101011100010100000010110001000001110011111011010100101110100001101110111010011010111100001000110001100000010000101000100101111110011011010101001011000110100100101100111110010100100011101100011100110111011110000010000011100010010010101110001101100000011011011100001001111010101'

  field-4=SetOf:
   Sequence:
    field-0=1
    field-1=Sequence:
     field-0=Sequence:
      field-0=SetOf:
       Sequence:
        field-0=2.5.4.6
        field-1=siavash

      field-1=SetOf:
       Sequence:
        field-0=2.5.4.10
        field-1=siavash

      field-2=SetOf:
       Sequence:
        field-0=2.5.4.3
        field-1=siavash


     field-1=1726850376

    field-2=Sequence:
     field-0=1.3.14.3.2.26
     field-1=

    field-3=Sequence:
     field-0=1.2.840.10040.4.1
     field-1=

    field-4=0x302c02145de23a86f0c2e45dcad93ef8cab675ec56a6ff4b021404c1a9f7f791631ae00d61fe8ae23f502c33fe84

from pyasn1.

etingof avatar etingof commented on June 9, 2024

BTW, 0.3.4 is out on PyPi

from pyasn1.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.