Files
cryptz/__pycache__/crypto_engine.cpython-312.pyc
T

139 lines
22 KiB
Plaintext
Raw Normal View History

2026-05-31 18:46:06 +08:00
Ë
E j>Aãó|dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z
ddl m Z m
Z
ddlmZmZddlmZddlmZmZdZdZd Zd
Zd Zd Zd Zd Zd
ZdZdZ e Gdd««Z!e Gdd««Z"e Gdd««Z#deede$de%fdZ&d7de%de'dee%de'fdZ(de'd e)d!e)de'fd"„Z*de'd e)d!e)d#e'de+f
d$„Z,de%de-e)e%ffd%„Z.d8d&e)de%fd'„Z/d9d(e%d)e)de+fd*„Z0d+e!de%fd,„Z1d7d-e%de%dee%de-e+e%ffd.„Z2d-e%de#fd/„Z3 d:d-e%de%d0e%dee%d1ee%d2eee$e%gdfde"fd3„Z4d-e%de'd4e)d!e)fd5„Z5d-e%fd6„Z6y);z·
CryptZ Crypto Engine v5
- AES-256-GCM (authenticated encryption)
- Argon2id KDF
- Streaming encryption for large files
- Correct attempt counter with separate MAC
- File-key support
éN)Ú dataclassÚfield)ÚOptionalÚCallable)ÚAESGCM)Úhash_secret_rawÚTypesCRZ5éé é iééz.cryptzsCryptZ-AttemptMAC-v5có®eZdZUeed<eeed<eed<dZeed<dZeed<dZ e
ed <d
Z e eed <dZ
eed <d
Zeed<d
Ze eeegd
fed<y
)ÚEncryptOptionsÚpasswordÚfilesÚ output_pathFÚuse_2faÚNONEÚ
otp_secretr
Ú max_attemptsNÚhardware_key_pathÚ
secure_deleteTÚcompressÚprogress_callback)Ú__name__Ú
__module__Ú __qualname__ÚstrÚ__annotations__ÚlistrÚboolrrÚintrrrrrrÚfloat©óú.C:\Users\dimir\proects\cryptz\crypto_engine.pyrr)svàƒMØ ‰9ÓØÓØ€GˆTÓØ€JÓØ€LØ'+Ðx €MØ€HˆdÓØ@DШ%°¨°tÐ);Ñ <ÑDr&rcóheZdZUeed<eed<dZeed<dZeed<dZe ed<dZ
e ed <dZ eed
<y ) Ú
DecryptResultÚsuccessÚmessagerrFÚ needs_2farÚ
attempts_usedrÚ destroyedN) rrrr"r rrr,r-r#rr.r%r&r'r)r)7s>à
ƒMØ
ƒLØ€JÓØ€IˆtÓØ€MØ€LØ€Iˆr&r)cóheZdZUeed<eed<eed<eed<eed<eed<eed<eed<eed <y
) Ú
ArchiveHeaderÚversionÚsaltÚ
nonce_metaÚ
nonce_datarÚcurrent_attemptsÚ attempt_macÚmeta_ciphertextÚ has_file_keyN)rrrr#r Úbytesr"r%r&r'r0r0Bs6à
ƒLØ
ƒKØÓØÓØÓØÓØÓØÓØÔr&r0ÚcallbackÚprogressÚmsgcó|r
|||«yy©Nr%)r:r;r<s r'Ú_reportr?OsÙÙ˜ðr&rr2rÚreturnc ó¦t|jd«|tttt
t j¬«}|rƒtjj|«rdt|d«5}|j«}ddd«tj«j«}t!dt#||«D««}|S#1swYŒJxYw)z=Derive encryption key using Argon2id + optional file-key XOR.úutf-8)Úsecretr2Ú time_costÚ memory_costÚ parallelismÚhash_lenÚtypeÚrbNc3ó,K|] \}}||z Œy­wr>r%)Ú.0Úbs r'Ú <genexpr>zderive_key.<locals>.<genexpr>csèø€Ð8Ñ&7™d˜a A˜•EÑ&7ùs)rÚencodeÚARGON2_TIME_COSTÚARGON2_MEMORY_COSTÚARGON2_PARALLELISMÚKEY_SIZEr ÚIDÚosÚpathÚexistsÚopenÚreadÚhashlibÚsha256Údigestr9Úzip)rr2rÚkeyÚhw_dataÚhw_hashs r'Ú
derive_keyrbTä
ؘ
ÜÜ
W‰Wô €CñœRŸW™WŸ^™^Ð,=Ô
Ð# 
*¨aØ—f‘f“hˆG÷—.‘. Ó2ˆÜÑ8¤c¨#¨wÔ&7Ó8ˆØ €J÷ 
*ús Á-CÃCr^r5rcóêtjt|z«j«}t j
d||«}t
j||tj«j«S)zCCompute HMAC over attempt counter using a domain-separated sub-key.z>BB)rZr[ÚATTEMPT_DOMAINr\ÚstructÚpackÚhmac_modÚnew)r^r5rÚsub_keyÚdatas r'Ú_compute_attempt_macrkgsQän‰nœ^¨cÑ;€GÜ ;‰; Ó =€DÜ <‰<˜ ¤w§~¡~Ó 6× ?r&ÚmaccóHt|||«}tj||«S)zVerify attempt counter MAC.)rkrgÚcompare_digest)r^r5rrlÚexpecteds r'Ú_verify_attempt_macrpns$ä# CÐ)9¸H€HÜ × " 8¨SÓ 1r&cóèd}t|«dk\r|dz
}t|«dk\r|dz
}td|D««rtd|D««r|dz
}td|D««r|dz
}gd¢}|||fS) z6Return (score 0-4, label). 0=very weak, 4=very strong.réér c3ó<K|]}|j«Œy­wr>)Úisdigit©rKÚcs r'rNz*check_password_strength.<locals>.<genexpr>{sèø€Ð
˜1ˆ19‰9ùóc3ó<K|]}|j«Œy­wr>)Úisalpharvs r'rNz*check_password_strength.<locals>.<genexpr>{sèø€Ð1PÁxÀ!°!·)±)·+Áxùrxc3ó$K|]}|dvŒ
y­w)z!@#$%^&*()-_=+[]{}|;:',.<>?/`~Nr%rvs r'rNz*check_password_strength.<locals>.<genexpr>}sèø€Ð
C¹(°Qˆ1Ð 0¹(ùs)uОчень Ñлабыйu СлабыйuСреднийuСильныйuОчень Ñильный)ÚlenÚany)rÚscoreÚlabelss r'Úcheck_password_strengthr€ts€à
€EÜ
ˆ8ƒ}˜ÒØ

