refactor(mpc): migrate to simple enclaves

This commit is contained in:
2026-01-10 15:39:41 -05:00
parent e7202256c3
commit 876deb2989
11 changed files with 77 additions and 1233 deletions

View File

@@ -17,43 +17,10 @@ import (
"enclave/internal/types"
"github.com/extism/go-pdk"
"github.com/sonr-io/crypto/core/protocol"
)
func main() { state.Default() }
//go:wasmexport test_mpc
func testMPC() int32 {
pdk.Log(pdk.LogInfo, "test_mpc: starting MPC test")
var result string
func() {
defer func() {
if r := recover(); r != nil {
result = fmt.Sprintf("PANIC: %v", r)
pdk.Log(pdk.LogError, result)
}
}()
pdk.Log(pdk.LogInfo, "test_mpc: calling mpc.NewEnclave()")
enc, err := mpc.NewEnclave()
if err != nil {
result = fmt.Sprintf("ERROR: %v", err)
pdk.Log(pdk.LogError, result)
return
}
result = fmt.Sprintf("SUCCESS: pubkey=%s", enc.PubKeyHex()[:16])
pdk.Log(pdk.LogInfo, result)
}()
output := map[string]string{"result": result}
if err := pdk.OutputJSON(output); err != nil {
pdk.SetError(err)
return 1
}
return 0
}
//go:wasmexport ping
func ping() int32 {
pdk.Log(pdk.LogInfo, "ping: received request")
@@ -310,26 +277,16 @@ func initializeWithMPC(credentialBytes []byte) (*initResult, error) {
}
pdk.Log(pdk.LogInfo, fmt.Sprintf("initializeWithMPC: step 4 - DID initialized: %s", did))
pdk.Log(pdk.LogInfo, "initializeWithMPC: step 5 - generating MPC enclave")
enclave, err := mpc.NewEnclave()
pdk.Log(pdk.LogInfo, "initializeWithMPC: step 5 - generating simple enclave")
simpleEnc, err := mpc.NewSimpleEnclave()
if err != nil {
pdk.Log(pdk.LogError, fmt.Sprintf("initializeWithMPC: MPC enclave generation failed: %v", err))
return nil, fmt.Errorf("generate MPC enclave: %w", err)
pdk.Log(pdk.LogError, fmt.Sprintf("initializeWithMPC: enclave generation failed: %v", err))
return nil, fmt.Errorf("generate enclave: %w", err)
}
pdk.Log(pdk.LogInfo, "initializeWithMPC: step 6 - MPC enclave generated")
pdk.Log(pdk.LogInfo, "initializeWithMPC: step 6 - enclave generated")
enclaveData := enclave.GetData()
enclaveID := fmt.Sprintf("enc_%x", credentialBytes[:8])
valShareStr, err := protocol.EncodeMessage(enclaveData.ValShare)
if err != nil {
return nil, fmt.Errorf("encode val share: %w", err)
}
userShareStr, err := protocol.EncodeMessage(enclaveData.UserShare)
if err != nil {
return nil, fmt.Errorf("encode user share: %w", err)
}
am, err := keybase.NewActionManager()
if err != nil {
return nil, fmt.Errorf("action manager: %w", err)
@@ -337,12 +294,12 @@ func initializeWithMPC(credentialBytes []byte) (*initResult, error) {
enc, err := am.CreateEnclave(ctx, keybase.NewEnclaveInput{
EnclaveID: enclaveID,
PublicKeyHex: enclaveData.PubHex,
PublicKey: enclaveData.PubBytes,
ValShare: []byte(valShareStr),
UserShare: []byte(userShareStr),
Nonce: enclaveData.Nonce,
Curve: string(enclaveData.Curve),
PublicKeyHex: simpleEnc.PubKeyHex(),
PublicKey: simpleEnc.PubKeyBytes(),
ValShare: simpleEnc.GetShare1(),
UserShare: simpleEnc.GetShare2(),
Nonce: simpleEnc.GetNonce(),
Curve: string(simpleEnc.GetCurve()),
})
if err != nil {
return nil, fmt.Errorf("store enclave: %w", err)
@@ -350,7 +307,7 @@ func initializeWithMPC(credentialBytes []byte) (*initResult, error) {
pdk.Log(pdk.LogInfo, fmt.Sprintf("initializeWithMPC: stored enclave %s", enclaveID))
accounts, err := createDefaultAccounts(ctx, am, enc.ID, enclaveData.PubBytes)
accounts, err := createDefaultAccounts(ctx, am, enc.ID, simpleEnc.PubKeyBytes())
if err != nil {
pdk.Log(pdk.LogWarn, fmt.Sprintf("initializeWithMPC: failed to create accounts: %s", err))
accounts = []types.AccountInfo{}
@@ -359,7 +316,7 @@ func initializeWithMPC(credentialBytes []byte) (*initResult, error) {
return &initResult{
DID: did,
EnclaveID: enclaveID,
PublicKey: enclaveData.PubHex,
PublicKey: simpleEnc.PubKeyHex(),
Accounts: accounts,
}, nil
}