o )%ae@sddlZddlmZdZdZdZdZdZdZd Z d eBZ d eBZ d Z d Z dZGdddeZdedefddZdededefddZdS)N) int_to_bytes c@seZdZddZddZddZddZd d Zd efd d Z d e fddZ d e j edffddZded dfddZded dfddZded e jdfddZd efddZdS) DERReadercCst||_dSN) memoryviewdata)selfrr:/usr/lib/python3/dist-packages/cryptography/hazmat/_der.py__init__"zDERReader.__init__cCs|Srrrrrr __enter__%szDERReader.__enter__cCs|dur |dSdSr) check_empty)rexc_type exc_valuetbrrr__exit__(s zDERReader.__exit__cCst|jdkSNr)lenrrrrris_empty,rzDERReader.is_emptycCs|stddS)Nz Invalid DER input: trailing data)r! ValueErrorrrrrr/szDERReader.check_emptyreturncCs4t|jdkr td|jd}|jdd|_|S)N$Invalid DER input: insufficient datarr rr")rretrrr read_byte3s  zDERReader.read_bytecCs8t|j|kr td|jd|}|j|d|_|S)Nr%r&)rnr'rrr read_bytes:s zDERReader.read_bytescCs|}|d@dkrtd|}|d@dkr|}n/|dM}|dkr'tdd}t|D]}|dK}||O}|dkrAtdq-|dkrJtd||}|t|fS) Nz-Invalid DER input: unexpected high tag numberrrz?Invalid DER input: indefinite length form is not allowed in DERz3Invalid DER input: length was not minimally-encoded)r(r"ranger*r)rtag length_bytelengthibodyrrrread_any_elementAs4      zDERReader.read_any_element expected_tagcCs |\}}||krtd|S)Nz!Invalid DER input: unexpected tag)r4r")rr5r/r3rrr read_elementes zDERReader.read_elementcCs2| ||WdS1swYdSr)r6rr5rrrread_single_elementks$zDERReader.read_single_elementcCs*t|jdkr|jd|kr||SdSr)r rr6r7rrrread_optional_elementos zDERReader.read_optional_elementcCsvt|jdkr td|jd}|d@dkrtdt|jdkr4|jd}|dkr4|d@dkr4tdt|jdS)Nrz)Invalid DER input: empty integer contentsrz'Negative DER integers are not supportedr$z0Invalid DER input: integer not minimally-encodedbig)r rr"int from_bytes)rfirstsecondrrr as_integervs   zDERReader.as_integerN)__name__ __module__ __qualname__rrrr!rr;r(rr*typingTupler4r6r8Optionalr9r?rrrrr!s"$ rxr#cCs<t|ts td|dkrtd|dd}t||S)NzValue must be an integerrz#Negative integers are not supportedr-r$) isinstancer;r" bit_lengthr)rFr)rrrencode_der_integers  rIr/childrencGs~d}|D]}|t|7}qt|gg}|dkr |t|gnt|}|tdt|Bg||||d|S)Nrr)r bytesappendrextendjoin)r/rJr1childchunks length_bytesrrr encode_ders    rS)rCcryptography.utilsr CONSTRUCTEDCONTEXT_SPECIFICINTEGER BIT_STRING OCTET_STRINGNULLOBJECT_IDENTIFIERSEQUENCESETPRINTABLE_STRINGUTC_TIMEGENERALIZED_TIMEobjectrr;rLrIrSrrrrs"  f