GhostManSec
Server: Apache
System: Linux s323.xrea.com 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User: moonarc (17751)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //lib/python2.7/site-packages/dns/dnssec.pyo
�
�b�Wc@s9dZddlmZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddl
ZddlmZdejjfd��YZdejjfd	��YZdZd
ZdZdZd
ZdZdZdZdZdZdZdZdZ dZ!ied6ed6ed6ed6ed6ed6ed6ed6ed6ed 6ed!6ed"6e d#6e!d$6Z"e#d%�e"j$�D��Z%d&�Z&d'�Z'd(�Z(dd)�Z*dd*�Z+d+�Z,d,�Z-d-�Z.d.�Z/d/�Z0d0�Z1d1�Z2d2�Z3d3�Z4d4�Z5d5�Z6ddd6�Z7ddd7�Z8d8�Z9y:ddl:Z;ddl<Z;ddl=Z;e8Z>e7Z?e@ZAWn#eBk
r�e9Z>e9Z?eCZAnXyPddlDZDddlEZDddlFZDddlGZDe@ZHd9eIfd:��YZJWneBk
r4eCZHnXdS(;s.Common DNSSEC-related functions and constants.i����(tBytesIONi(tstring_typestUnsupportedAlgorithmcBseZdZRS(s&The DNSSEC algorithm is not supported.(t__name__t
__module__t__doc__(((s./usr/lib/python2.7/site-packages/dns/dnssec.pyR!stValidationFailurecBseZdZRS(s The DNSSEC signature is invalid.(RRR(((s./usr/lib/python2.7/site-packages/dns/dnssec.pyR&siiiiiiii
i
ii�i�i�tRSAMD5tDHtDSAtECCtRSASHA1tDSANSEC3SHA1tRSASHA1NSEC3SHA1t	RSASHA256t	RSASHA512tINDIRECTtECDSAP256SHA256tECDSAP384SHA384t
PRIVATEDNSt
PRIVATEOIDccs!|]\}}||fVqdS(N((t.0txty((s./usr/lib/python2.7/site-packages/dns/dnssec.pys	<genexpr>NscCs4tj|j��}|dkr0t|�}n|S(s:Convert text into a DNSSEC algorithm value
    @rtype: intN(t_algorithm_by_texttgettuppertNonetint(ttexttvalue((s./usr/lib/python2.7/site-packages/dns/dnssec.pytalgorithm_from_textQscCs.tj|�}|dkr*t|�}n|S(s;Convert a DNSSEC algorithm value to text
    @rtype: stringN(t_algorithm_by_valueRRtstr(RR((s./usr/lib/python2.7/site-packages/dns/dnssec.pytalgorithm_to_text[scCs&t�}|j|d|�|j�S(Ntorigin(Rtto_wiretgetvalue(trecordR#ts((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt	_to_rdataes	cCs�t||�}t|�}|jtkr>|dd>|dSd}xDtt|�d�D],}||d|d>|d|d7}q[Wt|�ddkr�||t|�dd>7}n||d?d@7}|d@SdS(	Ni����ii����iiiii��(R(t	bytearrayt	algorithmRtrangetlen(tkeyR#trdatattotalti((s./usr/lib/python2.7/site-packages/dns/dnssec.pytkey_idkscCs!|j�dkr.d}tjjd�}n>|j�dkr\d}tjjd�}ntd|��t|t�r�tjj||�}n|j	|j
�j��|j	t||��|j
�}tjdt|�|j|�|}tjjtjjtjj|dt|��S(NtSHA1itSHA256isunsupported algorithm "%s"s!HBBi(RtdnsthashthashesRt
isinstanceRtnamet	from_texttupdatetcanonicalizeR$R(tdigesttstructtpackR1R*R.t	from_wiret
rdataclasstINt	rdatatypetDSR,(R8R-R*R#tdsalgR5R<tdsrdata((s./usr/lib/python2.7/site-packages/dns/dnssec.pytmake_ds{s%!cCs�g}|j|j�}|dkr(dSt|tjj�rwy"|jtjj	tj
j�}Wq}tk
rsdSXn|}xE|D]=}|j
|j
kr�t|�|jkr�|j|�q�q�W|S(N(RtsignerRR7R4tnodetNodet
find_rdatasetR@RARBtDNSKEYtKeyErrorR*R1tkey_tagtappend(tkeystrrsigtcandidate_keysRtrdatasetR.((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_find_candidate_keys�s 

cCs|tttttfkS(N(RRR
RR(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_is_rsa�s	cCs|ttfkS(N(R	R(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_is_dsa�scCsto|ttfkS(N(t_have_ecdsaRR(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt	_is_ecdsa�scCs
|tkS(N(R(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_is_md5�scCs|ttttfkS(N(R	RRR
(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_is_sha1�s	cCs|ttfkS(N(RR(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt
_is_sha256�scCs
|tkS(N(R(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt
_is_sha384�scCs
|tkS(N(R(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt
_is_sha512�scCs�t|�rtjjd�St|�r:tjjd�St|�rWtjjd�St|�rttjjd�St|�r�tjjd�Std|��dS(NtMD5R2R3tSHA384tSHA512sunknown hash for algorithm %u(	RXR4R5R6RYRZR[R\R(R*((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt
_make_hash�sc	Cs>t|�r-ddddddddg}n�t|�rQdd	d
ddg}npt|�r�dddd
dd
ddd
g	}n@t|�r�dddd
dd
ddd
g	}ntd|��t|�}t|�j}dgd||gd|dgd|g|ddgd|g}tj	dt|�|�S(Ni*i�iHi�i
iii+iiii`iieisunknown algorithm %ui0iiis!%dB(
RXRYRZR\RR,R`tdigest_sizeR=R>(R*toidtolentdlentidbytes((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_make_algorithm_id�s!$$Hc)Cs�t|t�r-tjj|tjj�}nxEt||�D]4}|sXtd��nt|t�r~|d}|d}n|j}|}|dkr�t
j
�}n|j|kr�td��n|j|kr�td��nt
|j�}t|j�r�|j}	tjd|	dd!�\}
|	d}	|
dkrftjd|	dd!�\}
|	d}	n|	d|
!}|	|
}t|�d	}
tjjjtjjj|�tjjj|�f�}tjjj|j�f}n�t|j�r+|j}	tjd|	dd!�\}|	d}	d
|d	}|	dd!}|	d}	|	d|!}|	|}	|	d|!}|	|}	|	d|!}tjjjtjjj|�tjjj|�tjjj|�tjjj|�f�}tjd|jd�\}}tjjj|�tjjj|�f}nSt|j�rk|jtkr^t j!j"}d
}n0|jt#kr�t j!j$}d}ntd��|j}	tjjj|	d|!�}tjjj|	||d!�}t j%j&|j'|||j(�}t j)j*j+||�}t,||�}|j| }|j|}t j j-tjjj|�tjjj|��}ntd|j��|j.t/||�d �|j.|j0j1|��|j2t|�dkr�|j3|j2d�d} tjjd| �}n|j1|�}!tj4d|j5|j6|j7�}"t8|�}#xi|#D]a}$|j.|!�|j.|"�|$j1|�}%tj4dt|%��}&|j.|&�|j.|%�q?W|j9�}'t|j�r't:|j�|'}'|
d	t|'�d}(tj4dd|(dddgdg|(dg�|'}'n4t|j�s[t|j�rHntd|j��|j;|'|�r=dSq=Wtd��dS(s�Validate an RRset against a single signature rdata

    The owner name of the rrsig is assumed to be the same as the owner name
    of the rrset.

    @param rrset: The RRset to validate
    @type rrset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
    tuple
    @param rrsig: The signature rdata
    @type rrsig: dns.rrset.Rdata
    @param keys: The key dictionary.
    @type keys: a dictionary keyed by dns.name.Name with node or rdataset
    values
    @param origin: The origin to use for relative names
    @type origin: dns.name.Name or None
    @param now: The time to use when validating the signatures.  The default
    is the current time.
    @type now: int
    sunknown keyiitexpireds
not yet valids!Bs!Hiii@is!20s20si i0sunknown ECDSA curvesunknown algorithm %uit*s!HHIis!%dBi�Nsverify failure(<R7RR4R8R9trootRSRttupleRttimet
expirationt	inceptionR`R*RTR-R=tunpackR,tCryptot	PublicKeytRSAt	constructtUtiltnumbert
bytes_to_longt	signatureRUR	RWRtecdsatcurvestNIST256pRtNIST384pt
ellipticcurvetPointtcurvetorderROtVerifyingKeytfrom_public_pointtECKeyWrappert	SignatureR:R(RGt
to_digestabletlabelstsplitR>trdtypetrdclasstoriginal_ttltsortedR<Rftverify()trrsetRPROR#tnowt
candidate_keytrrnameRRR5tkeyptrtbytes_trsa_etrsa_ntkeylentpubkeytsigtttoctetstdsa_qtdsa_ptdsa_gtdsa_ytdsa_rtdsa_sR}tkey_lenRRtpointt
verifying_keytrR'tsuffixt	rrnamebuftrrfixedtrrlisttrrtrrdatatrrlenR<tpadlen((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_validate_rrsig�s�

		



	







			 !	





(c	Cst|t�r-tjj|tjj�}nt|t�rI|d}n	|j}t|t�rx|d}|d}n|j}|}|j|�}|j|�}||kr�td��nx@|D]8}yt	|||||�dSWq�tk
r�q�Xq�Wtd��dS(shValidate an RRset

    @param rrset: The RRset to validate
    @type rrset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
    tuple
    @param rrsigset: The signature RRset
    @type rrsigset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
    tuple
    @param keys: The key dictionary.
    @type keys: a dictionary keyed by dns.name.Name with node or rdataset
    values
    @param origin: The origin to use for relative names
    @type origin: dns.name.Name or None
    @param now: The time to use when validating the signatures.  The default
    is the current time.
    @type now: int
    iisowner names do not matchNsno RRSIGs validated(
R7RR4R8R9RiRjtchoose_relativityRR�(	R�trrsigsetROR#R�R�t	rrsignamet
rrsigrdatasetRP((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt	_validatexs*
	

	

cOstd��dS(Ns#DNSSEC validation requires pycrypto(tNotImplementedError(targstkwargs((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt_need_pycrypto�sR�cBseZd�Zd�ZRS(cCs||_||_dS(N(R-R�(tselfR-R�((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt__init__�s	cCs+tjjj|�}|jjj||�S(N(RoRsRtRuR-R�tverifies(R�R<R�tdiglong((s./usr/lib/python2.7/site-packages/dns/dnssec.pyR��s(RRR�R�(((s./usr/lib/python2.7/site-packages/dns/dnssec.pyR��s	(KRtioRR=Rkt
dns.exceptionR4tdns.hashtdns.nametdns.nodetdns.rdatasett	dns.rdatat
dns.rdatatypetdns.rdataclasst_compatRt	exceptiontDNSExceptionRRRRR	R
RRR
RRRRRRRRtdicttitemsR RR"R(RR1RFRSRTRURWRXRYRZR[R\R`RfR�R�R�tCrypto.PublicKey.RSARotCrypto.PublicKey.DSAtCrypto.Util.numbertvalidatetvalidate_rrsigtTruet_have_pycryptotImportErrortFalseRwtecdsa.ecdsatecdsa.ellipticcurvet
ecdsa.keysRVtobjectR�(((s./usr/lib/python2.7/site-packages/dns/dnssec.pyt<module>s�
	
	
												�0