
    ¿igi                     |   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZ 	 d dlZd	Zn# e$ r d
ZY nw xY wddZddZ G d dej                  Z G d dej                  Z G d dej                  Zi fdZedk    rd Z  ej!        d           dS dS )    N)SkipTest)RSA)a2b_hexlist_test_cases)PEM)btostrFileNotFoundError)inverse)asn1TFrbc                 H   d }	 t           s7t          t          j        t	          j        t          j                  |           d}t          j                            t          j	                  }t          j        
                    t	          j        j
        |g|R  |           }t          ||          5 }|                                }d d d            n# 1 swxY w Y   n/# t          $ r" t          j        d| z  t          d           Y nw xY w|t!          d| z            |S )N)	PublicKeyr   z"Skipping tests for RSA based on %s   )
stacklevelz
Missing %s)test_vectors_availabler
   errnoENOENTosstrerrorpathdirnamepycryptodome_test_vectors__file__joinopenreadwarningswarnUserWarningr   )	file_namemoderesults	dir_compsinit_dirfull_file_namefile_ins          i/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/PublicKey/test_import_RSA.py	load_filer)   ,   s`   G$% 	/#EL$&K$=$=$-/ / / )	7??#<#EFFbgl8&Hi&H&H&H)TT.$'' 	%7llnnG	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  $ $ $:YF!!"	$ 	$ 	$ 	$ 	$ 	$$
 |i/000Ns6   B.C 2CC CC CC )D
DPUBLICc                      dd l  fdt          dt                     d          D             }t          d|z            }|t          d                              |          z  }|t          d|z            z  }|S )Nr   c                 P    g | ]"}                     ||d z                      #S )0   )
b2a_base64).0ibinasciiders     r(   
<listcomp>zder2pem.<locals>.<listcomp>H   s3    OOO1h!!#a"f+..OOO    r-   z-----BEGIN %s KEY-----
 z-----END %s KEY-----)r1   rangelenr   r   )r2   textchunkspemr1   s   `   @r(   der2pemr;   F   s    OOOOOOOOaS28N8NOOOF
&-
.
.C1R55::fC1#d*+++CJr4   c                      e Zd ZdZdZdZdZ ed          Z e	d
                    dd                    Z e	d	
                    dd                    Z e	d

                    dd                    Z ed
                    dd          d          ZdZ ed
                    dd          d          Z ed
                    dd          d          Z ed
                    dd          d          Z ed
                    dd          d          Z eee          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4S )5ImportKeyTestsa  -----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAL8eJ5AKoIsjURpcEoGubZMxLD7+kT+TLr7UkvEtFrRhDDKMtuII
q19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4UCAwEAAQJACUSDEp8RTe32ftq8IwG8
Wojl5mAd1wFiIOrZ/Uv8b963WJOJiuQcVN29vxU5+My9GPZ7RA3hrDBEAoHUDPrI
OQIhAPIPLz4dphiD9imAkivY31Rc5AfHJiQRA7XixTcjEkojAiEAyh/pJHks/Mlr
+rdPNEpotBjfV4M4BkgGAA/ipcmaAjcCIQCHvhwwKVBLzzTscT2HeUdEeBMoiXXK
JACAr3sJQJGxIQIgarRp+m1WSKV1MciwMaTOnbU7wxFs9DP1pva76lYBzgUCIQC9
n0CnZCJ6IZYqSt0H5N7+Q+2Ro64nuwV/OSQfM6sBwQ==
-----END RSA PRIVATE KEY-----a	  -----BEGIN PRIVATE KEY-----
MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvx4nkAqgiyNRGlwS
ga5tkzEsPv6RP5MuvtSS8S0WtGEMMoy24girX0WsvilQgzKY8xIsGfeEkt7fQPDj
wZAzhQIDAQABAkAJRIMSnxFN7fZ+2rwjAbxaiOXmYB3XAWIg6tn9S/xv3rdYk4mK
5BxU3b2/FTn4zL0Y9ntEDeGsMEQCgdQM+sg5AiEA8g8vPh2mGIP2KYCSK9jfVFzk
B8cmJBEDteLFNyMSSiMCIQDKH+kkeSz8yWv6t080Smi0GN9XgzgGSAYAD+KlyZoC
NwIhAIe+HDApUEvPNOxxPYd5R0R4EyiJdcokAICvewlAkbEhAiBqtGn6bVZIpXUx
yLAxpM6dtTvDEWz0M/Wm9rvqVgHOBQIhAL2fQKdkInohlipK3Qfk3v5D7ZGjrie7
BX85JB8zqwHB
-----END PRIVATE KEY-----))testa+  -----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,AF8F9A40BD2FA2FC

