+
    $i-  c                   s~    ^ RI t ^ RIt^ RIt^ RIHt ^RIHt  ! R R]4      t ! R R]4      t ! R R	]4      t	R
 t
R# )i    N)mkstemp)ConfigGeneratorc                   s  a  ] tR t^t o / RRbRRbRRbRRbR	R
bRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRRRRRRR /CtR!R"R#R$R%R&R'R(R)R*R+R,/tR!R-R#R.R%R/R'R0R)R1R+R2/tRRRSRTRURVRWRXRYRZR[R\R]R^R_R`RaRbRcRdReRfRg/tRhRiRjRk/tRlRmRnRoRpRqRrRsRtRuRvRwRxRy/t	R3R4R5RR6R7R8R9R:R;R<R=R>R?R@RARBRCRDRE/
t
R3RFR5RR6RGR8RHR:RIR<RJR>RKR@RLRBRMRDRN/
t]RO 4       tRPtV tRQ# )zOpenSSHGeneratorzAES-256-GCMzaes256-gcm@openssh.comzAES-256-CTRz
aes256-ctrzAES-192-GCM zAES-192-CTRz
aes192-ctrzAES-128-GCMzaes128-gcm@openssh.comzAES-128-CTRz
aes128-ctrzCHACHA20-POLY1305zchacha20-poly1305@openssh.comzCAMELLIA-256-GCMzAES-256-CCMzAES-192-CCMzAES-128-CCMzCAMELLIA-128-GCMzAES-256-CBCz
aes256-cbczAES-192-CBCz
aes192-cbczAES-128-CBCz
aes128-cbczCAMELLIA-256-CBCzCAMELLIA-128-CBCzRC4-128zDES-CBCzCAMELLIA-128-CTSz3DES-CBCz3des-cbczHMAC-MD5zhmac-md5-etm@openssh.comzUMAC-64zumac-64-etm@openssh.comzUMAC-128zumac-128-etm@openssh.comz	HMAC-SHA1zhmac-sha1-etm@openssh.comzHMAC-SHA2-256zhmac-sha2-256-etm@openssh.comzHMAC-SHA2-512zhmac-sha2-512-etm@openssh.comzhmac-md5zumac-64@openssh.comzumac-128@openssh.comz	hmac-sha1zhmac-sha2-256zhmac-sha2-512zRSA-SHA1zssh-rsazDSA-SHA1zRSA-SHA2-256zrsa-sha2-256zRSA-SHA2-512zrsa-sha2-512zECDSA-SHA2-256zecdsa-sha2-nistp256zECDSA-SHA2-256-FIDOz"sk-ecdsa-sha2-nistp256@openssh.comzECDSA-SHA2-384zecdsa-sha2-nistp384zECDSA-SHA2-512zecdsa-sha2-nistp521zEDDSA-ED25519zssh-ed25519zEDDSA-ED25519-FIDOzsk-ssh-ed25519@openssh.comzssh-rsa-cert-v01@openssh.comz!rsa-sha2-256-cert-v01@openssh.comz!rsa-sha2-512-cert-v01@openssh.comz(ecdsa-sha2-nistp256-cert-v01@openssh.comz+sk-ecdsa-sha2-nistp256-cert-v01@openssh.comz(ecdsa-sha2-nistp384-cert-v01@openssh.comz(ecdsa-sha2-nistp521-cert-v01@openssh.comz ssh-ed25519-cert-v01@openssh.comz#sk-ssh-ed25519-cert-v01@openssh.comc           	     s
   VP                   pR pRpR pVR,           F'  p	 V P                  WP                  V	,          V4      pK)  	  V'       d   VRV R2,          pR pVP                  R,          R8w  d5   VR,           F'  p	 V P                  WP
                  V	,          V4      pK)  	  VP                  R,          R8w  d5   VR,           F'  p	 V P                  WP                  V	,          V4      pK)  	  V'       d   VR	V R2,          p. p