ˆÜ
ˆ8ƒ}˜ÒØ

ˆÜ
Ñ
Ó
)¬cÑ1PÁxÓ1PÔ.PØ

ˆÜ
Ñ
C¹(Ó


ˆÚ
y€FØ &˜ Ðr&ÚlengthcóŠddl}|j|jzdzŠdjˆfdt |«D««S)z4Generate a cryptographically secure random password.rNz!@#$%^&*()-_=+Úc3óHK|]}tj«Œy­wr>)ÚsecretsÚchoice)rKÚalphabets €r'rNz$generate_password.<locals>.<genexpr>‡søèø€ÐC±]°”7—>> (×+±]ùsƒ")ÚstringÚ
ascii_lettersÚdigitsÚjoinÚrange)rr‰rˆs @r'Úgenerate_passwordrŽƒs9ø€ãØ×# f§m¡mÑ3Ð6FÑF€HØ
7‰7ÓC´U¸6´ Cr&rVÚpassescóDtjj|«sy tjj|«}t |d«5}t |«D}|j
d«|}|dkDr?tt|«}|jtj|««||z}|dkDrŒ?|j«tj|j««ŒŽ ddd«tj|«y#1swYŒxYw#t $rYywxYw)z<Overwrite file with random data multiple times, then remove.Fúr+brNT)rUrVrWÚgetsizerXrÚseekÚminÚ
CHUNK_SIZEÚwriter…Ú token_bytesÚflushÚfsyncÚfilenoÚremoveÚOSError)rVrÚsizer_r‡Ú remainingÚchunks r'rrŠä
7‰7>‰>˜ ØðÜw‰w˜tÓÜ
$˜Ô
 !ܘ6–]Øq” Ø Ø !’mܤ