Ckl9ex1kaVEWhYC2QBmfaF+YPiR4NFkRXA7nj3dcnuFEzBnY5XULupqQpQI3qbfA
u8GYS7+b3toWWiHZivHbAAUBPDIZG9hKDyB9Sq2VMARGsX1yW1zhNvZLIiVJzUHs
C6NxQ1IJWOXzTew/xM2I26kPwHIvadq+/VaT8gLQdjdH0jOiVNaevjWnLgrn1mLP
BCNRMdcexozWtAFNNqSzfW58MJL2OdMi21ED184EFytIc1BlB+FZiGZduwKGuaKy
9bMbdb/1PSvsSzPsqW7KSSrTw6MgJAFJg6lzIYvR5F4poTVBxwBX3+EyEmShiaNY
IRX3TgQI0IjrVuLmvlZKbGWP18FXj7I7k9tSsNOOzllTTdq3ny5vgM3A+ynfAaxp
dysKznQ6P+IoqML1WxAID4aGRMWka+uArOJ148Rbj9s=
-----END RSA PRIVATE KEY-----)wintera  -----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBpjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIeZIsbW3O+JcCAggA
MBQGCCqGSIb3DQMHBAgSM2p0D8FilgSCAWBhFyP2tiGKVpGj3mO8qIBzinU60ApR
3unvP+N6j7LVgnV2lFGaXbJ6a1PbQXe+2D6DUyBLo8EMXrKKVLqOMGkFMHc0UaV6
R6MmrsRDrbOqdpTuVRW+NVd5J9kQQh4xnfU/QrcPPt7vpJvSf4GzG0n666Ki50OV
M/feuVlIiyGXY6UWdVDpcOV72cq02eNUs/1JWdh2uEBvA9fCL0c07RnMrdT+CbJQ
NjJ7f8ULtp7xvR9O3Al/yJ4Wv3i4VxF1f3MCXzhlUD4I0ONlr0kJWgeQ80q/cWhw
ntvgJwnCn2XR1h6LA8Wp+0ghDTsL2NhJpWd78zClGhyU4r3hqu1XDjoXa7YCXCix
jCV15+ViDJzlNCwg+W6lRg18sSLkCT7alviIE0U5tHc6UPbbHwT5QqAxAABaP+nZ
CGqJGyiwBzrKebjgSm/KRd4C91XqcsysyH2kKPfT51MLAoD4xelOURBP
-----END ENCRYPTED PRIVATE KEY-----z-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL8eJ5AKoIsjURpcEoGubZMxLD7+kT+T
Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4UCAwEAAQ==
-----END PUBLIC KEY-----zssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAQQC/HieQCqCLI1EaXBKBrm2TMSw+/pE/ky6+1JLxLRa0YQwyjLbiCKtfRay+KVCDMpjzEiwZ94SS3t9A8OPBkDOF comment
a  3082013b020100024100bf1e27900aa08b23511a5c1281ae6d93312c3efe
    913f932ebed492f12d16b4610c328cb6e208ab5f45acbe2950833298f312
    2c19f78492dedf40f0e3c190338502030100010240094483129f114dedf6
    7edabc2301bc5a88e5e6601dd7016220ead9fd4bfc6fdeb75893898ae41c
    54ddbdbf1539f8ccbd18f67b440de1ac30440281d40cfac839022100f20f
    2f3e1da61883f62980922bd8df545ce407c726241103b5e2c53723124a23
    022100ca1fe924792cfcc96bfab74f344a68b418df578338064806000fe2
    a5c99a023702210087be1c3029504bcf34ec713d877947447813288975ca
    240080af7b094091b12102206ab469fa6d5648a57531c8b031a4ce9db53b
    c3116cf433f5a6f6bbea5601ce05022100bd9f40a764227a21962a4add07
    e4defe43ed91a3ae27bb057f39241f33ab01c1
     r5   a  30820155020100300d06092a864886f70d01010105000482013f3082013
    b020100024100bf1e27900aa08b23511a5c1281ae6d93312c3efe913f932
    ebed492f12d16b4610c328cb6e208ab5f45acbe2950833298f3122c19f78
    492dedf40f0e3c190338502030100010240094483129f114dedf67edabc2
    301bc5a88e5e6601dd7016220ead9fd4bfc6fdeb75893898ae41c54ddbdb
    f1539f8ccbd18f67b440de1ac30440281d40cfac839022100f20f2f3e1da
    61883f62980922bd8df545ce407c726241103b5e2c53723124a23022100c
    a1fe924792cfcc96bfab74f344a68b418df578338064806000fe2a5c99a0
    23702210087be1c3029504bcf34ec713d877947447813288975ca240080a
    f7b094091b12102206ab469fa6d5648a57531c8b031a4ce9db53bc3116cf
    433f5a6f6bbea5601ce05022100bd9f40a764227a21962a4add07e4defe4
    3ed91a3ae27bb057f39241f33ab01c1
    z305c300d06092a864886f70d0101010500034b003048024100bf1e27900a
    a08b23511a5c1281ae6d93312c3efe913f932ebed492f12d16b4610c328c
    b6e208ab5f45acbe2950833298f3122c19f78492dedf40f0e3c190338502
    03010001
    zBF 1E 27 90 0A A0 8B 23 51 1A 5C 12 81 AE 6D 93 31 2C 3E FE 91 3F 93 2E BE D4 92 F1 2D 16 B4 61 0C 32 8C B6 E2 08 AB 5F 45 AC BE 29 50 83 32 98 F3 12 2C 19 F7 84 92 DE DF 40 F0 E3 C1 90 33 85     z09 44 83 12 9F 11 4D ED F6 7E DA BC 23 01 BC 5A 88 E5 E6 60 1D D7 01 62 20 EA D9 FD 4B FC 6F DE B7 58 93 89 8A E4 1C 54 DD BD BF 15 39 F8 CC BD 18 F6 7B 44 0D E1 AC 30 44 02 81 D4 0C FA C8 39zb00 F2 0F 2F 3E 1D A6 18 83 F6 29 80 92 2B D8 DF 54 5C E4 07 C7 26 24 11 03 B5 E2 C5 37 23 12 4A 23zb00 CA 1F E9 24 79 2C FC C9 6B FA B7 4F 34 4A 68 B4 18 DF 57 83 38 06 48 06 00 0F E2 A5 C9 9A 02 37zb00 BD 9F 40 A7 64 22 7A 21 96 2A 4A DD 07 E4 DE FE 43 ED 91 A3 AE 27 BB 05 7F 39 24 1F 33 AB 01 C1c                    t          j        | j                  }|                     |                                           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   dS )z+Verify import of RSAPrivateKey DER SEQUENCEN)r   	importKey	rsaKeyDER
