ó õùPc@sÒddlmZmZddlZddlTdddddd gZddd „ƒYZdefd „ƒYZdefd „ƒYZdefd „ƒYZ defd„ƒYZ d efd„ƒYZ d„Z dS(iÿÿÿÿ(t long_to_bytest bytes_to_longN(t*t DerObjectt DerIntegertDerOctetStringtDerNullt DerSequencet DerObjectIdcBsƒeZdZidd6dd6dd6dd6d d 6d d 6Zded ƒd„Zd„Zd„Zd„Z d„Z dd„Z RS(sBase class for defining a single DER object. Instantiate this class ONLY when you have to decode a DER element. i0tSEQUENCEis BIT STRINGitINTEGERis OCTET STRINGitNULLisOBJECT IDENTIFIERtcCsjt|ƒs|dkr$||_n9t|ƒdkrHt|ƒ|_n|jj|ƒ|_||_dS(sðInitialize the DER object according to a specific type. The ASN.1 type is either specified as the ASN.1 string (e.g. 'SEQUENCE'), directly with its numerical tag or with no tag at all (None).iN(tisInttNonettypeTagtlentordttypeTagstgettpayload(tselftASN1TypeR((s+..\python\site-packages\Crypto\Util\asn1.pyt__init__'s  cCs|j||jkS(N(RR(RR((s+..\python\site-packages\Crypto\Util\asn1.pytisType6scCs:|dkr0t|ƒ}tt|ƒdƒ|St|ƒS(s•Return a byte string that encodes the given payload length (in bytes) in a format suitable for a DER length tag (L). ii€(RtbchrR(Rt payloadLentencoding((s+..\python\site-packages\Crypto\Util\asn1.pyt _lengthOctets9s  cCs*t|jƒ|jt|jƒƒ|jS(s6Return a complete DER element, fully encoded as a TLV.(RRRRR(R((s+..\python\site-packages\Crypto\Util\asn1.pytencodeBscCs~t||ƒ}|dkr*||dfSt||d|d|d@!ƒ}|dkrhtdƒ‚n||d|d@fS(s…Given a (part of a) DER element, and an index to the first byte of a DER length tag (L), return a tuple with the payload size, and the index of the first byte of the such payload (V). Raises a ValueError exception if the DER length is invalid. Raises an IndexError exception if the DER element is too short. iisNot a DER length tag.(tbordRt ValueError(Rtidxtdertlengtht payloadLength((s+..\python\site-packages\Crypto\Util\asn1.pyt _decodeLenFs # icCs¸yt|dƒ|_|jd@dkr8tdƒ‚n|jd|ƒ\}}|r{t|ƒ||kr{tdƒ‚n||||!|_Wntk r¯tdƒ‚nX||S(sÎDecode a complete DER element, and re-initializes this object with it. @param derEle A complete DER element. It must start with a DER T tag. @param noLeftOvers Indicate whether it is acceptable to complete the parsing of the DER element and find that not all bytes in derEle have been used. @return Index of the first unused byte in the given DER element. Raises a ValueError exception in case of parsing errors. Raises an IndexError exception if the DER element is too short. iisUnsupported DER tagisNot a DER structuresNot a valid DER SEQUENCE.(RRRR$RRt IndexError(RtderElet noLeftOversR"R ((s+..\python\site-packages\Crypto\Util\asn1.pytdecodeVs N( t__name__t __module__t__doc__RRtbRRRRR$R((((s+..\python\site-packages\Crypto\Util\asn1.pyRs   cBs)eZdd„Zd„Zdd„ZRS(icCstj|dƒ||_dS(s|Class to model an INTEGER DER element. Limitation: only non-negative values are supported. R N(RRtvalue(RR-((s+..\python\site-packages\Crypto\Util\asn1.pyRqscCsQt|jƒ|_t|jdƒdkrDtdƒ|j|_ntj|ƒS(s>Return a complete INTEGER DER element, fully encoded as a TLV.ii(RR-RRRRR(R((s+..\python\site-packages\Crypto\Util\asn1.pyRyscCsxtj|||ƒ}|j|jdkr:tdƒ‚nt|jdƒdkrbtdƒ‚nt|jƒ|_|S(sDecode a complete INTEGER DER element, and re-initializes this object with it. @param derEle A complete INTEGER DER element. It must start with a DER INTEGER tag. @param noLeftOvers Indicate whether it is acceptable to complete the parsing of the DER element and find that not all bytes in derEle have been used. @return Index of the first unused byte in the given DER element. Raises a ValueError exception if the DER element is not a valid non-negative INTEGER. Raises an IndexError exception if the DER element is too short. R sNot a DER INTEGER.iisNegative INTEGER.( RR(RRRRRRR-(RR&R't tlvLength((s+..\python\site-packages\Crypto\Util\asn1.pyR(€s(R)R*RRR((((s+..\python\site-packages\Crypto\Util\asn1.pyRps  cBs‰eZdZdd„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd d„ZRS(sClass to model a SEQUENCE DER element. This object behave like a dynamic Python sequence. Sub-elements that are INTEGERs, look like Python integers. Any other sub-element is a binary string encoded as the complete DER sub-element (TLV). cCs5tj|dƒ|dkr(g|_n ||_dS(sKInitialize the SEQUENCE DER object. Always empty initially.R N(RRRt_seq(RtstartSeq((s+..\python\site-packages\Crypto\Util\asn1.pyR s  cCs|j|=dS(N(R/(Rtn((s+..\python\site-packages\Crypto\Util\asn1.pyt __delitem__«scCs |j|S(N(R/(RR1((s+..\python\site-packages\Crypto\Util\asn1.pyt __getitem__­scCs||j|¹scCsttt|jƒƒS(s=Return the number of items in this sequence that are numbers.(RtfilterR R/(R((s+..\python\site-packages\Crypto\Util\asn1.pythasInts¼scCs"|jo!|jƒt|jƒkS(s6Return True if all items in this sequence are numbers.(R/RAR(R((s+..\python\site-packages\Crypto\Util\asn1.pyt hasOnlyIntsÀscCs‚tdƒ|_xc|jD]X}y|j|7_Wqy|jt|ƒjƒ7_Wqqtdƒ‚qqXqXqWtj|ƒS(s;Return the DER encoding for the ASN.1 SEQUENCE, containing the non-negative integers and longs added to this object. Limitation: Raises a ValueError exception if it some elements in the sequence are neither Python integers nor complete DER INTEGERs. R s&Trying to DER encode an unknown object(R,RR/RRRR(RR?((s+..\python\site-packages\Crypto\Util\asn1.pyRÄsic Cs3g|_ytj|||ƒ}|j|jdkrFtdƒ‚nd}x¿|t|jƒkr t|j|ƒ}||jdkrÃt ƒ}||j|j|ƒ7}|jj |j ƒqO|j |d|jƒ\}}|jj |j|||!ƒ||}qOWWnt k r.tdƒ‚nX|S(sŸDecode a complete SEQUENCE DER element, and re-initializes this object with it. @param derEle A complete SEQUENCE DER element. It must start with a DER SEQUENCE tag. @param noLeftOvers Indicate whether it is acceptable to complete the parsing of the DER element and find that not all bytes in derEle have been used. @return Index of the first unused byte in the given DER element. DER INTEGERs are decoded into Python integers. Any other DER element is not decoded. Its validity is not checked. Raises a ValueError exception if the DER element is not a valid DER SEQUENCE. Raises an IndexError exception if the DER element is too short. R sNot a DER SEQUENCE.iR isNot a valid DER SEQUENCE.(R/RR(RRRRRRRR>R-R$R%( RR&R'R.R Rt newIntegertitemLentitemIdx((s+..\python\site-packages\Crypto\Util\asn1.pyR(Ös$   N(R)R*R+RRR2R3R5R9R:R<R=R>RARBRR((((s+..\python\site-packages\Crypto\Util\asn1.pyR—s           cBs&eZedƒd„Zdd„ZRS(R cCstj|dƒ||_dS(Ns OCTET STRING(RRR(RR-((s+..\python\site-packages\Crypto\Util\asn1.pyRÿsicCs4tj||ƒ}|jdƒs0tdƒ‚n|S(Ns OCTET STRINGsNot a valid OCTET STRING.(RR(RR(RR&R'tp((s+..\python\site-packages\Crypto\Util\asn1.pyR(s(R)R*R,RR((((s+..\python\site-packages\Crypto\Util\asn1.pyRþscBseZd„ZRS(cCstj|dƒdS(NR (RR(R((s+..\python\site-packages\Crypto\Util\asn1.pyR s(R)R*R(((s+..\python\site-packages\Crypto\Util\asn1.pyR scBseZd„Zdd„ZRS(cCstj|dƒdS(NsOBJECT IDENTIFIER(RR(R((s+..\python\site-packages\Crypto\Util\asn1.pyRsicCs4tj||ƒ}|jdƒs0tdƒ‚n|S(NsOBJECT IDENTIFIERsNot a valid OBJECT IDENTIFIER.(RR(RR(RR&R'RF((s+..\python\site-packages\Crypto\Util\asn1.pyR(s(R)R*RR((((s+..\python\site-packages\Crypto\Util\asn1.pyR s cCs-d}y||7}Wntk r(dSXdS(Nii(t TypeError(txttest((s+..\python\site-packages\Crypto\Util\asn1.pyR s  (( tCrypto.Util.numberRRtsystCrypto.Util.py3compatt__all__RRRRRRR (((s+..\python\site-packages\Crypto\Util\asn1.pyts  S'g