Skip to content

Commit 1485f4a

Browse files
chore: update readme
1 parent 5eb8ca1 commit 1485f4a

File tree

8 files changed

+140
-45
lines changed

8 files changed

+140
-45
lines changed

.github/workflows/deployment.yaml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ jobs:
1111
matrix:
1212
os: [macos-latest, ubuntu-latest, windows-latest]
1313
runs-on: ${{ matrix.os }}
14-
14+
permissions:
15+
contents: write
16+
pages: write
17+
id-token: write
1518
steps:
1619
- name: Checkout code
1720
uses: actions/checkout@v3
@@ -36,7 +39,20 @@ jobs:
3639
echo "version=$VERSION" >> $GITHUB_OUTPUT
3740
3841
- name: Build Web
39-
run: flutter build web
42+
if: matrix.os == 'ubuntu-latest'
43+
run: flutter build web --release --base-href "/passbag/"
44+
- name: add privacy.html to output
45+
if: matrix.os == 'ubuntu-latest'
46+
run: cp privacy.html build/web/privacy.html
47+
- name: Upload artifact
48+
if: matrix.os == 'ubuntu-latest'
49+
uses: actions/upload-pages-artifact@v3
50+
with:
51+
path: "./build/web"
52+
- name: Deploy to GitHub Pages
53+
if: matrix.os == 'ubuntu-latest'
54+
id: deployment
55+
uses: actions/deploy-pages@v4
4056

4157
- name: Build Android APK
4258
if: matrix.os == 'ubuntu-latest'
@@ -84,7 +100,7 @@ jobs:
84100
with:
85101
upload_url: ${{ steps.create_release.outputs.upload_url }}
86102
asset_path: build/app/outputs/flutter-apk/app-release.apk
87-
asset_name: app-${{ steps.version.outputs.version }}.apk
103+
asset_name: passbag-${{ steps.version.outputs.version }}.apk
88104
asset_content_type: application/vnd.android.package-archive
89105

90106
# - name: Upload Linux Build

