Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa90e0eafd | |||
| 2a10d974b2 | |||
| 7e04896394 | |||
| 0cdf6e7804 | |||
| 268758a21b | |||
| 85ef39d283 |
4
.clinerules/workspace_rules.md
Normal file
4
.clinerules/workspace_rules.md
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
When building, use build.sh, not make.
|
||||
|
||||
Use it as follows: build.sh -m "useful comment on changes being made"
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
otp
|
||||
pads/
|
||||
Gemini.md
|
||||
TropicOfCancer-HenryMiller.txt
|
||||
|
||||
# Auto-generated version files
|
||||
src/version.h
|
||||
|
||||
140
README.md
140
README.md
@@ -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.
|
||||
|
||||
## Features
|
||||
|
||||
- **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
|
||||
- **Short Command Flags**: Convenient single-character flags for all operations
|
||||
- **Automatic Versioning**: Built-in semantic versioning with automatic patch increment
|
||||
- **Multiple Build Options**: Standard and static linking builds
|
||||
- **Cross-Platform**: Works on Linux and other UNIX-like systems
|
||||
@@ -148,45 +151,122 @@ otp/
|
||||
└── 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
|
||||
```bash
|
||||
$ ./build.sh build
|
||||
[INFO] Incrementing version...
|
||||
[INFO] Current version: v0.1.4
|
||||
[INFO] New version: v0.1.5
|
||||
[SUCCESS] Created new version tag: v0.1.5
|
||||
[INFO] Current version: v0.2.14
|
||||
[INFO] New version: v0.2.15
|
||||
[SUCCESS] Created new version tag: v0.2.15
|
||||
[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 Cipher - One Time Pad Implementation v0.1.5
|
||||
Built on 2025-08-10 at 08:17:47 from commit 9edfa5f on branch master
|
||||
Usage:
|
||||
./otp - Interactive mode
|
||||
...
|
||||
OTP Cipher - One Time Pad Implementation v0.2.15
|
||||
Built on 2025-08-10 at 14:07:58 from commit ae0afcf on branch master
|
||||
```
|
||||
|
||||
### Version History
|
||||
### Advanced Features
|
||||
```bash
|
||||
$ git tag --list
|
||||
v0.1.0
|
||||
v0.1.1
|
||||
v0.1.2
|
||||
v0.1.3
|
||||
v0.1.4
|
||||
v0.1.5
|
||||
# Generate pad with keyboard entropy
|
||||
./otp generate 5GB
|
||||
# Follow prompts for keyboard entropy collection
|
||||
|
||||
# Check pad usage
|
||||
./otp -l
|
||||
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
|
||||
@@ -199,5 +279,3 @@ When contributing:
|
||||
1. The version will automatically increment on builds
|
||||
2. For major features, consider manually creating minor version tags
|
||||
3. Generated version files (`src/version.*`, `VERSION`) should not be committed
|
||||
# Test change
|
||||
# Testing -m flag
|
||||
|
||||
1
debug.c
Normal file
1
debug.c
Normal file
@@ -0,0 +1 @@
|
||||
int main() { printf("Testing direct filename: %d\n", strncmp("97d9d82b5414a9439102f3811fb90ab1d6368a00d33229a18b306476f9d04f82.pad", "97", 2)); return 0; }
|
||||
BIN
test.txt.otp
Normal file
BIN
test.txt.otp
Normal file
Binary file not shown.
1
test_ascii
Normal file
1
test_ascii
Normal file
@@ -0,0 +1 @@
|
||||
This is a test file for OTP encryption.
|
||||
7
test_ascii.otp.asc
Normal file
7
test_ascii.otp.asc
Normal file
@@ -0,0 +1,7 @@
|
||||
-----BEGIN OTP MESSAGE-----
|
||||
Version: v0.2.15
|
||||
Pad-ChkSum: 0c8e19fde996e683fdbd348d1052eec168ffe6f67a88bb1278d0d02e9341b87b
|
||||
Pad-Offset: 210
|
||||
|
||||
mMIm7iVtUO6NbXbskMxtydI/A16UXEQUGTcIya/8Dja6PB3EC0MLdw==
|
||||
-----END OTP MESSAGE-----
|
||||
Reference in New Issue
Block a user