o
    hP                  	   @   sn   d Z dgZddlZddlZddlmZmZ ejejej	ej
ejejejejejf	Zd
dededefd	dZdS )z&An implementation of RFC4013 SASLprep.saslprep    N)CallableIterableTdataprohibit_unassigned_code_pointsreturnc                    s   |r	t tjf }nt }tjtjdfdd| D } tjd| } tj	}|| d r?|| d s8t
d|tjf }n||f }| D ] t fdd	|D rWt
d
qF| S )a  An implementation of RFC4013 SASLprep.

    :param data:
        The string to SASLprep.
    :param prohibit_unassigned_code_points:
        RFC 3454 and RFCs for various SASL mechanisms distinguish between
        `queries` (unassigned code points allowed) and
        `stored strings` (unassigned code points prohibited). Defaults
        to ``True`` (unassigned code points are prohibited).

    :return: The SASLprep'ed version of `data`.
     c                    s$   g | ]} |s|rd n|qS )  ).0elt)in_table_b1in_table_c12r
   X/var/www/html/pos/venv/lib/python3.10/site-packages/pyhanko/pdf_utils/crypt/_saslprep.py
<listcomp>F   s    zsaslprep.<locals>.<listcomp>NFKCr   z$SASLprep: failed bidirectional checkc                 3   s    | ]}| V  qd S )Nr
   )r   in_table)charr
   r   	<genexpr>c   s    zsaslprep.<locals>.<genexpr>z+SASLprep: failed prohibited character check)_PROHIBITED
stringprepin_table_a1r   r   joinunicodedata	ucd_3_2_0	normalizein_table_d1
ValueErrorin_table_d2any)r   r   
prohibitedr   r
   )r   r   r   r   r   ,   s,   

)T)__doc____all__r   r   typingr   r   r   in_table_c21_c22in_table_c3in_table_c4in_table_c5in_table_c6in_table_c7in_table_c8in_table_c9r   strboolr   r
   r
   r
   r   <module>   s    