;i dZddlZddlZejeefZdedejeeffdZdedededej efd Z dededefd Z dededefd Z dS) z0Functions that load and write PEM-encoded files.N pem_markerreturncvt|ts|d}d|zdzd|zdzfS)z: Returns the start and end PEM markers, as bytes. asciis -----BEGIN s-----s -----END ) isinstancebytesencode)rs ;C:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\rsa/pem.py_markersr sO j% ( (0&&w//  #h.z!H, contents pem_startpem_endc#,Kd}d}|D]P}|}|s||kr|rtd|zd}d}8|s;|r ||krd}n d|vrL|VQ|std|z|rtd|zdS)z7Generator over PEM lines between pem_start and pem_end.FzSeen start marker "%r" twiceT:zNo PEM start marker "%r" foundzNo PEM end marker "%r" foundN) splitlinesstrip ValueError)r rr in_pem_partseen_pem_startlines r _pem_linesr&sKN##%%zz||   9   M !?)!KLLLK!N     47??K E 4<<   G9IEFFFC7'ABBBCCr ct|ts|d}t|\}}dt |||D}d|}t j|S)aLoads a PEM file. :param contents: the contents of the file to interpret :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' when your file has '-----BEGIN RSA PRIVATE KEY-----' and '-----END RSA PRIVATE KEY-----' markers. :return: the base64-decoded content between the start and end markers. @raise ValueError: when the content is invalid, for example when the start marker cannot be found. rcg|]}|Sr).0rs r zload_pem..gsKKK$KKKr r )rrr r rjoinbase64standard_b64decode)r rrr pem_linespems r load_pemr#Ss| h & &,??7++#J//YKK*Xy'"J"JKKKI ((9  C  $S ) ))r ct|\}}tj|dd}|g}t dt |dD]$}|||dz}||%|||dd|S)ajSaves a PEM file. :param contents: the contents to encode in PEM format :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' when your file has '-----BEGIN RSA PRIVATE KEY-----' and '-----END RSA PRIVATE KEY-----' markers. :return: the base64-encoded content between the start and end markers, as bytes.  r r@)r rstandard_b64encodereplacerangelenappendr)r rrrb64r! block_startblocks r save_pemr/ns$J//Y  #H - - 5 5eS A AC IQC"--  K+"223 W S ::i  r ) __doc__rtypingUnionstrr FlexiTextTupler Iteratorrr#r/rr r r7s76  Le $   v|E5L'A    *C*C5*C5*CV_UZE[*C*C*C*CZ*y*i*E****6!u!)!!!!!!!r