mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-03 18:01:39 +00:00
- **refactor: move session-related code to middleware package** - **refactor: update PKL build process and adjust related configurations** - **feat: integrate base.cosmos.v1 Genesis module** - **refactor: pass session context to modal rendering functions** - **refactor: move nebula package to app directory and update templ version** - **refactor: Move home section video view to dedicated directory** - **refactor: remove unused views file** - **refactor: move styles and UI components to global scope** - **refactor: Rename images.go to cdn.go** - **feat: Add Empty State Illustrations** - **refactor: Consolidate Vault Index Logic** - **fix: References to App.wasm and remove Vault Directory embedded CDN files** - **refactor: Move CDN types to Models** - **fix: Correct line numbers in templ error messages for arch_templ.go** - **refactor: use common types for peer roles** - **refactor: move common types and ORM to a shared package** - **fix: Config import dwn** - **refactor: move nebula directory to app** - **feat: Rebuild nebula** - **fix: correct file paths in panels templates** - **feat: Remove duplicate types** - **refactor: Move dwn to pkg/core** - **refactor: Binary Structure** - **feat: Introduce Crypto Pkg** - **fix: Broken Process Start** - **feat: Update pkg/* structure** - **feat: Refactor PKL Structure** - **build: update pkl build process** - **chore: Remove Empty Files** - **refactor: remove unused macaroon package** - **feat: Add WebAwesome Components** - **refactor: consolidate build and generation tasks into a single taskfile, remove redundant makefile targets** - **refactor: refactor server and move components to pkg/core/dwn** - **build: update go modules** - **refactor: move gateway logic into dedicated hway command** - **feat: Add KSS (Krawczyk-Song-Song) MPC cryptography module** - **feat: Implement MPC-based JWT signing and UCAN token generation** - **feat: add support for MPC-based JWT signing** - **feat: Implement MPC-based UCAN capabilities for smart accounts** - **feat: add address field to keyshareSource** - **feat: Add comprehensive MPC test suite for keyshares, UCAN tokens, and token attenuations** - **refactor: improve MPC keyshare management and signing process** - **feat: enhance MPC capability hierarchy documentation** - **refactor: rename GenerateKeyshares function to NewKeyshareSource for clarity** - **refactor: remove unused Ethereum address computation** - **feat: Add HasHandle and IsAuthenticated methods to HTTPContext** - **refactor: Add context.Context support to session HTTPContext** - **refactor: Resolve context interface conflicts in HTTPContext** - **feat: Add session ID context key and helper functions** - **feat: Update WebApp Page Rendering** - **refactor: Simplify context management by using single HTTPContext key** - **refactor: Simplify HTTPContext creation and context management in session middleware** - **refactor: refactor session middleware to use a single data structure** - **refactor: Simplify HTTPContext implementation and session data handling** - **refactor: Improve session context handling and prevent nil pointer errors** - **refactor: Improve session context handling with nil safety and type support** - **refactor: improve session data injection** - **feat: add full-screen modal component and update registration flow** - **chore: add .air.toml to .gitignore** - **feat: add Air to devbox and update dependencies**
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package bip32
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha512"
|
|
"encoding/binary"
|
|
"errors"
|
|
"math/big"
|
|
|
|
"github.com/btcsuite/btcd/btcec/v2"
|
|
)
|
|
|
|
// ComputePublicKey computes the public key of a child key given the extended public key, chain code, and index.
|
|
func ComputePublicKey(extPubKey []byte, chainCode uint32, index int) ([]byte, error) {
|
|
// Check if the index is a hardened child key
|
|
if chainCode&0x80000000 != 0 && index < 0 {
|
|
return nil, errors.New("invalid index")
|
|
}
|
|
|
|
// Serialize the public key
|
|
pubKey, err := btcec.ParsePubKey(extPubKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pubKeyBytes := pubKey.SerializeCompressed()
|
|
|
|
// Serialize the index
|
|
indexBytes := make([]byte, 4)
|
|
binary.BigEndian.PutUint32(indexBytes, uint32(index))
|
|
|
|
// Compute the HMAC-SHA512
|
|
mac := hmac.New(sha512.New, []byte{byte(chainCode)})
|
|
mac.Write(pubKeyBytes)
|
|
mac.Write(indexBytes)
|
|
I := mac.Sum(nil)
|
|
|
|
// Split I into two 32-byte sequences
|
|
IL := I[:32]
|
|
|
|
// Convert IL to a big integer
|
|
ilNum := new(big.Int).SetBytes(IL)
|
|
|
|
// Check if parse256(IL) >= n
|
|
curve := btcec.S256()
|
|
if ilNum.Cmp(curve.N) >= 0 {
|
|
return nil, errors.New("invalid child key")
|
|
}
|
|
|
|
// Compute the child public key
|
|
ilx, ily := curve.ScalarBaseMult(IL)
|
|
childX, childY := curve.Add(ilx, ily, pubKey.X(), pubKey.Y())
|
|
lx := newBigIntFieldVal(childX)
|
|
ly := newBigIntFieldVal(childY)
|
|
|
|
// Create the child public key
|
|
childPubKey := btcec.NewPublicKey(lx, ly)
|
|
childPubKeyBytes := childPubKey.SerializeCompressed()
|
|
return childPubKeyBytes, nil
|
|
}
|
|
|
|
// newBigIntFieldVal creates a new field value from a big integer.
|
|
func newBigIntFieldVal(val *big.Int) *btcec.FieldVal {
|
|
lx := new(btcec.FieldVal)
|
|
lx.SetByteSlice(val.Bytes())
|
|
return lx
|
|
}
|