+
    $i  c                   sL    ^ RI t ^ RIHtHt ^ RIHt ^RIHt  ! R R]4      tR# )i    N)CalledProcessErrorcall)mkstemp)ConfigGeneratorc                   s  a  ] tR t^t o RtRtRRRRRRR	R
RRRRRRRRRRRRRR/tRRRRRRRRR R!R"R#R$R%/tR&R'R(R)R*R'R+R)R,R)R-R'R.R)R/R'R0R)R1R'R2R)R3R'R4R)/tR&R'R*R'R(R)R+R)R,R)R5R6R7R6R8R6R9RR:RR;RR<R/t	R=R>R?R@RARBRCRDRERFRGRHRIRJRKRFRLRHRMRJ/
t
RN^ RO^RP^RQ^/tRN^ RO^RQ^RP^/tR^ R^/t]RR 4       t]RS 4       t]RT 4       t]RU 4       t]RV 4       tRWtV tRX# )YLibreswanGenerator	libreswanz5systemctl try-restart ipsec.service 2>/dev/null || :
ZX448 ZX25519Zdh31Z	SECP256R1Zdh19Z	SECP384R1Zdh20Z	SECP521R1Zdh21z
FFDHE-6144z
FFDHE-1536Zdh5z
FFDHE-2048Zdh14z
FFDHE-3072Zdh15z
FFDHE-4096Zdh16z
FFDHE-8192Zdh18zAES-256-CBCZaes256zAES-192-CBCZaes192zAES-128-CBCZaes128zAES-256-GCMZ
aes_gcm256zAES-192-GCMZ
aes_gcm192zAES-128-GCMZ
aes_gcm128zCHACHA20-POLY1305Zchacha20_poly1305zAES-256-CBC-HMAC-SHA2-512Zsha2_512zAES-256-CBC-HMAC-SHA2-256Zsha2_256zAES-192-CBC-HMAC-SHA2-512zAES-192-CBC-HMAC-SHA2-256zAES-128-CBC-HMAC-SHA2-256zAES-256-GCM-HMAC-SHA2-512zAES-256-GCM-HMAC-SHA2-256zAES-192-GCM-HMAC-SHA2-512zAES-192-GCM-HMAC-SHA2-256zAES-128-GCM-HMAC-SHA2-512zAES-128-GCM-HMAC-SHA2-256zCHACHA20-POLY1305-HMAC-SHA2-512zCHACHA20-POLY1305-HMAC-SHA2-256zAES-256-CBC-HMAC-SHA1Zsha1zAES-192-CBC-HMAC-SHA1zAES-128-CBC-HMAC-SHA1zAES-256-GCM-AEADzAES-192-GCM-AEADzAES-128-GCM-AEADzCHACHA20-POLY1305-AEADzRSA-SHA1zrsa-sha1zECDSA-SHA2-256zecdsa-sha2_256zECDSA-SHA2-384zecdsa-sha2_384zECDSA-SHA2-512zecdsa-sha2_512zRSA-PSS-SHA2-256zrsa-sha2_256zRSA-PSS-SHA2-384zrsa-sha2_384zRSA-PSS-SHA2-512zrsa-sha2_512zRSA-PSS-RSAE-SHA2-256zRSA-PSS-RSAE-SHA2-384zRSA-PSS-RSAE-SHA2-512ZAEADzHMAC-SHA2-512zHMAC-SHA2-256z	HMAC-SHA1c                L    WP                   9  d   ^c# V P                   V,          # ic   )mac_ike_prio_mapclskey   &&?/usr/share/crypto-policies/python/policygenerators/libreswan.pyZ__get_ike_prioZ!LibreswanGenerator.__get_ike_prior   s$     ***##C((    c                r   r   )mac_esp_prio_mapr
   r   r   Z__get_esp_prioZ!LibreswanGenerator.__get_esp_prioy   s"    ***##C((r   c                r   r   )group_prio_mapr
   r   r   Z__get_group_prioZ#LibreswanGenerator.__get_group_prio   s"    (((!!#&&r   c                s   VP                  0 Rm4      pRpRpVP                  pRpVR,           Uu. uF  qwP                  R4      '       g   K  VNK  	  ppRV9   d   RpM	RV9   d   RpV'       d   VR	V,           R
