Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa90e0eafd | |||
| 2a10d974b2 | |||
| 7e04896394 | |||
| 0cdf6e7804 | |||
| 268758a21b | |||
| 85ef39d283 | |||
| 2c864f1feb | |||
| ae0afcfffd | |||
| e45aa04b05 | |||
| 8e1fcdb108 | |||
| 29f4a67c1c | |||
| 146da4e883 | |||
| 3152a7777f | |||
| 68a2a0c252 | |||
| bb17b0a7be |
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"
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,7 @@
|
||||
otp
|
||||
pads/
|
||||
Gemini.md
|
||||
TropicOfCancer-HenryMiller.txt
|
||||
|
||||
# Auto-generated version files
|
||||
src/version.h
|
||||
|
||||
138
README.md
138
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
|
||||
|
||||
58
build.sh
58
build.sh
@@ -13,6 +13,23 @@ print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
||||
print_warning() { echo -e "${YELLOW}[WARNING]${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
|
||||
increment_version() {
|
||||
print_status "Incrementing version..."
|
||||
@@ -57,8 +74,22 @@ increment_version() {
|
||||
print_warning "Failed to stage changes (maybe not a git repository)"
|
||||
fi
|
||||
|
||||
# Commit changes with version message
|
||||
if git commit -m "Version $NEW_VERSION - Automatic version increment" 2>/dev/null; then
|
||||
# Handle commit message - use global variable if set, otherwise prompt
|
||||
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"
|
||||
else
|
||||
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
|
||||
if git tag "$NEW_VERSION" 2>/dev/null; then
|
||||
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
|
||||
print_warning "Tag $NEW_VERSION already exists - using existing version"
|
||||
NEW_VERSION=$LATEST_TAG
|
||||
@@ -227,7 +271,10 @@ case "${1:-build}" in
|
||||
;;
|
||||
*)
|
||||
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 "Commands:"
|
||||
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 " uninstall - Remove from system"
|
||||
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
|
||||
;;
|
||||
esac
|
||||
|
||||
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