. pVR
,           F  pVR,           F  pVP                  R,          '       d?    V
P                  V P                  W3,          4        VP                  W<V3,          4       VR,           F7  p V
P                  W,W3,          4        VP                  W<W3,          4       K9  	  K  	  K  	  V'       d   VRRP                  V4       R2,          pM	VR,          pV
'       d   VRRP                  V
4       R2,          pR pVR,           Ff  p	 V P                  WP                  V	,          V4      pVP                  R,          '       g   KB   V P                  WP                  V	,          V4      pKh  	  V'       d0   V'       d   VRV R2,          pVRV R2,          pVRV R2,          pR pVR,           F'  p	 V P                  WP                  V	,          V4      pK)  	  V'       d   VRV R2,          pVP                  R,          ^ 8  d   VRVP                  R,           R2,          pV#   \         d     EK>  i ; i  \         d     EK  i ; i  \         d     EK  i ; i  \         d     EL.i ; i  \         d     EL&i ; i  \         d     ELi ; i  \         d     EKB  i ; i  \         d     ELi ; i  \         d     EK  i ; i  \         d     EK.  i ; i)r   Z,ZcipherzCiphers Z
ZetmZDISABLE_ETMZmacZDISABLE_NON_ETMzMACs Zkey_exchangeZhashZarbitrary_dh_groupsZgroupzGSSAPIKexAlgorithms zGSSAPIKeyExchange no
zKexAlgorithms ZsignZ	ssh_certszHostKeyAlgorithms zPubkeyAcceptedAlgorithms zHostbasedAcceptedAlgorithms zCASignatureAlgorithms Zmin_rsa_sizezRequiredRSASize )ZenabledZappend
cipher_mapZKeyErrorZenumsmac_map_etmmac_mapZintegersZextendgx_mapZjoinsign_mapsign_map_certs)clspolicylocal_kx_maplocal_gss_kx_mapdo_host_keyZpZcfgZsepZsZiZkxsZgss_kxsZkxZhZgs   &&&&&          =/usr/share/crypto-policies/python/policygenerators/openssh.pygenerate_optionsZ!OpenSSHGenerator.generate_optionsx   s    NN8AJJq.."3S9  XaS##C<<-/uXX

1ooa&8#>A 
 <<"33uXX

1kk!nc:A  U1#R= CN##BvYY??#899

3::rg#67'7Q'@A 7A

<Q
#;<'7Q
'CD $  $* )#((7*;)<B??C++C^CHHSM?"55C6AJJq,,q/37 {++

1&8&8&;SAA   +A3b11.qc44C1!B77C6AJJq,,q/37  +A3b11C??>*Q.%foon&E%FbIIC
q         $  $ 
 $  $   
      s   #M#M#M1#N%NN(%N:+#O*#O#O2MMM.-M.1N NNNN%$N%(N7	6N7	:O
		O
	OOO/.O/2PP N)ECDHEZ	SECP521R1SHA2-512)zecdh-sha2-nistp521)r   Z	SECP384R1zSHA2-384)zecdh-sha2-nistp384)r   	SECP256R1SHA2-256)zecdh-sha2-nistp256)r   X25519r   )zcurve25519-sha256zcurve25519-sha256@libssh.orgDHE
FFDHE-1024SHA1)zdiffie-hellman-group1-sha1)r   
FFDHE-2048r   )zdiffie-hellman-group14-sha1)r   r   r   )zdiffie-hellman-group14-sha256)r   
FFDHE-4096r   )zdiffie-hellman-group16-sha512)r   z
FFDHE-8192r   )zdiffie-hellman-group18-sha512)ZSNTRUPr   r   )zsntrup761x25519-sha512z"sntrup761x25519-sha512@openssh.com)zKEM-ECDHzMLKEM768-X25519r   )zmlkem768x25519-sha256)r   r   )z"diffie-hellman-group-exchange-sha1)r   r   )z$diffie-hellman-group-exchange-sha256)DHE-GSSr   )zgss-gex-sha1-r   r   r   )zgss-group1-sha1-)r   r   r   )zgss-group14-sha1-)r   r   r   )zgss-group14-sha256-)	ECDHE-GSSr   r   )zgss-nistp256-sha256-)r   r   r   )zgss-curve25519-sha256-)r   r   r   )zgss-group16-sha512-)__name__
__module____qualname____firstlineno__r   r   r   kx_mapr   
gss_kx_mapr   r	   classmethodr   __static_attributes____classdictcell__Z__classdict__   @r   r   r      s    /| 	r 	|	
 	/ 	| 	< 	B 	r 	r 	r 	B 	| 	| 	|  	B!" 	B#$ 	22BJ+J2 	.,.088K 	J(*[G 	+,C*,C*,C' *
 	&'F%'G)+M)+M)+M( +
 	4 6
#F. 	@FF 	/)+@)+A-/G.0I+-H-/GJ 	IB/C//:H 	2B;;DLDD;CN b b    r   c                   sD   a  ] tR t^t o Rt]R 4       t]R 4       tRtV t	R# )OpenSSHClientGeneratoropensshc                s    VP                  0 Rm4      p\        V P                  4      p\        V P                  4      pV P	                  W#VRR7      # )sshFr   >   r.   r-   zopenssh-clientZscopedZdictr$   r%   r   r
   Zunscoped_policyr   r   r      &&   r   generate_configZ&OpenSSHClientGenerator.generate_config   sP     ''(LMCJJ'/##F:J05 $ 7 	7r+   c                s   \         P                  ! R 4      R8X  d   R# \         P                  ! R\         P                  4      '       g   R# \	        4       w  r#^p \         P
                  ! VR4      ;_uu_ 4       pVP                  V4       RRR4        \        P                  ! RV R2RR7      p\         P                  ! V4       V'       d(   V P                  R
4       V P                  RV 24       R# R#   + '       g   i     Lt; i  \        P                   d    T P                  R	4        Li ; i  \         P                  ! T4       i ; i)OLD_OPENSSH1T/usr/bin/sshwNz/usr/bin/ssh -G -F z bogus654_server >/dev/nullZshellz/usr/bin/ssh: Execution failed4There is an error in OpenSSH server generated policyPolicy:
F)osgetenvaccessX_OKr    fdopenwrite
subprocesscallCalledProcessErroreprintunlink)r
   configfdpathretfs   &&    r   test_configZ"OpenSSHClientGenerator.test_config   s    99]#s*yy119		2s##q $= oo(;D6 BC 'CJNP
 IIdOJJMNJJ6(+, $#
 00 =

;<= IIdOsB   D6 9C7D6 D
 7D	D6 
&D30D6 2D33D6 6Er   N)
r    r!   r"   r#   CONFIG_NAMEr&   r3   rK   r'   r(   r)   r*   r   r,   r,      s0     K7 7  r+   r,   c                   sh   a  ] tR tRt o RtRt]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR	# )
OpenSSHServerGeneratori  Zopensshserverz4systemctl try-restart sshd.service 2>/dev/null || :
c                s    VP                  0 Rm4      p\        V P                  4      p\        V P                  4      pVR VR V P	                  W#VRR7      # )r.   Tr/   >   r.   r-   zopenssh-serverr   r   r0   r1   r2   r   r3   Z&OpenSSHServerGenerator.generate_config  sb     ''(LMCJJ'/67>?##F:J04 $ 6 	6r+   c                s   \        4       w  r\        P                  ! V4       ^p \        P                  ! RV R2RR7      pV'       d   V P                  R4       R# V#   \        P
                   d    T P                  R4        LEi ; i)i   z&/usr/bin/ssh-keygen -t rsa -b 3072 -f z -N "" >/dev/nullTr8   z%/usr/bin/ssh-keygen: Execution failedz4SSH Keygen failed when testing OpenSSH server policyr   )r    r;   rE   rA   rB   rC   rD   )r
   Z_fdrH   rI   s   &   r   _test_setupZ"OpenSSHServerGenerator._test_setup  s    I	
		$	@// #((,v->#@GKMC
 JJMN ,, 	@JJ>?	@s   A &BBc                sF    V'       d   \         P                  ! V4       R # R # N)r;   rE   )r
   rH   s   &&r   _test_cleanupZ$OpenSSHServerGenerator._test_cleanup)  s    IIdO r+   c                s    \         P                  ! R 4      R8X  d   R# \         P                  ! R\         P                  4      '       g   R# V P	                  4       pV'       g   R# \        4       w  r4^p \         P                  ! VR4      ;_uu_ 4       pVP                  V4       RRR4        \        P                  ! RV RV R	2RR
