mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-03 01:41:44 +00:00
* feat(did): remove account types * feat: Refactor Property to Proof in zkprop.go * feat: add ZKP proof mechanism for verifications * fix: return bool and error from pinInitialVault * feat: implement KeyshareSet for managing user and validator keyshares * feat: Update Credential type in protobuf * feat: update credential schema with sign count * feat: migrate and modules to middleware * refactor: rename vault module to ORM * chore(dwn): add service worker registration to index template * feat: integrate service worker for offline functionality * refactor(did): use DIDNamespace enum for verification method in proto reflection * refactor: update protobuf definitions to support Keyshare * feat: expose did keeper in app keepers * Add Motr Web App * refactor: rename motr/handlers/discovery.go to motr/handlers/openid.go * refactor: move session related code to middleware * feat: add database operations for managing assets, chains, and credentials * feat: add htmx support for UI updates * refactor: extract common helper scripts * chore: remove unused storage GUI components * refactor: Move frontend rendering to dedicated handlers * refactor: rename to * refactor: move alert implementation to templ * feat: add alert component with icon, title, and message * feat: add new RequestHeaders struct to store request headers * Feature/create home view (#9) * refactor: move view logic to new htmx handler * refactor: remove unnecessary dependencies * refactor: remove unused dependencies * feat(devbox): integrate air for local development * feat: implement openid connect discovery document * refactor: rename to * refactor(did): update service handling to support DNS discovery * feat: add support for user and validator keyshares * refactor: move keyshare signing logic to signer
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package db
|
|
|
|
import (
|
|
"crypto/rand"
|
|
|
|
"github.com/ncruces/go-sqlite3/gormlite"
|
|
"golang.org/x/crypto/argon2"
|
|
"gorm.io/gorm"
|
|
"lukechampine.com/adiantum/hbsh"
|
|
"lukechampine.com/adiantum/hpolyc"
|
|
|
|
_ "github.com/ncruces/go-sqlite3/embed"
|
|
)
|
|
|
|
type DBOption func(config *DBConfig)
|
|
|
|
func WithDir(dir string) DBOption {
|
|
return func(config *DBConfig) {
|
|
config.Dir = dir
|
|
}
|
|
}
|
|
|
|
func WithSecretKey(secretKey string) DBOption {
|
|
return func(config *DBConfig) {
|
|
config.SecretKey = secretKey
|
|
}
|
|
}
|
|
|
|
type DBConfig struct {
|
|
Dir string
|
|
SecretKey string
|
|
|
|
fileName string
|
|
}
|
|
|
|
func (config *DBConfig) ConnectionString() string {
|
|
connStr := "file:"
|
|
connStr += config.Dir + "/" + config.fileName
|
|
return connStr
|
|
}
|
|
|
|
// GormDialector creates a gorm dialector for the database.
|
|
func (config *DBConfig) Open() (*DB, error) {
|
|
db, err := gorm.Open(gormlite.Open(config.ConnectionString()))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return createInitialTables(db)
|
|
}
|
|
|
|
// HBSH creates an HBSH cipher given a key.
|
|
func (c *DBConfig) HBSH(key []byte) *hbsh.HBSH {
|
|
if len(key) != 32 {
|
|
// Key is not appropriate, return nil.
|
|
return nil
|
|
}
|
|
return hpolyc.New(key)
|
|
}
|
|
|
|
// KDF gets a key from a secret.
|
|
func (c *DBConfig) KDF(secret string) []byte {
|
|
if secret == "" {
|
|
// No secret is given, generate a random key.
|
|
key := make([]byte, 32)
|
|
n, _ := rand.Read(key)
|
|
return key[:n]
|
|
}
|
|
// Hash the secret with a KDF.
|
|
return argon2.IDKey([]byte(secret), []byte("hpolyc"), 3, 64*1024, 4, 32)
|
|
}
|