+
      xi4  c                  s    R t ^ RIHt ^ RIt^ RIHtHtHtHt ^ RI	H
t
Ht ^ RIHtHtHtHtHt ]'       d3   ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
I	Ht ^ RIHt ^ RIHt ^ RI H!t! R R lt" ! R R4      t#R# )z)Module for serialising PSKC files to XML.)annotationsN)CallableIOSequenceTYPE_CHECKING)EncryptedIntegerValueEncryptedValue)findmk_elemmove_namespacesreformattostring)_Element)PSKC)Device)
EncryptionKeyDerivation)Key)MAC)Policy)	Signaturec                    V ^8  d   QhRRRR/# )   valuezbytes | strreturnstr Zformat   "4/usr/lib/python3.14/site-packages/pskc/serialiser.py__annotate__r   +   s     , , , ,    c                s    \        V \        4      '       g   V P                  4       p \        P                  ! V 4      P                  4       # )z0Wrap around b64encode to handle types correctly.)
isinstanceZbytesZencodebase64	b64encodedecode)r   s   &r   my_b64encoder$   +   s4    eU##E"))++r   c                  s    ] tR t^2tRt]R R l4       t]R R l4       t]R R l4       t]R R	 l4       t	]R
 R l4       t
]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       tRtR# )PSKCSerialiserz7Class for serialising a PSKC structure to PSKC 1.0 XML.c               $    V ^8  d   QhRRRRRR/# )r   pskcr   outputzIO[str] | IO[bytes]r   Noner   r   r   r   r   PSKCSerialiser.__annotate__6   s(     . .. $. 
	.r   c                s    \        V P                  V4      4      p VP                  V4       R#   \         d%    TP                  TP	                  R4      4        R# i ; i)z6Write the PSKC structure to the specified output file.zutf-8N)r   serialise_documentZwriteZ	TypeErrorr#   )clsr'   r(   Zxmls   &&& r   serialise_fileZPSKCSerialiser.serialise_file5   sN     s--d34	.LL 	.LLG,-	.s   / +AAc               r   )r   r'   r   r   r   r   r   r   r   r   r*   D   s     B Bd Bx Br   c                s"   \        RRVP                  R7      pV P                  VP                  V4       V P	                  VP
                  V4       VP                   F  pV P                  W24       K  	  V P                  VP                  V4      # )z8Convert the PSKC structure to an element tree structure.zpskc:KeyContainerz1.0)ZVersionId)
r   idserialise_encryption
encryptionserialise_macmacZdevicesserialise_key_packageserialise_signature	signature)r,   r'   	containerdevices   &&  r   r+   Z!PSKCSerialiser.serialise_documentC   sr     &&95TWWU	  )<$((I.llF%%f8 #&&t~~yAAr   c               r&   )r   r1   r   r7   r   r   r)   r   r   r   r   r   r*   N   s"     < <j <X <RV <r   c                sP   \         ;QJ dR    R VP                  VP                  VP                  VP                  P
                  3 4       F  '       d   K   RMG	  RMC! R VP                  VP                  VP                  VP                  P
                  3 4       4      '       d   R# \        VRVP                  RR7      pVP                  P
                  '       d)   V P                  VP                  W1P                  4       R# VP                   F  p\        VRV4       K  	  R# )z;Provide an XML element tree for the encryption information.c              3  s*   "   T F	  pVR J x  K  	  R # 5iNr   Z.0Zx   & r   	<genexpr>Z6PSKCSerialiser.serialise_encryption.<locals>.<genexpr>P   s      ;:1 Dy:   FTNzpskc:EncryptionKey)r.   emptyz
