+
    $iU  c                   s|   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^RIH	t	H
t
 ]P                  R/^ 4      RRR^/,          tRR0RR1/tRtR2t/ RRRR03bR
R0 R3m3bRR0 R4m3bRRRR03bRR0 R5m3bRRRR03bRRR03bRR0 R6m3bRR0 R7m3bRR0 R8m3bRR0 R9m3bRR0 R:m3bRRRR03bRR0 R;m3bRR0 R<m3bR	R0 R=m3bRRR03bRRRR03/Ct ! R R 4      t ! R! R"]P&                  4      tR# t] P,                  ! R$R>4      tR% tR?R& lt ! R' R(]]
P6                  4      tR) t ! R* R+4      tR, t ! R- R.4      t R# )@    N)	alg_lists
validationZmin_ec_sizei   Z__openssl_block_sha1_signaturesZetmZ__emsZ*opensslgnutlsjava-tlsnssnss-tls
nss-pkcs12nss-pkcs12-import	nss-smimenss-smime-importsshopensshopenssh-serveropenssh-clientlibssh	libreswankerberoskrb5dnssecbindsequoiarpmrpm-sequoiac                   s8   a  ] tR t^Wt o ]3R ltR tR tRtV t	R# )ScopeSelectorc                s&   VP                  4       ;V n        pVP                  R4      '       * V n        V P                  '       d   TMVR,          p\        P
                  P                  W P                  R7       \        P
                  P                  W P                  R7       VP                  R4      '       d   V^R P                  R4      MV.V n	        \        P
                  P                  V P                  \        V P                  R7       R# )a  