,           ,          p\        VR,          V P                  R7      p	\        VR,          V P
                  R7      p
RpVR,           F  p V P                  V,          pTR,           pRpT	 F8  p T P                  TR,           T,           ,          pT P                  TTR4      pK:  	  T'       g   Kj  Y,          pRpT
 F*  p T P                  T,          pT P                  TTR4      pK,  	  T P                  YR4      pT P                  YT4      pK  	  V'       d   VRV,           R
,           ,          p\        VR,          V P                  R7      p	RpVR,           F  p V P                  V,          pTR,           pRpT	 FD  p T P                  TR,           T,           ,          pT'       g   Tp MT P                  TTR4      pKF  	  Y,          pTRR R8X  d   K  T P                  YT4      pK  	  V'       d   VRV,           R
,           ,          pRp\        4       pVR,           FD  p V P                  V,          pTT9  g   K   TP                  T4       T P                  TTT4      pKF  	  V'       d   VRV,           R
,           ,          pV# u upi   \         d     EK[  i ; i  \         d     EKJ  i ; i  \         d     EK  i ; i  \         d     EK  i ; i  \         d     EKo  i ; i  \         d     K  i ; i)ipseczconn %default
Z,r   ZprotocolZIKEZIKEv2ZIKEv1zikev2=neverZ	Z
mac)r   groupcipherZ-Z+z	ike=Nz	esp=signz	authby=>   Ziker   r   i)ZscopedZenabledZ
startswithZsorted!_LibreswanGenerator__get_ike_prio#_LibreswanGenerator__get_group_prio
cipher_mapZKeyErrorcipher_prf_mapZappend	group_map!_LibreswanGenerator__get_esp_priocipher_mac_mapZsetsign_mapZadd)r   Zunscoped_policyZpolicyZcfgZsepZpZsZxZprotoZsorted_macsZsorted_groupsZtmpr   ZcmZcombor   ZmmZir   Zsigalgsr   Zsms   &&                    r   generate_configZ"LibreswanGenerator.generate_config   sn    ''(EFNNjMAMq\\%-@MAeAA4!8d?"CQuX!$!3!35qz#&#7#79 kkF^^F+ HEA"++FSL3,>?B JJq"c* # JEA"MM!,E JJq%- # JJu-E**S-C1 "4 8c>D((CQuX!$!3!35 kkF^^F+ HEA"++FSL3,>?B EJJq"c* # JERSzS **S-C) ", 8c>D((C%fIID\\$'  Bjjb#.  ;$t++C
k B"              (  sw   LLL7!L.	M'M!M'1M:L+*L+.L>=L>MMM$#M$'M76M7:N	N	c                sx   \         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        \        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     Li; i  \         d    T P                  R	4        Lxi ; i  \         P                  ! T4       i ; i)ZOLD_LIBRESWANZ1Tz/usr/sbin/ipsecZwNz'/usr/sbin/ipsec readwriteconf --config z >/dev/null)Zshellz!/usr/sbin/ipsec: Execution failedz/There is an error in libreswan generated policyzPolicy:
F)osZgetenvZaccessZX_OKr   ZfdopenZwriter   r    ZeprintZunlink)r   ZconfigZfdZpathZretZfs   &&    r   test_configZLibreswanGenerator.test_config   s    99_%,yy*BGG449		2s##q $@DTF()046
 IIdOJJHIJJ6(+, $#
 & @

>?@ IIdOsB   D! 9C,D! C? ,C<	7D! ?DD! DD! !D9 N)Z__name__Z
__module__Z__qualname__Z__firstlineno__ZCONFIG_NAMEZ
RELOAD_CMDr   r   r   r   r   r	   r   r   Zclassmethodr   r   r   r   r!   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      s    KIJ 	&VVVbeffffI 	xxx|||0
J 	$Z#Z#Z#Z#Z 	$Z#Z#Z#Z#Z#Z):):!N* 	$Z#Z#Z#Z#ZBBB "N" 	J***NNNH 	Q	 	Q	 	Qa	N ) ) ) )
 ' '
 \ \|  r   r   )	r    Z
subprocessr    r   Ztempfiler   Zconfiggeneratorr   r   r"   r   r   <module>r#      s!    
 /  ,p pr   