ds:KeyName)	allr/   Zkey_namekey
derivation	algorithmr   serialise_key_derivation	key_names)r,   r1   r7   encryption_keyname   &&&  r   r0   Z#PSKCSerialiser.serialise_encryptionM   s     3 ;#
(;(;Z^^#..88:;333 ;#
(;(;Z^^#..88:; ; ; #*+
T$K  ***((%%~7K7KM #,,d; -r   c               s(    V ^8  d   QhRRRRRRRR/# )	r   rA   r   rE   r   rD   zSequence[str]r   r)   r   r   r   r   r   r*   ^   s2     ? ?!? !? !	?
 
?r   c                s@   VP                   '       g   Q h\        VRRR7      p\        VRVP                   R7      pVP                   P                  R4      '       d   \        VRRR7      pVP                  '       dH   \        VRRR7      p\        VR	\        P
                  ! VP                  4      P                  4       4       \        VR
VP                  4       \        VRVP                  4       \        VRVP                  4       V F  p\        VRV4       K  	  R# )z;Provide an XML structure for the key derivation properties.zxenc11:DerivedKeyTr>   zxenc11:KeyDerivationMethod	Algorithmz#pbkdf2zxenc11:PBKDF2-paramsZSaltZ	SpecifiedZIterationCountZ	KeyLengthZPRFzxenc11:MasterKeyNameN)
rB   r   ZendswithZpbkdf2_saltr!   r"   r#   Zpbkdf2_iterationsZpbkdf2_key_lengthZ
pbkdf2_prf)	r,   rA   rE   rD   Zderived_keyZkey_derivationZpbkdf2ZsaltrF   s	   &&&&     r   rC   Z'PSKCSerialiser.serialise_key_derivation]   s     #####n.AN .J+5+?+?A((33^-C#')F%%%vvT:k(()?)?@GGIKF,j.J.JKFK)E)EFFE:#8#89DK!7> r   c               r&   )r   r3   r   r7   r   r   r)   r   r   r   r   r   r*   x   s!     9 9 9 9T 9r   c                s<   \        VRR4      ;'       g!    VP                  P                  P                  pVP                  '       g   V'       g   R# \        VRVP                  RR7      pV'       g   R# \        V\        4      '       g"   \        P                  ! VP                  V4      pVP                  ;'       g!    VP                  P                  P                  pVP                  pV'       g   Q hVP                  P                  P                  '       d(   VP                  P                  P                  V,           p\        VRRR7      p\        VRVR	7       \        VR
RR7      p\        VR\        P                  ! V4      P                  4       4       R# )z3Provide an XML structure for the encrypted MAC key.Z_keyNzpskc:MACMethodT)rJ   r>   zpskc:MACKeyrH   xenc:EncryptionMethodrI   xenc:CipherDataxenc:CipherValue)getattrr'   r1   r@   rB   r   r    r   createcipher_valueivr!   r"   r#   )	r,   r3   r7   Z	key_valueZ
mac_methodrB   rP   Zmac_keycipher_datas	   &&&      r   r2   ZPSKCSerialiser.serialise_macw   s.    C.II#((2E2E2I2I	}}}Y'3==N
)^44&--chh	BI''HH388+>+>+H+H	 --|88!!!88..11L@L*m4@0IFg'8E/  .557	9r   c               r&   )r   r8   r   r7   r   r   r)   r   r   r   r   r   r*      s!     0 06 0h 04 0r   c                s<   \        VRRR7      pVf   Q h\        ;QJ dt    R VP                  VP                  VP                  VP
                  VP                  VP                  VP                  VP                  3 4       F  '       g   K   RMi	  RMe! R VP                  VP                  VP                  VP
                  VP                  VP                  VP                  VP                  3 4       4      '       d   \        VRRR7      p\        VRVP                  4       \        VR	VP                  4       \        VR
VP                  4       \        VRVP
                  4       \        VRVP                  4       \        VRVP                  4       \        VRVP                  4       \        VRVP                  4       VP                  e&   \        VRRR7      p\        VRVP                  4       VP                   F  pV P                  Wc4       K  	  R# )z)Provide an XML structure for key package.zpskc:KeyPackageTrH   Nc              3  s*   "   T F	  pVR Jx  K  	  R # 5ir9   r   r:   r;   r   r<   Z7PSKCSerialiser.serialise_key_package.<locals>.<genexpr>   s      0/1 }/r=   Fzpskc:DeviceInfozpskc:Manufacturerzpskc:SerialNoz
pskc:Modelzpskc:IssueNozpskc:DeviceBindingpskc:StartDatepskc:ExpiryDatepskc:UserIdzpskc:CryptoModuleInfozpskc:Id)r   anyZmanufacturerZserialZmodelZissue_noZdevice_binding
start_dateexpiry_dateZdevice_useridcrypto_moduleZkeysserialise_key)r,   r8   r7   key_packageZdevice_inforY   r@   s   &&&    r   r4   Z$PSKCSerialiser.serialise_key_package   s    i):$G&&&3 0,,fmmV\\&*?*?**F,>,>--/0333 0,,fmmV\\&*?*?**F,>,>--/0 0 0
 "+/@MKK!4f6I6IJK&--@Kv||<KAK!5v7L7LMK!163D3DEK!2F4F4FGK0D0DE+#K1H*.0MM9f.B.BC;;Cc/ r   c               r&   )r   r@   r   r[   r   r   r)   r   r   r   r   r   r*      s!     !2 !2 !2( !2t !2r   c           	     s   \        VRRVP                  VP                  R7      p\        VRVP                  4       \	        VP
                  VP                  VP                  VP                  34      '       d   \        VRRR7      p\        VRVP
                  4       \        VRVP                  VP                  VP                  VP                  R	7       \        VR
