|
|
|
@@ -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,124 @@ 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 | 2 | Filename Length | Original filename length (uint16_t)
|
|
|
|
|
48 | var | Original Filename | Original filename string
|
|
|
|
|
var | 4 | File Mode | Original file permissions (uint32_t)
|
|
|
|
|
var | 8 | File Size | Original file size (uint64_t)
|
|
|
|
|
var | 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 lose original filename and permission 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 +281,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
|
|
|
|
|