3 l_U@sddlmZmZmZddlZddlmZmZdZdZ dZ dZ dZ d Z d Zd eBZd eBZd ZdZdZGdddeZddZddZdS))absolute_importdivisionprint_functionN)int_from_bytes int_to_bytes c@sleZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS) DERReadercCst||_dS)N) memoryviewdata)selfrr/usr/lib64/python3.6/_der.py__init__$szDERReader.__init__cCs|S)Nr)rrrr __enter__'szDERReader.__enter__cCs|dkr|jdS)N) check_empty)rexc_type exc_valuetbrrr__exit__*szDERReader.__exit__cCst|jdkS)Nr)lenr)rrrris_empty.szDERReader.is_emptycCs|jstddS)Nz Invalid DER input: trailing data)r! ValueError)rrrrr1szDERReader.check_emptycCs8t|jdkrtdtj|jd}|jdd|_|S)Nz$Invalid DER input: insufficient datar)r rr"six indexbytes)rretrrr read_byte5s zDERReader.read_bytecCs8t|j|krtd|jd|}|j|d|_|S)Nz$Invalid DER input: insufficient data)r rr")rnr&rrr read_bytes<s zDERReader.read_bytescCs|j}|d@dkrtd|j}|d@dkr6|}nb|dM}|dkrNtdd}x4t|D](}|dK}||jO}|dkr\tdq\W|dkrtd|j|}|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_elementCs,     zDERReader.read_any_elementcCs |j\}}||krtd|S)Nz!Invalid DER input: unexpected tag)r2r")r expected_tagr.r1rrr read_elementgs zDERReader.read_elementc Cs| |j|SQRXdS)N)r4)rr3rrrread_single_elementmszDERReader.read_single_elementcCs.t|jdkr*tj|jd|kr*|j|SdS)Nr)r rr$r%r4)rr3rrrread_optional_elementqs  zDERReader.read_optional_elementcCs|t|jdkrtdtj|jd}|d@dkr8tdt|jdkrptj|jd}|dkrp|d@dkrptdt|jdS)Nrz)Invalid DER input: empty integer contentsrz'Negative DER integers are not supportedr#z0Invalid DER input: integer not minimally-encodedZbig)r rr"r$r%r)rfirstsecondrrr as_integervs zDERReader.as_integerN)__name__ __module__ __qualname__rrrr!rr'r)r2r4r5r6r9rrrrr#s$rcCs>t|tjstd|dkr$td|jdd}t||S)NzValue must be an integerrz#Negative integers are not supportedr,r#) isinstancer$Z integer_typesr" bit_lengthr)xr(rrrencode_der_integers  r@cGsd}x|D]}|t|7}q Wtj|g}|dkrD|jtj|n*t|}|jtjdt|B|j||j|dj|S)Nrr)r r$Zint2byteappendrextendjoin)r.Zchildrenr/ZchildZchunksZ length_bytesrrr encode_ders    rE)Z __future__rrrr$Zcryptography.utilsrrZ CONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ BIT_STRINGZ OCTET_STRINGZNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEobjectrr@rErrrrs" d