14 KiB
14 KiB
Stegasoo v3.2.0 Release Checklist
Overview
This checklist covers comprehensive functionality testing for the v3.2.0 release, which introduces breaking changes from v3.1.x.
Breaking Changes in v3.2.0
| Change | v3.1.x | v3.2.0 |
|---|---|---|
| Passphrase model | 7 daily phrases (day_phrase) |
Single passphrase |
| Date parameter | Required date_str |
Removed |
| Default words | 3 | 4 |
| Format version | 3 | 4 |
| Backward compatible | N/A | ❌ Cannot decode v3.1.x images |
1. Core Library Tests
1.1 Key Generation (src/stegasoo/keygen.py)
- generate_pin() - Default 6 digits, no leading zero
- generate_pin(length=9) - Custom length works
- generate_phrase(words=4) - Default 4 words
- generate_phrase(words=6) - Custom word count
- generate_credentials(use_pin=True) - Returns single passphrase
- generate_credentials(use_rsa=True) - RSA key generation
- generate_credentials(use_pin=False, use_rsa=False) - Raises error
- Credentials.passphrase - Single string, not dict
- Credentials.passphrase_entropy - Correct entropy (4 words = 44 bits)
- Credentials.total_entropy - Sum is correct
1.2 Encoding (src/stegasoo/steganography.py)
- encode() with passphrase - New parameter name works
- encode() without date_str - No date parameter needed
- HEADER_OVERHEAD = 65 - Correct constant
- LSB mode - Default, full color PNG output
- DCT mode - Frequency domain embedding
- DCT + JPEG output - Works correctly
- DCT + color mode - Preserves colors
- Capacity calculation - Uses 65-byte overhead
1.3 Decoding (src/stegasoo/steganography.py)
- decode() with passphrase - New parameter name works
- decode() without date_str - No date parameter needed
- Auto mode detection - LSB vs DCT automatic
- Wrong passphrase - Raises DecryptionError
- Wrong PIN - Raises DecryptionError
- Wrong reference photo - Raises DecryptionError
1.4 DCT Steganography (src/stegasoo/dct_steganography.py)
- Y channel extraction - Uses correct formula (not just R channel)
- Color mode encoding - YCbCr conversion works
- Grayscale mode - Converts to grayscale
- JPEG output - Quality 95, proper format
- PNG output - Lossless DCT output
1.5 Batch Processing (src/stegasoo/batch.py)
- BatchCredentials.passphrase - Single field, not dict
- BatchCredentials.from_dict() - Accepts both old and new format
- batch_encode() - Uses passphrase parameter
- batch_decode() - Uses passphrase parameter
1.6 Validation
- validate_passphrase() - New function works
- validate_passphrase() warning - Warns if < 4 words
- validate_pin() - 6-9 digits, no leading zero
- validate_message() - Non-empty, within size limits
2. CLI Frontend Tests (frontends/cli/main.py)
2.1 Generate Command
# Test default generation (4 words, PIN)
stegasoo generate --pin
# Test custom word count
stegasoo generate --pin --words 6
# Test RSA generation
stegasoo generate --rsa
# Test JSON output
stegasoo generate --pin --json
- Output shows single
PASSPHRASE:not daily phrases - Default is 4 words
- JSON has
passphrasefield, notphrasesdict - Entropy shows
passphrase_entropy
2.2 Encode Command
# Test basic encode
stegasoo encode -r ref.jpg -c carrier.png \
-p "word1 word2 word3 word4" --pin 123456 \
-m "Secret message"
# Test DCT mode
stegasoo encode -r ref.jpg -c carrier.png \
-p "word1 word2 word3 word4" --pin 123456 \
-m "Secret" --mode dct
# Test DCT + JPEG
stegasoo encode -r ref.jpg -c carrier.png \
-p "word1 word2 word3 word4" --pin 123456 \
-m "Secret" --mode dct --dct-format jpeg
-p/--passphraseparameter works- No
--dateparameter exists - LSB mode produces PNG
- DCT mode works
- DCT + JPEG output works
- Output filename has no date suffix
2.3 Decode Command
# Test basic decode
stegasoo decode -r ref.jpg -s stego.png \
-p "word1 word2 word3 word4" --pin 123456
# Test auto mode detection
stegasoo decode -r ref.jpg -s stego.png \
-p "word1 word2 word3 word4" --pin 123456 --mode auto
-p/--passphraseparameter works- No
--dateparameter exists - Auto-detects LSB vs DCT
- Outputs decoded message
2.4 Other Commands
# Verify command
stegasoo verify -s stego.png
# Compare command
stegasoo compare original.png stego.png
# Modes command
stegasoo modes
# Capacity command
stegasoo capacity carrier.png
- All commands work without errors
- No references to "day phrase" or dates
3. API Frontend Tests (frontends/api/main.py)
3.1 Status Endpoint
curl http://localhost:8000/
- Returns
version: "3.2.0" - Includes
breaking_changesobject - No
day_namesfield
3.2 Generate Endpoint
curl -X POST http://localhost:8000/generate \
-H "Content-Type: application/json" \
-d '{"use_pin": true, "words_per_passphrase": 4}'
- Parameter is
words_per_passphrase(notwords_per_phrase) - Response has
passphrasestring field - Response has
phrases: null - Entropy field is
passphrasenotphrase
3.3 Encode Endpoint
curl -X POST http://localhost:8000/encode \
-H "Content-Type: application/json" \
-d '{
"message": "Secret",
"passphrase": "word1 word2 word3 word4",
"pin": "123456",
"reference_photo_base64": "...",
"carrier_image_base64": "..."
}'
- Parameter is
passphrase(notday_phrase) - No
date_strparameter accepted - Response has
date_used: null - Response has
day_of_week: null
3.4 Decode Endpoint
curl -X POST http://localhost:8000/decode \
-H "Content-Type: application/json" \
-d '{
"passphrase": "word1 word2 word3 word4",
"pin": "123456",
"stego_image_base64": "...",
"reference_photo_base64": "..."
}'
- Parameter is
passphrase(notday_phrase) - No
date_strparameter needed - Auto-detects embedding mode
3.5 Multipart Endpoints
# Encode multipart
curl -X POST http://localhost:8000/encode/multipart \
-F "passphrase=word1 word2 word3 word4" \
-F "pin=123456" \
-F "message=Secret" \
-F "reference_photo=@ref.jpg" \
-F "carrier=@carrier.png"
# Decode multipart
curl -X POST http://localhost:8000/decode/multipart \
-F "passphrase=word1 word2 word3 word4" \
-F "pin=123456" \
-F "reference_photo=@ref.jpg" \
-F "stego_image=@stego.png"
- Form field is
passphrase(notday_phrase) - No
date_strfield - Headers include
X-Stegasoo-Version: 3.2.0 - No date headers in response
4. Web Frontend Tests (frontends/web/app.py)
4.1 Generate Page (/generate)
- Form field is
words_per_passphrase - Default slider value is 4
- Output shows single passphrase, not 7 daily phrases
- Memory aid works with single passphrase
- Entropy display shows
passphrase_entropy - v3.2.0 badge visible
4.2 Encode Page (/encode)
- Form field is
passphrase - No date selection field
- v3.2.0 badge on passphrase label
- Passphrase validation warning works (< 4 words)
- DCT mode options work
- Success result shows no date info
4.3 Decode Page (/decode)
- Form field is
passphrase - No date input field
- No date detection from filename JavaScript
- Troubleshooting mentions v3.2.0 compatibility
- Auto mode detection works
4.4 Other Pages
- Home (
/) - Shows v3.2.0 badge, passphrase terminology - About (
/about) - Updated terminology, v3.2.0 features - Footer - Says "Passphrase" not "Day-Phrase"
5. Integration Tests
5.1 Full Roundtrip Tests
# Generate → Encode → Decode (LSB)
stegasoo generate --pin > creds.json
stegasoo encode -r ref.jpg -c carrier.png -p "..." --pin 123456 -m "Test" -o stego.png
stegasoo decode -r ref.jpg -s stego.png -p "..." --pin 123456
# Generate → Encode → Decode (DCT)
stegasoo encode -r ref.jpg -c carrier.png -p "..." --pin 123456 -m "Test" --mode dct -o stego_dct.png
stegasoo decode -r ref.jpg -s stego_dct.png -p "..." --pin 123456
- LSB roundtrip works
- DCT roundtrip works
- DCT + JPEG roundtrip works
- File embedding roundtrip works
5.2 Cross-Frontend Tests
- Encode via CLI, decode via API
- Encode via API, decode via Web
- Encode via Web, decode via CLI
5.3 Error Handling
- Wrong passphrase shows clear error
- Wrong PIN shows clear error
- Wrong reference photo shows clear error
- Capacity exceeded shows clear error
- Invalid image shows clear error
6. Documentation Tests
6.1 CLI Documentation (frontends/CLI.md)
- "What's New in v3.2.0" section exists
- All examples use 4-word passphrases
- No
--dateparameter in examples - Command reference is complete
- Migration notes for v3.1.x users
6.2 API Documentation (frontends/API.md)
- "What's New in v3.2.0" section exists
- All request examples use
passphrase - No
date_strin request models - Response models show
date_used: null - Code examples updated
6.3 Web UI Documentation (frontends/WEB_UI.md)
- "What's New in v3.2.0" section exists
- Workflow examples use passphrase
- No date selection in screenshots/descriptions
- Troubleshooting updated
7. Backward Compatibility Tests
7.1 v3.1.x Image Decoding
- Attempting to decode v3.1.x image with v3.2.0 fails gracefully
- Error message mentions version incompatibility
- Suggests using v3.1.x for old images
7.2 Migration Path
BatchCredentials.from_dict()accepts oldday_phrasekeygenerate_credentials_legacy()available if needed- Documentation explains migration steps
8. Unit Test Updates
8.1 Test Files to Update
tests/test_stegasoo.py- Usepassphraseparametertests/test_batch.py- Usepassphrasein credentialstests/test_compression.py- No changes needed (compression unchanged)
8.2 New Tests Needed
- Test single passphrase generation
- Test
passphrase_wordsparameter - Test
validate_passphrase()function - Test DCT Y channel extraction
- Test 65-byte header overhead
9. Release Artifacts
9.1 Version Bumps
src/stegasoo/constants.py-__version__ = "3.2.0"pyproject.tomlorsetup.py- version updatedCHANGELOG.md- v3.2.0 section added
9.2 Documentation
README.md- Updated for v3.2.0frontends/CLI.md- Completefrontends/API.md- Completefrontends/WEB_UI.md- Complete
9.3 Git
- All changes committed
- Tag created:
v3.2.0 - Release notes written
10. Quick Smoke Test Script
#!/bin/bash
# v3.2.0 Smoke Test
set -e
echo "=== Stegasoo v3.2.0 Smoke Test ==="
# Check version
echo "1. Checking version..."
python -c "import stegasoo; print(f'Version: {stegasoo.__version__}')"
# Generate credentials
echo "2. Generating credentials..."
python -c "
from stegasoo import generate_credentials
creds = generate_credentials(use_pin=True, passphrase_words=4)
print(f'Passphrase: {creds.passphrase}')
print(f'PIN: {creds.pin}')
print(f'Entropy: {creds.total_entropy} bits')
assert ' ' in creds.passphrase, 'Passphrase should have spaces'
assert len(creds.passphrase.split()) == 4, 'Should have 4 words'
print('✓ Credentials OK')
"
# Test encode/decode roundtrip
echo "3. Testing encode/decode roundtrip..."
python -c "
from stegasoo import encode, decode
from PIL import Image
import io
# Create test image
img = Image.new('RGB', (200, 200), color='blue')
buf = io.BytesIO()
img.save(buf, format='PNG')
test_image = buf.getvalue()
# Encode
result = encode(
message='Hello v3.2.0!',
reference_photo=test_image,
carrier_image=test_image,
passphrase='test phrase four words',
pin='123456'
)
print(f'Encoded: {result.filename}')
# Decode
decoded = decode(
stego_image=result.stego_image,
reference_photo=test_image,
passphrase='test phrase four words',
pin='123456'
)
assert decoded.message == 'Hello v3.2.0!', 'Message mismatch'
print(f'Decoded: {decoded.message}')
print('✓ Roundtrip OK')
"
# Test DCT mode
echo "4. Testing DCT mode..."
python -c "
from stegasoo import encode, decode, has_dct_support
if has_dct_support():
from PIL import Image
import io
img = Image.new('RGB', (200, 200), color='green')
buf = io.BytesIO()
img.save(buf, format='PNG')
test_image = buf.getvalue()
result = encode(
message='DCT test',
reference_photo=test_image,
carrier_image=test_image,
passphrase='dct test phrase here',
pin='123456',
embed_mode='dct'
)
decoded = decode(
stego_image=result.stego_image,
reference_photo=test_image,
passphrase='dct test phrase here',
pin='123456'
)
assert decoded.message == 'DCT test'
print('✓ DCT Mode OK')
else:
print('⚠ DCT mode not available (scipy not installed)')
"
echo ""
echo "=== All smoke tests passed! ==="
Sign-Off
| Area | Tested By | Date | Status |
|---|---|---|---|
| Core Library | ☐ | ||
| CLI Frontend | ☐ | ||
| API Frontend | ☐ | ||
| Web Frontend | ☐ | ||
| Documentation | ☐ | ||
| Integration | ☐ |
Release Approved: ☐
Released By: _________________
Release Date: _________________