Compare commits

...

23 Commits

Author SHA1 Message Date
7e50727163 Version v0.2.29 - implemented enhanced filename input with directory/filename separation 2025-08-13 10:47:08 -04:00
f118c23c60 Version v0.2.28 - fixed format truncation warnings by increasing buffer size 2025-08-13 10:40:45 -04:00
b149175f24 Version v0.2.26 - clean build 2025-08-13 10:35:55 -04:00
206e8042d8 Version v0.2.25 - Added default output filename prompt with pre-filled value for file encryption 2025-08-13 10:31:24 -04:00
2a5249d93c Version v0.2.24 - Added 'q' as additional exit key alongside 'x' 2025-08-13 10:27:37 -04:00
0e02eaee53 Version v0.2.23 - Restructured menu system with streamlined text/file encrypt and smart decrypt 2025-08-13 10:24:50 -04:00
e32eb8b2b1 Version v0.2.22 - Added text editor and file manager integration 2025-08-13 10:08:38 -04:00
0aecae0c5e test files 2025-08-12 19:08:14 -04:00
fa90e0eafd Version v0.2.21 - Implement interactive file encryption and decryption in menu system 2025-08-11 06:03:05 -04:00
2a10d974b2 Version v0.2.20 - Add comprehensive help flag support and fix pad selection to prioritize hex prefix matching over number selection 2025-08-10 15:22:15 -04:00
7e04896394 Version v0.2.19 - Update README to reflect removal of original filename from binary .otp format 2025-08-10 15:17:33 -04:00
0cdf6e7804 Version v0.2.18 - Remove original filename from binary .otp file format - simplify file structure 2025-08-10 15:05:36 -04:00
268758a21b Version v0.2.17 - Fix pad selection logic - allow flexible hex prefix matching instead of restrictive number selection 2025-08-10 14:57:51 -04:00
85ef39d283 Version v0.2.16 - Handle files 2025-08-10 14:18:23 -04:00
2c864f1feb build update 2025-08-10 13:35:54 -04:00
ae0afcfffd Version v0.2.14 - small fix 2025-08-10 10:16:33 -04:00
e45aa04b05 Version v0.2.13 - Some more changes to build.sh 2025-08-10 09:57:47 -04:00
8e1fcdb108 Version v0.2.12 - Edited build.sh 2025-08-10 09:53:24 -04:00
29f4a67c1c Version v0.2.11 - Automatic version increment 2025-08-10 09:49:13 -04:00
146da4e883 Version v0.2.10 - Automatic version increment 2025-08-10 09:25:50 -04:00
3152a7777f Version v0.2.9 - Automatic version increment 2025-08-10 09:22:44 -04:00
68a2a0c252 Version v0.2.8 - Automatic version increment 2025-08-10 09:14:23 -04:00
bb17b0a7be Version v0.2.7 - Automatic version increment 2025-08-10 09:06:53 -04:00
10 changed files with 10671 additions and 243 deletions

View File

@@ -0,0 +1,7 @@
When building, use build.sh, not make.
Use it as follows: build.sh -m "useful comment on changes being made"
When making TUI menus, try to use the first leter of the command and the key to press to execute that command. For example, if the command is "Open file" try to use a keypress of "o" upper or lower case to signal to open the file. Use this instead of number keyed menus when possible. In the command, the letter should be underlined that signifies the command.

2
.gitignore vendored
View File

@@ -1,5 +1,7 @@
otp
pads/ pads/
Gemini.md Gemini.md
TropicOfCancer-HenryMiller.txt
# Auto-generated version files # Auto-generated version files
src/version.h src/version.h

138
README.md
View File

