Version v0.2.16 - Handle files
This commit is contained in:
142
README.md
142
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,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
|
||||
|
||||
Reference in New Issue
Block a user