Smart Passwords Library for Go
Cryptographic password generation and management without storage. Cross-platform deterministic passwords using crypto/rand and SHA-256.
Smart Passwords Library: Cryptographic password generation and management without storage. Generate passwords from secrets, verify knowledge without exposure, manage metadata securely.
Now with Cross-Platform Determinism: Same secret + same parameters = identical password on Go, C#, Python, Kotlin, JavaScript and any language with SHA-256.
Decentralized by Design: Unlike traditional password managers that store encrypted vaults on central servers, smartpasslib stores nothing. Your secrets never leave your device. Passwords are regenerated on-demand — no cloud, no database, no trust required.
No External Dependencies — Pure Go, uses standard crypto.
⚠️ Breaking Change (v4.0.0)
This version is NOT backward compatible with v1.x.x. Passwords generated with older versions cannot be regenerated with v4.0.0.
📖 Full migration instructions → see MIGRATION.md
crypto/rand and SHA-256Validation Rules: Secret phrase: min 12 chars · Password length: 12-100 chars · Code: 4-100 chars
Key derivation (same as Python/JS/Kotlin/C# versions v4.0.0):
| Key Type | Iterations | Purpose |
|---|---|---|
| Private Key | 15-30 (dynamic) | Password generation (never stored, never transmitted) |
| Public Key | 45-60 (dynamic) | Verification (stored locally) |
Character Set:
!@#$%^&*()_+-=[]{};:,.<>?/ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz
Decentralized Architecture:
go get github.com/smartlegionlab/smartpasslib-go@v4.0.0
Generate Smart Password:
package main
import (
"fmt"
"github.com/smartlegionlab/smartpasslib-go"
)
func main() {
secret := "MyStrongSecretPhrase2026!"
length := 16
password, _ := smartpasslib.GenerateSmartPassword(secret, length)
fmt.Println(password)
}
Generate Public/Private Keys:
secret := "MyStrongSecretPhrase2026!"
publicKey, _ := smartpasslib.GeneratePublicKey(secret)
privateKey, _ := smartpasslib.GeneratePrivateKey(secret)
fmt.Println("Public Key (store locally):", publicKey)
fmt.Println("Private Key (never store):", privateKey)
Verify Secret Against Public Key:
secret := "MyStrongSecretPhrase2026!"
storedPublicKey := "..." // from local
isValid, _ := smartpasslib.VerifySecret(secret, storedPublicKey)
if isValid {
password, _ := smartpasslib.GenerateSmartPassword(secret, 16)
}
Generate Random Passwords:
// Strong random (cryptographically secure) strong, _ := smartpasslib.GenerateStrongPassword(20) // Base random base, _ := smartpasslib.GenerateBasePassword(16) // Authentication code (4-100 chars) code, _ := smartpasslib.GenerateCode(8)
Constants:
| Constant | Type | Description |
|---|---|---|
Version | string | Library version (4.0.0) |
Chars | string | Character set used for generation |
Functions:
| Function | Parameters | Returns | Description |
|---|---|---|---|
GeneratePrivateKey(secret) | secret: string | (string, error) | Private key (15-30 iterations) |
GeneratePublicKey(secret) | secret: string | (string, error) | Public key (45-60 iterations) |
VerifySecret(secret, publicKey) | secret, publicKey | (bool, error) | Verify secret matches public key |
GenerateSmartPassword(secret, length) | secret, length | (string, error) | Deterministic password |
GenerateStrongPassword(length) | length | (string, error) | Cryptographically random |
GenerateBasePassword(length) | length | (string, error) | Simple random password |
GenerateCode(length) | length | (string, error) | Short code (4-100 chars) |
Input Validation:
| Parameter | Minimum | Maximum |
|---|---|---|
| Secret phrase | 12 chars | unlimited |
| Password length | 12 chars | 100 chars |
| Code length | 4 chars | 100 chars |
Secret Phrase Requirements:
Strong Secret Examples:
✅ "MyStrongSecretPhrase2026!" — mixed case + numbers + symbols ✅ "P@ssw0rd!LongSecret" — special chars + numbers + length ✅ "GitHubPersonal2026!" — description + extra chars
Weak Secret Examples (avoid):
❌ "short" — too short, returns error ❌ "GitHub Account" — using description as secret (weak!) ❌ "password" — dictionary word, too short ❌ "1234567890" — only digits, too short
Decentralized Nature:
There is no "forgot password" button. This is by design:
This is the price of true decentralization — you are completely in control.
Same deterministic algorithm is available in multiple languages:
Install Go:
# Arch Linux sudo pacman -S go # Ubuntu/Debian sudo apt install golang
Run tests:
go test -v
By using this software, you agree to the full disclaimer terms.
Software provided "AS IS" without warranty. You assume all risks.
Full legal disclaimer: See DISCLAIMER.md
License: BSD 3-Clause License