@@ -1,11 +1,14 @@
r# OTP Cipher - One Time Pad Implementation # OTP Cipher - One Time Pad Implementation
A secure one-time pad (OTP) cipher implementation in C with automatic versioning system. A secure one-time pad (OTP) cipher implementation in C with automatic versioning system.
## Features ## Features
- **Perfect Security**: Implements true one-time pad encryption with information-theoretic security - **Perfect Security**: Implements true one-time pad encryption with information-theoretic security
- **Text & File Encryption**: Supports both inline text and file encryption
- **Multiple Output Formats**: Binary (.otp) and ASCII armored (.otp.asc) file formats
- **Keyboard Entropy**: Optional keyboard entropy collection for enhanced randomness - **Keyboard Entropy**: Optional keyboard entropy collection for enhanced randomness
- **Short Command Flags**: Convenient single-character flags for all operations
- **Automatic Versioning**: Built-in semantic versioning with automatic patch increment - **Automatic Versioning**: Built-in semantic versioning with automatic patch increment
- **Multiple Build Options**: Standard and static linking builds - **Multiple Build Options**: Standard and static linking builds
- **Cross-Platform**: Works on Linux and other UNIX-like systems - **Cross-Platform**: Works on Linux and other UNIX-like systems
@@ -148,45 +151,122 @@ otp/
└── VERSION # Plain text version (generated) └── VERSION # Plain text version (generated)
``` ```
## Examples ## File Formats
### .otp File Format (Binary)
Binary encrypted files use a structured header format:
```
Offset | Size | Field | Description
-------|------|-------------------|----------------------------------
0 | 4 | Magic | "OTP\0" - File type identifier
4 | 2 | Version | Format version (currently 1)
6 | 32 | Pad Checksum | Binary pad checksum (32 bytes)
38 | 8 | Pad Offset | Offset in pad file (uint64_t)
46 | 4 | File Mode | Original file permissions (uint32_t)
50 | 8 | File Size | Original file size (uint64_t)
58 | var | Encrypted Data | XOR-encrypted file contents
```
### .otp.asc File Format (ASCII Armored)
ASCII armored files use the same format as encrypted text messages:
```
-----BEGIN OTP MESSAGE-----
Version: v0.2.15
Pad-ChkSum: <64-character-hex-checksum>
Pad-Offset: <decimal-offset-value>
<base64-encoded-encrypted-data>
-----END OTP MESSAGE-----
```
**Note:** ASCII armored files do not preserve original file permissions metadata.
## Usage Examples
### Short Command Flags
```bash
# Quick commands using short flags
./otp -g 1GB # Generate 1GB pad
./otp -l # List available pads
./otp -e 1a2b "Hello world" # Encrypt text inline
./otp -d "-----BEGIN OTP..." # Decrypt message inline
# File operations
./otp -f document.pdf 1a2b # Encrypt file (binary)
./otp -f document.pdf 1a2b -a # Encrypt file (ASCII)
./otp -f document.pdf 1a2b -o secret.otp # Custom output name
```
### Text Encryption
```bash
# Interactive text encryption
./otp encrypt 1a2b3c
Enter text to encrypt: This is my secret message
# Outputs ASCII armored message
# Inline text encryption
./otp -e 1a2b3c "This is my secret message"
# Outputs ASCII armored message immediately
```
### File Encryption
```bash
# Binary format (preserves metadata)
./otp -f sensitive.doc a1b2c3
# ASCII armored format (text-safe)
./otp -f sensitive.doc a1b2c3 -a
# Custom output filename
./otp -f sensitive.doc a1b2c3 -o encrypted_document.otp
```
### Decryption
```bash
# Auto-detect format and pad from message/file
./otp -d encrypted.otp.asc
./otp -d "-----BEGIN OTP MESSAGE-----..."
# Interactive mode
./otp decrypt
# Prompts for encrypted message input
```
### Build and Version Tracking ### Build and Version Tracking
```bash ```bash
$ ./build.sh build $ ./build.sh build
[INFO] Incrementing version... [INFO] Incrementing version...
[INFO] Current version: v0.1.4 [INFO] Current version: v0.2.14
[INFO] New version: v0.1.5 [INFO] New version: v0.2.15
[SUCCESS] Created new version tag: v0.1.5 [SUCCESS] Created new version tag: v0.2.15
[SUCCESS] Build completed successfully [SUCCESS] Build completed successfully
$ ./otp
=== OTP Cipher v0.1.5 ===
=== Main Menu ===
1. Generate new pad
2. Encrypt message
3. Decrypt message
4. List available pads
5. Show pad information
6. Exit
$ ./otp --help $ ./otp --help
OTP Cipher - One Time Pad Implementation v0.1.5 OTP Cipher - One Time Pad Implementation v0.2.15
Built on 2025-08-10 at 08:17:47 from commit 9edfa5f on branch master Built on 2025-08-10 at 14:07:58 from commit ae0afcf on branch master
Usage:
./otp - Interactive mode
...
``` ```
### Version History ### Advanced Features
```bash ```bash
$ git tag --list # Generate pad with keyboard entropy
v0.1.0 ./otp generate 5GB
v0.1.1 # Follow prompts for keyboard entropy collection
v0.1.2
v0.1.3 # Check pad usage
v0.1.4 ./otp -l
v0.1.5 Available pads:
No. ChkSum (first 16 chars) Size Used % Used
--- ------------------- ---------- ---------- ------
1 97d9d82b5414a943 1.00GB 156B 0.0%
2 0c8e19fde996e683 1000B 248B 24.8%
# Show detailed pad information
./otp
# Select "S" for show pad info, enter checksum or prefix
``` ```
## License ## License