Initialize a scope selector.
An example would be `ssh` in `ciphers@ssh = -NULL`.
When openssh backend will request the configuration,
it'll offer (`{'ssh', 'openssh'}`) as scopes
and the rule above will be taken into account.
Both patterns and scopes are cast to lowercase.
For more examples, refer to tests/unit/parsing/test_scope_selector.py
>>> ss = ScopeSelector('!{SSH,IPsec}')
>>> ss.matches({'ipsec', 'libreswan'})
False
>>> ss.matches({'tls', 'openssl'})
True
Z!i   NN)Zoriginal_patternZ{Z,N)lowerpattern
startswith	_positiver   scopeZillegal_charactersZcurly_bracketssplit_globsZresulting_globs
ALL_SCOPES)selfr   p   && B/usr/share/crypto-policies/python/cryptopolicies/cryptopolicies.py__init__ZScopeSelector.__init__X   s     ")0w$//44~~~G72;++A+M''LL'I,-LL,=,=a"gmmC(A3((j:>,, 	) 	H    c                s$    R V P                   : R2# )z<ScopeSelector pattern=Z>)r   r$      &r'   __str__ZScopeSelector.__str__s   s    ((8::r)   c                s  a V P                   \        8X  d   R# S Uu. uF  q"P                  4       NK  	  upoV P                  '       dO   \        ;QJ d)    V3R lV P
                   4       F  '       g   K   R# 	  R# ! V3R lV P
                   4       4      # \        ;QJ d)    V3R lV P
                   4       F  '       d   K   R# 	  R# ! V3R lV P
                   4       4      # u upi )a  
Checks whether ScopeSelector matches one of the scopes.
For more examples, refer to tests/unit/parsing/test_scope_selector.py
>>> ScopeSelector('{SSH,IPsec}').matches({'ipsec', 'libreswan'})
True
>>> ScopeSelector('!{SSH,IPsec}').matches({'ipsec', 'libreswan'})
False
Tc              3   sR   <"   T F  p\         P                  ! SV4      x  K  	  R # 5iNfnmatchZfilter.0Zgscopes   & r'   	<genexpr>(ScopeSelector.matches.<locals>.<genexpr>   s     F+Qw~~fa00+s   $'Fc              3   s\   <"   T F!  p\         P                  ! SV4      '       * x  K#  	  R # 5ir-   r.   r0   r3   r'   r4   r5      s"     F+Qw~~fa000+s   ),)r   	SCOPE_ANYr   r   anyr"   all)r$   r2   ss   &f r'   matchesZScopeSelector.matchesv   s     <<9$%+,V'')V,>>>3F$++F33F3F3F$++FFFsF$++FssFsFsF$++FFF	 -s   C&)r"   r   r   N)
__name__
__module____qualname____firstlineno__r6   r(   r,   r:   __static_attributes____classdictcell____classdict__   @r'   r   r   W   s     ( H6;G Gr)   r   c                   sB   a  ] tR t^t o Rt^t^t^t^t^t	^t
R tRtV tR# )	OperationzCAn operation that comes with the right-hand value of the directive.c                s     R V P                    2# )z
Operation.)namer*   r+   r'   __repr__ZOperation.__repr__   s    DII;''r)    N)r;   r<   r=   r>   __doc__RESETPREPENDAPPENDOMITSET_INTSET_ENUMrF   r?   r@   rA   rC   r'   rD   rD      s0     MEGFDGH( (r)   rD   c                sz  a	 R o	V P                  4       '       d}   V\        P                  9  d(   V\        9   d   \        P
                  \        V 4      3.# V\        P                  9   g   V\        9   d    \        P                  P                  V4      hMV\        9   d    \        P                  P                  V4      hV\        9   dQ   V \        V,          9  d,   \        P                  P                  W\        V,          4      h\        P                  V 3.# V P                  4       p\        ;QJ d    V	3R lV 4       F  '       g   K   RM	  RM! V	3R lV 4       4      '       gj   V UUu. uF!  p\        P                   ! W14       F  qDNK  	  K#  	  ppp\        P"                  R3.V Uu. uF  p\        P$                  V3NK  	  up,           # \&        ;QJ d    V	3R lV 4       F  '       d   K   RM	  RM! V	3R lV 4       4      '       d   . pV F  pVP)                  R4      '       d:   \        P*                  p\        P                   ! VR,          V4      RRR	1,          pMzVP-                  R4      '       d6   \        P$                  p\        P                   ! VRR	 V4      RRR	1,          pM.\        P.                  p\        P                   ! VR,          V4      pTP1                  V Uu. uF  q7V3NK  	  up4       K  	  V# \        P                  P3                  V 4      hu uppi u upi u upi )
a%  
Parses right-hand parts of the directives
into lists of operation/value pairs.
For more examples, refer to tests/unit/test_parsing.py
>>> parse_rhs('', 'cipher')
[(Operation.RESET, None)]
>>> parse_rhs('IDEA-CBC SEED-CBC', 'cipher')
[(Operation.RESET, None),
 (Operation.APPEND, 'IDEA-CBC'),
 (Operation.APPEND, 'SEED-CBC')]
>>> # 3DES-CBC gets prepended last for higher prio
>>> parse_rhs('+*DES-CBC', 'cipher')
[(Operation.PREPEND, 'DES-CBC'),
 (Operation.PREPEND, '3DES-CBC')]
>>> parse_rhs('ENFORCE', '__ems')
[(Operation.SET_ENUM, 'ENFORCE')]
c                 sV    V P                  R4      ;'       g    V P                  R 4      # )+)rO   -)r   endswith)vr+   r'   differentialZparse_rhs.<locals>.differential   s!    ||J'::1::c?:r)   c              3   4   <"   T F  pS! V4      x  K  	  R # 5ir-   rG   r1   rR   rS   r3   r'   r4   parse_rhs.<locals>.<genexpr>   s     /1|A   TFNc              3   rT   r-   rG   rU   r3   r'   r4   rV      s     
+Fq<??FrW   rO   r   r   )Zisdigitr   ALLINT_DEFAULTSrD   rM   ZintENUMSr   rulesZNonIntPropertyIntValueErrorZIntPropertyNonIntValueErrorZBadEnumValueErrorrN   r!   r7   ZglobrI   rK   r8   r   rJ   rQ   rL   ZextendZ%MixedDifferentialNonDifferentialError)
rhs	prop_nameZvaluesrR   ZxZ
operationsvalueZopZunglobrS   s
   &&       @r'   	parse_rhsr_      ss   $; {{}}IMM)i<.G&&C122	%e);"">>yII *< $"">>yII%	** &&889>y9IK K''-..YY[F3//333////#JVY^^A-I!-I!VJ//4()289&QI$$a(&9: 	;
