Skip to content

Commit e25ed1a

Browse files
authored
Merge pull request #2 from 8gudbits/development
v2.0
2 parents e432737 + 14036a3 commit e25ed1a

21 files changed

+2576
-1280
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,3 +160,5 @@ cython_debug/
160160
#.idea/
161161

162162
todo.md
163+
z.*
164+

LICENSE

Lines changed: 674 additions & 201 deletions
Large diffs are not rendered by default.

Preview/image_1.png

1.01 KB
Loading

Preview/image_2.png

1.13 KB
Loading

README.md

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,91 @@
1-
# EncryptoPack
1+
<div align="center"><img src="logo.png" alt="EncryptoPack Logo" width="100"></div>
22

3-
**An intuitive application for securing files and folders through encryption.**
3+
# EncryptoPack - AES-256 Encryption for Files and Folders
44

5-
_Encryption is a process of transforming data into an unreadable form, so that only authorized parties can access it. Encryption helps protect your privacy and security by preventing unauthorized access, modification, or theft of your files and folders._
5+
EncryptoPack is a lightweight application designed to safeguard sensitive data with industry-grade encryption. Whether protecting personal documents or securing work files, EncryptoPack makes it easy to encrypt and decrypt files and folders with confidence.
66

7-
_EncryptoPack is a simple and user-friendly application that allows you to encrypt and decrypt your files and folders using AES-256 encryption, one of the most secure and widely used encryption algorithms._
7+
## 🔒 Why Encryption Matters
8+
9+
Encryption transforms readable data into a scrambled format that can only be accessed by authorized users. It's a critical layer of defense against:
10+
11+
- Unauthorized access
12+
- Data tampering
13+
- Theft or leaks
14+
15+
## ⚙️ What EncryptoPack Offers
16+
17+
- Encryption of files and folders using AES-256 encryption.
18+
- Simple Interface - No technical expertise required
19+
- Fast Performance - Encrypt large folders quickly
20+
- Generate a recovery key to recover forgotten password
21+
- Supports a separate ivkey file for extra security
22+
23+
Take control of your digital privacy with EncryptoPack - where security meets simplicity.
824

925
---
1026

11-
## Features
27+
## 🖼️ Screenshots
28+
29+
<div align="center">
30+
31+
<table>
32+
<tr>
33+
<td>
34+
<img src="./Preview/image_1.png" alt="Main Interface" width="400"/>
35+
</td>
36+
<td>
37+
<img src="./Preview/image_2.png" alt="Main Interface" width="400"/>
38+
</td>
39+
</tr>
40+
</table>
41+
42+
</div>
1243

13-
- Encrypt files and folders using AES-256 encryption.
14-
- Generate a recovery key in case you forget your password.
15-
- Support a separate ivkey file for extra security.
44+
> Tip: You can also drag your files directly into the app - no browsing needed!
1645
1746
---
1847

19-
## Get Started
48+
## 🚀 Get Started with EncryptoPack
2049

21-
- To get started with **EncryptoPack**, you can clone the project using **Git**:
50+
#### 🧑‍💻 For Most Users - Download the Ready-to-Use App
2251