View File

@@ -13,6 +13,23 @@ print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
print_error() { echo -e "${RED}[ERROR]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# Global variable for commit message
COMMIT_MESSAGE=""
# Parse command line arguments for -m flag
while [[ $# -gt 0 ]]; do
case $1 in
-m|--message)
COMMIT_MESSAGE="$2"
shift 2
;;
*)
# Keep other arguments for main logic
break
;;
esac
done
# Function to automatically increment version # Function to automatically increment version
increment_version() { increment_version() {
print_status "Incrementing version..." print_status "Incrementing version..."
@@ -57,8 +74,22 @@ increment_version() {
print_warning "Failed to stage changes (maybe not a git repository)" print_warning "Failed to stage changes (maybe not a git repository)"
fi fi
# Commit changes with version message # Handle commit message - use global variable if set, otherwise prompt
if git commit -m "Version $NEW_VERSION - Automatic version increment" 2>/dev/null; then if [[ -z "$COMMIT_MESSAGE" ]]; then
echo ""
print_status "Please enter a meaningful commit message for version $NEW_VERSION:"
echo -n "> "
read -r COMMIT_MESSAGE
fi
# Check if user provided a message
if [[ -z "$COMMIT_MESSAGE" ]]; then
print_warning "No commit message provided. Using default message."
COMMIT_MESSAGE="Automatic version increment"
fi
# Commit changes with user-provided message
if git commit -m "Version $NEW_VERSION - $COMMIT_MESSAGE" 2>/dev/null; then
print_success "Committed changes for version $NEW_VERSION" print_success "Committed changes for version $NEW_VERSION"
else else
print_warning "Failed to commit changes (maybe no changes to commit or not a git repository)" print_warning "Failed to commit changes (maybe no changes to commit or not a git repository)"
@@ -67,6 +98,19 @@ increment_version() {
# Create new git tag # Create new git tag
if git tag "$NEW_VERSION" 2>/dev/null; then if git tag "$NEW_VERSION" 2>/dev/null; then
print_success "Created new version tag: $NEW_VERSION" print_success "Created new version tag: $NEW_VERSION"
# Push changes and tags to remote repository
if git push ssh://ubuntu@laantungir.net:/home/ubuntu/git_repos/otp 2>/dev/null; then
print_success "Pushed changes to remote repository"
else
print_warning "Failed to push changes to remote repository"
fi
if git push ssh://ubuntu@laantungir.net:/home/ubuntu/git_repos/otp --tags 2>/dev/null; then
print_success "Pushed tags to remote repository"
else
print_warning "Failed to push tags to remote repository"
fi
else else
print_warning "Tag $NEW_VERSION already exists - using existing version" print_warning "Tag $NEW_VERSION already exists - using existing version"
NEW_VERSION=$LATEST_TAG NEW_VERSION=$LATEST_TAG
@@ -227,7 +271,10 @@ case "${1:-build}" in
;; ;;
*) *)
echo "OTP Cipher Build Script" echo "OTP Cipher Build Script"
echo "Usage: $0 {build|static|clean|install|uninstall|version}" echo "Usage: $0 [-m \"commit message\"] {build|static|clean|install|uninstall|version}"
echo ""
echo "Options:"
echo " -m, --message \"text\" - Specify commit message (skips interactive prompt)"
echo "" echo ""
echo "Commands:" echo "Commands:"
echo " build - Build project with automatic version increment (default)" echo " build - Build project with automatic version increment (default)"
@@ -236,6 +283,11 @@ case "${1:-build}" in
echo " install - Install to system (requires build first)" echo " install - Install to system (requires build first)"
echo " uninstall - Remove from system" echo " uninstall - Remove from system"
echo " version - Generate version files only" echo " version - Generate version files only"
echo ""
echo "Examples:"
echo " $0 build"
echo " $0 -m \"Fixed checksum parsing bug\" build"
echo " $0 --message \"Added new feature\" static"
exit 1 exit 1
;; ;;
esac esac

BIN
debug Executable file

Binary file not shown.

1
debug.c Normal file
View File

@@ -0,0 +1 @@
int main() { printf("Testing direct filename: %d\n", strncmp("97d9d82b5414a9439102f3811fb90ab1d6368a00d33229a18b306476f9d04f82.pad", "97", 2)); return 0; }

1795
otp.c

File diff suppressed because it is too large Load Diff

8
otp.code-workspace Normal file
View File

@@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}

1
test_file.txt Normal file
View File

@@ -0,0 +1 @@
Hello, this is a test file for encryption!

8898
toc.txt Executable file

File diff suppressed because it is too large Load Diff