.vscode/launch.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
"version": "0.2.0",
66
"configurations": [
77
{
8-
"name": "passbags",
8+
"name": "passbag",
99
"request": "launch",
1010
"type": "dart"
1111
},
1212
{
13-
"name": "passbags (profile mode)",
13+
"name": "passbag (profile mode)",
1414
"request": "launch",
1515
"type": "dart",
1616
"flutterMode": "profile"
1717
},
1818
{
19-
"name": "passbags (release mode)",
19+
"name": "passbag (release mode)",
2020
"request": "launch",
2121
"type": "dart",
2222
"flutterMode": "release"

README.md

Lines changed: 104 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,134 @@
1+
# Passbag
12

3+
_A Cross-Platform Password Strengthening Tool_
24

5+
## 🚀 Purpose
36

4-
Transform your weak passwords into super strong password.
7+
Passbag transforms weak, easy-to-remember passwords into strong, consistent passwords using cryptographic methods. It allows you to reliably regenerate the same secure password anytime, without needing to store it.
58

6-
## About
9+
---
710

8-
This is app help you to generate a strong password. It combines two password to generate a strong password.
11+
## 💡 Motivation
912

10-
It is implemented using flutter, so it can run in any platform, wether on mac, ios, android, or in browser.
13+
Traditional password managers often generate random, complex passwords that are hard to remember and reproduce without syncing tools. **passbag** offers a user-friendly alternative:
1114

12-
## Algorithm
15+
- Enter two memorable "seed" passwords
16+
- Combine them using a deterministic algorithm
17+
- Generate a strong password that you can always recreate
1318

14-
1. Provide your own secret from example secret
15-
2. Provide your weak password for example mbags
16-
3. Perfom hashing and encoding for your provided secret and weak password to generat a fixed length strong password
17-
4. Get your strong password
19+
This method allows you to:
1820

19-
- No information is saved in browser or database, you own your own password
21+
- Avoid password fatigue
22+
- Maintain strong security hygiene
23+
- Stay in control of your credentials
2024

25+
---
2126

27+
## 🔐 How It Works
2228

29+
**Current Implementation:**
2330

31+
- **HMAC-SHA256** (via `cryptoHmacSha256`): A secure and widely trusted hashing algorithm
32+
- **Base64 Encoding**: Converts hashed output into a readable format
2433

34+
### Example Flow:
2535

36+
1. User enters two weak passwords: `pass1` and `pass2`
37+
2. The tool computes `HMAC_SHA256(pass1, pass2)` using Dart's `cryptoHmacSha256`
38+
3. The result is base64-encoded
39+
4. Output is a strong, deterministic password
2640

41+
> The same input pair always produces the same secure output.
2742
43+
---
2844

45+
## ✅ Features
2946

47+
- 🔁 Reproducible strong passwords
48+
- 🧠 Works with memorable inputs
49+
- 🌍 Cross-platform (Flutter: mobile, web, and desktop)
50+
- 🗃️ No password storage required
51+
- 📶 Works offline
3052

53+
---
3154

32-
A cross-platform password strengthening tool
33-
[Passbag](./lib/assets/images/logo.png)
34-
## Purpose
55+
## 📅 Roadmap & Future Plans
3556

36-
Transforms weak passwords into stronger ones by combining two weak passwords into a single, more secure password using a one-way algorithm.
57+
### 🔄 Algorithm Flexibility
3758

38-
## Motivation
59+
- [ ] Support additional hash algorithms (SHA3, BLAKE2, etc.)
60+
- [ ] Allow custom encoding options (hex, base64url, etc.)
61+
- [ ] Add salt/pepper configurations for advanced users
3962

40-
Browser password managers often generate random passwords that are hard to reproduce. Passbags solves this by:
63+
### 🧬 Biometric Integration
4164

42-
- Taking two easy-to-remember passwords as input
43-
- Combining them using a consistent algorithm
44-
- Producing the same strong password every time
65+
- [ ] Enable **fingerprint or face ID** as a third input
66+
- Biometric hash included in final password generation
67+
- Deterministic per device or stored key
68+
- Useful for added security without sacrificing usability
4569

46-
This allows users to:
70+
### 📱 Platform Support (All via Flutter)
4771

48-
1. Generate strong passwords
49-
2. Recreate the same password when needed
50-
3. Keep using simple passwords as seeds
72+
- [ ] **Mobile apps**: Android & iOS
73+
- [ ] **Web app**: PWA with offline support
74+
- [ ] **Desktop app**: Windows, macOS, and Linux (built using Flutter)
5175

52-
## How It Works
76+
### 🧩 Advanced Customization
5377

54-
Just input two weak passwords, and passbags will combine them into one stronger password that you can reliably regenerate anytime.
78+
- [ ] Output formatting options:
79+
- Custom password length (e.g. 12, 16, 20+ characters)
80+
- Define character sets (symbols, upper/lowercase, digits, etc.)
81+
- Choose from different output styles (secure hash, passphrase, PIN)
82+
- [ ] Masked mode to hide password on screen
5583

84+
### 🔐 Custom Output & Encryption Options
85+
86+
- [ ] Ability to define a password schema:
87+
- e.g. "16 characters: 4 digits, 4 uppercase, 4 symbols, 4 lowercase"
88+
- [ ] Option to encrypt the generated password:
89+
- With a user-provided passphrase or key
90+
- Useful for secure sharing or device-specific protection
91+
- [ ] Output encryption options:
92+
- AES-based encryption with user seed
93+
- One-time encryption with QR export
94+
- Encrypted backups of input/output pairs (optional and opt-in only)
95+
96+
### 🛡️ Enhanced Security
97+
98+
- [ ] Optional local encryption for input history (if stored)
99+
- [ ] Integration with vetted crypto libraries (like libsodium)
100+
- [ ] Cryptographic audit and pen-testing support
101+
102+
### 🧪 Testing & Usability
103+
104+
- [ ] Fuzz tests and unit testing for hashing module
105+
- [ ] A/B testing for UX improvements
106+
- [ ] Full accessibility support (screen readers, keyboard-only nav, etc.)
107+
108+
---
109+
110+
## 🧠 Inspired By
111+
112+
A need for secure but memorable passwords, especially when switching devices, working offline, or avoiding over-dependence on cloud-based password managers.
113+
114+
---
115+
116+
## 🛠️ Installation
117+
118+
Coming soon:
119+
120+
- Web demo
121+
- Android APK & iOS TestFlight
122+
- Desktop builds (macOS, Windows, Linux)
123+
124+
---
125+
126+
## 🤝 Contributing
127+
128+
Want to help make passbag better?
129+
130+
We're looking for:
131+
132+
- Flutter developers (mobile, web, desktop)
133+
- Cryptography and security experts
134+
- UI/UX designers and testers

lib/app.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
2-
import 'package:passbags/src/features/onboarding/onboarding_screen.dart';
3-
import 'package:passbags/src/features/password/password_screen.dart';
2+
import 'package:passbag/src/features/onboarding/onboarding_screen.dart';
3+
import 'package:passbag/src/features/password/password_screen.dart';
44
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
55

66
class MyApp extends StatelessWidget {

lib/src/features/onboarding/onboarding_screen.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_svg/svg.dart';
3-
import 'package:passbags/src/features/password/password_screen.dart';
3+
import 'package:passbag/src/features/password/password_screen.dart';
44
import 'package:shared_preferences/shared_preferences.dart';
55

66
class OnboardingScreen extends StatefulWidget {
@@ -49,7 +49,7 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
4949

5050
final List<Widget> _pages = const [
5151
OnboardingPage(
52-
title: 'Welcome to Passbags',
52+
title: 'Welcome to passbag',
5353
description:
5454
'Turn your simple passwords into strong ones with Passags - your password strengthening companion!',
5555
imagePath: 'lib/assets/images/security_1.svg',

lib/src/features/password/password_screen.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
2-
import "package:passbags/src/utils/password_generator.dart";
2+
import "package:passbag/src/utils/password_generator.dart";
33
import "package:flutter/services.dart";
4-
import "package:passbags/src/widgets/styled_text_input.dart";
4+
import "package:passbag/src/widgets/styled_text_input.dart";
55

66
class PasswordGeneratorScreen extends StatefulWidget {
77
@override

privacy.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>Privacy Policy - Passbags</title>
6+
<title>Privacy Policy - passbag</title>
77
<style>
88
body {
99
font-family: Arial, sans-serif;
@@ -36,14 +36,14 @@ <h1>Privacy Policy</h1>
3636
<p>Effective Date: April 16, 2025</p>
3737

3838
<p>
39-
Welcome to Passbags! Your privacy is important to us. This Privacy Policy
39+
Welcome to passbag! Your privacy is important to us. This Privacy Policy
4040
explains how we collect, use, and protect your information when you use
4141
our app.
4242
</p>
4343

4444
<h2>Information We Collect</h2>
4545
<p>
46-
Passbags does not collect or store any personal information. All data,
46+
passbag does not collect or store any personal information. All data,
4747
including passwords and secrets, is processed locally on your device and
4848
is not transmitted to any server.
4949
</p>
@@ -57,7 +57,7 @@ <h2>How We Use Your Information</h2>
5757

5858
<h2>Third-Party Services</h2>
5959
<p>
60-
Passbags does not integrate with any third-party services or analytics
60+
passbag does not integrate with any third-party services or analytics
6161
tools. Your data remains private and secure on your device.
6262
</p>
6363

@@ -83,7 +83,7 @@ <h2>Contact Us</h2>
8383
</p>
8484

8585
<h2>Developer Information</h2>
86-
<p>Passbags is developed and maintained by Sostene Munezero Bagira.</p>
86+
<p>passbag is developed and maintained by Sostene Munezero Bagira.</p>
8787
<div class="social-links">
8888
Connect with the developer:
8989
<a href="https://www.linkedin.com/in/sostene/" target="_blank"
@@ -92,6 +92,6 @@ <h2>Developer Information</h2>
9292
<a href="https://github.com/munezerobagira" target="_blank">GitHub</a>
9393
</div>
9494

95-
<p>Thank you for using Passbags!</p>
95+
<p>Thank you for using passbag!</p>
9696
</body>
9797
</html>

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: passbags
1+
name: passbag
22
description: An app that strengthen your password.
33
# The following line prevents the package from being accidentally published to
44
# pub.dev using `flutter pub publish`. This is preferred for private packages.
@@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
1616
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
1717
# In Windows, build-name is used as the major, minor, and patch parts
1818
# of the product and file versions while build-number is used as the build suffix.
19-
version: 0.0.1+4
19+
version: 0.0.1+6
2020

2121
environment:
2222
sdk: ">=3.0.6 <4.0.0"

0 commit comments

Comments
 (0)