¨IÓ6—G‘GœG×Ó Ñ&  !“mð” ܘŸÕô Ø÷Ð
ûô òÙðús0¢+DÁ
A%DÂ35DÃ)DÄDÄ DÄ DÄDÚoptionsc
óä |j}t|dd«t|dd«tj«}|jrdnd}t j ||¬«5}t|j«}t|j«D\}}tjj|«r1|j|tjj|«¬«n0|j|tjj|«¬«t|dd |d
z|z zzd tjj|««ŒÀ d d d «|j«}|j!«t|d
d«t#j$t&«} t)|j*| |j,«}
t/j0|j2|j4|j,d u|jt|j«dœ«j7d«} t|dd«t#j$t8«} t;|
«}
|
j=| | t>¬«}t|dd«t#j$t8«}|
j=||| ¬«}t|dd«tA|
d|j4«}d}|j,r|d
z}|jr|dz}|jBr|dz}t
|jDd«5}|jGt>«|jGtIjJdtL««|jGtIjJd|««|jG| «|jG| «|jG|«|jGtIjJd|j4««|jGtIjJdd««|jG|«|jGtIjJdt|«««|jG|«|jG|«d d d «|jNrIt|dd«|jD]-}tjjQ|«sŒ#tO|«Œ/t|d d!«|jDS#1swYŒŒxYw#1swYŒ„xYw)"ah
Encrypt files into a CryptZ v5 archive.
Returns the output file path on success, raises on failure.
File format:
[HEADER_SIG 4B][VERSION 1B][FLAGS 1B]
[SALT 32B][NONCE_META 12B][NONCE_DATA 12B]
[MAX_ATTEMPTS 1B][CURRENT_ATTEMPTS 1B][ATTEMPT_MAC 32B]
[META_LEN 4B][META_CIPHERTEXT variable]
[DATA_CIPHERTEXT remainder]
çuПодготовка...gš™™™™™©?u*Ðрхивирование файлов...zw:gzÚÚfileobjÚmode)Úarcnameç333333Ó?rsuÐрхивирование: Ngš™™™™™Ù?õ+Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° (Argon2id)...)rrr8rÚ files_countrBçà?u,Шифрование метаданных...©Úassociated_datagš™™™™™á?u$Шифрование данных...g333333ë?uЗапиÑÑŒ файла...rérÚwbÚ>IgÍÌÌÌÌÌì?u.Уничтожение оригиналов...çð?õ
Готово!))rr?ÚioÚBytesIOrÚtarfilerXr|rÚ enumeraterUrVÚisdirÚaddÚbasenameÚgetvalueÚcloser…r—Ú SALT_SIZErbrrÚjsonÚdumpsrrrOÚ
NONCE_SIZErÚencryptÚ
HEADER_SIGrkrrrrerfÚFORMAT_VERSIONrÚisfile)r ÚcbÚtar_bufr¦ÚtarÚ total_filesÚfilepathÚraw_datar2r^Úmetar3ÚaesgcmÚmeta_ctr4Údata_ctr6Úflagsr_s r' ð
× "Ñ "€BÜ ˆBÐ ˆBÐj‰j‹l€GØ×%‰6¨3€DÜ ˜g¨DÕ 1°Sܘ'Ÿ-™-Ó(ˆ Ü$ W§]¡]Ö3‰KˆAˆw‰w}‰}˜˜¬"¯'©'×*:Ñ*:¸8Ó*DÕ˜¬"¯'©'×*:Ñ*:¸8Ó*DÔ B˜˜s q¨1¡u° Ñ&;Ñ<Ð@\Ô]_×]dÑ]d×]mÑ]mÐnvÓ]wÐ\xÐ>yÕ 
×ÑÓ!€HØ ‡MM„Oä ˆBÐ × Ñ œyÓ )€DÜ
W×% t¨W×-FÑ-FÓ
G€Cô :‰:Ø×××Ðט7Ÿ=™=Ó ó ÷ vˆgƒð
 ô ˆBÐ×$¤ZÓ0€JÜ
C‹[€FØn‰n˜Z¨¼zˆnÓJ€Gô ˆBÐ×$¤ZÓ0€JØn‰n˜Z¨À4ˆnÓH€Gä ˆBÐ' s¨A¨w×/CÑ/CÓD€Kð
€EØ× Ò Ø

ˆØ×ÒØ

ˆØØ

ˆô
ˆg×! 4Ô (¨AØ 
ÔØ  ˜C¤Ó  ˜C Ó Œ
Ø 
ÔØ 
ÔØ  ˜C ×!5Ñ!5Ó  ˜C Ó  ÔØ  ˜D¤# g£,Ó ÔØ Ô÷
×ÒÜŸ
œ
ˆw‰w~‰~˜˜ ˆB × Ñ Ð÷W
2Ñ 1ú÷j
)Ð (úsÁ"C,SÌE S&ÓS#Ó&S/Ú file_pathcóò t|«}t||j|«}t|«}|j |j
|j t¬«y#t$r}dd|fcYd}~Sd}~wwxYw)zSVerify archive integrity without full decryption (checks HMAC/GCM tag on metadata).r¬)Tu7Ðрхив целоÑтен, пароль верный.Fu%Ошибка верификации: N) Ú _read_headerrbr2rÚdecryptr3r7Ú Exception)rrÚheaderr^Úes r'Úverify_integrityrØsuðBܘiÓܘ 6§;¡;Ð0AÓܘˆà(¨&×*@Ñ*@ÔR\ˆÔNøÜ òBØÐ=¸a¸SÐAûðBúsAAÁ A6Á%A1Á+A6Á1A6có t|d«5}|jd«}|tk7r td«t j
d|jd««d}t j
d|jd««d}|jt «}|jt«}|jt«}t j
d|jd««d}t j
d|jd««d} |jd«}
t j
d|jd««d} |j| «} d d d «t 
 tdz«¬