a
    ‚4iå!  ã                   @   sF   d dl mZ ddlT ddlT ddlT ddlT d dlZG dd„ dƒZdS )é    )Údefaultdicté   )Ú*Nc                   @   sl   e Zd Zedd„ ƒZedd„ ƒZeƒ ZdZdZ	e
 
¡ dfdd„Zdd„ Zd	d
„ Zdd„ Ze
 
¡ fdd„ZdS )Ú	keyseriesc                   C   s   t tƒS ©N©r   Úlist© r	   r	   ú//usr/lib/python3/dist-packages/isc/keyseries.pyÚ<lambda>   ó    zkeyseries.<lambda>c                   C   s   t tƒS r   r   r	   r	   r	   r
   r      r   Nc                 C   sØ   || _ || _t| ¡ ƒ| _| ¡ D ]°}| j |¡ ||  ¡ D ]’\}}| ¡ D ]\}|j	r‚| 
¡ rl| 
¡ |k sª| j| |  |¡ qN| 
¡ r–| 
¡ |k sN| j| |  |¡ qN| j| |  ¡  | j| |  ¡  q>q"d S r   )Ú_kdictÚ_contextÚsetZmissingÚ_zonesÚzonesÚaddÚitemsÚvaluesÚsepÚdeleteÚ_KÚappendÚ_ZÚsort)ÚselfZkdictÚnowÚcontextÚzoneÚalgÚkeysÚkr	   r	   r
   Ú__init__   s    zkeyseries.__init__c                 c   sR   | j D ]F}| j| jfD ]4}||vr$q||  ¡ D ]\}}|D ]
}|V  q<q0qqd S r   )r   r   r   r   )r   r   Ú
collectionr   r    Úkeyr	   r	   r
   Ú__iter__.   s    
zkeyseries.__iter__c                 C   s   | D ]}t dt|ƒ ƒ qd S )Nz%s)ÚprintÚrepr)r   r!   r	   r	   r
   Údump7   s    zkeyseries.dumpc                 K   sê  |  dd¡}|sd S |d }|jr>|j}|jp0d}|jp:d}	n|j}|jpLd}|jpVd}	| ¡ }
| 	¡ }|
rt|
|kr‚| 
|¡ |}
|rŽ||krœ| |¡ |}| ¡ }d}|sÐ|jd
i |¤Ž |jdi |¤Ž nþ|râ|| |kr@|s2|| || | kr2|j|| fi |¤Ž |j|| |	 fi |¤Ž qÎ|sr|j|| | fi |¤Ž |j|| |	 | fi |¤Ž nÌ||k r~nÀ|| |kr¾|j|| fi |¤Ž |j|| |	 fi |¤Ž n€|| || | kr|j|| fi |¤Ž |j|| |	 fi |¤Ž n8|j|| | fi |¤Ž |j|| |	 | fi |¤Ž nŽ| ¡ }|r`||	 || krx|j||	 fi |¤Ž nV|sš|j||	 | fi |¤Ž n4||| k rªn$|||	 k rÎ|j||	 fi |¤Ž |j|jkrè| |j¡ |}|dd … D ]}|sb|j
di |¤Ž |jdi |¤Ž |jdi |¤Ž |jdi |¤Ž |j|jkrø| |j¡ qø| ¡ }|| }
|j|fi |¤Ž |j
|
fi |¤Ž |j|| fi |¤Ž |j|| |	 fi |¤Ž |j||	 fi |¤Ž |j|jkrö| |j¡ |}qø|r¢| ¡ r¢| ¡ ||j k r¢|j| jd fi |¤Ž |j| jd | jd	 |fi |¤Ž}|j| 	¡ | fi |¤Ž |j| ¡ |	 fi |¤Ž | |¡ |}qþ|jdi |¤Ž |jdi |¤Ž |D ]}|j| jd fi |¤Ž qÆd S )NÚforceFr   i ' i,  r   Zsettime_pathÚkeygen_pathÚ	randomdev)N)N)N)N)N)N)N)N)Úgetr   Zksk_rollperiodZksk_prepublishZksk_postpublishZzsk_rollperiodZzsk_prepublishZzsk_postpublishZpublishZactivateZ
setpublishZsetactivateZinactiveZsetinactiveZ	setdeleter   ÚkeyttlZttlZsetttlZcoverageZcommitr   Zgenerate_successorr   )r   r    Úpolicyr   Úkwargsr)   r$   ZrpZprepubZpostpubÚpÚaÚiZfudgeÚdÚprevr	   r	   r
   Ú	fixseries;   s²    




 
 $ýü
zkeyseries.fixseriesc                 K   sú  |  d| j¡}|  d| j  dd ¡¡}|  dd¡}|D ]¾}g }| |¡}	|pT|	jpTd}|	j}
t |
¡}d|vsv|d sät| j	| | ƒdkrÔtj
| jd	 | jd
 |||
|	jd|	jp´dfi |¤Ž}| j	| |  |¡ | | j	| ¡ d|vsö|d sht| j| | ƒdkrXtj
| jd	 | jd
 |||
|	jd|	jp8dfi |¤Ž}| j| |  |¡ | | j| ¡ |D ]†}| ¡ D ]v\}}||krŽqxz| j||	|fi |¤Ž W nB tyê } z(td|t |¡t|ƒf ƒ‚W Y d }~n
d }~0 0 qxqlq4d S )Nr   ÚdirZ	keys_pathr)   FÚ.Zkskr   r*   r+   i  ZzskTz	%s/%s: %s)r,   r   r   r.   Z	directoryÚ	algorithmÚdnskeyÚalgnumÚlenr   ZgenerateZzsk_keysizer-   r   r   Zksk_keysizer   r5   Ú	ExceptionZalgstrÚstr)r   Zpoliciesr   r/   r   Zkeys_dirr)   r   Úcollectionsr.   r   r:   r!   r#   r8   r    Úer	   r	   r
   Úenforce_policy²   sf    


ø	÷
ø	÷
ÿzkeyseries.enforce_policy)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   Útimer"   r%   r(   r5   r@   r	   r	   r	   r
   r      s   	wr   )r>   r   r9   ZkeydictZkeyeventr.   rD   r   r	   r	   r	   r
   Ú<module>   s   