s
+F
+sss
+F
+++
E$$&&"b	9=ddC$$%%"cr
I>ttD ^^"b	9=71Aw78  



@
@
EE' K9 8s   1'L-1L35L8
	Directivec                s   V P                  4       '       g   . # \        P                  P                  V 4       V P	                  R4      w  rVP                  4       VP                  4       r!\        P                  P                  W4       RV9   d   VP	                  R^4      MV\        3w  r4\        W#4       UUu. uF   w  rV\        W4P                  4       WVR7      NK"  	  upp# u uppi )a!  
Parses configuration lines into tuples of directives.
For more examples, refer to tests/unit/test_parsing.py
>>> parse_line('cipher@TLS = RC4* NULL')
[Directive(prop_name='cipher', scope='tls',
           operation=Operation.RESET, value=None),
 Directive(prop_name='cipher', scope='tls',
           operation=Operation.APPEND, value='RC4-40'),
 Directive(prop_name='cipher', scope='tls',
           operation=Operation.APPEND, value='RC4-128'),
 Directive(prop_name='cipher', scope='tls',
           operation=Operation.APPEND, value='NULL')]
=@r]   r    	operationr^   )
stripr   r[   Zcount_equals_signsr!   Z	empty_lhsr6   r_   r`   r   )lineZlhsr\   r]   r    rd   r^   s   &      r'   
parse_linerg      s     ::<<	''-zz#HCyy{CIIKs),/3Jsyya(S)<LI %.c$=?$= 	 	 )8$=? ? ?s   :&C$c                 s     \        V 4      pV F  p\        VP                  4       K  	  R #   \        P                   d+   pT'       g   h \
        P                  ! T4        R p?R # R p?ii ; ir-   )rg   r   r    r   ZPolicySyntaxErrorwarningswarn)rf   ri   ldZexs   &&   r'   syntax_check_linerl      sR    tA!''" '' bs   )- A,A''A,c                   s6   a a ] tR tRt oRV 3R lltRtVtV ;t# )PolicySyntaxDeprecationWarningi  c                s   < VP                  R R4      pV RV R2pVRV 2,          pV'       g
   VR,          p\        SV `	  V4       R# )
z and  z is deprecatedz", please rewrite your rules using z4; be advised that it is not always a 1-1 replacementN)replaceZsuperr(   )r$   Z
deprecatedZreplacementwhatonetooneZmsg	__class__s   &&&&& r'   r(   Z'PolicySyntaxDeprecationWarning.__init__  sT    !))$8a
|>23K=AAIICr)   rG   )ZoptionF)r;   r<   r=   r>   r(   r?   r@   Z__classcell__)rs   rB   s   @@r'   rm   rm     s      r)   rm   c                s	  a RR0o\         P                  ! RV3R lV 4      p V P                  RR4      p RP                  R V P	                  R4       4       4      p V P                  R	R
4      p RP                  R V P	                  R4       4       4      p RP                  R V P	                  R4       4       4      p \         P                  ! RRV 4      P                  4       p \         P                  ! RV 4      '       d!   \        P                  ! \        RR4      4       RRRRRRRR/pVP                  4        F  w  r#RV,           R,           p\         P                  ! W@4      pV'       d    \        P                  ! \        W#4      4       \         P                  ! VR
V 4      p V F  pV RV RV 2,          p K  	  K  	  \         P                  ! RRV 4      P                  4       p RRRR R!R"R#R$R%R&R'R(/pVP                  4        F  w  r#RV,           R,           p/ p\         P                  ! W@4       F:  p	\         P                  ! WCV	P                  ^ 4      4      WP                  ^ 4      &   K<  	  VP                  4        F$  w  r\        P                  ! \        W4      4       K&  	  \         P                  ! WCV 4      p K  	  R)R*/pVP                  4        F  w  r#RV,           R,           p/ p\         P                  ! W@4       F:  p	\         P                  ! WCV	P                  ^ 4      4      WP                  ^ 4      &   K<  	  VP                  4        F'  w  r\        P                  ! \        WR+R,R-7      4       K)  	  \         P                  ! WCV 4      p K  	  \        \        P                  R.R.R71,          4      pV'       dh   R/P                  R0 VR.R7  4       4      p\         P                  ! R1VR7,          ,           R,           V'       d   R2V 2MR
V 4      p VP!                  4        Ko  \         P                  ! R3R
V 4      p \        \        P"                  R.R.R71,          4      pV'       dh   R/P                  R4 VR.R7  4       4      p\         P                  ! R5VR7,          ,           R,           V'       d   R2V 2MR
V 4      p VP!                  4        Ko  \         P                  ! R6R
V 4      # )8a  
Preprocesses text before parsing.
Fixes line breaks, handles backwards compatibility.
>>> preprocess_text('cipher = c1 \\ \nc2#x')
'cipher = c1 c2'
>>> with warnings.catch_warnings():
...     warnings.simplefilter("ignore")
...     preprocess_text('ike_protocol = IKEv2')
'protocol@IKE = IKEv2'
>>> with warnings.catch_warnings():
...     warnings.simplefilter("ignore")
...     preprocess_text('min_tls_version=TLS1.3')
'protocol@TLS = -SSL2.0 -SSL3.0 -TLS1.0 -TLS1.1 -TLS1.2'
z,# %suppress_experimental_value_warnings=truez-# %suppress_experimental_value_warnings=falsez#.*c                 sV   < V P                  ^ 4      S9   d   V P                  ^ 4      # R# )r     )group)r9   magic_commentss   &r'   <lambda>Z!preprocess_text.<locals>.<lambda>%  s$    !''!**FAGGAJNBNr)   ra    = rn   c              3   @   "   T F  qP                  4       x  K  	  R # 5ir-   re   r1   rj      & r'   r4   "preprocess_text.<locals>.<genexpr>(       9(81WWYY(8   z\
rt   c              3   ry   r-   rz   r{   r|   r'   r4   r}   *  r~   r   c              3   sR   "   T F  p\         P                  ! R RV4      x  K  	  R# 5i)z\s+ro   N)resubr{   r|   r'   r4   r}   +  s"     F5ERVVFC++5Es   %'z
+z\bprotocol\s*=protocolzprotocol@TLSZ
tls_cipherz
cipher@TLSZ
ssh_cipherz
cipher@SSHZ	ssh_groupz	group@SSHZike_protocolzprotocol@IKEz\bz\s*=(.*)z

