3Tf#/ddlmZddlZddlZddlmZmZddlmZddl m Z ddl m Z GddZ Gd d ZGd d ZGd dZGddZy)) annotationsN) exceptionsutils)aead)backend) FixedPoolcxeZdZdZd dZed dZdZ d dZ d dZ d dZ y) ChaCha20Poly1305c*tj|s.tjdtjj t jd|t|dk7r td||_ t|j|_ y)NzEF F t/ c,tjdS)Nr)osurandom)clss r generate_keyzChaCha20Poly1305.generate_key!szz"~rcLtjt||jSN)r_aead_create_ctxrr)rs rrzChaCha20Poly1305._create_fn%s$$WdDII>>rc F|d}t||jkDst||jkDr td|j||||jj 5}t jt||||gd|cdddS#1swYyxYwNr5Data or associated data too long. Max 2**31 - 1 bytes) r _MAX_SIZE OverflowError _check_paramsracquirer_encryptrrnoncedataassociated_datactxs rencryptzChaCha20Poly1305.encrypt(s  "!O t9t~~ %_)=)NG  5$8 ZZ   ! S==ud_,=r3   s - BB c |d}|j||||jj5}tjt ||||gd|cdddS#1swYyxYwNrr))r,rr-r_decryptrr/s rdecryptzChaCha20Poly1305.decrypt=sf  "!O 5$8 ZZ   ! S==ud_,=r3   s AA%ctjd|tjd|tjd|t|dk7r tdy)Nr0r1r2 zNonce must be 12 bytesrrrrrr0r1r2s rr,zChaCha20Poly1305._check_paramsLsR w. vt, 0/B u: 56 6 rNr bytes)returnr>r0r>r1r>r2ztyping.Optional[bytes]r?r>r0r>r1r>r2r>r?None) __name__ __module__ __qualname__r*r classmethodr"rr4r8r,rrr r sI 0?0   *   0    7 7 7 7  7rr c|eZdZdZd d dZed dZ d dZ d dZd dZ ddZ y)AESCCMr cVtjd|t|dvr td||_t |t s td|dvr td||_tj|s.tjdtjjy)Nr r)rz)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer) r:r)zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)rrrrr isinstanceint TypeError _tag_lengthrrrrrr)rr tag_lengths rrzAESCCM.__init__\s uc* s8< 'HI I *c*;< < 6 612 2%,,T211D##66 3rct|ts td|dvr tdt j |dzSNbit_length must be an integer)z#bit_length must be 128, 192, or 256rOrRrSrTrrr r! bit_lengths rr"zAESCCM.generate_keyp?*c*;< < _ ,BC Czz*/**rc.|d}t||jkDst||jkDr td|j||||j |t|t j t||||g|jS)Nrr() rr*r+r,_validate_lengthsrr.rrUr<s rr4zAESCCM.encryptzs  "!O t9t~~ %_)=)NG  5$8 uc$i0}} T5$(94;K;K  rc|d}|j|||tjt||||g|jS)Nr)r,rr7rrUr<s rr8zAESCCM.decryptsH  "!O 5$8}} T5$(94;K;K  rcLdt|z }dd|zz|kr tdy)NrOzData too long for nonce)rr)rr0data_lenl_vals rrbzAESCCM._validate_lengthss3SZ U h &67 7 'rctjd|tjd|tjd|dt|cxkrdkstdtdy)Nr0r1r2 z$Nonce must be between 7 and 13 bytesr;r<s rr,zAESCCM._check_paramssh w. vt, 0/BCJ$"$CD D%CD D%rN)r))r r>rVrSr_rSr?r>r@)r0r>rgrSr?rBrA) rCrDrEr*rrFr"r4r8rbr,rGrrrIrIYsI(++   0    *      0    8EE"'E:?E ErrIcreZdZdZddZed dZ d dZ d dZ d dZ y) AESGCMr cntjd|t|dvr td||_y)Nr rKz)AESGCM key must be 128, 192, or 256 bits.)rrrrrrs rrzAESGCM.__init__s1 uc* s8< 'HI I rct|ts td|dvr tdt j |dzSrXr]r^s rr"zAESGCM.generate_keyr`rc|d}t||jkDst||jkDr td|j|||t j t ||||gdSr'rr*r+r,rr.rr<s rr4zAESGCM.encrypto  "!O t9t~~ %_)=)NG  5$8}}WdE4/9JBOOrcn|d}|j|||tjt||||gdSr6r,rr7rr<s rr8zAESGCM.decrypt=  "!O 5$8}}WdE4/9JBOOrctjd|tjd|tjd|t|dkst|dkDr tdy)Nr0r1r2rOrZz%Nonce must be between 8 and 128 bytesr;r<s rr,zAESGCM._check_paramss\ w. vt, 0/B u:>SZ#-DE E.rNr=rlr@rA rCrDrEr*rrFr"r4r8r,rGrrrnrnsI++PPP0 P  P$ P P P0 P  P F F F F  FrrncreZdZdZddZed dZ d dZ d dZ d dZ y) AESOCB3r ctjd|t|dvr td||_t j |s.tjdtjjy)Nr rKz*AESOCB3 key must be 128, 192, or 256 bits.z0OCB3 is not supported by this version of OpenSSL rrrrrrrrrrrrs rrzAESOCB3.__init__si uc* s8< 'IJ J ,,T211B##66 3rct|ts td|dvr tdt j |dzSrXr]r^s rr"zAESOCB3.generate_keyr`rc|d}t||jkDst||jkDr td|j|||t j t ||||gdSr'rrr<s rr4zAESOCB3.encryptrsrcn|d}|j|||tjt||||gdSr6rur<s rr8zAESOCB3.decryptrvrctjd|tjd|tjd|t|dkst|dkDr tdy)Nr0r1r2r:rez%Nonce must be between 12 and 15 bytesr;r<s rr,zAESOCB3._check_params%s[ w. vt, 0/B u:?c%j2oDE E.rNr=rlr@rArxrGrrrzrzsI ++PPP0 P  P$ P P P0 P  P F F F F  FrrzcfeZdZdZddZed dZ d dZ d dZ d dZ y) AESSIVr ctjd|t|dvr td||_t j |s.tjdtjjy)Nr )r0@z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLr|rs rrzAESSIV.__init__5si uc* s8< 'HI I ,,T211E##66 3rct|ts td|dvr tdt j |dzS)NrY)r\iiz#bit_length must be 256, 384, or 512rOr]r^s rr"zAESSIV.generate_keyBr`rc|g}j||t|jkDstfd|Dr t dt j td||dS)Nc3NK|]}t|jkDywr$)rr*).0adrs r z!AESSIV.encrypt..Vs#- )+CGdnn $- s"%r(rr))r,rr*anyr+rr.rrr1r2s` rr4zAESSIV.encryptLsq  " O 41 t9t~~ %- />- *  G }}WdCKKrcj|g}|j||tjt|d||dSr6rurs rr8zAESSIV.decrypt`s8  " O 41}}WdCKKrctjd|t|dk(r tdt |t s t d|D]}tjd|y)Nr1rzdata must not be zero lengthz;< </40N ! BA  " "#=q A BrNr=rl)r1r>r2z#typing.Optional[typing.List[bytes]]r?r>)r1r>r2ztyping.List[bytes]r?rBrxrGrrrr2sI ++LL=L  L( L L= L  LBB,B  Brr) __future__rrtyping cryptographyrr$cryptography.hazmat.backends.opensslr,cryptography.hazmat.backends.openssl.backendr"cryptography.hazmat.bindings._rustrr rIrnrzrrGrrrsb # *5@8F7F7RREREj<F<F~BFBFJHBHBr