7      p\         P                  ! V4       V P                  V4       V'       d(   V P                  R4       V P                  RV 24       R# R#   + '       g   i     L; i  \        P                   d    T P                  R4        Li ; i  \         P                  ! T4       T P                  T4       i ; i)r4   r5   Tz/usr/sbin/sshdFr7   Nz/usr/sbin/sshd -T -h z -f z >/dev/nullr8   z /usr/sbin/sshd: Execution failedr9   r:   )r;   r<   r=   r>   rN   r    r?   r@   rA   rB   rC   rD   rE   rP   )r
   rF   Zhost_key_filenamerG   rH   rI   rJ   s   &&     r   rK   Z"OpenSSHServerGenerator.test_config.  s;    99]#s*yy)27733OO- 9	12s##q $? oo ',,=+>d4& I3'3:>@ IIdO/0JJMNJJ6(+,! $# 00 ?

=>? IIdO/0sB   4E$ D%%E$ .D8 %D5	0E$ 8&E!E$  E!!E$ $)Fr   N)r    r!   r"   r#   rL   Z
RELOAD_CMDr&   r3   rN   rP   rK   r'   r(   r)   r*   r   rM   rM     s`     !K IJ	6 	6      r+   rM   c                  s    \         P                  ! R R.R\         P                  R7      P                  P	                  4       p \
        P                  ! RV 4      pV'       dI   \        ;QJ d"    . R VP                  4        4       F  NK  	  5# ! R VP                  4        4       4      #  R#   \        \        3 d     R# i ; i)r6   z-VF)ZcheckstderrzOpenSSH_(\d+).(\d+)p.*c              3   s8   "   T F  p\        V4      x  K  	  R # 5irO   )Zint)Z.0Zns   & r   Z	<genexpr>Z#_openssh_version.<locals>.<genexpr>W  s     6AQs   N)rA   ZrunZPIPErQ   ZdecodereZmatchZtupleZgroupsZFileNotFoundErrorZPermissionError)Zssh_versionZvers     r   _openssh_versionrS   Q  s     nnnd%;5,6OO==CVFFH 	hh0+>5665656666   / s$   AB- "
B- - B- B- -CC)r;   rR   rA   Ztempfiler    Zconfiggeneratorr   r   r,   rM   rS   r   r+   r   <module>rT      sH    
 	   ,M M`%- %PH- HV	r+   