z =zsha1_in_dnssec = 0z7hash@DNSSec = -SHA1
sign@DNSSec = -RSA-SHA1 -ECDSA-SHA1zsha1_in_dnssec = 1z7hash@DNSSec = SHA1+
sign@DNSSec = RSA-SHA1+ ECDSA-SHA1+zssh_etm = 0zetm@SSH = DISABLE_ETMzssh_etm = 1zetm@SSH = ANYzssh_etm@([^= ]+) = 0zetm@\1 = DISABLE_ETMzssh_etm@([^= ]+) = 1zetm@\1 = ANYzX25519-MLKEM768zMLKEM768-X25519r^   T)rq   rr   Nro   c              3   4   "   T F  pR V,           x  K  	  R# 5irP   NrG   r1   rR   r|   r'   r4   r}   g  s     ;(:1sQww(:   z\bmin_dtls_version = zprotocol@TLS = z\bmin_dtls_version = 0\bc              3   r   r   rG   r   r|   r'   r4   r}   o  s     :(91sQww(9r   z\bmin_tls_version = z\bmin_tls_version = 0\br   )r   r   rp   joinr!   re   Zfindallrh   ri   rm   itemsZfinditerru   listr   ZDTLS_PROTOCOLSZpopZTLS_PROTOCOLS)textZPOSTFIX_REPLACEMENTSZfrZtoZregexZmsZmZPLAIN_REPLACEMENTSr:   ZmatchZmatch_frZmatch_toZVALUE_REPLACEMENTSZdtls_versionsZnegZtls_versionsrv   s   &               @r'   preprocess_textr     s'     	77N 66&ND <<U#D999