VP                  VP                  VP                  R7       \        VRVP                  4       \        VRVP                  4       \        VRVP                  4       V P!                  VRVR4       V P!                  VRVR4       V P!                  VRVR4       V P!                  VRVR4       V P!                  VRVR4       \        VRVP"                  4       V P%                  VP&                  V4       R# )z1Provide an XML structure for the key information.zpskc:KeyT)r>   r.   rJ   zpskc:Issuerzpskc:AlgorithmParametersrH   z
pskc:Suitezpskc:ChallengeFormat)EncodingZMinZMaxCheckDigitszpskc:ResponseFormat)r\   ZLengthr]   zpskc:KeyProfileIdzpskc:KeyReferencezpskc:FriendlyNamesecretzpskc:SecretZcounterzpskc:CounterZtime_offsetz	pskc:TimeZtime_intervalzpskc:TimeIntervalZ
time_driftzpskc:TimeDriftrU   N)r   r/   rB   ZissuerrV   Zalgorithm_suiteZchallenge_encodingZresponse_encodingZresponse_lengthZchallenge_min_lengthZchallenge_max_lengthZchallenge_checkZresponse_checkZkey_profileZkey_referenceZfriendly_nameserialise_dataZ
key_useridserialise_policypolicy)r,   r@   r[   key_elmZ
parametersrG   r   rZ   ZPSKCSerialiser.serialise_key   s    $4CFFcmmU

3##S%;%;%%s':':< = = *D'+-JJc.A.ABJ 6 330000 # 3 3	5
 J 5 22.. # 2 24 	,coo>,c.?.?@,c.?.?@7M	3G^	5	6'+>	@w(8	:7SZZ1r   c          
     s,    V ^8  d   QhRRRRRRRRRR	/# )
r   r@   r   fieldr   rb   r   tagr   r)   r   r   r   r   r   r*      s7     +D +D +DS +D8 +D# +DRV +Dr   c                s   \        VRV,          R4      pVP                  P                  pVR9   d   R# Vf   Q hVR8X  d   \        p\        pM\
        p\        p\        VR4      p	V	f   \        VRRR7      p	\        WRR7      p
