
     h                     p    d dl Z d dlmZmZ d dlmZmZmZ d dlmZ ddgZ	de
de
fd	Z G d
 d          ZdS )    N)datetimetimezone)DictOptionalUnion)core
POEManagerdigest_for_poedatareturnc                 N    t          j        |                                           S N)hashlibsha256digest)r   s    Y/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko_certvalidator/ltv/poe.pyr
   r
   
   s    >$&&(((    c                       e Zd ZdZddee         fdZ	 ddeee	j
        f         dee         defdZ	 dd	edee         defd
Zd Zdeee	j
        f         defdZd Zd ZdS )r	   z~
    Class to manage proof-of-existence (POE) claims.

    :param current_dt_override:
        Override the current time.
    Ncurrent_dt_overridec                 "    i | _         || _        d S r   )_poes_current_dt_override)selfr   s     r   __init__zPOEManager.__init__   s    ,.
$7!!!r   r   dtr   c                     t          |t          j                  r|                                }t	          |          }|                     ||          S )a9  
        Register a new POE claim if no POE for an earlier time is available.

        :param data:
            Data to register a POE claim for.
        :param dt:
            The POE time to register. If ``None``, assume the current time.
        :return:
            The oldest POE datetime available.
        )
isinstancer   	Asn1Valuedumpr
   register_by_digest)r   r   r   r   s       r   registerzPOEManager.register   sH     dDN++ 	99;;D%%&&vr222r   r   c                     |p$| j         pt          j        t          j                  }	 | j        |         }||k    r|S n# t          $ r Y nw xY w|| j        |<   |S )aQ  
        Register a new POE claim if no POE for an earlier time is available.

        :param digest:
            SHA-256 digest of the data to register a POE claim for.
        :param dt:
            The POE time to register. If ``None``, assume the current time.
        :return:
            The oldest POE datetime available.
        )r   r   nowr   utcr   KeyError)r   r   r   cur_poes       r   r    zPOEManager.register_by_digest,   sw     J4,JX\0J0J	j(G"}}  	 	 	D	
6	s   ? 
AAc                 N    t          | j                                                  S )z
        Iterate over the current earliest known POE for all items currently
        being managed.

        Returns an iterator with ``(digest, poe_dt)`` pairs.
        )iterr   items)r   s    r   __iter__zPOEManager.__iter__C   s      DJ$$&&'''r   itemc                 0    |                      |d          S )a  
        Return the earliest available POE for an item.

        .. note::
            This is an alias for :meth:`register` with `dt=None`, and hence
            will register the current time as the POE time for the given item.
            This side effect is intentional.

        :param item:
            Item to get the current POE time for.
        :return:
            A datetime object representing the earliest available POE for the
            item.
        N)r   )r!   )r   r+   s     r   __getitem__zPOEManager.__getitem__L   s     }}Td}+++r   c                     t          |t                    st          t          |          D ]\  }}|                     ||           dS )ze
        Combine data in another POE manager with the POEs managed by this
        instance.
        N)r   r	   	TypeErrorr(   r    )r   otherr   r   s       r   __ior__zPOEManager.__ior__]   sW    
 %,, 	Ou++ 	0 	0JFB##FB////	0 	0r   c                 b    t          | j                  }t          | j                  |_        |S )N)r   )r	   r   dictr   )r   new_instances     r   __copy__zPOEManager.__copy__g   s-    !d6OPPP!$*--r   r   )__name__
__module____qualname____doc__r   r   r   r   bytesr   r   r!   r    r*   r-   r1   r5    r   r   r	   r	      s"        8 8HX,> 8 8 8 8
 LP3 3%/036>x6H3	3 3 3 3& 7; !)(!3	   .( ( (,eT^&; < , , , , ,"0 0 0    r   )r   r   r   typingr   r   r   
asn1cryptor   __all__r:   r
   r	   r;   r   r   <module>r?      s     ' ' ' ' ' ' ' ' ( ( ( ( ( ( ( ( ( (      )
*) )5 ) ) ) )\ \ \ \ \ \ \ \ \ \r   