4(899D<<#D999

4(899D99FTZZ5EFFD66%t$**,D	zz#T**4Z5CE 	F 	ll[	 ',,.
[(ZZ$MM8@AvveR&Ad2$b$$D  / 66%t$**,D 	FF.# %**,
U"[[-E&(ffUA&GGKKN# .")--/HMM8LM #2vve& - 	, %**,
U"[[-E&(ffUA&GGKKN# .")--/HMM8>EBFH I #2 vve& - 11$B$78M
hh;cr(:;;vv.r1BBUJ14u-"dD66-r48D	//"56L
hh:Sb(9::vv-R0@@5H14u-"dD66,b$77r)   c                   sn   a  ] tR tRt o RtR
R lt]R 4       t]R 4       t]R 4       t	]R 4       t
R	tV tR# )ScopedPolicyix  af  
An entity constructing lists of what's `.enabled` and what's `.disabled`
when the given scopes are active.
>>> sp = ScopedPolicy(parse_line('cipher@TLS = RC4* NULL'), {'tls'})
>>> 'AES-192-GCM' in sp.disabled['cipher']
True
>>> sp.enabled['cipher']
['RC4-40', 'RC4-128', 'NULL']
>>> ScopedPolicy(parse_line('min_dh_size=2048')).integers['min_dh_size']
2048
Nc                s   T;'       g    \        4       p\        P                  4       V n        \        P                  4        UUu/ uF  w  r4W4^ ,          bK  	  uppV n        \        P                   Uu/ uF  qU. bK  	  upV n	        V EF?  p\        VP                  4      pVP                  V4      '       g   K2  VP                  \        P                  8X  d   . V P                  VP                   &   Kl  VP                  \        P"                  8X  dN   V P                  VP                   ,          pVP$                  V9  d   VP'                  VP$                  4       K  K  VP                  \        P(                  8X  di   V P                  VP                   ,          pVP$                  V9   d   VP+                  VP$                  4       VP-                  ^ VP$                  4       EK_  VP                  \        P.                  8X  dZ   V P                  VP                   ,           U	u. uF  p	WP$                  8w  g   K  V	NK  	  up	V P                  VP                   &   EK  VP                  \        P0                  8X  d'   VP$                  V P                  VP                   &   EK  VP$                  V P                  VP                   &   EKB  	  \        P                  P                  4        UU
U	u/ uF0  w  rZYZ U	u. uF  p	WP                  V,          9  g   K  V	NK   	  up	bK2  	  up	p
pV n        R# u uppi u upi u up	i u up	i u up	p
pi )r    N)ZsetrY   ZcopyintegersrZ   r   enumsr   rX   enabledr   r    r:   rd   rD   rI   r]   rK   r^   appendrJ   ZremoveZinsertrL   rM   disabled)r$   
directivesZrelevant_scopesZkrR   r]   Z	directiveZssr   ZeZalg_lists   &&&        r'   r(   ZScopedPolicy.__init__  sl   )22SU$))+*/++-8-$!a1g-8
7@}}E})2}E#Iy/Bzz/**&&)//98:DLL!4!45((I,<,<<"ll9+>+>?G g5y7 6((I,=,=="ll9+>+>?G '1y7NN1ioo6((INN:#'<<	0C0C#D9#Da/ #D9DLL!4!45 ((I,=,==9BDMM)"5"56 7@ooDJJy2233 $< 5>MM4G4G4IK4I0Y # %J1()i1H(H &'Q %J J4IK? 9E&9%J Ks6   L14L7&L<=L</M:MMMMc                P    \         P                  ! V P                  R ,          4      # r   )r   min_tls_versionr   r*   r+   r'   r   ZScopedPolicy.min_tls_version      ((j)ABBr)   c                r   r   )r   max_tls_versionr   r*   r+   r'   r   ZScopedPolicy.max_tls_version  r   r)   c                r   r   )r   min_dtls_versionr   r*   r+   r'   r   ZScopedPolicy.min_dtls_version      ))$,,z*BCCr)   c                r   r   )r   max_dtls_versionr   r*   r+   r'   r   ZScopedPolicy.max_dtls_version  r   r)   )r   r   r   r   r-   )r;   r<   r=   r>   rH   r(   Zpropertyr   r   r   r   r?   r@   rA   rC   r'   r   r   x  si     
$KL C C C C D D D Dr)   r   c                 s    V FQ  p\         P                  P                  W14      p\         P                  ! V\         P                  4      '       g   KO  Vu # 	  \
        P                  ! WV4      hr-   )ospathr   ZaccessZR_OKr   ZPolicyFileNotFoundError)