W&P                  P                  9   d(   \        V\        4      '       g   VP                  We4      p\        V\        4      '       g   \        V
RV! V4      4       R# VP                  ;'       g    VP                  P                  pVP                  pVP                  P                  '       d   VP                  P                  V,           p\        V
RRR7      p\        VR	VR
7       \        VRRR7      p\        VR\         P"                  ! V4      P%                  4       4       VP&                  '       d<   \        V
R\         P"                  ! VP&                  4      P%                  4       4       R# R# )z.Provide an XML structure for the key material.z_%sNr^   z	pskc:DataTrH   zpskc:PlainValuezpskc:EncryptedValuerK   rI   rL   rM   zpskc:ValueMAC)NZ )rN   r8   r'   r$   r   r   r   r   r   r1   Zfieldsr    rO   rB   rP   rQ   r!   r"   r#   Z	mac_value)r,   r@   rc   rb   rd   r   r'   Z
value2textZencrypted_value_clsZdataZelementrB   rP   Zencrypted_valuerR   s   &&&&&          r   r_   ZPSKCSerialiser.serialise_data   s    6=S%%-QU5VzzJ   H7CJ"0J"7G[)<7Kt<D$40OO***:e^3T3T'..t;E%00G.
50AB DD4??+D+DI --L!!!#11L@%.d<OO%<')!!2$@KK!3$$\299;=((9@@BD r   c               r&   )r   ra   r   rb   r   r   r)   r   r   r   r   r   r*      s!     / /f /x /D /r   c                s   VP                   '       Eg   \        ;QJ d    R VP                  VP                  VP                  VP
                  VP                  VP                  VP                  VP                  VP                  3	 4       F  '       d   K   RMt	  RMp! R VP                  VP                  VP                  VP
                  VP                  VP                  VP                  VP                  VP                  3	 4       4      '       d   R# \        VRRR7      p\        VRVP                  4       \        VRVP                  4       \        VR	VP
                  VP                  VP                  VP                  VP                  VP                  R
7       VP                    F  p\        VRV4       K  	  \        VRVP                  4       R# )z9Provide an XML structure with the key policy information.c              3  s(   "   T F  qR J x  K
  	  R # 5ir9   r   r:   r;   r   r<   Z2PSKCSerialiser.serialise_policy.<locals>.<genexpr>   s      (& <%aT	 <%s   FTNzpskc:PolicyrH   rS   rT   zpskc:PINPolicy)ZPINKeyIdZPINUsageModeZMaxFailedAttemptsZ	MinLengthZ	MaxLengthZPINEncodingzpskc:KeyUsagezpskc:NumberOfTransactions)Z	key_usager?   rW   rX   Znumber_of_transactionsZ
pin_key_idZ	pin_usageZpin_max_failed_attemptsZpin_min_lengthZpin_max_lengthZpin_encodingr   )r,   ra   rb   Z
policy_elmZusagerG   r   r`   ZPSKCSerialiser.serialise_policy   s    CC (&!!6#5#5--v/@/@  &"@"@%%v'<'<##<% (&CCC (&!!6#5#5--v/@/@  &"@"@%%v'<'<##<% (& %& %& Wm4@

,f.?.?@
-v/A/AB
,**#--"("@"@ // //"//	1 %%EJ7 &
7--	/r   c               s$    V ^8  d   QhRRRRRR/# )r   r6   r   r7   r   r   r   r   r   r   r   r*     s!     	- 	-I 	-( 	-x 	-r   c                s    VP                   '       g   V# \        VRRR7       \        V4      p\        V4       VP	                  V4      # )z4Provide an XML structure for embedded XML signature.zds:SignatureZplaceholder)r.   )r@   r   r	   r
   Zsign_xml)r,   r6   r7   s   &&&r   r5   Z"PSKCSerialiser.serialise_signature  sB     }}}	>m<#I.	!!),,r   r   N)Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__Zclassmethodr-   r+   r0   rC   r2   r4   rZ   r_   r`   r5   Z__static_attributes__r   r   r   r%   r%   2   s    A. . B B < < ? ?2 9 90 0 02 !2 !2F +D +DZ / /2 	- 	-r   r%   )$re   Z
__future__r    r!   Ztypingr   r   r   r   Zpskc.keyr   r   Zpskc.xmlr   r   r	   r
   r   Z
lxml.etreer   r'   r   Zpskc.devicer   Zpskc.encryptionr   r   r   Zpskc.macr   Zpskc.policyr   Zpskc.signaturer   r$   r%   r   r   r   <module>rf      sK   * 0 "  8 8 : G G#"9"(,n- n-r   