3 lá˜_Uã@sˆddlmZmZmZddlZddlmZmZdZdZ dZ dZ dZ d Z d Zd eBZd eBZd ZdZdZGdd„deƒZdd„Zdd„ZdS)é)Úabsolute_importÚdivisionÚprint_functionN)Úint_from_bytesÚ int_to_bytesé é€ééééééééééc@sleZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)Ú DERReadercCst|ƒ|_dS)N)Ú memoryviewÚdata)Úselfr©rú/usr/lib64/python3.6/_der.pyÚ__init__$szDERReader.__init__cCs|S)Nr)rrrrÚ __enter__'szDERReader.__enter__cCs|dkr|jƒdS)N)Ú check_empty)rÚexc_typeÚ exc_valueÚtbrrrÚ__exit__*szDERReader.__exit__cCst|jƒdkS)Nr)Úlenr)rrrrÚis_empty.szDERReader.is_emptycCs|jƒstdƒ‚dS)Nz Invalid DER input: trailing data)r!Ú ValueError)rrrrr1szDERReader.check_emptycCs8t|jƒdkrtdƒ‚tj|jdƒ}|jdd…|_|S)Néz$Invalid DER input: insufficient datar)r rr"ÚsixÚ indexbytes)rÚretrrrÚ read_byte5s zDERReader.read_bytecCs8t|jƒ|krtdƒ‚|jd|…}|j|d…|_|S)Nz$Invalid DER input: insufficient data)r rr")rÚnr&rrrÚ read_bytes<s zDERReader.read_bytescCs®|jƒ}|d@dkrtdƒ‚|jƒ}|d@dkr6|}nb|dM}|dkrNtdƒ‚d}x4t|ƒD](}|dK}||jƒO}|dkr\tdƒ‚q\W|dkr˜tdƒ‚|j|ƒ}|t|ƒfS) Néz-Invalid DER input: unexpected high tag numberrréz?Invalid DER input: indefinite length form is not allowed in DERéz3Invalid DER input: length was not minimally-encoded)r'r"Úranger)r)rÚtagZ length_byteÚlengthÚiÚbodyrrrÚread_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)rr3rrrÚread_single_elementmszDERReader.read_single_elementcCs.t|jƒdkr*tj|jdƒ|kr*|j|ƒSdS)Nr)r rr$r%r4)rr3rrrÚread_optional_elementqs  zDERReader.read_optional_elementcCs|t|jƒdkrtdƒ‚tj|jdƒ}|d@dkr8tdƒ‚t|jƒdkrptj|jdƒ}|dkrp|d@dkrptdƒ‚t|jdƒS)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)rÚfirstÚsecondrrrÚ as_integervs zDERReader.as_integerN)Ú__name__Ú __module__Ú __qualname__rrrr!rr'r)r2r4r5r6r9rrrrr#s$rcCs>t|tjƒstdƒ‚|dkr$tdƒ‚|jƒdd}t||ƒS)NzValue must be an integerrz#Negative integers are not supportedr,r#)Ú isinstancer$Z integer_typesr"Ú bit_lengthr)Úxr(rrrÚencode_der_integer‡s  r@cGs‚d}x|D]}|t|ƒ7}q Wtj|ƒg}|dkrD|jtj|ƒƒn*t|ƒ}|jtjdt|ƒBƒƒ|j|ƒ|j|ƒdj|ƒS)Nrró)r r$Zint2byteÚappendrÚextendÚjoin)r.Zchildrenr/ZchildZchunksZ length_bytesrrrÚ encode_der�s    rE)Z __future__rrrr$Zcryptography.utilsrrZ CONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ BIT_STRINGZ OCTET_STRINGZNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEÚobjectrr@rErrrrÚs" d