policynameZfnameZpathsrk   r%   s   &&&  r'   lookup_filer     sM    GGLL"99Q  H  
,
,Z
FFr)   c                   sf   a  ] tR tRt o RtRtRR/R ltR tRR lt]	R	 4       t
RR
 ltR tRtV tR# )UnscopedCryptoPolicyi  z/etc/crypto-policiesz/usr/share/crypto-policies	policydirNc               s    W n         R P                  V.VO54      V n        . V n        V P	                  V4      pV F  pW@P	                  VRR7      ,          pK  	  W@n        R# )Z:T)	subpolicyN)r   r   r   linesread_policy_file_directives)r$   Zpolicy_namer   Zsubpolicy_namesr   Zsubpolicy_names   &&$*  r'   r(   ZUnscopedCryptoPolicy.__init__  s^    "((K#B/#BC
**;7
-N//$/OOJ .%r)   c                s$    V P                   '       * # r-   )r   r*   r+   r'   is_emptyZUnscopedCryptoPolicy.is_empty  s    ####r)   c                sB    \        V P                  T;'       g    / 4      # r-   )r   r   )r$   r2   s   &&r'   scopedZUnscopedCryptoPolicy.scoped  s    D,,fll;;r)   c                s   R p\         P                  P                  p. pV  F  pVR8X  d   RpK  VR8X  d   R pK  V'       d   VP                  V! V4      4       K:  \        P
                  ! R R7      ;_uu_ 4        \        P                  ! RVR7       VP                  V! V4      4       RRR4       K  	  V#   + '       g   i     K  ; i)Tz.# %suppress_experimental_value_warnings = trueFz/# %suppress_experimental_value_warnings = false)r   Zignore)ZcategoryN)r   r   ZExperimentalValueWarningr   rh   Zcatch_warningsZfilterwarnings)r   ZfuncZwarn_on_experimentalZExpValWarningrrj   s   &&    r'   _for_in_lines_expwarnZ*UnscopedCryptoPolicy._for_in_lines_expwarn  s    #",,EEADD',$GG'+$%a!,,D99++H}MHHT!W% :9   :99s   :0B88C	c                s   V P                   ;'       g    R pV'       d!   \        P                  P                  VR4      p\	        TY'       g   RMR,           \        P                  P
                  V\        P                  P                  V P                  V4      \        P                  P                  V P                  V4      34      p\        VRR7      ;_uu_ 4       pVP                  4       pRRR4       \        X4      pVP                  R4      pV P                  VR 4       V P                  V\        4       V P                  V\        4      p\        P                   ! \"        P$                  V4      #   + '       g   i     L; i)	ZpoliciesZmodulesz.polz.pmodzutf-8)ZencodingNrn   c                 s    \        V R R7      # )T)ri   )rl   )rj   r+   r'   rw   Z7UnscopedCryptoPolicy.read_policy_file.<locals>.<lambda>  s    ->qt-Lr)   )r   r   r   r   r   Zcurdir
CONFIG_DIR	SHARE_DIRZopenZreadr   r!   r   rl   rg   	functoolsZreduceoperatorZiadd)	r$   rE   r   Zpdirr%   Zfr   r   r   s	   &&&      r'   r   Z%UnscopedCryptoPolicy.read_policy_file  s   ~~++77<<i0DiWEGGNN GGLL$?GGLL>	H !g&&!668D 't$

