Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa90e0eafd | |||
| 2a10d974b2 | |||
| 7e04896394 | |||
| 0cdf6e7804 | |||
| 268758a21b | |||
| 85ef39d283 | |||
| 2c864f1feb | |||
| ae0afcfffd | |||
| e45aa04b05 | |||
| 8e1fcdb108 |
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/
|
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
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.
|
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
|
||||||
|
|||||||
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_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
|
||||||
|
|||||||
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