mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 21:09:11 +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
82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
package builder
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
|
didv1 "github.com/onsonr/sonr/api/did/v1"
|
|
"github.com/onsonr/sonr/x/did/types"
|
|
|
|
"github.com/go-webauthn/webauthn/protocol/webauthncose"
|
|
)
|
|
|
|
// PublicKey is an interface for a public key
|
|
type PublicKey interface {
|
|
cryptotypes.PubKey
|
|
Clone() cryptotypes.PubKey
|
|
GetRaw() []byte
|
|
GetRole() types.KeyRole
|
|
GetAlgorithm() types.KeyAlgorithm
|
|
GetEncoding() types.KeyEncoding
|
|
GetCurve() types.KeyCurve
|
|
GetKeyType() types.KeyType
|
|
}
|
|
|
|
// CreateAuthnVerification creates a new verification method for an authn method
|
|
func CreateAuthnVerification(namespace types.DIDNamespace, issuer string, controller string, pubkey *types.PubKey, identifier string) *types.VerificationMethod {
|
|
return &types.VerificationMethod{
|
|
Method: namespace,
|
|
Controller: controller,
|
|
PublicKey: pubkey,
|
|
Id: identifier,
|
|
Issuer: issuer,
|
|
}
|
|
}
|
|
|
|
// CreateWalletVerification creates a new verification method for a wallet
|
|
func CreateWalletVerification(namespace types.DIDNamespace, controller string, pubkey *types.PubKey, identifier string) *didv1.VerificationMethod {
|
|
return &didv1.VerificationMethod{
|
|
Method: APIFormatDIDNamespace(namespace),
|
|
Controller: controller,
|
|
PublicKey: APIFormatPubKey(pubkey),
|
|
Id: identifier,
|
|
}
|
|
}
|
|
|
|
// ExtractWebAuthnPublicKey parses the raw public key bytes and returns a JWK representation
|
|
func ExtractWebAuthnPublicKey(keyBytes []byte) (*types.PubKey_JWK, error) {
|
|
key, err := webauthncose.ParsePublicKey(keyBytes)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse public key: %w", err)
|
|
}
|
|
|
|
switch k := key.(type) {
|
|
case *webauthncose.EC2PublicKeyData:
|
|
return FormatEC2PublicKey(k)
|
|
case *webauthncose.RSAPublicKeyData:
|
|
return FormatRSAPublicKey(k)
|
|
case *webauthncose.OKPPublicKeyData:
|
|
return FormatOKPPublicKey(k)
|
|
default:
|
|
return nil, fmt.Errorf("unsupported key type")
|
|
}
|
|
}
|
|
|
|
// NewInitialWalletAccounts creates a new set of verification methods for a wallet
|
|
func NewInitialWalletAccounts(controller string, pubkey *types.PubKey) ([]*didv1.VerificationMethod, error) {
|
|
var verificationMethods []*didv1.VerificationMethod
|
|
for method, chain := range types.InitialChainCodes {
|
|
nk, err := computeBip32AccountPublicKey(pubkey, chain, 0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
addr, err := chain.FormatAddress(nk)
|
|
if err != nil {
|
|
return nil, nil
|
|
}
|
|
verificationMethods = append(verificationMethods, CreateWalletVerification(method, controller, nk, method.FormatDID(addr)))
|
|
}
|
|
return verificationMethods, nil
|
|
}
|