4 ""5#L	N 	""5*;< &&uj9q11 '&s   E66F	c                sT   R  pV P                  4       pRV P                   R2pVR,          pVR,          pVR,          pVR,          pVR,          p/ VP                  CVP                  CVP                  CpVP                  4        F  w  rVW1! WV4      ,          pK  	  Rp\        P                  4        F  w  pw  rV P                  V
R7      p/ VP                  CVP                  CVP                  CpV	eI   \        V	,          w  rV P                  VR7      p/ VP                  CVP                  CVP                  CpMY$ppVP                  4        F<  w  rVVVV,          8w  g   K  V'       g   VR	,          pR
pW1! V RV 2V4      ,          pK>  	  K  	  V'       g
   VR,          pV# )c                 s    \        V\        4      '       d   R P                  V4      M
\        V4      pV  RV 2P	                  4       R,           # )ro   rx   rn   )Z
isinstancer   r   ZstrZrstrip)Zkeyr^   r9   r&   r'   fmtZ)UnscopedCryptoPolicy.__str__.<locals>.fmt  s?    #-eT#:#:E
AU#aS>((*T11r)   z	# Policy z dump
z#
z?# Do not parse the contents of this file with automated tools,
z.# it is provided for review convenience only.
z"# Baseline values for all scopes:
F)r2   z9# Scope-specific properties derived for select backends:
Trb   z&# No scope-specific properties found.
)r   r   r   r   r   r   DUMPABLE_SCOPES)r$   r   Zgeneric_scopedr9   Zgeneric_allr]   r^   Zanything_scope_specificZ
scope_nameZparent_scopeZ	scope_setZspecific_scopedZspecific_allZ_Zparent_scope_setZparent_scopedZ
parent_alls   &                r'   r,   ZUnscopedCryptoPolicy.__str__  s   	2 (0	U
	OO	>>	U
	22/// /'00/'--/ !, 1 1 3IY&&A !4"'5D5J5J5L1J1"kkk;O5o55 5-665-335L '&5l&C# $3C D5 5 5 5 - 6 65 - 3 35
 -;z$0$6$6$8 	Jy112 ? @26/	{!J<8%@@A %9 6M( '::Ar)   )r   r   r   r   r-   F)r;   r<   r=   r>   r   r   r(   r   r   Zstaticmethodr   r   r,   r?   r@   rA   rC   r'   r   r     sH     'J,I	& 	&$<  "26( (r)   r   )Zarbitrary_dh_groupsZmin_dh_sizeZmin_dsa_sizeZmin_rsa_sizeZsha1_in_certsZ	ssh_certs)ZANYZDISABLE_ETMZDISABLE_NON_ETM)ZDEFAULTZENFORCEZRELAX)tlssslr   r   r   r   r   pkcs12pkcs12-importr   r	   smimesmime-importr
   r   r   r   r   r   r   ipseciker   r   r   r   r   r   r   r   >   r   r   r   >   r   r   r   >   r   r   r   >   r   r   r   r   >   r   r   r   >   r   r   r   r   r	   >   r   r   r
   >   r   r   r
   r   r   >   r   r   r   >   r   r   r   >   r   r   r   rc   r   )!ZcollectionsZenumr/   r   r   r   r   rh   rt   r   r   ZdictZfromkeysrY   rZ   r6   r#   r   r   ZEnumrD   r_   Z
namedtupler`   rg   rl   ZFutureWarningZPolicyWarningrm   r   r   r   r   rG   r)   r'   <module>r      sd        	 	  }} 
  3%q	 
4,	 	

TFH%& t-. 12	
 TFJ'( $56 th&' 
D5'? 78 59: , )L M %67  'H I  y%()!" y"FG#$ y"FG%& /0'( yk")* 
D5-()+2.G .Gf(		 (=FD ""; 1 	
?:]J4L4L b8NAD ADLGk kr)   