assertTruehas_privateassertEqualnedpqselfkeys     r(   testImportKey1zImportKeyTests.testImportKey1   s    mDN++))***'''''''''''''''''r4   c                    t          j        | j                  }|                     |                                           |                     |j        | j                   |                     |j        | j                   dS )z2Verify import of SubjectPublicKeyInfo DER SEQUENCEN)r   rD   rsaPublicKeyDERassertFalserG   rH   rI   rJ   rN   s     r(   testImportKey2zImportKeyTests.testImportKey2   sl    mD011**+++''''''''r4   c                    t          j        | j                  }|                     |                                d           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   dS )HVerify import of RSAPrivateKey DER SEQUENCE, encoded with PEM as unicodeTN)
r   rD   	rsaKeyPEMrH   rG   rI   rJ   rK   rL   rM   rN   s     r(   testImportKey3unicodez$ImportKeyTests.testImportKey3unicode   s    mDN++**4000'''''''''''''''''r4   c                    t          j        t          | j                            }|                     |                                d           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   dS )zLVerify import of RSAPrivateKey DER SEQUENCE, encoded with PEM as byte stringTN)r   rD   r   rX   rH   rG   rI   rJ   rK   rL   rM   rN   s     r(   testImportKey3bytesz"ImportKeyTests.testImportKey3bytes   s    mAdn--..**4000'''''''''''''''''r4   c                    t          j        | j                  }|                     |                                d           |                     |j        | j                   |                     |j        | j                   dS )rW   FN)r   rD   rsaPublicKeyPEMrH   rG   rI   rJ   rN   s     r(   testImportKey4unicodez$ImportKeyTests.testImportKey4unicode   sn    mD011**5111''''''''r4   c                 "   t          j        t          | j                            }|                     |                                d           |                     |j        | j                   |                     |j        | j                   dS )zSVerify import of SubjectPublicKeyInfo DER SEQUENCE, encoded with PEM as byte stringFN)r   rD   r   r]   rH   rG   rI   rJ   rN   s     r(   testImportKey4bytesz"ImportKeyTests.testImportKey4bytes   sv    mAd23344**5111''''''''r4   c                     t          j        | j                  }|                    |                    d                    }|                     |d           dS )8Verifies that the imported key is still a valid RSA pairY   N)r   rD   rX   _encrypt_decryptrH   rO   rP   idems      r(   testImportKey5zImportKeyTests.testImportKey5   L    mDN++||CLL,,--r"""""r4   c                     t          j        | j                  }|                    |                    d                    }|                     |d           dS )rb   A   N)r   rD   rE   rd   re   rH   rf   s      r(   testImportKey6zImportKeyTests.testImportKey6   ri   r4   c                     t          j        | j                  }|                     |j        | j                   |                     |j        | j                   dS )z#Verify import of OpenSSH public keyN)r   rD   rsaPublicKeyOpenSSHrH   rI   rJ   rN   s     r(   testImportKey7zImportKeyTests.testImportKey7   sN    mD455''''''''r4   c                    | j         D ]}t          j        |d         |d                   }|                     |                                           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   dS )z6Verify import of encrypted PrivateKeyInfo DER SEQUENCE   r   N)rsaKeyEncryptedPEMr   rD   rF   rG   rH   rI   rJ   rK   rL   rM   )rO   trP   s      r(   testImportKey8zImportKeyTests.testImportKey8  s    ( 	, 	,A-!ad++COOCOO--...SUDF+++SUDF+++SUDF+++SUDF+++SUDF++++	, 	,r4   c                    t          j        | j                  }|                     |                                           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   dS )z8Verify import of unencrypted PrivateKeyInfo DER SEQUENCEN)r   rD   
rsaKeyDER8rF   rG   rH   rI   rJ   rK   rL   rM   rN   s     r(   testImportKey9zImportKeyTests.testImportKey9      mDO,,))***'''''''''''''''''r4   c                    t          j        | j                  }|                     |                                           |                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   dS )zJVerify import of unencrypted PrivateKeyInfo DER SEQUENCE, encoded with PEMN)r   rD   
rsaKeyPEM8rF   rG   rH   rI   rJ   rK   rL   rM   rN   s     r(   testImportKey10zImportKeyTests.testImportKey10  rx   r4   c                     t          j        ddg                                          }t          j        |          }|                     |j        d           |                     |j        d           dS )z*Verify import of RSAPublicKey DER SEQUENCE      N)r   DerSequenceencoder   rD   rH   rI   rJ   )rO   r2   rP   s      r(   testImportKey11zImportKeyTests.testImportKey11%  sg    Aw''..00mC  ###"""""r4   c                    t          j        ddg                                          }t          |          }t	          j        |          }|                     |j        d           |                     |j        d           dS )z<Verify import of RSAPublicKey DER SEQUENCE, encoded with PEMr}   r~   N)	r   r   r   r;   r   rD   rH   rI   rJ   )rO   r2   r:   rP   s       r(   testImportKey12zImportKeyTests.testImportKey12,  sr    Aw''..00cllmC  ###"""""r4   c                    d                     | j                                                  }t          j        |          }|                     |j        | j                   |                     |j        | j                   |                     |j        | j                   |                     |j	        | j	                   |                     |j
        | j
                   d S )Nz
)r   rX   
splitlinesr   rD   rH   rI   rJ   rK   rL   rM   )rO   	pem_cr_lfrP   s      r(   test_import_key_windows_cr_lfz,ImportKeyTests.test_import_key_windows_cr_lf4  s    KK 9 9 ; ;<<	mI&&'''''''''''''''''r4   c                 R    |                      t          t          j        d           d S )Nr4   )assertRaises
ValueErrorr   
import_key)rO   s    r(   test_import_emptyz ImportKeyTests.test_import_empty=  s"    *cnc:::::r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                    d          }| 	                    || j
                   d S NDER)r   	constructrI   rJ   rK   rL   rM   pInv
export_keyrH   rE   rO   rP   derKeys      r(   testExportKey1zImportKeyTests.testExportKey1A  sY    mTVTVTVTVTVTYOPP&&00000r4   c                     t          j        | j        | j        g          }|                    d          }|                     || j                   d S r   )r   r   rI   rJ   r   rH   rS   r   s      r(   testExportKey2zImportKeyTests.testExportKey2F  sJ    mTVTV,--&&!566666r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                    d          }| 	                    |t          | j                             d S Nr   )r   r   rI   rJ   rK   rL   rM   r   r   rH   r   rX   rO   rP   pemKeys      r(   testExportKey3zImportKeyTests.testExportKey3K  sa    mTVTVTVTVTVTYOPP&&4>!2!233333r4   c                     t          j        | j        | j        g          }|                    d          }|                     |t          | j                             d S r   )r   r   rI   rJ   r   rH   r   r]   r   s      r(   testExportKey4zImportKeyTests.testExportKey4P  sR    mTVTV,--&&4#7!8!899999r4   c                 N   t          j        | j        | j        g          }|                    d                                          }| j                                        }|                     |d         |d                    |                     |d         |d                    d S )NOpenSSHr   rq   )r   r   rI   rJ   r   splitrn   rH   )rO   rP   	openssh_1	openssh_2s       r(   testExportKey5zImportKeyTests.testExportKey5U  s    mTVTV,--NN9--3355	,2244	1y|4441y|44444r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                    dd          }| 	                    || j
                   d S )Nr      pkcs)r   r   rI   rJ   rK   rL   rM   r   r   rH   rv   r   s      r(   testExportKey7zImportKeyTests.testExportKey7\  s]    mTVTVTVTVTVTYOPPA..11111r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                    dd          }| 	                    |t          | j                             d S )Nr   r   r   )r   r   rI   rJ   rK   rL   rM   r   r   rH   r   rz   r   s      r(   testExportKey8zImportKeyTests.testExportKey8a  se    mTVTVTVTVTVTYOPPA..4?!3!344444r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                     t          |j
        d           d S )Nzinvalid-formatr   r   rI   rJ   rK   rL   rM   r   r   r   r   rN   s     r(   testExportKey9zImportKeyTests.testExportKey9f  sK    mTVTVTVTVTVTYOPP*cn6FGGGGGr4   c                 p   t          j        | j        | j        | j        | j        | j        | j        g          }|                    dd          }| 	                    t          |                              d          dk               | 	                    t          |                              d          dk               t          j        |d          }|                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S )Nr   r>   4,ENCRYPTEDBEGIN RSA PRIVATE KEYr   r   rI   rJ   rK   rL   rM   r   r   rF   r	   findrD   rH   rO   rP   outkeyinkeys       r(   testExportKey10zImportKeyTests.testExportKey10j  s     mTVTVTVTVTVTYOPPv..f**=992=>>>f**+BCCRGHHHff--(((((((((((r4   c                 t   t          j        | j        | j        | j        | j        | j        | j        g          }|                    ddd          }| 	                    t          |                              d          dk               | 	                    t          |                              d          dk               t          j        |d          }|                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S )Nr   r>   rq   r   r   r   r   r   r   s       r(   testExportKey11zImportKeyTests.testExportKey11v  s     mTVTVTVTVTVTYOPPvA66f**=992=>>>f**+BCCRGHHHff--(((((((((((r4   c                 t   t          j        | j        | j        | j        | j        | j        | j        g          }|                    ddd          }| 	                    t          |                              d          dk               | 	                    t          |                              d          dk               t          j        |d          }|                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S )Nr   r>   r   r   r   r   zBEGIN PRIVATE KEYr   r   s       r(   testExportKey12zImportKeyTests.testExportKey12  s     mTVTVTVTVTVTYOPPvA66f**=992=>>>f**+>??CDDDff--(((((((((((r4   c                 v   t          j        | j        | j        | j        | j        | j        | j        g          }|                    dddd          }| 	                    t          |                              d          dk               | 	                    t          |                              d          dk               t          j        |d          }|                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S )	Nr   r>   r   z"PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC)r   
protectionr   r   BEGIN ENCRYPTED PRIVATE KEYr   r   s       r(   testExportKey13zImportKeyTests.testExportKey13  s    mTVTVTVTVTVTYOPPvA?   A Af**=992=>>>f**+HII2MNNNff--(((((((((((r4   c                    t          j        | j        | j        | j        | j        | j        | j        g          }|                    ddd          }t          j	        |d          }| 
                    |j        |j                   | 
                    |j        |j                   | 
                    |j        |j                   d S )Nr   r>   r   r   )r   r   rI   rJ   rK   rL   rM   r   r   rD   rH   r   s       r(   testExportKey14zImportKeyTests.testExportKey14  s     mTVTVTVTVTVTYOPPvA66ff--(((((((((((r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                     t          |j
        ddd           d S )Nr   r>   rq   r   rN   s     r(   testExportKey15zImportKeyTests.testExportKey15  sP     mTVTVTVTVTVTYOPP*cneVQGGGGGr4   c                    t          j        | j        | j        | j        | j        | j        | j        g          }|                    ddddddi          }| 	                    t          |                              d          d	k               | 	                    t          |                              d
          d	k               t          j        t          |                    d         }t          j                                        |          }t          j                                        |d                   }t          j                                        |d                   }t          j                                        |d                   }t          j                                        |d                   }|                     |d         d           t          j        |d          }	|                     |j        |	j                   |                     |j        |	j                   |                     |j        |	j                   d S )Nr   r>   r   z"PBKDF2WithHMAC-SHA512AndAES256-CBCiteration_count{   )r   r   prot_paramsr   r   r   r   rq   )r   r   rI   rJ   rK   rL   rM   r   r   rF   r	   r   r   decoder   r   rH   rD   )
rO   rP   r   r2   seq1seq2seq3seq4seq5r   s
             r(   testExportKey16zImportKeyTests.testExportKey16  s    mTVTVTVTVTVTYOPPvA+O->s,C   " " 	f**=992=>>>f**+HII2MNNN jv''*!!((--!!((a11!!((a11!!((a11!!((a11a#&&&ff--(((((((((((r4   c                    t          j        | j                  }|                     |                                           |                     |j        | j                   |                     |j        | j                   dS )z/Verify that import_key is an alias to importKeyN)r   r   rS   rT   rG   rH   rI   rJ   rN   s     r(   test_import_keyzImportKeyTests.test_import_key  sl    nT122**+++''''''''r4   c                     t          j        t          | j                            }t          j        t	          | j                            }dS )z@Verify that import_key can be used on bytearrays and memoryviewsN)r   r   	bytearrayrS   
memoryviewrN   s     r(   test_import_key_ba_mvz$ImportKeyTests.test_import_key_ba_mv  s:    nYt';<<==nZ(<==>>r4   c                     t          j        | j        | j        | j        | j        | j        | j        g          }|                     |	                                |
                                           d S N)r   r   rI   rJ   rK   rL   rM   r   rH   r   	exportKeyrN   s     r(   test_exportKeyzImportKeyTests.test_exportKey  sX    mTVTVTVTVTVTYOPP))3==??;;;;;r4   N)9__name__
__module____qualname__rX   rz   rr   r]   r   rn   r   replacerE   rv   rS   intrI   rJ   rK   rL   rM   qInvr   r   rQ   rU   rY   r[   r^   r`   rh   rl   ro   rt   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r4   r(   r=   r=   O   s       !I	J@O !  i  j  j  	B I  	B J g 	B O 	  N  V  V  WZ  []  ^  ^  _a  	b  	bAA  N  V  V  WZ  []  ^  ^  _a  	b  	bApxxy|}  A  A  BD  	E  	EApxxy|}  A  A  BD  	E  	EA 3s{{|  AC  D  D  EG  H  HD71Q<<D( ( (( ( (( ( (( ( (( ( (( ( (# # ## # #( ( (	, 	, 	,( ( (( ( (# # ## # #( ( (; ; ;1 1 1
7 7 7
4 4 4
: : :
5 5 52 2 2
5 5 5
H H H
) 
) 
)
) 
) 
)
) 
) 
)) ) )) ) )H H H) ) )2( ( (? ? ?
< < < < <r4   r=   c                       e Zd Zd Zd ZdS )ImportKeyFromX509Certc                 `   d                                 }d}d}t          t          j        dd|          d          }t	          j        |          }|                     |j        |           |                     |j        |           | 	                    |
                                           d S )NaK  
-----BEGIN CERTIFICATE-----
MIICOjCCAaMCAQEwDQYJKoZIhvcNAQEEBQAwfjENMAsGA1UEChMEQWNtZTELMAkG
A1UECxMCUkQxHDAaBgkqhkiG9w0BCQEWDXNwYW1AYWNtZS5vcmcxEzARBgNVBAcT
Ck1ldHJvcG9saXMxETAPBgNVBAgTCE5ldyBZb3JrMQswCQYDVQQGEwJVUzENMAsG
A1UEAxMEdGVzdDAeFw0xNDA3MTExOTU3MjRaFw0xNzA0MDYxOTU3MjRaME0xCzAJ
BgNVBAYTAlVTMREwDwYDVQQIEwhOZXcgWW9yazENMAsGA1UEChMEQWNtZTELMAkG
A1UECxMCUkQxDzANBgNVBAMTBmxhdHZpYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAyG+kytdRj3TFbRmHDYp3TXugVQ81chew0qeOxZWOz80IjtWpgdOaCvKW
NCuc8wUR9BWrEQW+39SaRMLiQfQtyFSQZijc3nsEBu/Lo4uWZ0W/FHDRVSvkJA/V
Ex5NL5ikI+wbUeCV5KajGNDalZ8F1pk32+CBs8h1xNx5DyxuEHUCAwEAATANBgkq
hkiG9w0BAQQFAAOBgQCVQF9Y//Q4Psy+umEM38pIlbZ2hxC5xNz/MbVPwuCkNcGn
KYNpQJP+JyVTsPpO8RLZsAQDzRueMI3S7fbbwTzAflN0z19wvblvu93xkaBytVok
9VBAH28olVhy9b1MMeg2WOt5sUEQaFNPnwwsyiY9+HsRpvpRnPSQF+kyYVsshQ==
-----END CERTIFICATE-----
        rB   a  
00:c8:6f:a4:ca:d7:51:8f:74:c5:6d:19:87:0d:8a:
77:4d:7b:a0:55:0f:35:72:17:b0:d2:a7:8e:c5:95:
8e:cf:cd:08:8e:d5:a9:81:d3:9a:0a:f2:96:34:2b:
9c:f3:05:11:f4:15:ab:11:05:be:df:d4:9a:44:c2:
e2:41:f4:2d:c8:54:90:66:28:dc:de:7b:04:06:ef:
cb:a3:8b:96:67:45:bf:14:70:d1:55:2b:e4:24:0f:
d5:13:1e:4d:2f:98:a4:23:ec:1b:51:e0:95:e4:a6:
a3:18:d0:da:95:9f:05:d6:99:37:db:e0:81:b3:c8:
75:c4:dc:79:0f:2c:6e:10:75
        	[^0-9a-f]r5   rA   stripr   resubr   rD   rH   rJ   rI   rT   rG   )rO   x509_v1_certexponentmodulus_strmodulusrP   s         r(   test_x509v1z!ImportKeyFromX509Cert.test_x509v1  s     EGG 	$ 
 bf[[992>>mL)))))(((**+++++r4   c                 `   d                                 }d}d}t          t          j        dd|          d          }t	          j        |          }|                     |j        |           |                     |j        |           | 	                    |
                                           d S )NaC  
-----BEGIN CERTIFICATE-----
MIIEcjCCAlqgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEL
MAkGA1UECAwCTUQxEjAQBgNVBAcMCUJhbHRpbW9yZTEQMA4GA1UEAwwHVGVzdCBD
QTEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbTAeFw0xNDA3MTIwOTM1
MTJaFw0xNzA0MDcwOTM1MTJaMEQxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNRDES
MBAGA1UEBwwJQmFsdGltb3JlMRQwEgYDVQQDDAtUZXN0IFNlcnZlcjCBnzANBgkq
hkiG9w0BAQEFAAOBjQAwgYkCgYEA/S7GJV2OcFdyNMQ4K75KrYFtMEn3VnEFdPHa
jyS37XlMxSh0oS4GeTGVUCJInl5Cpsv8WQdh03FfeOdvzp5IZ46OcjeOPiWnmjgl
2G5j7e2bDH7RSchGV+OD6Fb1Agvuu2/9iy8fdf3rPQ/7eAddzKUrzwacVbnW+tg2
QtSXKRcCAwEAAaOB1TCB0jAdBgNVHQ4EFgQU/WwCX7FfWMIPDFfJ+I8a2COG+l8w
HwYDVR0jBBgwFoAUa0hkif3RMaraiWtsOOZZlLu9wJwwCQYDVR0TBAIwADALBgNV
HQ8EBAMCBeAwSgYDVR0RBEMwQYILZXhhbXBsZS5jb22CD3d3dy5leGFtcGxlLmNv
bYIQbWFpbC5leGFtcGxlLmNvbYIPZnRwLmV4YW1wbGUuY29tMCwGCWCGSAGG+EIB
DQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsF
AAOCAgEAvO6xfdsGbnoK4My3eJthodTAjMjPwFVY133LH04QLcCv54TxKhtUg1fi
PgdjVe1HpTytPBfXy2bSZbXAN0abZCtw1rYrnn7o1g2pN8iypVq3zVn0iMTzQzxs
zEPO3bpR/UhNSf90PmCsS5rqZpAAnXSaAy1ClwHWk/0eG2pYkhE1m1ABVMN2lsAW
e9WxGk6IFqaI9O37NYQwmEypMs4DC+ECJEvbPFiqi3n0gbXCZJJ6omDA5xJldaYK
Oa7KR3s/qjBsu9UAiWpLBuFoSTHIF2aeRKRFmUdmzwo43eVPep65pY6eQ4AdL2RF
rqEuINbGlzI5oQyYhu71IwB+iPZXaZZPlwjLgOsuad/p2hOgDb5WxUi8FnDPursQ
ujfpIpmrOP/zpvvQWnwePI3lI+5n41kTBSbefXEdv6rXpHk3QRzB90uPxnXPdxSC
16ASA8bQT5an/1AgoE3k9CrcD2K0EmgaX0YI0HUhkyzbkg34EhpWJ6vvRUbRiNRo
9cIbt/ya9Y9u0Ja8GLXv6dwX0l0IdJMkL8KifXUFAVCujp1FBrr/gdmwQn8itANy
+qbnWSxmOvtaY0zcaFAcONuHva0h51/WqXOMO1eb8PhR4HIIYU8p1oBwQp7dSni8
THDi1F+GG5PsymMDj5cWK42f+QzjVw5PrVmFqqrrEoMlx8DWh5Y=
-----END CERTIFICATE-----
rB   a  
00:fd:2e:c6:25:5d:8e:70:57:72:34:c4:38:2b:be:
4a:ad:81:6d:30:49:f7:56:71:05:74:f1:da:8f:24:
b7:ed:79:4c:c5:28:74:a1:2e:06:79:31:95:50:22:
48:9e:5e:42:a6:cb:fc:59:07:61:d3:71:5f:78:e7:
6f:ce:9e:48:67:8e:8e:72:37:8e:3e:25:a7:9a:38:
25:d8:6e:63:ed:ed:9b:0c:7e:d1:49:c8:46:57:e3:
83:e8:56:f5:02:0b:ee:bb:6f:fd:8b:2f:1f:75:fd:
eb:3d:0f:fb:78:07:5d:cc:a5:2b:cf:06:9c:55:b9:
d6:fa:d8:36:42:d4:97:29:17
        r   r5   rA   r   )rO   x509_v3_certr   r   r   rP   s         r(   test_x509v3z!ImportKeyFromX509Cert.test_x509v3  s    6 
EGG7 	< 
 bf[[992>>mL)))))(((**+++++r4   N)r   r   r   r   r   r   r4   r(   r   r     s3        &, &, &,P2, 2, 2, 2, 2,r4   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestImport_2048c                     t          d          }t          j        |          }t          d          }t          j        |          }|                     |j        |j                   d S )Nzrsa2048_pss_public.pemzrsa2048_pss_private.pem)r)   r   r   rH   rI   )rO   pub_key_filepub_keypriv_key_filepriv_keys        r(   test_import_psszTestImport_2048.test_import_pss6  s\     !9::...!";<<>-00HJ/////r4   c                     t          d          }t          d          }d ||fv rd S t          j        |                                          }t          j        |          }|                     ||           d S )Nrsa2048_private.pemzrsa2048_public_openssh.txt)r)   r   r   
public_keyrH   rO   key_file_refkey_filekey_refrP   s        r(   test_import_openssh_publicz*TestImport_2048.test_import_openssh_public?  s{     !6779:: L(+++F...99;;nX&&#&&&&&r4   c                     t          d          }t          d          }d ||fv rd S t          j        |          }t          j        |          }|                     ||           d S )Nzrsa2048_private_openssh.pemzrsa2048_private_openssh_old.pemr)   r   r   rH   rO   r   key_file_oldrP   key_olds        r(   !test_import_openssh_private_clearz1TestImport_2048.test_import_openssh_private_clearK  so    :;; !BCC L(+++FnX&&...g&&&&&r4   c                     t          d          }t          d          }d ||fv rd S t          j        |d          }t          j        |          }|                     ||           d S )Nzrsa2048_private_openssh_pwd.pemz#rsa2048_private_openssh_pwd_old.pems   passwordr  r  s        r(   $test_import_openssh_private_passwordz4TestImport_2048.test_import_openssh_private_passwordX  sq    >?? !FGG L(+++FnX{33...g&&&&&r4   c                     t          d          }t          d          }d ||fv rd S t          j        |          }t          j        |d          }|                     ||           d S )Nr   zrsa2048_private_p8.ders   secretr  r   s        r(   test_import_pkcs8_privatez)TestImport_2048.test_import_pkcs8_privated  sq     !677566 L(+++F...nXy11#&&&&&r4   N)r   r   r   r   r   r  r  r
  r   r4   r(   r   r   4  s_        0 0 0
' 
' 
'' ' '
' 
' 
'
' 
' 
' 
' 
'r4   r   c                     g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|S r   )r   r=   r   r   )configtestss     r(   	get_testsr  q  sC    E	_^,,,E	_2333E	__---ELr4   __main__c                  B    t          j        t                                S r   )unittest	TestSuiter  r   r4   r(   suiter  z  s    !)++...r4   r  )defaultTest)r   )r*   )"r   r   r   r   r  r   Cryptodome.PublicKeyr   Cryptodome.SelfTest.st_commonr   r   Cryptodome.IOr   Cryptodome.Util.py3compatr   r	   r
   Cryptodome.Util.numberr   Cryptodome.Utilr   r   r   ImportErrorr)   r;   TestCaser=   r   r   r  r   r  mainr   r4   r(   <module>r     s  . 
			 				          $ $ $ $ $ $ B B B B B B B B       A A A A A A A A A A * * * * * *            #$$$$! # # #"#   4   C< C< C< C< C<X& C< C< C<L\, \, \, \, \,H- \, \, \,~:' :' :' :' :'h' :' :' :'z      z/ / /HMg&&&&&& s   A AA