23-
```bash
24-
git clone --depth 1 https://github.com/8gudbits/EncryptoPack.git
25-
```
52+
No setup required! Just download the latest Windows binary from the [Releases Page](https://github.com/8gudbits/EncryptoPack/releases).
2653

27-
- Next, install the required dependencies using **pip**:
54+
<a href="https://github.com/8gudbits/EncryptoPack/releases/tag/v2.0"> <img src="https://img.shields.io/badge/Version-v2.0-orange" alt="Latest Version Badge"> </a>
2855

29-
```bash
30-
pip install -r requirements.txt
31-
```
56+
#### 🛠️ For Developers - Run from Source
3257

33-
- Or if you are on **Linux**/**MacOS**:
58+
If you prefer to run EncryptoPack from source or you're on Linux/macOS, follow these steps:
3459

35-
```bash
36-
pip3 install -r requirements.txt
60+
1. Clone the repository using git:
61+
62+
```
63+
git clone --depth 1 https://github.com/8gudbits/EncryptoPack.git
64+
cd EncryptoPack/src
3765
```
3866

39-
- You can also get the windows binary **[here](https://github.com/8gudbits/EncryptoPack/releases)**.
67+
2. Install dependencies:
4068

41-
<ul><a href="https://github.com/8gudbits/EncryptoPack/releases/tag/v1.0"><img src="https://img.shields.io/badge/Version-v1.1-orange"></a></ul>
69+
- On Windows:
70+
```
71+
pip install -r requirements.txt
72+
```
73+
- On Linux/macOS:
74+
```
75+
pip3 install -r requirements.txt
76+
```
4277

43-
---
78+
Once installed, you're ready to run EncryptoPack locally and start encrypting your files securely.
4479

45-
<div align="center">
80+
> Note: Encrypted with an older format? You'll be informed about the compatible version for decryption - no surprises, no broken files.
4681
47-
## Screenshots
82+
---
4883

49-
![App_Image](./Preview/image_1.png)
50-
![App_Image](./Preview/image_2.png)
84+
## Documentation
5185

52-
</div>
86+
Specification files are in [/specs](/specs):
87+
- [Format Specification](/specs/format_spec.md)
88+
- [Diagrams](/specs/diagrams)
5389

5490
---
5591

changelog.txt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
1-
EncryptoPack 1.1
2-
- Updated GUI module from PyQt5 to PyQt6
3-
- Updated GUI design
4-
- Added threading to prevent random freezing during encryption/decryption
1+
📦 EncryptoPack Changelog
52

6-
EncryptoPack 1.0
3+
🔐 Version 2.0 [in-dev]
4+
- Updated: File extension from .pack (v1.x) to .pv2
5+
- Updated: Encrypted file format (incompatible with v1.x)
6+
- Added: Password verification before decryption
7+
- Added: File association support for .pv2 files (auto-select)
8+
- Added: Drag-and-drop support for file and folder input
9+
- Added: Adaptive theming support for system light/dark mode
10+
- Improved: File selection interface with dedicated file/folder buttons
11+
- Improved: Minor UI refinements
12+
13+
🖼️ Version 1.1 [Aug 3, 2025]
14+
- Upgraded: GUI module migrated from PyQt5 to PyQt6
15+
- Improved: Refreshed GUI design
16+
- Fixed: Added threading to prevent freezing during encryption/decryption
17+
18+
🚀 Version 1.0 [Aug 17, 2023]
719
- Initial release
820

logo.png

11.2 KB
Loading

specs/diagrams/block_size.mmd

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
%% specs/diagrams/block_size.mmd
2+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F5F5F5'}}}%%
3+
flowchart TD
4+
A("Start: Check Available RAM")
5+
B{"Available RAM (GB)?"}
6+
C["Return 64 KB<br>(65,536 bytes)"]
7+
D["Return 128 KB<br>(131,072 bytes)"]
8+
E["Return 256 KB<br>(262,144 bytes)"]
9+
F["Return 512 KB<br>(524,288 bytes)"]
10+
G["Return 1 MB<br>(1,048,576 bytes)"]
11+
H["Return 1.5 MB<br>(1,572,864 bytes)"]
12+
I["Return 3 MB<br>(3,145,728 bytes)"]
13+
J["Error: Fallback to 512 KB<br>(524,288 bytes)"]
14+
K("Return")
15+
16+
A --> B
17+
B -->|"< 1 GB"| C
18+
B -->|"1 - 2 GB"| D
19+
B -->|"2 - 3 GB"| E
20+
B -->|"3 - 4 GB"| F
21+
B -->|"4 - 6 GB"| F
22+
B -->|"6 - 8 GB"| G
23+
B -->|"8 - 12 GB"| G
24+
B -->|"12 - 16 GB"| H
25+
B -->|"16 - 24 GB"| H
26+
B -->|"24 - 32 GB"| I
27+
B -->|"\>= 32 GB"| I
28+
B -->|"Error Occurred"| J
29+
C --> K
30+
D --> K
31+
E --> K
32+
F --> K
33+
G --> K
34+
H --> K
35+
I --> K
36+
J --> K
37+
38+
style A fill:#4CAF50,stroke:#388E3C
39+
style B fill:#64B5F6,stroke:#1976D2
40+
style J fill:#F44336,stroke:#D32F2F
41+
style K fill:#4CAF50,stroke:#388E3C
42+

specs/diagrams/decryption.mmd

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
%% specs/diagrams/decryption.mmd
2+
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#F5F5F5'}}}%%
3+
flowchart TD
4+
Start([Start]) --> A["Input 'File/Folder'"]
5+
A --> B{Is it a folder?}
6+
B -->|Yes| C["Search for file with same name + 'CURRENT_EXT'"]
7+
C --> D{Does the file exist?}
8+
D -->|Yes| E["Set 'file_to_decrypt' to the found file"]
9+
D -->|No| F["Emit 'File Not Found' error"] --> End
10+
B -->|No| G["Set input file as 'file_to_decrypt'"]
11+
E --> H
12+
G --> H{Is a separate IV file provided?}
13+
H -->|Yes| I["Check legacy format using IV file"]
14+
H -->|No| J["Check legacy format without IV file"]
15+
I --> K{Is legacy format detected?}
16+
J --> K
17+
K -->|Yes| L["Emit 'Legacy File' error"] --> End
18+
K -->|No| M["Read 'FILE_HEADER'"]
19+
M --> N{Does the header match?}
20+
N -->|No| O["Emit 'Invalid File' error"] --> End
21+
N -->|Yes| P{Is a recovery key provided?}
22+
P -->|Yes| Q["Read key from recovery file"]
23+
P -->|No| R{Is a password provided?}
24+
R -->|No| S["Emit 'Missing Credentials' error"] --> End
25+
R -->|Yes| T["Derive key from password"]
26+
Q --> U
27+
T --> U["Retrieve IV from file or separate file"]
28+
U --> V["Verify IV hash"]
29+
V --> W{Does the hash match?}
30+
W -->|No| X["Emit 'Integrity Error'"] --> End
31+
W -->|Yes| Y["Decrypt password check"]
32+
Y --> Z{Does it match 'PASS_TEXT'?}
33+
Z -->|No| AA["Emit 'Decryption Error'"] --> End
34+
Z -->|Yes| AB["Decrypt data with progress reporting"]
35+
AB --> AC["Create extraction directory"]
36+
AC --> AD["Write decrypted data"]
37+
AD --> AE["Verify data hash"]
38+
AE --> AF{Does the hash match?}
39+
AF -->|No| AG["Emit 'Data Integrity Warning'"]
40+
AG --> AH
41+
AF -->|Yes| AH["Verify 'EOF_MARKER'"]
42+
AH --> AI{Is the marker present?}
43+
AI -->|No| AJ["Emit 'File Format Error'"]
44+
AJ --> AK
45+
AI -->|Yes| AK{Is it a tar file?}
46+
AK -->|Yes| AL["Check for 'MARKER_FILE'"]
47+
AL --> AM{Is the marker present?}
48+
AM -->|Yes| AN["Extract archive"]
49+
AN --> AO["Remove marker and tar file"]
50+
AM -->|No| AK
51+
AK -->|No| AP
52+
AO --> AP
53+
AK --> AP["Perform cleanup operations"]
54+
AP --> AQ{Should files be removed afterward?}
55+
AQ -->|Yes| AR["Delete encrypted file and keys"]
56+
AQ -->|No| AS
57+
AR --> AS["Emit 'Decryption Successful'"]
58+
AS --> End([End])
59+
60+
style Start fill:#4CAF50,stroke:#388E3C
61+
style End fill:#F44336,stroke:#D32F2F
62+
style B fill:#64B5F6,stroke:#1976D2
63+
style D fill:#64B5F6,stroke:#1976D2
64+
style H fill:#64B5F6,stroke:#1976D2
65+
style K fill:#64B5F6,stroke:#1976D2
66+
style N fill:#64B5F6,stroke:#1976D2
67+
style P fill:#64B5F6,stroke:#1976D2
68+
style R fill:#64B5F6,stroke:#1976D2
69+
style W fill:#64B5F6,stroke:#1976D2
70+
style Z fill:#64B5F6,stroke:#1976D2
71+
style AF fill:#64B5F6,stroke:#1976D2
72+
style AI fill:#64B5F6,stroke:#1976D2
73+
style AK fill:#64B5F6,stroke:#1976D2
74+
style AM fill:#64B5F6,stroke:#1976D2
75+
style AQ fill:#64B5F6,stroke:#1976D2
76+

specs/diagrams/encryption.mmd

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
%% specs/diagrams/encryption.mmd
2+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F5F5F5'}}}%%
3+
flowchart TD
4+
Start([Start]) --> A["Input 'File/Folder'"]
5+
A --> B{Is it a folder?}
6+
B -->|Yes| C["Compress into a temporary file"]
7+
C --> D["Create 'MARKER_FILE' containing 'MARKER_FILE_TEXT'"]
8+
D --> E["Set 'file_to_encrypt' to the compressed file"]
9+
E --> F["Add file to 'temp_files_to_cleanup' list"]
10+
B -->|No| G["Set 'file_to_encrypt' to input file"]
11+
F --> H
12+
G --> H["Generate IV using 'get_random_bytes(16)'"]
13+
H --> I["Write 'FILE_HEADER' to the output file"]
14+
I --> J{Is separate IV requested?}
15+
J -->|No| K["Write IV to the output file"]
16+
J -->|Yes| L["Generate IV key file"]
17+
L --> M["Write IV to the separate file"]
18+
K --> N
19+
M --> N["Write IV hash using 'sha256(iv)' to the output file"]
20+
N --> O["Write encrypted 'PASS_TEXT' to the output file"]
21+
O --> P["Encrypt data in blocks with progress reporting"]
22+
P --> Q["Write data hash using 'sha256(encrypted)' to the output file"]
23+
Q --> R["Write 'EOF_MARKER' to the output file"]
24+
R --> S{Is recovery key requested?}
25+
S -->|Yes| T["Generate recovery key"]
26+
T --> U["Write password hash to the recovery file"]
27+
S -->|No| U
28+
U --> V["Execute cleanup operations"]
29+
V --> W{Were there any failed files?}
30+
W -->|Yes| X["Emit warning with list of failed files"]
31+
W -->|No| Y["Emit operation completed signal"]
32+
X --> Y
33+
Y --> End([End])
34+
35+
style Start fill:#4CAF50,stroke:#388E3C
36+
style End fill:#F44336,stroke:#D32F2F
37+
style B fill:#64B5F6,stroke:#1976D2
38+
style J fill:#64B5F6,stroke:#1976D2
39+
style S fill:#64B5F6,stroke:#1976D2
40+
style W fill:#64B5F6,stroke:#1976D2
41+

0 commit comments

Comments
 (0)