U q`e@sddlZddlmZdZdZdZdZdZdZd Z d eBZ d eBZ d Z d Z dZGdddeZeedddZeeedddZdS)N) int_to_bytes c@seZdZddZddZddZddZd d Zed d d Z e d ddZ e j edfd ddZeddddZeddddZee jddddZed ddZdS) DERReadercCst||_dSN) memoryviewdata)selfrr?/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/_der.py__init__"szDERReader.__init__cCs|Srrrrrr __enter__%szDERReader.__enter__cCs|dkr|dSr) check_empty)rexc_type exc_valuetbrrr__exit__(szDERReader.__exit__cCst|jdkSNr)lenrrrrris_empty,szDERReader.is_emptycCs|stddS)Nz Invalid DER input: trailing data)r ValueErrorrrrrr/szDERReader.check_empty)returncCs4t|jdkrtd|jd}|jdd|_|S)N$Invalid DER input: insufficient datarrrr!)rretrrr read_byte3s  zDERReader.read_bytecCs8t|j|krtd|jd|}|j|d|_|S)Nr$r%)rnr&rrr read_bytes:s zDERReader.read_bytescCs|}|d@dkrtd|}|d@dkr6|}n^|dM}|dkrNtdd}t|D](}|dK}||O}|dkrZtdqZ|dkrtd||}|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)rtagZ length_bytelengthibodyrrrread_any_elementAs2     zDERReader.read_any_element) expected_tagr"cCs |\}}||krtd|S)Nz!Invalid DER input: unexpected tag)r2r!)rr3r.r1rrr read_elementes zDERReader.read_elementc Cs&|||W5QRSQRXdSr)r4rr3rrrread_single_elementkszDERReader.read_single_elementcCs*t|jdkr&|jd|kr&||SdSr)rrr4r5rrrread_optional_elementos zDERReader.read_optional_elementcCsvt|jdkrtd|jd}|d@dkr4tdt|jdkrh|jd}|dkrh|d@dkrhtdt|jdS)Nrz)Invalid DER input: empty integer contentsrz'Negative DER integers are not supportedr#z0Invalid DER input: integer not minimally-encodedbig)rrr!int from_bytes)rfirstsecondrrr as_integervs   zDERReader.as_integerN)__name__ __module__ __qualname__rrrr rr9r'rr)typingTupler2r4r6Optionalr7r=rrrrr!s$ r)xr"cCs<t|tstd|dkr"td|dd}t||S)NzValue must be an integerrz#Negative integers are not supportedr,r#) isinstancer9r! bit_lengthr)rDr(rrrencode_der_integers  rG)r.childrenr"cGs~d}|D]}|t|7}qt|gg}|dkr@|t|gn*t|}|tdt|Bg||||d|S)Nrr)rbytesappendrextendjoin)r.rHr/childchunksZ length_bytesrrr encode_ders   rP)rAZcryptography.utilsrZ CONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ BIT_STRINGZ OCTET_STRINGZNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEobjectrr9rJrGrPrrrrs  f