From 53b223d4e11ecd22edae4074f8536d170da894ac Mon Sep 17 00:00:00 2001 From: otaliptus Date: Thu, 26 Mar 2026 17:21:34 +0100 Subject: [PATCH 1/5] go: init with tests --- go/README.md | 17 ++++ go/bip375_test.go | 220 ++++++++++++++++++++++++++++++++++++++++++++++ go/go.mod | 19 ++++ go/go.sum | 121 +++++++++++++++++++++++++ 4 files changed, 377 insertions(+) create mode 100644 go/README.md create mode 100644 go/bip375_test.go create mode 100644 go/go.mod create mode 100644 go/go.sum diff --git a/go/README.md b/go/README.md new file mode 100644 index 0000000..0a7eb0b --- /dev/null +++ b/go/README.md @@ -0,0 +1,17 @@ +# Go + +Go BIP-375 vectors using [`github.com/otaliptus/psbt-v2`](https://github.com/otaliptus/psbt-v2) package. + +## Run + +```bash +cd go +go test -v -count=1 +``` + +The tests read `../bip375_test_vectors.json` and cover: + +- structural invalid vectors +- semantic invalid vectors +- valid vector round-trip stability +- output script materialization for `can finalize:` vectors diff --git a/go/bip375_test.go b/go/bip375_test.go new file mode 100644 index 0000000..67b4080 --- /dev/null +++ b/go/bip375_test.go @@ -0,0 +1,220 @@ +package bip375_test + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "os" + "strings" + "testing" + + psbt "github.com/otaliptus/psbt-v2" + "github.com/otaliptus/psbt-v2/sp" +) + +type testVectors struct { + Version string `json:"version"` + Invalid []invalidVector `json:"invalid"` + Valid []validVector `json:"valid"` +} + +type invalidVector struct { + Description string `json:"description"` + PSBT string `json:"psbt"` +} + +type validVector struct { + Description string `json:"description"` + PSBT string `json:"psbt"` + ExpectedOutputs []struct { + OutputIndex int `json:"output_index"` + IsSilentPayment bool `json:"is_silent_payment"` + } `json:"expected_outputs"` +} + +var structuralInvalidDescriptions = map[string]bool{ + "psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set": true, + "psbt structure: incorrect byte length for PSBT_OUT_SP_V0_INFO field": true, + "psbt structure: incorrect byte length for PSBT_IN_SP_ECDH_SHARE field": true, + "psbt structure: incorrect byte length for PSBT_IN_SP_DLEQ field": true, + "psbt structure: missing PSBT_OUT_SCRIPT field when sending to non-sp output": true, + "psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output": true, +} + +func loadVectors(t *testing.T) testVectors { + t.Helper() + + data, err := os.ReadFile("../bip375_test_vectors.json") + if err != nil { + t.Fatalf("load vectors: %v", err) + } + + var vectors testVectors + if err := json.Unmarshal(data, &vectors); err != nil { + t.Fatalf("parse vectors: %v", err) + } + if vectors.Version != "1.1" { + t.Fatalf("unexpected vector version %q", vectors.Version) + } + + return vectors +} + +func decodePSBT(t *testing.T, b64 string) []byte { + t.Helper() + + raw, err := base64.StdEncoding.DecodeString(b64) + if err != nil { + t.Fatalf("decode base64: %v", err) + } + + return raw +} + +func parsePacket(t *testing.T, b64 string) *psbt.Packet { + t.Helper() + + packet, err := psbt.NewFromRawBytes(bytes.NewReader(decodePSBT(t, b64)), false) + if err != nil { + t.Fatalf("parse PSBT: %v", err) + } + + return packet +} + +func TestStructuralInvalidVectors(t *testing.T) { + vectors := loadVectors(t) + + tested := 0 + for _, vector := range vectors.Invalid { + if !structuralInvalidDescriptions[vector.Description] { + continue + } + + tested++ + t.Run(vector.Description, func(t *testing.T) { + if _, err := psbt.NewFromRawBytes( + bytes.NewReader(decodePSBT(t, vector.PSBT)), false, + ); err == nil { + t.Fatalf("expected parse failure") + } + }) + } + + if tested != len(structuralInvalidDescriptions) { + t.Fatalf("tested %d structural invalid vectors, want %d", + tested, len(structuralInvalidDescriptions)) + } +} + +func TestSemanticInvalidVectors(t *testing.T) { + vectors := loadVectors(t) + + tested := 0 + for _, vector := range vectors.Invalid { + if structuralInvalidDescriptions[vector.Description] { + continue + } + + tested++ + t.Run(vector.Description, func(t *testing.T) { + packet, err := psbt.NewFromRawBytes( + bytes.NewReader(decodePSBT(t, vector.PSBT)), false, + ) + if err != nil { + t.Fatalf("unexpected parse failure for semantic invalid vector: %v", err) + } + + if err := sp.ValidateExtractable(packet); err == nil { + t.Fatalf("expected semantic validation failure") + } + }) + } + + want := len(vectors.Invalid) - len(structuralInvalidDescriptions) + if tested != want { + t.Fatalf("tested %d semantic invalid vectors, want %d", tested, want) + } +} + +func TestValidVectorsRoundTrip(t *testing.T) { + vectors := loadVectors(t) + + tested := 0 + for _, vector := range vectors.Valid { + tested++ + t.Run(vector.Description, func(t *testing.T) { + packet := parsePacket(t, vector.PSBT) + + var buf bytes.Buffer + if err := packet.Serialize(&buf); err != nil { + t.Fatalf("serialize: %v", err) + } + + packet2, err := psbt.NewFromRawBytes(bytes.NewReader(buf.Bytes()), false) + if err != nil { + t.Fatalf("re-parse: %v", err) + } + + var buf2 bytes.Buffer + if err := packet2.Serialize(&buf2); err != nil { + t.Fatalf("re-serialize: %v", err) + } + + if !bytes.Equal(buf.Bytes(), buf2.Bytes()) { + t.Fatalf("round-trip mismatch") + } + }) + } + + if tested != 18 { + t.Fatalf("expected 18 valid vectors, got %d", tested) + } +} + +func TestValidVectorsMaterialize(t *testing.T) { + vectors := loadVectors(t) + + tested := 0 + for _, vector := range vectors.Valid { + if !strings.HasPrefix(vector.Description, "can finalize:") { + continue + } + + tested++ + t.Run(vector.Description, func(t *testing.T) { + packet := parsePacket(t, vector.PSBT) + + originalScripts := make(map[int][]byte) + for i := range packet.Outputs { + if packet.Outputs[i].SPV0Info == nil { + continue + } + + originalScripts[i] = append([]byte(nil), packet.Outputs[i].Script...) + packet.Outputs[i].Script = nil + } + + if err := sp.MaterializeOutputs(packet); err != nil { + t.Fatalf("MaterializeOutputs: %v", err) + } + + for _, output := range vector.ExpectedOutputs { + if !output.IsSilentPayment { + continue + } + + if !bytes.Equal( + packet.Outputs[output.OutputIndex].Script, + originalScripts[output.OutputIndex], + ) { + t.Fatalf("output %d script mismatch", output.OutputIndex) + } + } + }) + } + + if tested != 13 { + t.Fatalf("expected 13 finalize vectors, got %d", tested) + } +} diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 0000000..2699793 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,19 @@ +module github.com/macgyver13/bip375-examples/go + +go 1.22 + +require github.com/otaliptus/psbt-v2 v0.1.0 + +require ( + github.com/btcsuite/btcd v0.24.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/btcsuite/btcd/btcutil v1.1.6 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btclog v1.0.0 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/sys v0.30.0 // indirect +) + +replace github.com/otaliptus/psbt-v2 => ../../psbt-v2 diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 0000000..86c1cb8 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,121 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= +github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= +github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btclog v1.0.0 h1:sEkpKJMmfGiyZjADwEIgB1NSwMyfdD1FB8v6+w1T0Ns= +github.com/btcsuite/btclog v1.0.0/go.mod h1:w7xnGOhwT3lmrS4H3b/D1XAXxvh+tbhUm8xeHN2y3TQ= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From b4fb882331f633ad84476ee84e240f607f6d7d7d Mon Sep 17 00:00:00 2001 From: otaliptus Date: Tue, 31 Mar 2026 13:34:57 +0200 Subject: [PATCH 2/5] go: add sp workflow package, upgrade vectors to v1.2 --- bip375_test_vectors.json | 3812 +++++++++++++++++++++---------------- go/bip375_test.go | 40 +- go/go.mod | 15 +- go/sp/analysis.go | 408 ++++ go/sp/analysis_test.go | 223 +++ go/sp/bip352.go | 46 + go/sp/doc.go | 3 + go/sp/errors.go | 21 + go/sp/extractor.go | 22 + go/sp/materialize.go | 197 ++ go/sp/materialize_test.go | 157 ++ go/sp/points.go | 29 + go/sp/proofs.go | 86 + go/sp/signer.go | 350 ++++ go/sp/signer_test.go | 134 ++ go/sp/types.go | 59 + 16 files changed, 3955 insertions(+), 1647 deletions(-) create mode 100644 go/sp/analysis.go create mode 100644 go/sp/analysis_test.go create mode 100644 go/sp/bip352.go create mode 100644 go/sp/doc.go create mode 100644 go/sp/errors.go create mode 100644 go/sp/extractor.go create mode 100644 go/sp/materialize.go create mode 100644 go/sp/materialize_test.go create mode 100644 go/sp/points.go create mode 100644 go/sp/proofs.go create mode 100644 go/sp/signer.go create mode 100644 go/sp/signer_test.go create mode 100644 go/sp/types.go diff --git a/bip375_test_vectors.json b/bip375_test_vectors.json index 7b9a627..96aa1bc 100644 --- a/bip375_test_vectors.json +++ b/bip375_test_vectors.json @@ -1,1717 +1,2285 @@ { "description": "BIP-375 Test Vectors", - "version": "1.1", + "version": "1.2", "notes": [ "Generated by https://github.com/macgyver13/bip375-test-generator/", - "Each vector includes: base64-encoded psbt and description", - "Supplementary material (inputs, outputs, sp_proofs) is included for diagnostics and should not be used for validation", - "'checks' overrides the validation sequence, e.g. skip structure checks to test input eligibility" + "Each vector includes: psbt (source of truth), supporting material (input_keys, scan_keys, expected_ecdh_shares, expected_outputs)", + "PSBTs are base64-encoded and all that is needed to process each test vector", + "'checks' can be used to force specific validation behavior that would otherwise be caught by a previous validation" ], "invalid": [ { - "description": "psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgfCTD+UpVH5TLj1wOA8yaFwh/sU1xSl0vTp/Ux4nT02YBCgQBAAAAAA==", - "supplementary": {} + "description": "psbt structure: missing PSBT_OUT_SP_V0_INFO with PSBT_OUT_SP_V0_LABEL set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFNY5MmkoYqc0RjwIJDvxYLR+NJpQIgIChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG9HMEQCIDgWtRJgHGUognetBjF/dlbjZc3Mgxr+v0JsexGJHd0GAiBU5t4oAmM0dYTMc11jbYAApfG8+Wy5KpKhZrLQCbJFgAEBAwQBAAAAIgYChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA9jbPKfxq8ad7tL6v24zm2x2c1Z9T3pGy/xJFhVJK3TmIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApG9OVSZ0BPWBsxDn+MgbvZuByUtyEm3vgg+mrcfXNJSh3Aql26Fa1JM1vaHUERQP/9G5qIMWRDeJanFBqq3B5AABAwgYcwEAAAAAAAEEIlEgiaex33v0LtfPo+K+RaviRv7ZEtpQrsi8zzY0FcruVOgBCgQBAAAAAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "c25839dda6d71ad481aa43158081b34d225c85f9d54e1303357cd8f3fcdefcb6", + "public_key": "0286102f9f8f90f86c2d36e0996f80977c365cbfd64ee7b509c9a14b1a98e65c6f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014d63932692862a734463c08243bf160b47e349a50", + "amount": 100000, + "witness_utxo": "a086010000000000160014d63932692862a734463c08243bf160b47e349a50", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03d8db3ca7f1abc69deed2fabf6e339b6c7673567d4f7a46cbfc491615492b74e6", + "dleq_proof": "a46f4e55267404f581b310e7f8c81bbd9b81c94b72126def820fa6adc7d73494a1dc0aa5dba15ad49335bda1d411140fffd1b9a883164437896a7141aaadc1e4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "sp_label": 1 + } + ] }, { - "description": "psbt structure: incorrect byte length for PSBT_OUT_SP_V0_INFO field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUECekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84AA=", - "supplementary": {} + "description": "psbt structure: PSBT_OUT_SP_V0_INFO field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAefoLDnlpWqmrgvflVVUbHs+D5hIgIDtW9awShFqOWmqYvraEJ8JaHFMkv8jx2UdScnyFDLOC9IMEUCIQDZiUrSj4FF8Zv1BhpuSSLwk84Mqk+fh4OLE+utVI4oOQIgC/d5rOxZApTq1P2JrAIZoqhXGTD8WToULyjYaz0BSuoBAQMEAQAAACIGA7VvWsEoRajlpqmL62hCfCWhxTJL/I8dlHUnJ8hQyzgvCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQL8CneuJGp4pJMmWrOih4gzXfJBJc828qtz2Mt641z6KyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQCTa7jLOkrQbduwTnnrwEnbFSz1AE4YOUlk9Ix1ieU5nx58WH6Le1OXEbHl1wETRGV6vChpAMYi1pCOYXnaUROQAAQMIGHMBAAAAAAABBCJRIAnuKWALmmBT3Qbo/L7MMA4ySBd4v2qchxExaF2aEwzXAQlBAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "44173e285478bd01c83476d6f637612ac2b2694687ed03be16fbcd482bf8780c", + "public_key": "03b56f5ac12845a8e5a6a98beb68427c25a1c5324bfc8f1d94752727c850cb382f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", + "amount": 100000, + "witness_utxo": "a086010000000000160014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02fc0a77ae246a78a493265ab3a28788335df24125cf36f2ab73d8cb7ae35cfa2b", + "dleq_proof": "24daee32ce92b41b76ec139e7af01276c54b3d4013860e52593d231d62794e67c79f161fa2ded4e5c46c7975c044d1195eaf0a1a403188b5a423985e769444e4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "psbt structure: incorrect byte length for PSBT_IN_SP_ECDH_SHARE field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GggA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QoiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECKE7OYVUX3K9bolxSuuQmz41SoQqm7i1bNDt7SHfihmVmLMSKKSeC9fpXOEFP3xbKKy1Q6aHB2AOPOiYIu4yAhAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": {} + "description": "psbt structure: PSBT_IN_SP_ECDH_SHARE field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFEQ72tqE3Cqh/nU90NX6HjDW43xUIgIC4ofyKqDO0HspNQi7dlGg3e0gBBDU+Ga0gTMIeUc2JitIMEUCIQCv3NRjggIaGQD2kA1tegUHUlweBxwD80zNYBQS8yK30gIgM5+EJ3oMtcnyp8H7UEEqxRRZC/I9zBJnac/7z/efr5wBAQMEAQAAACIGAuKH8iqgztB7KTUIu3ZRoN3tIAQQ1PhmtIEzCHlHNiYrCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIALqvWjVeKCJ9dga4exEnWk7lWxiFnSRj3EmfdE9vtiqIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhADOpeXrsaDKLIt9mfxRj0CcxvROIwAk0GIwx21QWnAM9dQpd8Yan9BtyYa45PIHKLxDbK9KEWIJXTTbcMv9j03wABAwgYcwEAAAAAAAEEIlEgnOScfMA0t2Eu1PEdoE2srQERuqb3dTKAGnKWoqt8GHsBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "5248d646f7e8eb231a8be341dd036164fdc3ebc899bc9aa5926a365a05c69306", + "public_key": "02e287f22aa0ced07b293508bb7651a0dded200410d4f866b4813308794736262b", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", + "amount": 100000, + "witness_utxo": "a086010000000000160014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02eabd68d578a089f5d81ae1ec449d693b956c621674918f71267dd13dbed8aaf3", + "dleq_proof": "0cea5e5ebb1a0ca2c8b7d99fc518f409cc6f44e230024d06230c76d505a700cf5d42977c61a9fd06dc986b8e4f20728bc436caf4a1162095d34db70cbfd8f4df", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "psbt structure: incorrect byte length for PSBT_IN_SP_DLEQ field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4Gg/ihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": {} + "description": "psbt structure: PSBT_IN_SP_DLEQ field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFIsz+gR2emjThvO8jOuDLydi8VMsIgIC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk5HMEQCICtvJ3Gw46n8FLt/IsqPSdLXHg0MpsBRiykmbu+dMlGhAiARjjxezcE9SXYjXfyege8GpQRwxgEKF0qGmsc12RHX4wEBAwQBAAAAIgYC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk4IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+uOsB5kdbxfuE8FF8KrH7HrYZXKPKIVznZwnyvipkJAIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4Gg/8SnsAvQSC/6sYl4xdje09ttq/j9uFeAjlRTTv8z+t+gNTc4qFrcCfGXDwruWHA+AIcjDYC61O19qXproBn5HAAEDCBhzAQAAAAAAAQQiUSCVPdDTr9zAmYqb2bA5557SE759F0c99YEnBpxMlEtaDQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "3c60a34afb1fe4401bd076b659a7f10479bfa71962ed690c074192b27f6f9fab", + "public_key": "02eeaa1a710f3d550139a22bc547a7dc3493036c5e6958258a46d0b1470b3e2e4e", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00148b33fa04767a68d386f3bc8ceb832f2762f1532c", + "amount": 100000, + "witness_utxo": "a0860100000000001600148b33fa04767a68d386f3bc8ceb832f2762f1532c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eb8eb01e6475bc5fb84f0517c2ab1fb1eb6195ca3ca215ce76709f2be2a64240", + "dleq_proof": "f129ec02f4120bfeac625e317637b4f6db6afe3f6e15e0239514d3bfccfeb7e80d4dce2a16b7027c65c3c2bb961c0f8021c8c3602eb53b5f6a5e9ae8067e47", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE field is non-zero when PSBT_OUT_SCRIPT set for sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAQABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": {} + "description": "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE with PSBT_OUT_SCRIPT set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAQABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDeM24yd5PsucYRpiAfNv3+SGDqYIgICUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VBHMEQCIAbAProkk8YVpB4aFsIZhQaZx/cBm5c9mMKjMDHKNkT9AiB9ZrQDuH4k0C/Pbjr7/XE+ViCs5nnR90VaYwGdNejGcgEBAwQBAAAAIgYCUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAlE9+M8SHC0wScd4Qes2geenYi8ZI/tP4LYV5Ve6B23NIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAl2BTHcUD+J2qR9LTazkZ2QUQKc9f2BHJ2PWbdQ+LR/7Iu9WK2h83XaKPPaDx49p8bKumsO5ZD9WO7wjHRr6h8AABAwgYcwEAAAAAAAEEIlEgrStJYunsW62Ao66yvX2ZC4imTt6FodjZIU8sj+KYz04BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "64a394a29ab6a122c133503beb5d4f97904aa648cefae5be113fc565f0401a46", + "public_key": "0250a89b9d88c487a6fb5a67332f21cc14965f25cb05541c673f9d8de49938f950", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014378cdb8c9de4fb2e7184698807cdbf7f92183a98", + "amount": 100000, + "witness_utxo": "a086010000000000160014378cdb8c9de4fb2e7184698807cdbf7f92183a98", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02513df8cf121c2d3049c77841eb3681e7a7622f1923fb4fe0b615e557ba076dcd", + "dleq_proof": "9760531dc503f89daa47d2d36b3919d9051029cf5fd811c9d8f59b750f8b47fec8bbd58ada1f375da28f3da0f1e3da7c6caba6b0ee590fd58eef08c746bea1f0", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "psbt structure: missing PSBT_OUT_SCRIPT field when sending to non-sp output", + "description": "psbt structure: P2WPKH output missing PSBT_OUT_SCRIPT", "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAA=", - "supplementary": {} + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": false, + "script": "00148e758d15b9d2156a6aabb2d72039df9be1d6882d" + } + ] }, { - "description": "psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEAAA=", - "supplementary": {} + "description": "ecdh coverage: PSBT_OUT_SCRIPT set - no eligible inputs", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiBPa2xI91PQstsuV3qY9lLMD4wBpxZ0Jhhhb5ag+ezmZwEPBAAAAAABASughgEAAAAAACIAIB2bNL8u4YvW9Z4R+E7O66goncgTp1+NAHD0k10GPiNTAQVHUiEC56vDvz9lfIbl1BJOulwNRIBeRyayowpIk0Uq7sD2jjMhAs9V0KWJYJNaPDFNHF/bdjQEltr48iNf3YEf0tAmqzogUq4BEAT+////AAEDCJBfAQAAAAAAAQQiUSDN452LBbSW+PGPILJ9CvmjIzMJ4EciGeCBP/O103h+KQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "", + "public_key": "", + "prevout_txid": "4f6b6c48f753d0b2db2e577a98f652cc0f8c01a716742618616f96a0f9ece667", + "prevout_index": 0, + "prevout_scriptpubkey": "522102e7abc3bf3f657c86e5d4124eba5c0d44805e4726b2a30a4893452aeec0f68e332102cf55d0a58960935a3c314d1c5fdb76340496daf8f2235fdd811fd2d026ab3a2052ae", + "amount": 100000, + "witness_utxo": "a0860100000000002200201d9b34bf2ee18bd6f59e11f84eceeba8289dc813a75f8d0070f4935d063e2353", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: only one ineligible P2MS input when PSBT_OUT_SCRIPT set for sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiBPa2xI91PQstsuV3qY9lLMD4wBpxZ0Jhhhb5ag+ezmZwEPBAAAAAABASughgEAAAAAACIAIOr39e5jDu+omlGHtlFF4GmTiHzQv1oD8JZFgXkxw/hiAQVHUiEDaGidhEg6mw9BaLYu3+hU5d5PRyw42+0S4nN0susnfjohArPI8nEqzmYLPLqq/KShgFDY2qzp8YMkjzj0SWjwUgPjUq4BEAT+////AAEDCJBfAQAAAAAAAQQiUSDN452LBbSW+PGPILJ9CvmjIzMJ4EciGeCBP/O103h+KQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "", - "public_key": "", - "prevout_txid": "4f6b6c48f753d0b2db2e577a98f652cc0f8c01a716742618616f96a0f9ece667", - "prevout_index": 0, - "prevout_scriptpubkey": "52210368689d84483a9b0f4168b62edfe854e5de4f472c38dbed12e27374b2eb277e3a2102b3c8f2712ace660b3cbaaafca4a18050d8daace9f183248f38f44968f05203e352ae", - "amount": 100000, - "witness_utxo": "a086010000000000220020eaf7f5ee630eefa89a5187b65145e06993887cd0bf5a03f09645817931c3f862", - "sequence": 4294967294, - "signed": false - } - ] - } + "description": "ecdh coverage: PSBT_OUT_SCRIPT set - Input 0 missing PSBT_IN_SP_ECDH_SHARE", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDxT02F6f8rk5fw3RdNMtFyGpWXjIgYDGay7QpMJFKviJRJWoC/DiK1zKZhf8zjyOW5d8vzXAI4IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBHxAnAAAAAAAAFgAUZJ3VtVj6wOqCxBxTWQ+4AVitrqsBAwQBAAAAIgYDR8B6aC7GCZYHq9QtSnEj78YAyOaEYwsQRLStBT9MyOMIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAqkM6lA7txq0r/lcPawe6pujEm3yuG+OhOF+ChIj/jBdIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA3jQXPoIjXscnE4eNtOA4k/mKVqlsi64xN+GCbytTNAmF3s7bWX5I6HBGtE/juvonLwUe6wraLdQztRJPuMAdLgABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "430d79a4721a6e11791d4e2387ecc7f633e26c379d50836146f2652ee4bcd3e9", + "public_key": "0319acbb42930914abe2251256a02fc388ad7329985ff338f2396e5df2fcd7008e", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", + "amount": 100000, + "witness_utxo": "a0860100000000001600143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "55d102ae15590740b3c2a3f45e0080fceb61c1e66e4f5b83b5629c79b9e970b9", + "public_key": "0347c07a682ec6099607abd42d4a7123efc600c8e684630b1044b4ad053f4cc8e3", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014649dd5b558fac0ea82c41c53590fb80158adaeab", + "amount": 10000, + "witness_utxo": "1027000000000000160014649dd5b558fac0ea82c41c53590fb80158adaeab", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02a90cea503bb71ab4aff95c3dac1eea9ba3126df2b86f8e84e17e0a1223fe305d", + "dleq_proof": "de34173e82235ec72713878db4e03893f98a56a96c8bae3137e1826f2b53340985decedb597e48e87046b44fe3bafa272f051eeb0ada2dd433b5124fb8c01d2e", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: missing PSBT_IN_SP_ECDH_SHARE field for input 0 when PSBT_OUT_SCRIPT set for sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBHxAnAAAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0BAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAuV6etywGNj7MVToDBS5elCZS0I1aEHqn8ExcGFEAOY3Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA9/o4HeILO0WcbkJsYhPUF1MI8kgqROMyhCMmJNTa/Vcymb868WqzAsViY2OjfUSHB/fnoevqBke8zUhiA7srpgABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 10000, - "witness_utxo": "10270000000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", - "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", - "input_index": 1 - } - ] - } + "description": "ecdh coverage: ineligible P2SH multisig input with PSBT_IN_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFGQsdnVS9WbnQ9FJkG1fse58XpgxIgIDM056vEvzEKkUqL/1xNyYd+OfuYwp87m3JLcmKtoCXndIMEUCIQC909hzvqoeSIY55VKqXQJ7phOMCnijgpRd685MAjpzSwIgd1dOqfIds66Z19I9SAHRPW+ufmaitjYvwAFxyC191JIBAQMEAQAAACIGAzNOerxL8xCpFKi/9cTcmHfjn7mMKfO5tyS3JiraAl53CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQKeeXAIIOdcIM6T/vaSPO7hDcegKiaChjNNNJvDUwdY4CIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQBKmAZaZAA2S/VIXviINqDyjfah/WyZXUhB9CVwa7ZDcHxOdYz6JlNq7/t/eHTv/xB284nObLVDvF5+Nn6YOWmYAAQ4gUiGLvep4p9TYg4U1sX9K6QQFl0+VM/CxF93lPheFtM0BDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFGpD3BMBL8sWVg7lT7XguKv3OOjHhwAAAAABBEdSIQPVOoWTDkyGApzvXClAN7KEqbHYvU9N2nV7M+OQEyoYaiECZxHk5V3VoFosvOvxk2NPLqQLJ7xRa/+0m3YdQA55OR5SrgEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCECKrXjNjkkbu1twzP7pfGGsMZntq9j6E3XGXRhIPFhhgkiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCJBfAQAAAAAAAQQiUSCOn79aVOo8uqob5zkdUxsiTChJVUQyICIp2Y17j/lUzAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "891210857d34d7fec9189e07a2c60d18e28862084bb776ace0b7ce792811d788", + "public_key": "03334e7abc4bf310a914a8bff5c4dc9877e39fb98c29f3b9b724b7262ada025e77", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014642c767552f566e743d149906d5fb1ee7c5e9831", + "amount": 100000, + "witness_utxo": "a086010000000000160014642c767552f566e743d149906d5fb1ee7c5e9831", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "", + "public_key": "", + "prevout_txid": "52218bbdea78a7d4d8838535b17f4ae90405974f9533f0b117dde53e1785b4cd", + "prevout_index": 0, + "prevout_scriptpubkey": "a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c787", + "amount": 150000, + "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c78700000000", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "029e79700820e75c20ce93fef6923ceee10dc7a02a268286334d349bc3530758e0", + "dleq_proof": "12a6019699000d92fd5217be220da83ca37da87f5b265752107d095c1aed90dc1f139d633e8994dabbfedfde1d3bffc41dbce2739b2d50ef179f8d9fa60e5a66", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: missing PSBT_IN_SP_DLEQ field for input when PSBT_IN_SP_ECDH_SHARE set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": null, - "input_index": 0 - } - ] - } + "description": "ecdh coverage: ineligible P2TR input with NUMS point with PSBT_IN_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAQMEAQAAAAEQBP7///8BFyBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wCIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIHCUAAAAAAAABBCJRICdoyIruoiMiW6OthOeGNS+YKdLT6TeKOToL/1mvh83QAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: missing PSBT_GLOBAL_SP_DLEQ field when PSBT_GLOBAL_SP_ECDH_SHARE set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWwABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8AAQMIGHMBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b" - } - ] - } + "description": "ecdh coverage: PSBT_IN_SP_DLEQ missing for input with ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFHtGlnt4Ae5cblr2WBI4vJXR3Uf3IgICGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi9HMEQCICl5mQIMJajbJQi4828QgqMpetzEbTgU53p4Cs2A4oAZAiBtz57Lm+f5FiNLdizBp9FWaaMuEBmw31YHinHycS/rSQEBAwQBAAAAIgYCGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjOx0yEofm/fEp93vo6EX7SMH1brgaU1BudewL5ycg/UAAEDCBhzAQAAAAAAAQQiUSBmzzV1FT5/ranW9thWcerjbhydgiSeiRZVrCFL+wcMTgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "7629e714099688e08e1997c5160d9e3245b92a4a577e35a65e87394aedc7cea9", + "public_key": "021a85cafdc715a17b1a39009e1f443bfc777637a95c9ab6745291251799b1262f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b46967b7801ee5c6e5af6581238bc95d1dd47f7", + "amount": 100000, + "witness_utxo": "a0860100000000001600147b46967b7801ee5c6e5af6581238bc95d1dd47f7", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0233b1d321287e6fdf129f77be8e845fb48c1f56eb81a53506e75ec0be72720fd4", + "dleq_proof": null, + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: invalid proof in PSBT_IN_SP_DLEQ field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAbvHreDwFl9ZoVl4787j95b7SgVKV9D4XAVEk1EXcy9rdKkne51lhePEhbl1NuRdP/dpjNON8kDEQjAjOE3TeDwABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "6ef1eb783c0597d668565e3bf3b8fde5bed2815295f43e17015124d445dccbdadd2a49dee7596178f1216e5d4db9174ffdda6334e37c9031108c08ce1374de0f", - "input_index": 0 - } - ] - } + "description": "ecdh coverage: PSBT_GLOBAL_SP_DLEQ missing with global ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPB+v1DXFGpdXkPirAqJyKA2tHjGkyFnRuQfYvVApTXLAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFOBcM4gPgo99FD9v7zQe7yX+3g3GIgID3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv1IMEUCIQCG9kMgbU6yZvzFjmh9PJ5GiQgDgnK55Kg2YnAAkpCsyAIgERHwj6qn50RyYllH88hF6+mw0/5BDey0qjI4EU9fhbwBIgYD3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv0IAAAAgAAAAAABEAT+////AAEDCBhzAQAAAAAAAQQiUSDDnTSb1YNs2ALoMbuDNmFCIkqZq7m1LDykjG91r9Q8NgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "b4872f85cd40dcff38b69357e576d4c07d858dbeea8c84becff4fbd9961465e9", + "public_key": "03dde2077daa539b1d06fb2a533488a845a0cacda4dac7f84bdd0f09ee97375efd", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014e05c33880f828f7d143f6fef341eef25fede0dc6", + "amount": 100000, + "witness_utxo": "a086010000000000160014e05c33880f828f7d143f6fef341eef25fede0dc6", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03c1fafd435c51a975790f8ab02a272280dad1e31a4c859d1b907d8bd50294d72c" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: invalid proof in PSBT_GLOBAL_SP_DLEQ field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQOfI/UQrlNiKKmoskrQ0ZI+gB8n+CARyozeA0LUjKETQm9iLP+6G0S1DhsRlf7t4Xi0vFL/PkYV0P+EqyCUPldkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiAJB3pqpkrBSuehqk/mjAKs4gbJ6scjSQYa52A5ALkibgIgbxQypXj44zCvC5ACVnRryfTlKqLozHkCncjnajwpSwYBIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "2430479d2da1310a024d2aab8e4c7b49d76cd51f45ee8127c159b0393a675b6f75c581ebe3d0817ddaf3bb598cfd7a022f1a87ed479664f6b947a47db5941cb2" - } - ] - } + "description": "ecdh coverage: invalid proof set for PSBT_IN_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAgr3/YVdHIFOWuHpKQwXd6DSBVLIgICXCbc5UZbmVBMIzFf5EnA894M3JcVfPawyrhx2FIl0ERIMEUCIQCTmV/k3I2LHWx0jocsbtO96PKy2b7NGbh96UVSa66UZgIgWKyjIAGwt08vQoz6hf22RGXKyTLEkuVTrfrw9rqjzrYBAQMEAQAAACIGAlwm3OVGW5lQTCMxX+RJwPPeDNyXFXz2sMq4cdhSJdBECAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJxyHLqPYneVfmuOFJWkkjPD1CHRiunpHvhpX/ZFm5yVCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQG7x63g8BZfWaFZeO/O4/eW+0oFSlfQ+FwFRJNRF3Mva3SpJ3udZYXjxIW5dTbkXT/3aYzTjfJAxEIwIzhN03g8AAQMIGHMBAAAAAAABBCJRIO7Uxibb2h1MycABu4j+/n8WjCRunvsBSx9ot95uo+mAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "cfa305a017d9864ec736013b22f065fca58f61a6260ba51574d7a34f2ff0a2e9", + "public_key": "025c26dce5465b99504c23315fe449c0f3de0cdc97157cf6b0cab871d85225d044", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014082bdff615747205396b87a4a4305dde8348154b", + "amount": 100000, + "witness_utxo": "a086010000000000160014082bdff615747205396b87a4a4305dde8348154b", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0271c872ea3d89de55f9ae3852569248cf0f5087462ba7a47be1a57fd9166e7254", + "dleq_proof": "6ef1eb783c0597d668565e3bf3b8fde5bed2815295f43e17015124d445dccbdadd2a49dee7596178f1216e5d4db9174ffdda6334e37c9031108c08ce1374de0f", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: missing PSBT_IN_BIP32_DERIVATION field for input when PSBT_IN_SP_DLEQ set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIGHMBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ] - } + "description": "ecdh coverage: invalid proof set for PSBT_GLOBAL_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNDBMksBVkLlOZLw1AbzfZ45DClvF696vGYebl6l5bTziIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQOfI/UQrlNiKKmoskrQ0ZI+gB8n+CARyozeA0LUjKETQm9iLP+6G0S1DhsRlf7t4Xi0vFL/PkYV0P+EqyCUPldkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABTUngSlm21fKRLZ7J00iBNtfYrqcyICAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cSDBFAiEA1+5XK/EladCZ0DoztFrly7NMMwPdbWAWlbCWc3PQRZoCIALLp8z8ZSLZWa9P+X5KBTWbyzj8ovU6leoQThGTcTQzASIGAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cCAAAAIAAAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEg3cEaiL1DRRvH10ppoJUb0y80V5WMpQ1k5HzJhqOPJ8sBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "ccfd8b4533bd8512e141f2173714952247b4dbdd184b569bf53eb158ac9777fc", + "public_key": "0315c6e6e5dbe6d188fd6ca71e4ced5685044157d6a3163c19fbbbbc36552bce9c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", + "amount": 100000, + "witness_utxo": "a086010000000000160014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034304c92c05590b94e64bc3501bcdf678e430a5bc5ebdeaf19879b97a9796d3ce", + "dleq_proof": "bf1b45241c43a4bea753b80dd9586518c24c6d61c5f7c93fec10e17efafddebba2a34c0cd55b8be5dbb1da5c8ec94b73ba347a70036985f04133271be429140b" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: output 1 missing ECDH share for scan key with one input / three sp outputs (different scan keys)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwIQLChkR0sISqyB9uMKxe30ZnOTzmBNgI0/SZoJhOi1JJdCIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQN2iSMnxOeAru7UzhvJK7ASK3t5ENlvCtUUi0lvnD6S+yIeArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwQPCxHVHD/ROzjgpsjvwu4Mpxdzr2dLMVHmiSFJJcS1fIFojJ4Hi3UIhabKsoa1d+k6JJfrSWNrGvG2vILnyRElEiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCY8UrEWvZFmrDITUfaU2TPsUT/kL2scy+cq8bbAA3PGpXjsx97cKBCmKUbb9RRbIHXFsmVT4rxDD1ZgJruK704AAEDCJBfAQAAAAAAAQQiUSDTlxRqgoZbVOsSuepx1oJP6rD5KkgTf3p5OmhZazNnpAEJQgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3gPycOClYyGDtqsBB06HfmgA2wD1x8XS+vu2j5wo1IVFJAABAwgQJwAAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUIDUteMQTkAMq2RgWppf8dA2OuQnPBNcIhSZLBR8jheJewC4MTBh7chX5l8hIWnW0WRtsKEd7laESO5lpItMVSGC/gAAQMIIE4AAAAAAAABBCJRINLSQezkGFFKoY45kuyVPE1K1exwSmk+IQa6IsOwWnqDAQlCArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwAhJoHj8J6uOKjy8/7NfdVvxYbPoCjoqzP3KpD4QKbSJcAA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 200000, - "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_share": "0376892327c4e780aeeed4ce1bc92bb0122b7b7910d96f0ad5148b496f9c3e92fb", - "dleq_proof": "98f14ac45af6459ab0c84d47da5364cfb144ff90bdac732f9cabc6db000dcf1a95e3b31f7b70a04298a51b6fd4516c81d716c9954f8af10c3d59809aee2bbd38", - "input_index": 0 - }, - { - "scan_key": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", - "ecdh_share": "02c2864474b084aac81f6e30ac5edf4667393ce604d808d3f499a0984e8b524974", - "dleq_proof": "f0b11d51c3fd13b38e0a6c8efc2ee0ca71773af674b3151e689214925c4b57c81688c9e078b750885a6cab286b577e93a2497eb49636b1af1b6bc82e7c911251", - "input_index": 0 - } - ] - } + "description": "ecdh coverage: input missing public key for DLEQ verification", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFKkJAC8YQiiBGKj20aBob3jLA8fRIgIC+QeUX/NarS+zzXkylYSM32JpKr51wIPOoD+AuBfDLd5IMEUCIQDBej9o1Xd8J2Wbc6crbgxkky3S8L2g7dXi7KiDOThKvQIgX8TL/5MO7GYB56J543wWbWkzkYHQ4gwKq9H4XvWD+4oBAQMEAQAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEC/ebny4sNBQGQDx6SB9GIpmvc2BnriKAZ3vlxxiEphi8iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECsLMBBwTQlJZJhGMq4Wl73XQEztfttat6WaLjgA+Ul85zWb+ivvwlDB33tF4e7FeQEhtty0fQd6zfA0amukqy1AAEDCBhzAQAAAAAAAQQiUSCNmubvUqRjUcK00JR0WR5QncJP+slpS/lQZfcdYZwPbQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "9b8cf7af42b8942b381c224b1e7c40276fd465ef2715fd6288f24579003cfe6f", + "public_key": "02f907945ff35aad2fb3cd793295848cdf62692abe75c083cea03f80b817c32dde", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014a909002f1842288118a8f6d1a0686f78cb03c7d1", + "amount": 100000, + "witness_utxo": "a086010000000000160014a909002f1842288118a8f6d1a0686f78cb03c7d1", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02fde6e7cb8b0d0501900f1e9207d188a66bdcd819eb88a019def971c62129862f", + "dleq_proof": "ac2cc041c1342525926118cab85a5ef75d0133b5fb6d6ade9668b8e003e525f39cd66fe8afbf0943077ded1787bb15e40486db72d1f41deb37c0d1a9ae92acb5", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "ecdh coverage: input 1 missing ECDH share for output 1 with two inputs / two sp outputs (different scan keys)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQMJH9SAORd/RNe3npYWiEnGLrP4eADEZ2fFCo84+Y79FSIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQN2iSMnxOeAru7UzhvJK7ASK3t5ENlvCtUUi0lvnD6S+yIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQL4acjrvVeiYG5lZmpvBKzj4froBWMxwZokPImnK3kY7dzQal9KScZZNAcAkHMMi/VOQwpuZFg+CbzKTZYmMvwIiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCY8UrEWvZFmrDITUfaU2TPsUT/kL2scy+cq8bbAA3PGpXjsx97cKBCmKUbb9RRbIHXFsmVT4rxDD1ZgJruK704AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0BAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94hAnUEQAf+LQMNV3wymRzyo+deU1BCRbPL5bMFOufF8iBaIh4DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp95AOLnjgGtJvr7vxs7gZcKwZv2wCuzs8ei1sqr0fPBBeyma4KJW7Xy2yCcC63E31zv1eSccQoTQBuO1nXCpuWfYiQABAwiQXwEAAAAAAAEEIlEg9Jwu8ZtnBhG4bd7+iQzvlCaKgq4zHkb+GVHWxuNyPLEBCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRID2h4XbGT7RZU+xG4FA2NLx+jjQ6do2+77sKPojMSkyaAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 100000, - "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_share": "0376892327c4e780aeeed4ce1bc92bb0122b7b7910d96f0ad5148b496f9c3e92fb", - "dleq_proof": "98f14ac45af6459ab0c84d47da5364cfb144ff90bdac732f9cabc6db000dcf1a95e3b31f7b70a04298a51b6fd4516c81d716c9954f8af10c3d59809aee2bbd38", - "input_index": 0 - }, - { - "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "ecdh_share": "03091fd48039177f44d7b79e96168849c62eb3f87800c46767c50a8f38f98efd15", - "dleq_proof": "be1a723aef55e8981b99599a9bc12b38f87eba0158cc7066890f2269cade463b77341a97d29271964d01c0241cc322fd5390c29b99160f826f329365898cbf02", - "input_index": 0 - }, - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_share": "0275044007fe2d030d577c32991cf2a3e75e53504245b3cbe5b3053ae7c5f2205a", - "dleq_proof": "38b9e3806b49bebeefc6cee065c2b066fdb00aececf1e8b5b2aaf47cf0417b299ae0a256ed7cb6c82702eb7137d73bf579271c4284d006e3b59d70a9b967d889", - "input_index": 1 - } - ] - } + "description": "ecdh coverage: one input/three sp outputs (different scan keys) - Output 1 missing ECDH share for scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwIQIfVB3kYWxVdP//YEVVhx7m2cH8BdbPXJ1d59cWV4r0GiIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQPSj6rRvNp1y7TrP4IFIBYxeEmNql4rqhqpenzrH8cxhiIeArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwQGoBeelXwuvMl6VzkVqiSToWWkHe5RwKSl7LOtJmxTHbTxp7OuSE/Xig6iLkTAkyf28yWUQC0SvRo/d1mmGfocEiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kAmhltGkay8P0zL8T5aPiY5azNm3UKX9Y5SXoj4Q5pvoeGF5x3J0Vee762X82mY6QZ0VLhG+a12ginaNRCOE+cUAAEDCJBfAQAAAAAAAQQiUSCItbo4EKf/zM5bRdqt8c+0PSZJ6Zu5o8LX6mg7EPKPxwEJQgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3gPycOClYyGDtqsBB06HfmgA2wD1x8XS+vu2j5wo1IVFJAABAwgQJwAAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUIDUteMQTkAMq2RgWppf8dA2OuQnPBNcIhSZLBR8jheJewC4MTBh7chX5l8hIWnW0WRtsKEd7laESO5lpItMVSGC/gAAQMIIE4AAAAAAAABBCJRIGYlLwRiDJctTPeBi5Z3dv0nYmZ1DVuEZSz5OdppcCBxAQlCArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwAhJoHj8J6uOKjy8/7NfdVvxYbPoCjoqzP3KpD4QKbSJcAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", + "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", + "amount": 200000, + "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + }, + { + "scan_pubkey": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", + "spend_pubkey": "0212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "03d28faad1bcda75cbb4eb3f820520163178498daa5e2baa1aa97a7ceb1fc73186", + "dleq_proof": "26865b4691acbc3f4ccbf13e5a3e26396b3366dd4297f58e525e88f8439a6fa1e185e71dc9d1579eefad97f36998e9067454b846f9ad768229da35108e13e714", + "input_index": 0 + }, + { + "scan_key": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", + "ecdh_result": "021f541de4616c5574ffff604555871ee6d9c1fc05d6cf5c9d5de7d716578af41a", + "dleq_proof": "6a0179e957c2ebcc97a573915aa2493a165a41dee51c0a4a5ecb3ad266c531db4f1a7b3ae484fd78a0ea22e44c09327f6f32594402d12bd1a3f7759a619fa1c1", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + }, + { + "output_index": 2, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab00212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" + } + ] }, { - "description": "ecdh coverage: input 1 missing ECDH share for scan key with two inputs / one sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9QwwAAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfUMMAAAAAAAAWABRGM9WcrRNDR5ly4MmWkh0KXa22XSIGAkOg1A6d4IgnlBYXUrrkK6kJUnhCCfBjQw8K8lY1SoW7CAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 50000, - "witness_utxo": "50c3000000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 50000, - "witness_utxo": "50c30000000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ] - } + "description": "ecdh coverage: two inputs/two sp outputs (different scan keys) - full coverage input 0 / partial coverage input 1", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCC4ZV7zqDk8ksC38OjggfXnThDXAQMEAQAAACIGA1eAk4qUq4QN0Un/gAGbqKSzjWBDNWhTN9QvFvMg8T9CCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQPSmrmKDlMLBkU2CDBFlWcMKs4KGm6L/2YWfaTl25R0DSIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQJelQZ5nVjSaUQhUadDMXvcmaL1Gxdtzkn5RxAuMo/aICIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQJ52mAHDYnPRofFro/SCMLvSrNbFjwV5vA4eh44zA3N5u6AJ49t94vwt3ZahgwOvlpBmpkLB/NOYFaWPlyxlEvMiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCkDOhjFtOOJBtfdU1Ww/T16tKFIawJebCR1/OxDQgyKq16JmJqg/MaYi/L5I6sp57UBLSrOPFhJS3YkuRm+TbxAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUHiGzqBEYegrE3RiwBcAMH55nsr0BAwQBAAAAIgYDLTwDMXNO4f1bfKHJedBq3RRqq+HK9CPxJXs1SFPUXroIAAAAgAEAAAABEAT+////Ih0DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94hAw4lnYl+tNS36Q8xW2rZTmfzLIe/5BBfATztWL0CXDSLIh4DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp95AF0toaWLYcAtry204piFY6gSnBFtf6658tfM/YygS8JIsSK6RjlZ83L/YE+dCAUBF8HRJg0syktGRg7zTFJvz1AABAwiQXwEAAAAAAAEEIlEg55VpES/6WkaFm1vMTxAX+53dUvCkav/egJr8IgXEe00BCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIO14uE3U/S365e8y8dW4QoVImNynbOkiABr1GJ1xf06cAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "5dc63715af6b5c0923c2a68c4c6728c93ce236b5fc3433237ba98633456a0340", + "public_key": "035780938a94ab840dd149ff80019ba8a4b38d604335685337d42f16f320f13f42", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", + "amount": 100000, + "witness_utxo": "a08601000000000016001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "3a52e933e65f5c89b5139adf381f5f4616140ed55b067ce3ede0de2c1f6760ba", + "public_key": "032d3c0331734ee1fd5b7ca1c979d06add146aabe1caf423f1257b354853d45eba", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", + "amount": 100000, + "witness_utxo": "a0860100000000001600141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "025e9506799d58d269442151a743317bdc99a2f51b176dce49f947102e328fda20", + "dleq_proof": "a40ce86316d38e241b5f754d56c3f4f5ead28521ac0979b091d7f3b10d08322aad7a26626a83f31a622fcbe48eaca79ed404b4ab38f161252dd892e466f936f1", + "input_index": 0 + }, + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_result": "03d29ab98a0e530b06453608304595670c2ace0a1a6e8bff66167da4e5db94740d", + "dleq_proof": "9e769801c36273d1a1f16ba3f48230bbd2acd6c58f0579bc0e1e878e33037379bba009e3db7de2fc2ddd96a18303af969066a642c1fcd39815a58f972c6512f3", + "input_index": 0 + }, + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "030e259d897eb4d4b7e90f315b6ad94e67f32c87bfe4105f013ced58bd025c348b", + "dleq_proof": "174b686962d8700b6bcb6d38a62158ea04a7045b5febae7cb5f33f632812f0922c48ae918e567cdcbfd813e742014045f07449834b3292d19183bcd3149bf3d4", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ] }, { - "description": "input eligibility: segwit version greater than 1 in transaction inputs with sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABZSFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "5214229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000165214229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ] - }, - "checks": [ - "input_eligibility" + "description": "ecdh coverage: two inputs/one sp output (two scan keys) - Input 1 missing ECDH share for scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9QwwAAAAAAABYAFM8NLc80Opcz1DvlZOOmNS0vuHSJAQMEAQAAACIGAxTy+XFumCwYLG5b0wsRkvcWNE4fkULD6uCZ4DD/6SQcCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNgWcgdxSLLVFwETX/SQo9gXAbTNFR0U19fM8qaJC8/niIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQHZFB/NYpfXKCm+gpyWQ5O7LBXadkqsSisqwawqMo8+4mf2YbmQwGbC3ZDrMUAebm6s6Wzx+ArCWnQsowzEDsv8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfUMMAAAAAAAAWABSKNZWygLkaR792aIJ0jpRdHwKT9iIGA/810xysQ2pIRJZENx1ET2fBHj3e1EfIhM9BpxUcobY4CAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "369e3b011269dada79fdc86ee11ec5c639a7b18eb23076e535510b580a7b1300", + "public_key": "0314f2f9716e982c182c6e5bd30b1192f716344e1f9142c3eae099e030ffe9241c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014cf0d2dcf343a9733d43be564e3a6352d2fb87489", + "amount": 50000, + "witness_utxo": "50c3000000000000160014cf0d2dcf343a9733d43be564e3a6352d2fb87489", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "001d9da0abfa70adb555a215816d8a01eeaa0c754b5a13f7f5c4f69a953b38f5", + "public_key": "03ff35d31cac436a48449644371d444f67c11e3dded447c884cf41a7151ca1b638", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00148a3595b280b91a47bf766882748e945d1f0293f6", + "amount": 50000, + "witness_utxo": "50c30000000000001600148a3595b280b91a47bf766882748e945d1f0293f6", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "036059c81dc522cb545c044d7fd2428f605c06d3345474535f5f33ca9a242f3f9e", + "dleq_proof": "764507f358a5f5ca0a6fa0a72590e4eecb05769d92ab128acab06b0a8ca3cfb899fd986e643019b0b7643acc50079b9bab3a5b3c7e02b0969d0b28c33103b2ff", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } ] }, { - "description": "input eligibility: non-SIGHASH_ALL signature on input with sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQCAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ] - } + "description": "input eligibility: segwit version greater than 1 in transaction inputs with silent payments output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABZSFFP6opzjfMSJmyMOlXogomStzN5HIgICpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOJHMEQCIC9HZnf0wo8jFPEjrwpELhTPGZ8D7BDBRTF/lLw3XSHPAiBGlJEb1di61BYGy212/4UAYllJKvDQ51F1yEIOrUzy5AEBAwQBAAAAIgYCpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOIIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA3JW1z0tsG4hGXEqv4jpv1y0y+1/KkUIr5DM4AyEmCm2Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA5k7kSRL3pdy6apUv8E+xV8RouT4TAX5I1x5cqOmU2p0boi/QVNx5Ih6Y30lv0E3kn4GZMVFY1XQOGL0avAmAEwABAwgYcwEAAAAAAAEEIlEgPJg7UYWUtNT48bzdJuA/GP02xccuPm25+lQVbBx/iPEBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "223162352aba2327f762570ba60d5e847af2e546b0e0dd82962d306a757ee98b", + "public_key": "02a5dedd8e2c97db67ae6d833da95ba5c64b9a51f31238f2a5f9e6db8ac60dc0e2", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "521453faa29ce37cc4899b230e957a20a264adccde47", + "amount": 100000, + "witness_utxo": "a08601000000000016521453faa29ce37cc4899b230e957a20a264adccde47", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "037256d73d2db06e2119712abf88e9bf5cb4cbed7f2a4508af90cce00c849829b6", + "dleq_proof": "e64ee44912f7a5dcba6a952ff04fb157c468b93e13017e48d71e5ca8e994da9d1ba22fd054dc79221e98df496fd04de49f8199315158d5740e18bd1abc098013", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "checks": [ + "input_eligibility" + ] }, { - "description": "output scripts: P2TR input with NUMS internal key cannot derive sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAQMEAQAAAAEQBP7///8BFyBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wCIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIHCUAAAAAAAABBCJRICdoyIruoiMiW6OthOeGNS+YKdLT6TeKOToL/1mvh83QAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "amount": 10000, - "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 9500, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "51202768c88aeea223225ba3ad84e786352f9829d2d3e9378a393a0bff59af87cdd0" - } - ] - } + "description": "input eligibility: non-SIGHASH_ALL signature on input with silent payments output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFPVCPf+xqCV6sfB+Gtep/NeHEVHYIgID+bIaLd6IVIFNjdYg+8puvk4xcwXzTnYsPttGbg1mYrdIMEUCIQDgHEub9vwf4rbyqygJVpFW5U8AD9WgcL1q74fBn0hodgIgAriCsXB5pRfLn+3IESwsa0s03ITmkcb7sroflLKHzmMBAQMEAgAAACIGA/myGi3eiFSBTY3WIPvKbr5OMXMF8052LD7bRm4NZmK3CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNdSn+NrmGtpe5wcMxqgCUXUwxVmrhoQHY2NIDIjqEgHSIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQM0W8I2Ir1ri+60Xt8EBypzPKNY/JqMhPFxmoex2NEmlqk2X0Y7ltttKMeN9cP6J9j2nDAXTcOmt8vM/ZfICSTQAAQMIGHMBAAAAAAABBCJRIK27sV0H1F3nneDOLSmlEwBroJUVo94YuGo9IgKbT9EgAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "0b6cb38167165659753e4e263a8a1017ed6fd7271e61791a763d4de3345abfc5", + "public_key": "03f9b21a2dde8854814d8dd620fbca6ebe4e317305f34e762c3edb466e0d6662b7", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", + "amount": 100000, + "witness_utxo": "a086010000000000160014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "035d4a7f8dae61ada5ee7070cc6a802517530c559ab8684076363480c88ea1201d", + "dleq_proof": "cd16f08d88af5ae2fbad17b7c101ca9ccf28d63f26a3213c5c66a1ec763449a5aa4d97d18ee5b6db4a31e37d70fe89f63da70c05d370e9adf2f33f65f2024934", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "output scripts: PSBT_OUT_SCRIPT does not match derived sp output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIGHMBAAAAAAABBCJRIM3jnYsFtJb48Y8gsn0K+aMjMwngRyIZ4IE/87XTeH4pAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 95000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120cde39d8b05b496f8f18f20b27d0af9a3233309e0472219e0813ff3b5d3787e29" - } - ] - } + "description": "output scripts: computed output script mismatch in PSBT_OUT_SCRIPT field from transaction inputs", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIGHMBAAAAAAABBCJRIM3jnYsFtJb48Y8gsn0K+aMjMwngRyIZ4IE/87XTeH4pAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "output scripts: two sp outputs (same scan / different spend keys) not sorted lexicographically by spend key", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCID9iBcRocGpGJF8XE6u4uLmjp7/YOsdF98ByDUQxtM38AiBxWKv7gg8r9a1nRfVvwHCcmVzMrP4XCY2KobYfjJ/y/wEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwiQXwEAAAAAAAEEIlEgdUe4Fj1bvFSYQL5MwUaq0JUgc2e565RwbeZwjUCPk/kBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgCi4D5lDNIleEbx2x1q254/iwluzMvIXshHEAXvx9nfYYAAQMIECcAAAAAAAABBCJRIGziw1OV8XDyS20tgNCkDEb0a6S0hD9qsxGpNLMcXYTcAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA6r4Yq7amM+SU5r33DN10dpfsGsSHvCh8DGp9zgv1T27AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068028b80f994334895e11bc76c75ab6e78fe2c25bb332f217b211c4017bf1f677d86", - "script": "51207547b8163d5bbc549840be4cc146aad095207367b9eb94706de6708d408f93f9" - }, - { - "output_index": 1, - "amount": 10000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe06803aaf862aeda98cf92539af7dc3375d1da5fb06b121ef0a1f031a9f7382fd53dbb", - "script": "51206ce2c35395f170f24b6d2d80d0a40c46f46ba4b4843f6ab311a934b31c5d84dc" - } - ] - } + "description": "output scripts: two sp outputs (same scan key/different spend keys) - outputs are not sorted lexicographically by spend key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBHMEQCIG+rSPvfTckdn1OeqUM+sQyZOWjOGMzou1loQm4CHf7XAiAB+VLfS1gCqqtGrF4viWK6FY0O24Khhrh0Cixaz9CnXgEBAwQBAAAAIgYC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxdW5MaVBlkMr4XjybVvp7Cc9O7sXVXOkTt7kSETzu3rIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAUCwu4wHqYUAWfkFyVfWfGvATHdYYGh/+gXtS7waGnG1kDabsBwknZzRvnlk2Fv/oB/B2T0lEuGssRUF5PsfONQABAwiQXwEAAAAAAAEEIlEgHdb3Z8X/xV+e8qt31Qn7D8EMpmgoOXdNV80/AgAf2rkBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgCi4D5lDNIleEbx2x1q254/iwluzMvIXshHEAXvx9nfYYAAQMIECcAAAAAAAABBCJRILaeAFHP4fofvu4fiyQXFcexhfelYULhG2RzBsU9lNAoAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA6r4Yq7amM+SU5r33DN10dpfsGsSHvCh8DGp9zgv1T27AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068028b80f994334895e11bc76c75ab6e78fe2c25bb332f217b211c4017bf1f677d86" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe06803aaf862aeda98cf92539af7dc3375d1da5fb06b121ef0a1f031a9f7382fd53dbb" + } + ] }, { - "description": "output scripts: k values assigned to wrong output indices with three sp outputs (same scan / spend keys)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIFg36hg2U7tRrGNQq+bDhHvokGogZdwwSNbSCOp8DkyCAiAQ+0/6sv7Vqmy2KAqTxHnPsE5Gyp7fF6owXNFnSiQsSQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwiQXwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIECcAAAAAAAABBCJRIJcUQsifBHhuCCcorhFu6rgC8/qelf2w03U6aEAgIAbeAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCBAnAAAAAAAAAQQiUSA/y66kkIf44D2d79Ory9bejAMrWD+Fpl0FeIHExEPNwAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" - }, - { - "output_index": 1, - "amount": 10000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" - }, - { - "output_index": 2, - "amount": 10000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" - } - ] - } + "description": "output scripts: three sp outputs (same scan/spend keys) - output scripts are computed with swapped k values", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBIMEUCIQCFQeew68kGGzyOkEDq2jeec3ZfVgHxRo9wQ9abFEsoLgIgV/N+//lmjgFD2J+OF8mNbOZ4D+Wz4mAJA3SB4gEYkEcBAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIkF8BAAAAAAABBCJRIFIpYyvRwH67i+f6Z5EzwVLRg2rJebZoduBDVJyiN4u1AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCBAnAAAAAAAAAQQiUSDy8Bs99p112CvO//s4uDbhp4qdwlpJv3OfRgocbLY+PQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwgQJwAAAAAAAAEEIlEgO3AWILScOYcrbDJLHpxctXRtiUYcKzCv0evtpudfS9cBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 2, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] } ], "valid": [ { - "description": "can finalize: one input single-signer", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 95000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" - } - ] - } - }, - { - "description": "can finalize: two inputs single-signer using global ECDH share", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQLTJicjNSYH6E/K92UfjS1jfgIK6obfrYDTBs1PSM/MYiIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQMZTtx+UaBipW9w58JGERbyQOgh2tzgGDp5dsdzsMKvfVOC18XhXP1EZ3nGqY60ZtEnjvLZUY5Nsi67qTZFzkrkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiAXBfzaBiZu2zKxaYZ3s39nu25F1JLr/OZWqIDufxOOtgIgPc3jI53ZBjavZPskEspB45fJWKAwd3z/nIlAucd310wBIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgA4mx4K7v1/q2Ce+rAYv7AWrP8hu4EPPEjDi6ckQYDpUCIBUP7GDiVvQMR1dN/RKaCOr3rB2Xq+4x9AaZ+Hk1RhnzASIGAvW1n6XkkiIev1W6eK1EJgW+rpUWa6HroyUNC7qsfi7cCAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgEz1qT1CQlbV5T3SR+8PxLDxFvC2bYK8luLunBMgHKq8BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", - "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", - "amount": 100000, - "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "02d3262723352607e84fcaf7651f8d2d637e020aea86dfad80d306cd4f48cfcc62", - "dleq_proof": "c653b71f946818a95bdc39f0918445bc903a0876b738060e9e5db1dcec30abdf54e0b5f178573f5119de71aa63ad19b449e3bcb65463936c8baeea4d917392b9" - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 95000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120133d6a4f509095b5794f7491fbc3f12c3c45bc2d9b60af25b8bba704c8072aaf" - } - ] - } + "description": "can finalize: one P2WPKH input single-signer", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCIEeHa7ERv/B+0xgZBiOgR+yFhNJnsbfuTJn8EUqpBh7tAiBx8abjS61xKB1bN/Bv927XFWxAO7JojbajqP5XrKwEuwEBAwQBAAAAIgYDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPUIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA0UFRDzOuLut1bsDhWQzZCOfb8X1/5GGKmu0hjigF0lFIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhACqfFEHUmJd8RmngfME+LQpk1Bv1P+7pfl6Gb/1gHbnUp1cYagnI1/JEvI39aetVyz44E+yUG4X/UauIchDVIngABAwgYcwEAAAAAAAEEIlEgIEmopiliDk5I/DCkX/8DZ33n9ULw1VnbCIJmIjBvf1ABCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", + "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", + "amount": 100000, + "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", + "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "can finalize: two inputs single-signer using per-input ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIBcF/NoGJm7bMrFphnezf2e7bkXUkuv85laogO5/E462AiA9zeMjndkGNq9k+yQSykHjl8lYoDB3fP+ciUC5x3fXTAEiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCED7KT/Ebco4uD2DOYiKUOm/1W52V9ie/mpnQhLyHLVClsiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECKE7OYVUX3K9bolxSuuQmz41SoQqm7i1bNDt7SHfihmVmLMSKKSeC9fpXOEFP3xbKKy1Q6aHB2AOPOiYIu4yAhAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgA4mx4K7v1/q2Ce+rAYv7AWrP8hu4EPPEjDi6ckQYDpUCIBUP7GDiVvQMR1dN/RKaCOr3rB2Xq+4x9AaZ+Hk1RhnzAQEDBAEAAAAiBgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3AgAAACAAQAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDNNLO907e1EZCJ2B/xZrB3oDBKiQzpWJxUo7cz1D6bCsiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEA3wAwLQqBz9rZfDEtuVuBndLOAwd894otkCxIe4LO0z3hQ30VuC12OGXXd/yUmLIOB4g+FLNhwveP2qDKmMlvMAAEDCBhzAQAAAAAAAQQiUSATPWpPUJCVtXlPdJH7w/EsPEW8LZtgryW4u6cEyAcqrwEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", - "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", - "amount": 100000, - "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - }, - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "0334d2cef74eded4464227607fc59ac1de80c12a2433a56271528edccf50fa6c2b", - "dleq_proof": "37c00c0b42a073f6b65f0c4b6e56e06774b380c1df3de28b640b121ee0b3b4cf7850df456e0b5d8e1975ddff25262c8381e20f852cd870bde3f6a832a6325bcc", - "input_index": 1 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 95000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120133d6a4f509095b5794f7491fbc3f12c3c45bc2d9b60af25b8bba704c8072aaf" - } - ] - } + "description": "can finalize: two inputs single-signer - using global ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQIT0WYdp/RkaldPmUEPywasrf2zRyhz6HPIgEl39HFqTCIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQJ1ntx3jr4EnJwlbCZyp5qTZHV38korr7SGAsbrGORMs/ONQzaRfwMIzWoHXAOtbBYF8BCJPea6udzRFM9a4LLAAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABR0Qx97FCfU4FPQTxGBEToMdsnlOCICA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7SDBFAiEAvIohYvFPxY0bQvvN7JcOYfw7yYF99I5db2raG8TQuf0CIBJ15qs2dq6Q+aSr/gggziyqi/9zCNAnyKHyKhpS14FGASIGA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7CAAAAIAAAAAAARAE/v///wABDiC+nWXIORX7CSSKu9/KjKPu5s41DFVPZejVJuXfUnq1IgEPBAAAAAABAR+ghgEAAAAAABYAFO+r6p//ozOrnXXWDRn1VIcXq1U2IgICjIU3RLD94zwG4z+GnuB3DB8L06EjeNDxhZwO6DvKR1BHMEQCICDyPwBUY4p2Paw/nfU7F/6PLHpwYlWvhllhL8kkI3M7AiAz2GPAGVh9Tslr0xM5HQY/XKtKNOmGvSA7cHwLVET7LAEiBgKMhTdEsP3jPAbjP4ae4HcMHwvToSN40PGFnA7oO8pHUAgAAACAAQAAAAEQBP7///8AAQMIGHMBAAAAAAABBCJRIG7NeQJUA/fjem8wTKiu1EaLJGcr5pqKukzpKEKCpVioAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b7c37c36ff296624e204d1e47befd77a281b0aa3313c442f4d172ee267d0dc13", + "public_key": "03a95af3346467c9ffa54c9d3530c3087885ef786ad5974dfd7def925037e6b93b", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001474431f7b1427d4e053d04f1181113a0c76c9e538", + "amount": 100000, + "witness_utxo": "a08601000000000016001474431f7b1427d4e053d04f1181113a0c76c9e538", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "586d64441a4dda2dd95e7f5d787074a9788bd971e59954878e4d4a81c81f4741", + "public_key": "028c853744b0fde33c06e33f869ee0770c1f0bd3a12378d0f1859c0ee83bca4750", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014efabea9fffa333ab9d75d60d19f5548717ab5536", + "amount": 100000, + "witness_utxo": "a086010000000000160014efabea9fffa333ab9d75d60d19f5548717ab5536", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0213d1661da7f4646a574f99410fcb06acadfdb3472873e873c8804977f4716a4c", + "dleq_proof": "9d67b71de3af812727095b099ca9e6a4d91d5dfc928aebed2180b1bac639132cfce350cda45fc0c2335a81d700eb5b05817c04224f79aeae77344533d6b82cb0" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "can finalize: two inputs / two sp outputs with mixed global and per-input ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQNmz8f9zgbgjtSbGzlSuNFRqPfgdf5fbdWN1o+dre7KlCIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQF6riwhtSFD+nRyflhqR+Ze2HKjQhQr8BqeL3zx0nvVAUOaStT+1sIbl54eT8B5203R/ieMXen/v9vjBYX8bBuMAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/SDBFAiEA1k6e8CREAEbpyjkwLrh7LfYN/FHJwKkX1oLzz4EFkIwCIB6+EqXx/SGW8u+11Tr+V850W5Af6ImXitWa7+FKT1A3AQEDBAEAAAAiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECED+9Fz2cSNWMUCJCbQUni8oXuajiKCZmkBobALngS3mUkiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEDAXaQQSHz67DeP6+avUAXjrmyGI2gYsOVbIUAX61Bz7e9AF5V1tdzaqQY0kayLg/0GJNQXek0t1JlMRkDWuMzeAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH0ANAwAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgWoJ5pshwRPECyFkwyJ7C/wGUKGJBraOMeFTy6DZR1fICICvMZkqflwTVcxLbwryDaGcIDyLEdYuR27ktF6HkEeqpAQEDBAEAAAAiBgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3AgAAACAAQAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECEDpqibG5hqmVUz4XvtZFALVBuw1zkHHv4q4rfvsKDKa88iHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEDDSmopQLvppzVsHMb/41jdREHbWIl8upnCEut1KF59oeyhHHksl6OASTNFqyJN6dlMKzbuhSauI1KBcaMjHeczAAEDCJBfAQAAAAAAAQQiUSCA65gxi89t1hGsF6lksJFzbATK6t8ubodOXO+Gx8YFFwEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgELYvxakKvKAWeWHb/0zq6aoyTvssfyRmJ+i1oz3jfIQBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4A", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 200000, - "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", - "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", - "amount": 200000, - "witness_utxo": "400d030000000000160014139350117c577941a985802bb9edefc113932bc7", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "0366cfc7fdce06e08ed49b1b3952b8d151a8f7e075fe5f6dd58dd68f9dadeeca94", - "dleq_proof": "5eab8b086d4850fe9d1c9f961a91f997b61ca8d0850afc06a78bdf3c749ef54050e692b53fb5b086e5e78793f01e76d3747f89e3177a7feff6f8c1617f1b06e3" - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "03fbd173d9c48d58c5022426d05278bca17b9a8e2282666901a1b00b9e04b79949", - "dleq_proof": "c05da410487cfaec378febe6af5005e3ae6c86236818b0e55b214017eb5073edef40179575b5dcdaa9063491ac8b83fd0624d4177a4d2dd4994c4640d6b8ccde", - "input_index": 0 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "03a6a89b1b986a995533e17bed64500b541bb0d739071efe2ae2b7efb0a0ca6bcf", - "dleq_proof": "c34a6a2940bbe9a7356c1cc6ffe358dd4441db58897cba99c212eb75285e7da1eca11c792c97a380493345ab224de9d94c2b36ee8526ae23528171a3231de733", - "input_index": 1 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", - "script": "512080eb98318bcf6dd611ac17a964b091736c04caeadf2e6e874e5cef86c7c60517" - }, - { - "output_index": 1, - "amount": 90000, - "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", - "script": "512010b62fc5a90abca0167961dbff4ceae9aa324efb2c7f246627e8b5a33de37c84" - } - ] - } + "description": "can finalize: two inputs single-signer - using per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCICaxC8l6Hhc2jWjLl5Ns3zaf+yigvDdzhK80yqHUcmV+AiAzXkNZo/i4O6YutHdfiu4jLtQ2oxzU1YuJCW8wrhrBYAEiBgMeu+UVqVhfvmcUsPyrglbHo7DbqEa74e7Id+DoLmWY9QgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDRQVEPM64u63VuwOFZDNkI59vxfX/kYYqa7SGOKAXSUUiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAKp8UQdSYl3xGaeB8wT4tCmTUG/U/7ul+XoZv/WAdudSnVxhqCcjX8kS8jf1p61XLPjgT7JQbhf9Rq4hyENUieAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAU8jwi17cxJEaUFjUgAE9qLf8AolwiAgJIoaG+VMaENBzQ1Mmg7G/ZLxMTzHkQzUgs9vAIU2l8ckgwRQIhAPnBsFdoj7oFw7yaFL6kcGm9VPa5ZSSa7vYel7oBX6Q8AiAGlWFPwaiINuZPM4LpvqLywuNRjqFNeqOFvogfNgoWswEBAwQBAAAAIgYCSKGhvlTGhDQc0NTJoOxv2S8TE8x5EM1ILPbwCFNpfHIIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjWtVCG1TzpaxT4ikBu3/++nXIfCSjxnH93FPGgVq1OhIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAmKSbd1Bd6tVQiKT2zjfi5hxZxpBzkBwGe7fFseyaVPeS0aumF22NhPgfhN7Ic8ZWe25MU+OHBUf2pTcYi/N4hAABAwgYcwEAAAAAAAEEIlEgIvVSxNGPeXFNSXQFe3bYeE4zw0KTLvPHWPNm6npZOYQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", + "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", + "amount": 100000, + "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "876ccda8929427ac00bb763abf733ba1f88d656e2a161439aa30cf0f8d528641", + "public_key": "0248a1a1be54c684341cd0d4c9a0ec6fd92f1313cc7910cd482cf6f00853697c72", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014f23c22d7b731244694163520004f6a2dff00a25c", + "amount": 100000, + "witness_utxo": "a086010000000000160014f23c22d7b731244694163520004f6a2dff00a25c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", + "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0235ad5421b54f3a5ac53e22901bb7ffefa75c87c24a3c671fddc53c6815ab53a1", + "dleq_proof": "98a49b77505dead55088a4f6ce37e2e61c59c69073901c067bb7c5b1ec9a54f792d1aba6176d8d84f81f84dec873c6567b6e4c53e3870547f6a537188bf37884", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "can finalize: one input / one sp output with both global and per-input ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMKGLm7QZm4kzDrF/juWseG4IU9zS88zfF0S5fOTt4FPiIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQCf7kMXWHHjjEVIA/9GD0o0KtIOAYslUGTTGQW1CZ84xvUKH6TWUUsCBevDvTVDP9XhDaw0o+e2PIbeaRHZAgI4AAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiA3eo+fWjPY+iVcM7OSJtO88CKd+tlgRw74AWpxQvIzWAIgCBvWlIh63us2Ia9aLeTw05yxNpLQQb99vM00oysFQekBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMKGLm7QZm4kzDrF/juWseG4IU9zS88zfF0S5fOTt4FPiIeAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQAATg9RmG+hyXvKQSPSMkR+J9fNDF9fAwKzGDvZfG1K//3qW2DObYl34Orq1eqJz7c2aNceU2suxyGEXG7JnB18AAQMIkF8BAAAAAAABBCJRINxNRNnjYeXnQ2V5x44lklVB4in9wVOtWYmtiuawYkx4AQlCAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oAxJmWB4+hBy7lN5i6nNVg6IyxMiI+m7e8uwvhweJ/B3UAA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 200000, - "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "030a18b9bb4199b89330eb17f8ee5ac786e0853dcd2f3ccdf1744b97ce4ede053e", - "dleq_proof": "27fb90c5d61c78e3115200ffd183d28d0ab4838062c9541934c6416d4267ce31bd4287e9359452c0817af0ef4d50cff578436b0d28f9ed8f21b79a447640808e" - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", - "script": "5120dc4d44d9e361e5e7436579c78e25925541e229fdc153ad5989ad8ae6b0624c78" - } - ] - } + "description": "can finalize: two inputs/two sp outputs - mixed global and per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQM1TON28rs/xxNH3fMzMDKwLdGvkIrV4fmoQmKdi9VjoyIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQA7cED+wwSYDY+ljx6WGch+Qi3pD5+GIt4ruK/3j6YF+/d/GBUmyrO/6fm4mkbFn7VPxzQUE5diriQ9+pAX81w0AAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABR7UmO/UsSWNAD8hezvdO5USqy+fCICArA7CQwOfCMzBa5MYO0wr5fdmba20zrGc6sPB5VKyUpdSDBFAiEAkjWFWEXm98L3gYA0bAadu6aNF7fWPIh/i9ygrMafERQCIFze80H9FnuNWmxvQeN9VnN/1uEX3njk2IoTK2ZRdUZOAQEDBAEAAAAiBgKwOwkMDnwjMwWuTGDtMK+X3Zm2ttM6xnOrDweVSslKXQgAAACAAAAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECEDitzN16HulqH1rQgEWjBWRl/ZIsy9TuTizN8Dm4G68jEiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEBJnMlkkRcjkwbyesWywAtyLr77pZ0k8cKfMz47fRxFKIFYOImN9oRpZd4mOVwiMQgxth4+77Yg70dBNDC97AwNAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH0ANAwAAAAAAFgAUYubwsqEs9lIYGiu2SM/m7BheLIwiAgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMkcwRAIgV+cHgkkPB0x41sdHYAZU5EKuh1EgzerDwI+UfjRAOUYCIGJMWDuwh/w+LHC7bhVpisNE9Wc3IKLuNJDcBQSXalBlAQEDBAEAAAAiBgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMggAAACAAQAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECED9YBNRPCSo1zhNFg5qaJawp/817Xs+dwbNXMm4y+pnMwiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEAzPs5O0IYrkoCqPVK8zrtOa/AtZH3xk475a1M52NZxM9/g+2jo42yN/9p3qwJ4zjEh3e2Ql69FZsECR+iG6clfAAEDCJBfAQAAAAAAAQQiUSDxdYae3PyUadqE3xG62uCW/hRzgAnj8SdD5wmLUN454gEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgT13nnxOk/o3m2+gj/HQXhj2kkSSstqhgL/CcBRK4BmoBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4A", + "input_keys": [ + { + "input_index": 0, + "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", + "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "amount": 200000, + "witness_utxo": "400d0300000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "410e119ecc348c56d804bf728492cc67f63db3404b85a6b2f87211d6cbb7e24c", + "public_key": "03eab28e63e466ad0e92d678fad0c176463b26afc64c6ba045cbf28482895dd632", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", + "amount": 200000, + "witness_utxo": "400d03000000000016001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "03354ce376f2bb3fc71347ddf3333032b02dd1af908ad5e1f9a842629d8bd563a3", + "dleq_proof": "0edc103fb0c1260363e963c7a586721f908b7a43e7e188b78aee2bfde3e9817efddfc60549b2aceffa7e6e2691b167ed53f1cd0504e5d8ab890f7ea405fcd70d" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", + "dleq_proof": "499cc9649117239306f27ac5b2c00b722ebefba59d24f1c29f333e3b7d1c4528815838898df6846965de26395c22310831b61e3eefb620ef47413430bdec0c0d", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "03f5804d44f092a35ce1345839a9a25ac29ffcd7b5ecf9dc1b357326e32fa99ccc", + "dleq_proof": "333ece4ed0862b9280aa3d52bccebb4e6bf02d647df1938ef96b5339d8d67133dfe0fb68e8e36c8dffda77ab0278ce3121dded9097af4566c10247e886e9c95f", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + } + ] }, { - "description": "can finalize: three sp outputs (different scan keys) with multiple global ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEDAQYBACIHAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQIQLC2d9g7mmlqGYE3ZpigsIu+OLJJ22m5ZWlRj83Gq3uJCIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQLcfS7KxWiwEVF1ujzVSW/0xLbZCUItvMrrjyUvpU+L0CIHA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsIQJwvvXAapqFX8Y7/yvQvi1wAzyCC2FTQTyNbtpR8lobKSIIAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQQOyCQr97WIHO4GBWbH8TzEfkcQyJomRYwgMBswMeSBc7wL6gFoDTN1616AYRqw1Qix5Jq7VxsYeAMqrknwsC99IiCAMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKEDqQ0cOXhvjKRtIoLy1P1WVLGSGDnY177pQA8yt7XfdEo4hZpew9SO+IX7Gh1B3l8zOvFzZQ2KvG0bYA2Qr1flAIggDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGxAG9/lTtSioG//mwAJrk49gPxHYWR1r98hJEz+PG0QTfJHQah1UU14ZU+5yhEY5tPlUvOPjKujVS6DM8UBvwy9PwABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCLg3ekbsHGTj/QlvLhIwW7hrrfzKDP2b9X3JYim55whAIgfn3H3eyoVVwXfr7/yUnqTDNSD+W+7Hun4nJ+NPvUjf0BIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0iAgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFu0gwRQIhAPmSLe+tUsYSCQS6pacAUymDbsHD2uFsoGjAFrJrBNLYAiBw+V8k+cklbkGWlGnDUqz6yOiUMjUC6s0WPJSi42nuHwEiBgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFuwgAAACAAQAAAAEQBP7///8AAQMIkF8BAAAAAAABBCJRIKFPr9x+36QEQnF0sSasoOmZMTP+F+JCCurtIO9U/DjcAQlCAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oAxJmWB4+hBy7lN5i6nNVg6IyxMiI+m7e8uwvhweJ/B3UAAEDCJBfAQAAAAAAAQQiUSB99fJJWUQ0FLvv6J0tqJSGSlYotoAzuSPoaGvcw96dlAEJQgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEAJKSNduINQLz18uGlw//rPcKos7iNeaSG1UydnqqPoYjgABAwiQXwEAAAAAAAEEIlEgsvEqf1cMxQV4QPpjk/cfBpABQgiBgYEMNLuIdh2SlQ0BCUIDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGwD+BRzhEyddMkh/xelr0ELYzc0jXr7/3OJG8XLDLJMsMAA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 500000, - "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 100000, - "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "02dc7d2ecac568b0115175ba3cd5496ff4c4b6d909422dbccaeb8f252fa54f8bd0", - "dleq_proof": "ea43470e5e1be3291b48a0bcb53f55952c64860e7635efba5003ccaded77dd128e216697b0f523be217ec687507797cccebc5cd94362af1b46d803642bd5f940" - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "02c2d9df60ee69a5a86604dd9a6282c22ef8e2c9276da6e595a5463f371aadee24", - "dleq_proof": "ec8242bf7b5881cee060566c7f13cc47e4710c89a26458c20301b3031e48173bc0bea01680d3375eb5e80611ab0d508b1e49abb571b1878032aae49f0b02f7d2" - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "0270bef5c06a9a855fc63bff2bd0be2d70033c820b6153413c8d6eda51f25a1b29", - "dleq_proof": "1bdfe54ed4a2a06fff9b0009ae4e3d80fc47616475afdf21244cfe3c6d104df24741a875514d78654fb9ca1118e6d3e552f38f8caba3552e8333c501bf0cbd3f" - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", - "script": "5120a14fafdc7edfa404427174b126aca0e9993133fe17e2420aeaed20ef54fc38dc" - }, - { - "output_index": 1, - "amount": 90000, - "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", - "script": "51207df5f24959443414bbefe89d2da894864a5628b68033b923e8686bdcc3de9d94" - }, - { - "output_index": 2, - "amount": 90000, - "sp_v0_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0", - "script": "5120b2f12a7f570cc5057840fa6393f71f06900142088181810c34bb88761d92950d" - } - ] - } + "description": "can finalize: three sp outputs (different scan keys) - multiple global ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEDAQYBACIHAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQIQNW0m1h0S3tm67YlAnfH1xiMK5ya+g9o8jF3p3EYlUC/SIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMG47zgW4RZqlhx5yBwHd21iUSunqRKAKVUOCfhoIDOhyIHA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsIQMHSulAt+mc/8n+jXZ3MSMaWW9bfZO5wc8S1PVGN+5UDyIIAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQQMiAKu0Gry8mVLOwYlWz51t0aXF1PPTuxXw26O40kjA0js3rCQHWOOU3Ecn2y6JndxNg7svfNfPfl8VMcBpZg48iCAMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKEAQts8CV65KyF7Jj5yGxY0PZ8I7/00LEjRTUzeReLgf7iLvKNb1isYvoGYUb5qXC8Mhgkbi2l9C5G1S2tHKoIcnIggDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGxAGchTJz3dHxxEc9JXWbrYKz3uqYsvZwJu8GvNiBU5V+vG4U3sM44+D7Pf0zNkYRnFOFMQNnyRMkTa4am0VxKsPgABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFFK7Vd69F2tlEbzkMwnG0vjoCqazIgIDUCli7F2s4NFV3c+qd8sDIgUlekdMLSUBCd55FhMhNQxHMEQCIDlC70GsRwyZqm2NOKCfItK2/4avBGXLR8C2izs19mdbAiBOka6FoudfloMEh6lUghFnn3ia4mN5DF/DtU7MthQsYAEiBgNQKWLsXazg0VXdz6p3ywMiBSV6R0wtJQEJ3nkWEyE1DAgAAACAAAAAAAEQBP7///8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfoIYBAAAAAAAWABTOWyFkR2kh5ilEN+Vk3kDYkwoaDCICA3RYxQrxcpR7CWL3r5ueDWFSZBRAUPSaZWu/0S1LNsraRzBEAiB0SvtntUvYflPp5Y/93wqesePokQyTk+rwpWZwXjlNfgIgD7dqyu9bl/sdHhNU220CKzRXOMyyMBZvqu5I/r+AJPQBIgYDdFjFCvFylHsJYvevm54NYVJkFEBQ9Jpla7/RLUs2ytoIAAAAgAEAAAABEAT+////AAEDCJBfAQAAAAAAAQQiUSAg20T7yRphCitGXihi86FAokkY9urWgJCmDgjdSk7QFgEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgwkGX5d+535bIWPJ1vC2JJckkSz9tQ32W+mZoDBnlkUQBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4AAQMIkF8BAAAAAAABBCJRIP1+p2RI4jhAJi7ZYI3zUcDR3lp3fB/yLoQPBFnAcFp/AQlCA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsA/gUc4RMnXTJIf8Xpa9BC2M3NI16+/9ziRvFywyyTLDAAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "27bac97c53e47b063e9fff628dc9671345a211df01cbe2ce62babdce229d2a3f", + "public_key": "03502962ec5dace0d155ddcfaa77cb032205257a474c2d250109de79161321350c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001452bb55debd176b6511bce43309c6d2f8e80aa6b3", + "amount": 500000, + "witness_utxo": "20a107000000000016001452bb55debd176b6511bce43309c6d2f8e80aa6b3", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "a73d2fdfe284c57cfdd7bbb5e37b7ad6a3093624d415bb8a776bffe3fdac3053", + "public_key": "037458c50af172947b0962f7af9b9e0d615264144050f49a656bbfd12d4b36cada", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014ce5b2164476921e6294437e564de40d8930a1a0c", + "amount": 100000, + "witness_utxo": "a086010000000000160014ce5b2164476921e6294437e564de40d8930a1a0c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "0306e3bce05b8459aa5871e720701dddb58944ae9ea44a00a5543827e1a080ce87", + "dleq_proof": "10b6cf0257ae4ac85ec98f9c86c58d0f67c23bff4d0b12345353379178b81fee22ef28d6f58ac62fa066146f9a970bc3218246e2da5f42e46d52dad1caa08727" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0356d26d61d12ded9baed89409df1f5c6230ae726be83da3c8c5de9dc4625502fd", + "dleq_proof": "c8802aed06af2f2654b3b06255b3e75b746971753cf4eec57c36e8ee349230348ecdeb0901d638e53711c9f6cba267771360eecbdf35f3df97c54c701a59838f" + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03074ae940b7e99cffc9fe8d767731231a596f5b7d93b9c1cf12d4f54637ee540f", + "dleq_proof": "19c853273ddd1f1c4473d25759bad82b3deea98b2f67026ef06bcd88153957ebc6e14dec338e3e0fb3dfd333646119c5385310367c913244dae1a9b45712ac3e" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 2, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ] }, { - "description": "can finalize: one P2WPKH input / two mixed outputs - labeled sp output and BIP 32 change", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCspcmETsmSLIHmcIF+My2i3RXSxdOpRiq21l5TtoKJXgIgTfMs6jgucsQ8BYQE/a5wWVHmuj3jPYM8g6lbsBg4CscBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIoIYBAAAAAAABBCJRIHwkw/lKVR+Uy49cDgPMmhcIf7FNcUpdL06f1MeJ09NmAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoAuJBKtaGGMwJH8G/tuRd4l0b3BZXsljCbRYdEtLosDafAQoEAQAAAAABAwhw8wUAAAAAAAEEFgAUOMGPNd2AY+OApw/+tPmP9O80gXciAgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwwAAAAAAAAAAAAAAAEA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 500000, - "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "sp_v0_label": 1, - "script": "51207c24c3f94a551f94cb8f5c0e03cc9a17087fb14d714a5d2f4e9fd4c789d3d366" - }, - { - "output_index": 1, - "amount": 390000, - "script": "001438c18f35dd8063e380a70ffeb4f98ff4ef348177" - } - ] - } + "description": "can finalize: one P2WPKH input / two mixed outputs - sp with labeled output and BIP 32 change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFKhca+iBJCuJTjnxuFI175+h6X2bIgIDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDBHMEQCIBzDuu1POG/i0LXA1CRHdBss4XAcxvvWCDf8PS1GwrVIAiBEJvA1FZZn78RkoM07C7Kt503b9NIiVyysAkFnf0G7FgEBAwQBAAAAIgYDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxz3EhKb5LqmLTaE5y6TJrDsHGA09pJlCPvD++OpcvkBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhALXiKhy7k7ux+cgUqCbGRerQaZ6UPWRIWNutMKpFA1JRSvGy2C63esSzzpg+OTRGcDpojZaOAxakl1EXnS+oNxAABAwighgEAAAAAAAEEIlEga7ws7fbiMAKU4cljGbEEtDwgG+zKAcQaFfd2fHQQrE0BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgC4kEq1oYYzAkfwb+25F3iXRvcFleyWMJtFh0S0uiwNp8BCgQBAAAAAAEDCHDzBQAAAAAAAQQWABQ4wY813YBj44CnD/60+Y/07zSBdyICA64rH6YZa5cUpQnE3KMpJNtdD4lXNSIkJxTk/J5VN6QwDAAAAAAAAAAAAAAAAQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "f6a954670515af06da4b52669d8d8ea0109f5b7cff7fc0e48710bbcfbd7abdc4", + "public_key": "03ae2b1fa6196b9714a509c4dca32924db5d0f89573522242714e4fc9e5537a430", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014a85c6be881242b894e39f1b85235ef9fa1e97d9b", + "amount": 500000, + "witness_utxo": "20a1070000000000160014a85c6be881242b894e39f1b85235ef9fa1e97d9b", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031cf712129be4baa62d3684e72e9326b0ec1c6034f6926508fbc3fbe3a972f901", + "dleq_proof": "2d788a872ee4eeec7e72052a09b1917ab41a67a50f59121636eb4c2a9140d49452bc6cb60baddeb12cf3a60f8e4d119c0e9a2365a380c5a925d445e74bea0dc4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "sp_label": 1 + }, + { + "output_index": 1, + "amount": 390000, + "is_silent_payment": false, + "script": "001438c18f35dd8063e380a70ffeb4f98ff4ef348177" + } + ] }, { - "description": "can finalize: one input / two sp outputs - output 0 has no label / output 1 uses label=0 convention for sp change", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCICJa45kPVF365uoUKpN0arSqgSfjyBNY63wha08anrtiAiBl42BSGRArJQdeOVXz80zjvPKjXR4QFd1dw7/tPs81qQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts0hA84eNnXZDZkmSfqd2xH5AlSbs7AvVvbonMCgTIuMN92UIh0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAlWBv6pzMVb2uY5xom9w/XazZ4ZJ9isfxed7jpq45hBQIh4CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts1ADolhPR9rJTbbj6kkIA2zpvjvyhciVWTVaxEuUIZbTTAuBY+m9hwp4jZqSnJp1FVaXGHWVVnb+/rJ4urf5TY31SIeAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoQHlAgZ626fJYwVg4fApkzBb1F8fvRAkSLM6qlPTi/1N2xCR7/BcNmyY7Dj0ga2aMh+lLNN7q+gCheSsEeteIdbsAAQMIoIYBAAAAAAABBCJRIKBIDZZnnBk25au9SLqw4B/6yx7n0cnhaC8VQBaZZYXZAQlCAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoA7RDRzNcY/UF5V4mirKA8xi0pqoUSS/zecNmih9U74ybAAEDCDDmAgAAAAAAAQQiUSB2Hb00kpiEpmcp69zbrPFnSC32LBTwmOTvGNcP4Grv0AEJQgJfDsGzjZmEp+ti8VvkAwIEEPFC7fTWnjY/VhWv0qa2zQK+EFEqlVNkHkB62OUJo0GEUqkC6FVqDboumD9eAPe8UQEKBAAAAAAA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 300000, - "witness_utxo": "e093040000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", - "ecdh_share": "03ce1e3675d90d992649fa9ddb11f902549bb3b02f56f6e89cc0a04c8b8c37dd94", - "dleq_proof": "0e89613d1f6b2536db8fa924200db3a6f8efca17225564d56b112e50865b4d302e058fa6f61c29e2366a4a7269d4555a5c61d65559dbfbfac9e2eadfe53637d5", - "input_index": 0 - }, - { - "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "ecdh_share": "025581bfaa733156f6b98e71a26f70fd76b3678649f62b1fc5e77b8e9ab8e61050", - "dleq_proof": "7940819eb6e9f258c158387c0a64cc16f517c7ef4409122cceaa94f4e2ff5376c4247bfc170d9b263b0e3d206b668c87e94b34deeafa00a1792b047ad78875bb", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 100000, - "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", - "script": "5120a0480d96679c1936e5abbd48bab0e01ffacb1ee7d1c9e1682f154016996585d9" - }, - { - "output_index": 1, - "amount": 190000, - "sp_v0_info": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5", - "sp_v0_label": 0, - "script": "5120761dbd34929884a66729ebdcdbacf167482df62c14f098e4ef18d70fe06aefd0" - } - ] - } + "description": "can finalize: one input / two sp outputs - output 0 no label / output 1 uses label=0 convention for sp change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFLA7Znm3/JhuVURYHNqRKWPGdMbjIgID99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e9HMEQCIFY0b6mD1z9m7egl3uaCheQIUB/tmsBUJqsfB0VapuxBAiAsVXbBINxLxHKZfCGHTAVaGIuUSTh8dC67f+HlaIf+TgEBAwQBAAAAIgYD99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e8IAAAAgAAAAAABEAT+////Ih0CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts0hAhjCQiVPx9y9gN45xPfrHc56NkuM5gYyVL3u2gCERzwDIh0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAmzGA8tEE6quCZ8nSB17g6DkB13hXugLrnQdm/lS9tOxIh4CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts1AQ1UI+aEse39viptfvL9GXupq/HytVfDmBf2MBKuvtohW3FJOOHtLAY+0t+qXdlFh8i5byi5ROOCEEC04yvjJOiIeAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoQNMHk9UnQ5oDrok9KM0lSyZAC3I9dT74Hp6kInKB8DouF7fQofqoQ3NkUUalEl9x6Nd2RxP2G3whpl5wDzklnQwAAQMIoIYBAAAAAAABBCJRIKFPUAS7Ra+VOUiZasyqJ8D8ezIhGJdEQD/Yq0JbIq9fAQlCAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoA7RDRzNcY/UF5V4mirKA8xi0pqoUSS/zecNmih9U74ybAAEDCDDmAgAAAAAAAQQiUSDXbx0JcoVShXYt7c4tP4IA1m6SvgCa/qQK0eW5jRKKswEJQgJfDsGzjZmEp+ti8VvkAwIEEPFC7fTWnjY/VhWv0qa2zQK+EFEqlVNkHkB62OUJo0GEUqkC6FVqDboumD9eAPe8UQEKBAAAAAAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "96653caa803b9f0f11d48d3cd1788c1db784c0aadaf11796c36834c1fb3786bc", + "public_key": "03f7d25af55b7835682d6bf75993f5392091d1cb6b217a6fbe84a77de6154ff5ef", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014b03b6679b7fc986e5544581cda912963c674c6e3", + "amount": 300000, + "witness_utxo": "e093040000000000160014b03b6679b7fc986e5544581cda912963c674c6e3", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", + "spend_pubkey": "037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5" + }, + { + "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", + "ecdh_result": "0218c242254fc7dcbd80de39c4f7eb1dce7a364b8ce6063254bdeeda0084473c03", + "dleq_proof": "435508f9a12c7b7f6f8a9b5fbcbf465eea6afc7cad55f0e605fd8c04abafb68856dc524e387b4b018fb4b7ea97765161f22e5bca2e5138e084102d38caf8c93a", + "input_index": 0 + }, + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_result": "026cc603cb4413aaae099f27481d7b83a0e4075de15ee80bae741d9bf952f6d3b1", + "dleq_proof": "d30793d527439a03ae893d28cd254b26400b723d753ef81e9ea4227281f03a2e17b7d0a1faa84373645146a5125f71e8d7764713f61b7c21a65e700f39259d0c", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + }, + { + "output_index": 1, + "amount": 190000, + "is_silent_payment": true, + "sp_info": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5", + "sp_label": 0 + } + ] }, { "description": "can finalize: two sp outputs - output 0 uses label=3 / output 1 uses label=1", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCICJa45kPVF365uoUKpN0arSqgSfjyBNY63wha08anrtiAiBl42BSGRArJQdeOVXz80zjvPKjXR4QFd1dw7/tPs81qQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAlWBv6pzMVb2uY5xom9w/XazZ4ZJ9isfxed7jpq45hBQIh4Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWhAeUCBnrbp8ljBWDh8CmTMFvUXx+9ECRIszqqU9OL/U3bEJHv8Fw2bJjsOPSBrZoyH6Us03ur6AKF5KwR614h1uwABAwighgEAAAAAAAEEIlEgjkFVhZ37qH3uVCd4eSDGlYuRbXrHP02lCyzrTAnwYY8BCUICi3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWgD8+Tq+VWJ7fdfgshaz/nQvOSCnhaA85Xsfq1iaXfwhRMBCgQDAAAAAAEDCDDmAgAAAAAAAQQiUSDj5vwH7Pa/a1m0ubaqUxM11laKeL6AjUVOAg1+jH/aUwEJQgKLeQ4Jh/3p8NEjmOtr4wxzdnk8ZHhloqAvLvyWDZZlaALcqxqjkFTkguCjoiOo8Sgs1xGXZTHGeaoggF9/X6TxawEKBAEAAAAA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 300000, - "witness_utxo": "e093040000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "ecdh_share": "025581bfaa733156f6b98e71a26f70fd76b3678649f62b1fc5e77b8e9ab8e61050", - "dleq_proof": "7940819eb6e9f258c158387c0a64cc16f517c7ef4409122cceaa94f4e2ff5376c4247bfc170d9b263b0e3d206b668c87e94b34deeafa00a1792b047ad78875bb", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 100000, - "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", - "sp_v0_label": 3, - "script": "51208e4155859dfba87dee5427787920c6958b916d7ac73f4da50b2ceb4c09f0618f" - }, - { - "output_index": 1, - "amount": 190000, - "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", - "sp_v0_label": 1, - "script": "5120e3e6fc07ecf6bf6b59b4b9b6aa531335d6568a78be808d454e020d7e8c7fda53" - } - ] - } + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFOIZ+mGyrzWgn4CGOyIHrO0l3lnIIgICbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyVHMEQCIFOSlnsfFhybwy7/MG+cV8vcpWQYmfE7VhEQcGWZ837IAiASvCJ2KzHM6vDu0qbWUuh4M5mMV5SMO+Eb296xwR1ObwEBAwQBAAAAIgYCbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyUIAAAAgAAAAAABEAT+////Ih0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAkWkqt7EMP4/XhX0QSwA1bRtP7BjUoHtsbyoXf1XbGJbIh4Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWhAhJcAvfv6PwYUyYN7hx1bi0KhCe/o9bXm4gXSNty8814PrQ9L2JioR1MNOoN9VlSREPj1OKiO6knXHb3PiZjObgABAwighgEAAAAAAAEEIlEgvofPyHz2McruZysJw/NIz7EDKa92NvOenE7mLfBwEhYBCUICi3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWgD8+Tq+VWJ7fdfgshaz/nQvOSCnhaA85Xsfq1iaXfwhRMBCgQDAAAAAAEDCDDmAgAAAAAAAQQiUSBjcKwAHfzVyPexT9nGxZ6MYbbKLhpgsp1DBb6qEwf1twEJQgKLeQ4Jh/3p8NEjmOtr4wxzdnk8ZHhloqAvLvyWDZZlaALcqxqjkFTkguCjoiOo8Sgs1xGXZTHGeaoggF9/X6TxawEKBAEAAAAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "7211bc4516d4da13224eddbe49ffc62d1d3f0313628199dac12271da224659ae", + "public_key": "026d553045c11120a0aadffb74677d4f4f9a1f9c43216b674e7c76d60b03f43f25", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014e219fa61b2af35a09f80863b2207aced25de59c8", + "amount": 300000, + "witness_utxo": "e093040000000000160014e219fa61b2af35a09f80863b2207aced25de59c8", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_result": "0245a4aadec430fe3f5e15f4412c00d5b46d3fb0635281edb1bca85dfd576c625b", + "dleq_proof": "849700bdfbfa3f0614c9837b871d5b8b42a109efe8f5b5e6e205d236dcbcf35e0fad0f4bd898a847530d3a837d56549110f8f538a88eea49d71dbdcf8998ce6e", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_label": 3 + }, + { + "output_index": 1, + "amount": 190000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_label": 1 + } + ] }, { "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (P2SH excluded)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCLTLcGPIp7P5Ia4ABZbNd4jlRA4dY+8e4bzsjCrJQMogIgNw2OmoWgzI3SWwuwgfMaotzFugoiSOqGCoFlHKNKDGgBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4g0iImLyaHKbt8hMVYEppdaYYYXO9TXsFJwN9g3UqSwgQBDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFPRfjMomjsJuS76JkXDxOCUNfPVehwAAAAABBEdSIQKHfKAvFEBZvYLQDhs5muN094pSzvehyjfyjXiLNA0veSEDTIekSHL14fAG002IoAlZKCvUU150d8PWjDFlmR6hs5ZSrgEQBP7///8AAQMIkF8BAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "", - "public_key": "", - "prevout_txid": "d222262f268729bb7c84c558129a5d6986185cef535ec149c0df60dd4a92c204", - "prevout_index": 0, - "prevout_scriptpubkey": "a914f45f8cca268ec26e4bbe899170f138250d7cf55e87", - "amount": 150000, - "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a914f45f8cca268ec26e4bbe899170f138250d7cf55e8700000000", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" - } - ] - } + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFENGPU1vISZuSH1CA0sDRePskA1UIgICdJJVdDISkBnl/EB7Tlii6RZXFRDz0hB/uCFJx8oxWIpIMEUCIQCJHmYo2I6P30rmVO/pO//w5XooeQ5Zm0Go3qS/AZ2IIQIgY1E7I9okcNTYQ09/rlbnPwKiJtm2BFl4hKWcv+beuBYBAQMEAQAAACIGAnSSVXQyEpAZ5fxAe05YoukWVxUQ89IQf7ghScfKMViKCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOE/J1YjxODCoh2pZvKQgMzvVbONgGqnpvbm3cxwMrPjCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQMPG4LUL7y5/z5kbRS+AOfKOUlK35FrkRgGNSiiOU/75/QvgQt2zwxKqnAJYsOF147V0fK2OlSw42xpLfvGTOOwAAQ4gMSiieXMH9JI3mYW34dwYbesU2RoDC2AnrhfbdvsgdRUBDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFCpE9eWyAlaJ1TA7q5BUxWe7AklkhwAAAAABBEdSIQPl9jb3AntiYHASqF9itv7ZnUAf5dj3vHexLoU6sb6AJCEDxbcSQKck8rC3QMe1ErICPkHi4JTBlAWIqlib+WEIpUpSrgEQBP7///8AAQMIkF8BAAAAAAABBCJRINHDkl4cArKeYeddxg5c+NFKwlEvg+by53zyrh8Ntg89AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b46f12a0756253abd1cb0a7e42c9696c15a8fb1d45afb18f50ac69933a507bd7", + "public_key": "027492557432129019e5fc407b4e58a2e916571510f3d2107fb82149c7ca31588a", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001443463d4d6f21266e487d42034b0345e3ec900d54", + "amount": 100000, + "witness_utxo": "a08601000000000016001443463d4d6f21266e487d42034b0345e3ec900d54", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "", + "public_key": "", + "prevout_txid": "3128a2797307f492379985b7e1dc186deb14d91a030b6027ae17db76fb207515", + "prevout_index": 0, + "prevout_scriptpubkey": "a9142a44f5e5b2025689d5303bab9054c567bb02496487", + "amount": 150000, + "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9142a44f5e5b2025689d5303bab9054c567bb0249648700000000", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0384fc9d588f13830a8876a59bca420333bd56ce3601aa9e9bdb9b7731c0cacf8c", + "dleq_proof": "c3c6e0b50bef2e7fcf991b452f8039f28e5252b7e45ae446018d4a288e53fef9fd0be042ddb3c312aa9c0258b0e175e3b5747cad8e952c38db1a4b7ef19338ec", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS internal key excluded)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0iAgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFu0gwRQIhAPRhsN/2Q/wKVsFSIUU2OBYiEkh+UGpZ4GnXXtHwq4T2AiBSxx6U6TEuqKkAH80mNyvnCZfdwqpinFqBFtxR9bfpogEBAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAuV6etywGNj7MVToDBS5elCZS0I1aEHqn8ExcGFEAOY3Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA9/o4HeILO0WcbkJsYhPUF1MI8kgqROMyhCMmJNTa/Vcymb868WqzAsViY2OjfUSHB/fnoevqBke8zUhiA7srpgABAwgcJQAAAAAAAAEEIlEgBXZyJSSDmoybydLZc46Yu0DdLsUCO9x9p/cGI818hfsBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "amount": 10000, - "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 100000, - "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", - "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", - "input_index": 1 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 9500, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "51200576722524839a8c9bc9d2d9738e98bb40dd2ec5023bdc7da7f70623cd7c85fb" - } - ] - } + "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS point excluded)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUA14E6biH6OIv3A4UMLGv6XvKH58iAgKe+tRORGsZo75x2amUAEZxCvfx8PQJch06WwL/6URurUgwRQIhAIqf99208yLh5G4wC8JeFwdB+4gyKfkTorKzZUJSUsAyAiAJAxST2QAAA2+Z+3Sapu/7R998E0bz88sOAaDGd35yTwEBAwQBAAAAIgYCnvrUTkRrGaO+cdmplABGcQr38fD0CXIdOlsC/+lEbq0IAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAk2ynjBb9oXdu9Aiy/DEtZGFJN2W+vaiLhkRer6yNMHBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA8cQIenKbwQX00lgytDgNKjkl0uon86BOmOhUYlRqJcAd+XTzhkxIfxL1hbjSiJsEfhyiO5uu8ulg51qpl0WgowABAwgcJQAAAAAAAAEEIlEg7FUJyUOEInBTl1dmdHAedm+Walaa+3kAcV3CdldrbrQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "f1b17746eb6b7d463ab7cb49236309f0fd3ca4566f4def831b337e8cd036bc1d", + "public_key": "029efad44e446b19a3be71d9a9940046710af7f1f0f409721d3a5b02ffe9446ead", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", + "amount": 100000, + "witness_utxo": "a086010000000000160014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "024db29e305bf685ddbbd022cbf0c4b5918524dd96faf6a22e19117abeb234c1c1", + "dleq_proof": "f1c4087a729bc105f4d25832b4380d2a3925d2ea27f3a04e98e85462546a25c01df974f3864c487f12f585b8d2889b047e1ca23b9baef2e960e75aa99745a0a3", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { "description": "can finalize: three sp outputs (same scan key) - each output has distinct k value", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEEAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+AGgYAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIA3+9XB4r8pV2yK0ze42yxF/h2HkeAgptCHRBkisr62PAiBk5vWJD0/QW3emSnGDHJiGTZyYTJ7x/r6afFC08VkHIQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwighgEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIoIYBAAAAAAABBCJRID/LrqSQh/jgPZ3v06vL1t6MAytYP4WmXQV4gcTEQ83AAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCKCGAQAAAAAAAQQiUSCXFELInwR4bggnKK4Rbuq4AvP6npX9sNN1OmhAICAG3gEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwiQXwEAAAAAAAEEIlEgee9WiKP6f+/DkidFWx8cLwjHAIdCTWoA+EwxQhrKjaQA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 400000, - "witness_utxo": "801a060000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" - }, - { - "output_index": 1, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" - }, - { - "output_index": 2, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" - }, - { - "output_index": 3, - "amount": 90000, - "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" - } - ] - } + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEEAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+AGgYAAAAAABYAFIBgz43UFLJiZD13IUlmACDm16CYIgIDyiNr7RbjrAH21cSc7Qo2gPJrUTsc1kcOSlKm1GPq3SJIMEUCIQDMlGITADIsSgZizw9dXA5XfyHRwolYLTgaLuL3OHvJQgIgQ0NN4K5ihNlAcWJ1VoDRM8kC9AbTcQEC9dFuU3FQ+VcBAQMEAQAAACIGA8oja+0W46wB9tXEnO0KNoDya1E7HNZHDkpSptRj6t0iCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOeFYLzk6xK+UpQ3Bs7qwgZdOyj2CUosrZYRM7uMmprVyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNvwhBNXnmTwlNX5Ochx99/2sxXRlqOevQ3tMWkqIpoPTp+ufxHnEhZQAT2/iS/EZNg6yQYu/bXhyO/qLTL0RBkAAQMIoIYBAAAAAAABBCJRIDZiSMVisMJ0fEtUKReChTw4PaKAd3pfUYkJOwJxJi9dAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCKCGAQAAAAAAAQQiUSB4qfgR7Z2aKWpWUtia9WLAA2quuMb6+Vyk3qvV60l6cwEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwighgEAAAAAAAEEIlEgcooTQ3M6IIM4D+Tk4+YgTZxAf7SoyqiY7BA0ARqrTyYBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIkF8BAAAAAAABBCJRIHnvVoij+n/vw5InRVsfHC8IxwCHQk1qAPhMMUIayo2kAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "3bf75dcb2655e27efbe47e1652566dc08e9b0f6306a0dd45d35ed7a1364285ca", + "public_key": "03ca236bed16e3ac01f6d5c49ced0a3680f26b513b1cd6470e4a52a6d463eadd22", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00148060cf8dd414b262643d772149660020e6d7a098", + "amount": 400000, + "witness_utxo": "801a0600000000001600148060cf8dd414b262643d772149660020e6d7a098", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "039e1582f393ac4af94a50dc1b3bab081974eca3d82528b2b65844ceee326a6b57", + "dleq_proof": "dbf08413579e64f094d5f939c871f7dff6b315d196a39ebd0ded31692a229a0f4e9fae7f11e7121650013dbf892fc464d83ac9062efdb5e1c8efea2d32f44419", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 2, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 3, + "amount": 90000, + "is_silent_payment": false, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + } + ] + }, + { + "description": "can finalize: three sp outputs (same scan key) / two regular outputs - k value must not follow output index", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEGAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFDFas8/ZGyzIuG4UlJGV/E2OpB4RIgIDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDBHMEQCIDZRFp8fo7gXKN6JmPOrsK/4KlExbzVNEcogboiehFDkAiAKlucqmcJJpPM5zHI5WTNKExSddijittQHWVe7XTAdIAEBAwQBAAAAIgYDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAtj8HyUo/vzx4nf1x/W9VuBXY+Rf1u8O7AcIEa/3nAM6Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApDguomF4Sh4nF5t+oyhHTfGilpmX3LpjWLg5068gxbUVrVfUd07BENnuZQipPE+M1h+1tIYn43lvKx36mMLHsgABAwighgEAAAAAAAEEIlEg/8BMVtDu8peizkLQ4wzJjse3Sm3BIxtFOT63pIPZIsQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIUMMAAAAAAAABBCJRIJxqPSOBjoIO0dDP3rljZXyOwyd7fZuGXHjXVX9d7daiAAEDCKCGAQAAAAAAAQQiUSC3iN15IMFBknVEEubTQLJJKaQNVuP4yLcFNy2VUATAIgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwhQwwAAAAAAAAEEIlEgee9WiKP6f+/DkidFWx8cLwjHAIdCTWoA+EwxQhrKjaQAAQMIoIYBAAAAAAABBCJRIHSQisLI8z6v/WBEw/qQAWoanlj7sc84mrQDWMMIWDXHAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCMgsAQAAAAAAAQQiUSBvxQb4BSqfWoqpuZDV6ZT0ld3tbUe6xEyqza3Y2Jkc0AA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "f3670caa3f21a55a75bdea1ba0a3c2b9a204edb14091c7d44d5f94dc7032a34b", + "public_key": "03590702ae80f0b705bed5849037d4f35700c70305ff2df49bfdd1ee8304d75c30", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", + "amount": 500000, + "witness_utxo": "20a1070000000000160014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02d8fc1f2528fefcf1e277f5c7f5bd56e05763e45fd6ef0eec070811aff79c033a", + "dleq_proof": "a4382ea261784a1e27179b7ea328474df1a2969997dcba6358b839d3af20c5b515ad57d4774ec110d9ee6508a93c4f8cd61fb5b48627e3796f2b1dfa98c2c7b2", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 50000, + "is_silent_payment": false, + "script": "51209c6a3d23818e820ed1d0cfdeb963657c8ec3277b7d9b865c78d7557f5dedd6a2" + }, + { + "output_index": 2, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 3, + "amount": 50000, + "is_silent_payment": false, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + }, + { + "output_index": 4, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 5, + "amount": 77000, + "is_silent_payment": false, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] }, { - "description": "can finalize: three sp outputs (same scan key) / two regular outputs - k values assigned independently of output index", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEGAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQD333KAYwDd2+SyTNcz9TsypkayNsKUYFfeR65QOyqxaAIgTGlAW3e+2vOyB+3ll0m7o9VMRhWoi7025Ugkr3fJ5zEBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIoIYBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCFDDAAAAAAAAAQQiUSCcaj0jgY6CDtHQz965Y2V8jsMne32bhlx411V/Xe3WogABAwighgEAAAAAAAEEIlEgP8uupJCH+OA9ne/Tq8vW3owDK1g/haZdBXiBxMRDzcABCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIUMMAAAAAAAABBCJRIHnvVoij+n/vw5InRVsfHC8IxwCHQk1qAPhMMUIayo2kAAEDCKCGAQAAAAAAAQQiUSCXFELInwR4bggnKK4Rbuq4AvP6npX9sNN1OmhAICAG3gEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwjILAEAAAAAAAEEIlEgb8UG+AUqn1qKqbmQ1emU9JXd7W1HusRMqs2t2NiZHNAA", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 500000, - "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" - }, - { - "output_index": 1, - "amount": 50000, - "script": "51209c6a3d23818e820ed1d0cfdeb963657c8ec3277b7d9b865c78d7557f5dedd6a2" - }, - { - "output_index": 2, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" - }, - { - "output_index": 3, - "amount": 50000, - "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" - }, - { - "output_index": 4, - "amount": 100000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" - }, - { - "output_index": 5, - "amount": 77000, - "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" - } - ] - } + "description": "in progress: two P2TR inputs - not signed", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIPbR/ouRr1hSHGJHuXqHzNlOWKz58A1jvYKRD6phlnqmAQMEAQAAAAEQBP7///8BFyD20f6Lka9YUhxiR7l6h8zZTlis+fANY72CkQ+qYZZ6piIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJE4S12vti3TQ+tTlA+04p72BDQ8PdbjLC/k6MAlfLt6SIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNdlvJVFySGTHrAEpuPL8+qBWY/0hblnHDaySzV/zkliEGEUnjMrLoxbgM4BGTCTntz1p6wDOgXG3iNtPmNelVwAAQ4gK5A3/0HdF05VIvD0BFw/QENiMq8mANTaXJ6hPMPKtLUBDwQAAAAAAQErECcAAAAAAAAiUSAIUaOIXmXuPu/5yBE/NP8pSPzfBCjYaQg2AAvEBr8snAEDBAEAAAABEAT+////ARcgCFGjiF5l7j7v+cgRPzT/KUj83wQo2GkINgALxAa/LJwiHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDSjbINyPW2Vu9Kj30Oc3P1YxTcCkU9gEs0Lu8CcCev88iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEBXg55SSsTUzFX1NOCvsHoa00U7QiMv7Fwk/JQw+DF7ifH5iyyyaNGyHc4JzOCFQ22gWmt40aBVNyOmrmf3mF2lAAEDCLj5AgAAAAAAAQQiUSAeUXtpy/8s5x8+nhztxM4/8a8BgeS/1nZXVe6xwk9vFQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "909ba5dd602d1ec5af537138dbd5e297b858bd020880b1950491fcd01e03640f", + "public_key": "02f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "5120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "amount": 100000, + "witness_utxo": "a086010000000000225120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "f817a924599386baf940c8fe0b43fdd84905ba02edced1781a9312a55de7119b", + "public_key": "020851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "prevout_txid": "2b9037ff41dd174e5522f0f4045c3f40436232af2600d4da5c9ea13cc3cab4b5", + "prevout_index": 0, + "prevout_scriptpubkey": "51200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "amount": 10000, + "witness_utxo": "10270000000000002251200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0244e12d76bed8b74d0fad4e503ed38a7bd810d0f0f75b8cb0bf93a30095f2ede9", + "dleq_proof": "d765bc9545c921931eb004a6e3cbf3ea81598ff485b9671c36b24b357fce49621061149e332b2e8c5b80ce011930939edcf5a7ac033a05c6de236d3e635e955c", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034a36c83723d6d95bbd2a3df439cdcfd58c53702914f6012cd0bbbc09c09ebfcf", + "dleq_proof": "57839e524ac4d4cc55f534e0afb07a1ad3453b42232fec5c24fc9430f8317b89f1f98b2cb268d1b21dce09cce085436da05a6b78d1a0553723a6ae67f7985da5", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 195000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "in progress: two P2TR inputs, neither is signed", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/AQMEAQAAAAEQBP7///8BFyDIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvyIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gK5A3/0HdF05VIvD0BFw/QENiMq8mANTaXJ6hPMPKtLUBDwQAAAAAAQErECcAAAAAAAAiUSBDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFuwEDBAEAAAABEAT+////ARcgQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsiHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEC5Xp63LAY2PsxVOgMFLl6UJlLQjVoQeqfwTFwYUQA5jciHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaED3+jgd4gs7RZxuQmxiE9QXUwjySCpE4zKEIyYk1Nr9VzKZvzrxarMCxWJjY6N9RIcH9+eh6+oGR7zNSGIDuyumAAEDCLj5AgAAAAAAAQQiUSDLH766UNBuv/tpC9qdX/Oc4vrbT87clmMu/xukHMDAewEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "5120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "amount": 100000, - "witness_utxo": "a086010000000000225120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "2b9037ff41dd174e5522f0f4045c3f40436232af2600d4da5c9ea13cc3cab4b5", - "prevout_index": 0, - "prevout_scriptpubkey": "512043a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "amount": 10000, - "witness_utxo": "102700000000000022512043a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - }, - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", - "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", - "input_index": 1 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 195000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "script": "5120cb1fbeba50d06ebffb690bda9d5ff39ce2fadb4fcedc96632eff1ba41cc0c07b" - } - ] - } + "description": "in progress: no ECDH shares - no PSBT_OUT_SCRIPT", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1ARAE/v///wEXIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1AAEDCBhzAQAAAAAAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b716cc8d556fc8223cdda82e02fbc23375ba3829243b5d18351049db291b2fab", + "public_key": "021ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "51201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "amount": 100000, + "witness_utxo": "a0860100000000002251201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "in progress: one P2TR input / one sp output with no ECDH shares when PSBT_OUT_SCRIPT field is not set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/ARAE/v///wEXIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/AAEDCBhzAQAAAAAAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "5120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "amount": 100000, - "witness_utxo": "a086010000000000225120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [], - "outputs": [ - { - "output_index": 0, - "amount": 95000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] - } + "description": "in progress: partial ECDH coverage - no PSBT_OUT_SCRIPT", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFO7NbLUN2ovu8TI7muLmalmr1RuJAQMEAQAAACIGAmJxuxCWVhLlXjqEIY6BwmactddNpI0ECM6YLhFs21SWCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMrwowrVk+NVZLgRwhi1mHG2yKYRNy1VrXiuF89DaO8viIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNs44LHj6uB04ThzwniZHOkQa1QBGcUaeBZdJY6GfbQAdhUqcsXUsWh7zhL1v4iWM9qk8dajDT2/xCiDyUw/A4UAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEf8EkCAAAAAAAWABRGq/EMr8qEgagROk4qKHaDM1uW/SIGA9qRfwGDugOe4a51q3NR0FWnxp70pD7rnMBr0+/Prn+sCAAAAIABAAAAARAE/v///wABAwhADQMAAAAAAAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "e3131342d1a1a5963d3b67fc72ce22d751e369e4dcfaf86522a48de7c2771449", + "public_key": "026271bb10965612e55e3a84218e81c2669cb5d74da48d0408ce982e116cdb5496", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", + "amount": 100000, + "witness_utxo": "a086010000000000160014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "5989a3a28fa1adf098966366f8e1af40de6563289b173b691ea49ecbe3a05fea", + "public_key": "03da917f0183ba039ee1ae75ab7351d055a7c69ef4a43eeb9cc06bd3efcfae7fac", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "001446abf10cafca8481a8113a4e2a287683335b96fd", + "amount": 150000, + "witness_utxo": "f04902000000000016001446abf10cafca8481a8113a4e2a287683335b96fd", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "032bc28c2b564f8d5592e0470862d661c6db229844dcb556b5e2b85f3d0da3bcbe", + "dleq_proof": "db38e0b1e3eae074e13873c278991ce9106b540119c51a78165d258e867db40076152a72c5d4b1687bce12f5bf889633daa4f1d6a30d3dbfc42883c94c3f0385", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 200000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] }, { - "description": "in progress: two inputs / one sp output, input 1 missing ECDH share when PSBT_OUT_SCRIPT field is not set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEf8EkCAAAAAAAWABRGM9WcrRNDR5ly4MmWkh0KXa22XSIGAkOg1A6d4IgnlBYXUrrkK6kJUnhCCfBjQw8K8lY1SoW7CAAAAIABAAAAARAE/v///wABAwhADQMAAAAAAAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", - "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", - "amount": 150000, - "witness_utxo": "f0490200000000001600144633d59cad1343479972e0c996921d0a5dadb65d", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 200000, - "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] - } + "description": "in progress: one input/two sp outputs (different scan keys) - missing ECDH share for output 0 scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQOVZIBK8xbNFXvXYV0WU5Cwf2XsVl3XgoNUhXsodj2g1SIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQPMdrcFxpu0VlJBw1Jg78iuPh0VOYjxOFKlnxm5F1e0KJ9pfF/4YeSQ/eFQhLxqHdrEcmpiOjAei78h60B2AioIAAQMIkF8BAAAAAAABCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIJ+BEiwq1udczOTQLai4fg+bC8QFSZoibxiRh7EdMyURAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", + "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", + "amount": 200000, + "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_result": "039564804af316cd157bd7615d165390b07f65ec565dd7828354857b28763da0d5", + "dleq_proof": "f31dadc171a6ed15949070d4983bf22b8f87454e623c4e14a967c66e45d5ed0a27da5f17fe1879243f7854212f1a8776b11c9a988e8c07a2efc87ad01d808a82", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ] }, { - "description": "in progress: one input / two sp outputs, input 0 missing ECDH share for output 0 when PSBT_OUT_SCRIPT field is not set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQMJH9SAORd/RNe3npYWiEnGLrP4eADEZ2fFCo84+Y79FSIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQL4acjrvVeiYG5lZmpvBKzj4froBWMxwZokPImnK3kY7dzQal9KScZZNAcAkHMMi/VOQwpuZFg+CbzKTZYmMvwIAAQMIkF8BAAAAAAABCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIENYHfbIefmqrcU2YN6xVrnxIr0a7KczIDvOh/zx84buAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 200000, - "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": false - } - ], - "sp_proofs": [ - { - "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "ecdh_share": "03091fd48039177f44d7b79e96168849c62eb3f87800c46767c50a8f38f98efd15", - "dleq_proof": "be1a723aef55e8981b99599a9bc12b38f87eba0158cc7066890f2269cade463b77341a97d29271964d01c0241cc322fd5390c29b99160f826f329365898cbf02", - "input_index": 0 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 90000, - "sp_v0_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "output_index": 1, - "amount": 90000, - "sp_v0_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8", - "script": "512043581df6c879f9aaadc53660deb156b9f122bd1aeca733203bce87fcf1f386ee" - } - ] - } + "description": "in progress: one P2TR NUMS point - no sp outputs - not signed", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEDCBwlAAAAAAAAAQQiUSDcNKvDid4sKA9VVlxuyYhrMmNs+dBvrlOr5C89eH+viAA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": false, + "script": "5120dc34abc389de2c280f55565c6ec9886b32636cf9d06fae53abe42f3d787faf88" + } + ] }, { - "description": "in progress: large PSBT with nine mixed inputs / six outputs - some inputs signed", - "psbt": "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", - "supplementary": { - "inputs": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", - "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", - "amount": 100000, - "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 2, - "private_key": "e6db4a04e2fc29745ea1a9dcf1fed7449c8228ffe0503d8171e64126d5399800", - "public_key": "02655ef5daf05d28d1ca73ba8e211300db2b70416737183e0fa8c355ee4c1cbac6", - "prevout_txid": "d041c742ca364472d1a18c7a8eae07e6e904a9ea1b85f198525fb83ef276e343", - "prevout_index": 0, - "prevout_scriptpubkey": "00142307fc774ca174b42ada814bc2e6e444ff3d830c", - "amount": 100000, - "witness_utxo": "a0860100000000001600142307fc774ca174b42ada814bc2e6e444ff3d830c", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 3, - "private_key": "f5208ed67b0019ba4e306aff029d247931e0dfacd1fe6e69091bc6bc70a42619", - "public_key": "0303a0f4528d264e8e95256634b94414e2748f72962704fe57e8b0a2cc44d2383d", - "prevout_txid": "52262cd5d402bf32616d07fc03286a8f7fe78af7ac411dfff41655ddc1011e6f", - "prevout_index": 0, - "prevout_scriptpubkey": "00147018bce965288d8bf0ccf3e0ec48b6f1dbbfe548", - "amount": 100000, - "witness_utxo": "a0860100000000001600147018bce965288d8bf0ccf3e0ec48b6f1dbbfe548", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 4, - "private_key": "0c19c34dc1005feb5ca60104d20472f7f2f97bd4d521264618196bf71155b20a", - "public_key": "03a8911beb5a48fe119cb015088cf0c3a118cf026772448972d1b70c764ac59412", - "prevout_txid": "e298eaf24fe1ca68b41e4b6b83cc3d91ced99c6e78d5b992cfb15771b5457064", - "prevout_index": 0, - "prevout_scriptpubkey": "00149332bb020cb03d49eb4d04712c1cc08e2b06d8d8", - "amount": 100000, - "witness_utxo": "a0860100000000001600149332bb020cb03d49eb4d04712c1cc08e2b06d8d8", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 5, - "private_key": "5aaa151cbdeb566911784d166b01ce57f35993b98f96846efec1cfefcc0d8f56", - "public_key": "02d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", - "prevout_txid": "1730833ecb5be01362d7149522604484216e1c7b18cf313d1cf1543ef85df3b6", - "prevout_index": 0, - "prevout_scriptpubkey": "5120d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", - "amount": 100000, - "witness_utxo": "a086010000000000225120d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 6, - "private_key": "d92c1506167b3a00a21f4d90d7b5ccb4713c00194aa66f9c7deb162c467f9643", - "public_key": "02d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", - "prevout_txid": "e93532e0eda39c4d39da2d3f91d14529bc435fc2efb9196e25fbaac4b4e89b81", - "prevout_index": 0, - "prevout_scriptpubkey": "5120d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", - "amount": 100000, - "witness_utxo": "a086010000000000225120d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 7, - "private_key": "d8bc8d0e1233a97133f3573d6dceb6736e8b6d2e4839925145022ea3efdad8f8", - "public_key": "020500f167cf669e7dac39e6aecda1f28c66b78ec7097eefef25d54f7be785e7f6", - "prevout_txid": "b6368bbc330cddfe9e2550edb7dfc15ae74cac9bcc7d967fe81e6f27f8597b1d", - "prevout_index": 0, - "prevout_scriptpubkey": "a9140df101357f73e6658500cf56f3a132d7bb8afbdd87", - "amount": 100000, - "witness_utxo": "a08601000000000017a9140df101357f73e6658500cf56f3a132d7bb8afbdd87", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 8, - "private_key": "81e30f5b5d049bdf5c5bea9c3329bf57cc8b473240182a9f2a6eee07435bd54a", - "public_key": "03199d2f155f32ebb167aeb0ccca6e5afb7340898df1b7ab9936500f6d4391902a", - "prevout_txid": "03bceba5379d73daeafe677972b03dcf7ef30b7f10eaa83ad04bc0bf00d8b2f7", - "prevout_index": 0, - "prevout_scriptpubkey": "76a914569bf311e68a383767b43f83042dfabe60093ede88ac", - "amount": 100000, - "witness_utxo": "02000000012a34ac1b0db77a8198c1e29002cc47bbfcd6ed830960304d2c9a3ab548486b5d0000000000ffffffff01a0860100000000001976a914569bf311e68a383767b43f83042dfabe60093ede88ac00000000", - "sequence": 4294967294, - "signed": true - } - ], - "sp_proofs": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "030a18b9bb4199b89330eb17f8ee5ac786e0853dcd2f3ccdf1744b97ce4ede053e", - "dleq_proof": "001383d4661be8725ef29048f48c911f89f5f34317d7c0c0acc60ef65f1b52bfff7a96d8339b625df83abab57aa273edcd9a35c794dacbb1c861171bb267075f", - "input_index": 0 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "03fbd173d9c48d58c5022426d05278bca17b9a8e2282666901a1b00b9e04b79949", - "dleq_proof": "c05da410487cfaec378febe6af5005e3ae6c86236818b0e55b214017eb5073edef40179575b5dcdaa9063491ac8b83fd0624d4177a4d2dd4994c4640d6b8ccde", - "input_index": 0 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "037372d179f4f628da82ccbd4e4217bdb0809f1417c9abeaa35fa805d48ad6554c", - "dleq_proof": "a6872d4eb119fe2af70953f752a22236b54a3b57f70e511f10bd8b42ff56b5acf6365093c480ea9f13776784945b59318ac2927d915aae244cfb683f4188a3a7", - "input_index": 0 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "02f6ae7b8aac9a0f9c9f04eab484062172df2e38d9f2f6ec31b404bb5a286aabf0", - "dleq_proof": "334aced8106ebaa4287daca56cca26795f2d2a739784cf6b734da3370757f499e120c0e40be40436cd74c4ef26905706f52fa7fa6e8e76451e8583783051a843", - "input_index": 1 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "03a6a89b1b986a995533e17bed64500b541bb0d739071efe2ae2b7efb0a0ca6bcf", - "dleq_proof": "c34a6a2940bbe9a7356c1cc6ffe358dd4441db58897cba99c212eb75285e7da1eca11c792c97a380493345ab224de9d94c2b36ee8526ae23528171a3231de733", - "input_index": 1 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "02b1d3ed2fa4bc316a08eb1485fa75ed7dd54ca7a9ae18d0c4a17da93f30c385d5", - "dleq_proof": "d841a373ad2896b972b8cfea1634ff14a30f80d84cfd6ef18893397b8f346c80519c9b161a72244d0e9b64e5436c98ce9dd4e17a0728fc997b5c7bcf39cecb68", - "input_index": 1 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "03bfb86253beb96f58b8c469e442cfcf9f78a5413a95423be8e686764f2fa7bd3f", - "dleq_proof": "52dffbf0095f29b1de24c9d68d549d1c54bce6900454fe37fd10f5c903dfee85f7bad8a72ada8e52cd9092f51d9e90b5a7e4f36ca04df98e77fbad1347305bc7", - "input_index": 2 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "03df706ff26d672fe50c6f56a2ca1e7174e75055c920bbd337e1a7d6bf2826f6dc", - "dleq_proof": "fd2e8c22b9b672d3bb9e26d4b6da2dc3f125455a969fd8e2b2c1ba791076ad71b38c01f9218c3d6776fd895d2f3067484996d85e268390c2b433e6c4b21891f1", - "input_index": 2 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "038604aa8cff309dddf49b1f366f89c269616587fc41db608540f9431536f6646f", - "dleq_proof": "93e1e5d4888bc1cfe02eecfa9dea144ead84f23a10fc1a301103c1e56393527b63417c6c4a5af45359ff8b6e179af73978e4d62e862eedd2a286f5278e4cb340", - "input_index": 2 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "02980bac7264e14bf820cc435b69a78df726c177eb026f1b81b52de811272f58eb", - "dleq_proof": "38e03463b6450dbd051065a812a6f2631087f7951e46ac84e66da811755717c093180e4d49827b8c097ca7093fe92d393f95a5d7ad849a41802dc4e4558abde9", - "input_index": 3 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "038029998c73c2b139db75557ec3011ec65ecd212447963006571852a3e92289cc", - "dleq_proof": "381ce3c1ac9fc7f6a51536456252984768e8fbd014070239f4cb13b16793c74cc5ed677c8a7eacc173e988d353a3f289c7e2141db7a4b4145c5499ec837f36ae", - "input_index": 3 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "03a27d9f1fa53e43f70835a6990954b78a35f747066f7b82b4a9ea82e8bb5e06a6", - "dleq_proof": "732aa0957a9db2c759e39aca5d0167ef13d2a34a43c812e9cc9d712d458f7b2285da7511eb16f61f9600d20be4e94dfdd2bc3ae37fd943fc34947dfc3fdc6797", - "input_index": 3 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "027eb7c1c4afcd7e62ab6ad3d2ba2733a3745220641f91903ebfe7bcc5dbdc6b5d", - "dleq_proof": "77b1572336d9bd4e2f73411eb8f6a96235a130f444cbeb07a489f447921e37489d71fd3db28a0bbaa35b88c37b7579ecdbf6ce1638700db81dfc86bf79cd1be7", - "input_index": 4 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "02bef4738c6f327f1724b1407988959cdf2bd19210894bfd043535b61138270818", - "dleq_proof": "0a584927102820b7b6cad6bcfb031a23a37312ad87d23f1cb5a8359be2d5ff39b6a2a2fe37cd0d53ee347f13e6b3525769b2e789f0699cb985588eac2daf10dd", - "input_index": 4 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "03ca88bcdb6d1f5291e90c75d3da601a8bd29991eabbf7f94b2f39483e3858c9a1", - "dleq_proof": "5d0de8a27f0d528802cf3354a1af507bcf0fed419da641c9c0807cd754e07af8790b511c705d5fbf63305ab22afe0497facf070b5afeafcee3a6900547767756", - "input_index": 4 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "03802b69b360da4585512b1cf967b184010226d75ce5b762e77a0128bcb068ccbb", - "dleq_proof": "103ae05c10e43298376c3fee1dc5f0d04389f4f20af49346d48ead324d615d6f28fca0a318445130ea56a862019b2de0c2637db3c418c0b074b58548ae8b20c9", - "input_index": 5 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "024f2a15a4b15a6b78f0a632fc7fdf112929f64bd4dd14f67a63cf4fb8f325a204", - "dleq_proof": "8f223de27986dd8792a03d9d5b662323e8697830ebabb67363881fe72c86482ae61a09268d083b8354cfc2bad35c148eeb291af622dd460634606332af1b8297", - "input_index": 5 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "02407615505ecbdea881312504eef6f4681a26316ef73d33537a7fd793f4658ea9", - "dleq_proof": "f055990738544d099b159290e7f5442cb91226260174aa9d8c1c8310b7cb01ce2b94cc5d2b8fdf81667e02fb796db0e5c27877de0d41a2a0e709b01445baf296", - "input_index": 5 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "020faa3a0c31ae7695e769546e30aa782abd31fb681b970a13aa35cc21dfd13800", - "dleq_proof": "e4074a6ec893eab806d5df9a74ed257e785ff378643dbaa7933c7813a7b5f6c90ca82b62539f39b38c2c72fe5cf81c22a5e641f673644f6c486b3db577464463", - "input_index": 6 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "02153fcdfe96ae70363fd1542646d309c2132b8325540e3dd7f88e37f9796079a6", - "dleq_proof": "4320e9f60fd3c2a6f737aace546c23b0c7d76e84159c0ad289c1df4c0f8a500e51209f296f9d7d223a1d292bd41d266faacb1be843becf4b706eb15dba702806", - "input_index": 6 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "03f313f8f475eb01e3cecbc0eaac2f726d29032c6ff7c3ad6cc3bf8bb10186527c", - "dleq_proof": "3b29e12cf693f272139f74452f2bccc2bcd07432dce8fb107354c1458a12a47c8544d2d6ca1e33bce0578b6508cf8a5934673f9fc435a5f84a22a54b5adcbcfc", - "input_index": 6 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "026f027b235a7593ca8943c6d7b7e37d92eab339617f7f0c344106c58dd0cbc6aa", - "dleq_proof": "16b58148f7baff783e4310f185503fe92417dba43b966c83a2184322cb1f20424cb9d040ae6a1aea4e7444bdc786258a975644ce1a0195564c2b9fc3c606a292", - "input_index": 7 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "02fe7841cddfb46fdb2ca9bde56c9558c2d1b36121665659080224e24031438408", - "dleq_proof": "88072551662c3eebee545f188b8dafc682973a2f218e7ca07fc8e42ff57a1134630449fd703177d7a12d0c9ced024844dc1b9e0ecad67587dd5c479431b36a1a", - "input_index": 7 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "020611450c6c1944ecdecb78f61816c767fba4368f21f7e9b169779c76f23cf4cc", - "dleq_proof": "4ab36bdd69eb1cd0d4b0aeae403dce4db5228c5ba3a291dc725de23382d1736d265d7bc33f83690a5ca5609719f19e81952d4c8d5e288fd0cb8c6411104b80a3", - "input_index": 7 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_share": "02fa1ced932598a27fa28410b955ea67479b5a4033b69f2c99e4e26767bba0a556", - "dleq_proof": "a0948c517d70976c0e39ca67abf19e7217040dbe172bb96534133e6ffa3941c1659416f540662b7561efb70064b4d71a9b17b63bc563f630db4422f273e0df12", - "input_index": 8 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_share": "02f3c175b08b207637616aa74e67baac1a1807c94bce70800f76f5b17b52c0082d", - "dleq_proof": "99225658fede7a8c2437eb3821bdc9d3700abc896e8b6dcef84e29347b78bc2b03e6da33836e4f40767390c36644ce016b36b1d546963540fa51d0b0407db6d7", - "input_index": 8 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_share": "0300e0fd1710dc56ad7c173aa9141d731577009bc3dffcba8576a48e77ab34d970", - "dleq_proof": "ee0aaa65ca73ccc547b31c2b7ed2ae31a4f4ccdaea73f2add24630d608ede9aea5d808688186ebca42b877efab13f35e60f210d4f620602f850fc0731c201e91", - "input_index": 8 - } - ], - "outputs": [ - { - "output_index": 0, - "amount": 30000, - "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", - "script": "51201afa5d88188cef9b91b3f1002b11e0f9e94ad3981978c4d12a0605564c081233" - }, - { - "output_index": 1, - "amount": 30000, - "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", - "script": "5120cabf7e4a0de424ec9bbadd7f7242cce7673e1701f49d6a19a97055da332b1324" - }, - { - "output_index": 2, - "amount": 20000, - "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", - "script": "51204aadc9e0a590d21e0c19cb2024f27140f9b19c2a1282d50ea7c5f45eb03fd4a2" - }, - { - "output_index": 3, - "amount": 20000, - "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", - "script": "51202fa43700ea1d28fd7ad4dcb332b3e5e5a0d8cb54258f6661c4de0377d72804e5" - }, - { - "output_index": 4, - "amount": 10000, - "sp_v0_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0", - "script": "512051986faee319436b51b38409c1b300f4396e2b32e3cc9a12ae2a4be135da6f6e" - }, - { - "output_index": 5, - "amount": 50000, - "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" - } - ] - } + "description": "in progress: large PSBT with nine mixed inputs / six outputs - some signed", + "psbt": "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", + "input_keys": [ + { + "input_index": 0, + "private_key": "9f4bfa7f9f0de7ba51687335600908649ef7274ffe5fea3664d5215281cc4704", + "public_key": "03b5707469f896f18340858fa794cdd9c1a3178d055135ba3fd0bf51fdfeb1ab24", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", + "amount": 100000, + "witness_utxo": "a086010000000000160014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "6ed56f21b429a0eb945d192891eba72cb8dd19ace94d6e132b31eaf7eebd52ff", + "public_key": "029383678685b551ddec9a3225691f9feef8fbd2d46aec439fbfdeb3420af23211", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014761f52b898187b18a36bf94e37b0181b419f42a4", + "amount": 100000, + "witness_utxo": "a086010000000000160014761f52b898187b18a36bf94e37b0181b419f42a4", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 2, + "private_key": "d9300a43035f31af0b31d506fd8972532a5808204abc878f3899ed4f7ce17a3b", + "public_key": "0369b0d7caddd109da8fe4ae8f051b555e9e8618c04c438d1773208365e76542cf", + "prevout_txid": "d041c742ca364472d1a18c7a8eae07e6e904a9ea1b85f198525fb83ef276e343", + "prevout_index": 0, + "prevout_scriptpubkey": "00149e17709c62841fcd79bc6df488193a51cf29c7ab", + "amount": 100000, + "witness_utxo": "a0860100000000001600149e17709c62841fcd79bc6df488193a51cf29c7ab", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 3, + "private_key": "b6b03ab16f91b8f280946739891052e20b3a1daf0df185fb15f32cf4d68074d9", + "public_key": "02fba64d289102989bef638e918c1fdfdeb520888ee40811e08a55f361d251a5f1", + "prevout_txid": "52262cd5d402bf32616d07fc03286a8f7fe78af7ac411dfff41655ddc1011e6f", + "prevout_index": 0, + "prevout_scriptpubkey": "00143e9c24057ca731119cf36726e24032f1a4f77970", + "amount": 100000, + "witness_utxo": "a0860100000000001600143e9c24057ca731119cf36726e24032f1a4f77970", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 4, + "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", + "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", + "prevout_txid": "e298eaf24fe1ca68b41e4b6b83cc3d91ced99c6e78d5b992cfb15771b5457064", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "amount": 100000, + "witness_utxo": "a0860100000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 5, + "private_key": "30f3daceb10c037adaa918f7bd46548fab677d405212a19e3163be5998eb9495", + "public_key": "02e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "prevout_txid": "1730833ecb5be01362d7149522604484216e1c7b18cf313d1cf1543ef85df3b6", + "prevout_index": 0, + "prevout_scriptpubkey": "5120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "amount": 100000, + "witness_utxo": "a086010000000000225120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 6, + "private_key": "37de74c28a47ab7b32eac140a9e89d42cde05e9d06e89c2a48b2f8673cfcd883", + "public_key": "022880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "prevout_txid": "e93532e0eda39c4d39da2d3f91d14529bc435fc2efb9196e25fbaac4b4e89b81", + "prevout_index": 0, + "prevout_scriptpubkey": "51202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "amount": 100000, + "witness_utxo": "a0860100000000002251202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 7, + "private_key": "81e30f5b5d049bdf5c5bea9c3329bf57cc8b473240182a9f2a6eee07435bd54a", + "public_key": "03199d2f155f32ebb167aeb0ccca6e5afb7340898df1b7ab9936500f6d4391902a", + "prevout_txid": "7d1b6dff574e04aa401c3efcda2a1393b4db831df2ce2c3033da689fb1359a69", + "prevout_index": 0, + "prevout_scriptpubkey": "a914272948466e5f57d55a702da2efc34a9686b5e64687", + "amount": 100000, + "witness_utxo": "a08601000000000017a914272948466e5f57d55a702da2efc34a9686b5e64687", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 8, + "private_key": "e56f2b0c24fa6b637b9f53b8fca46fd20293e511d7e20ca3f46eff717779363d", + "public_key": "035fc1c4bda637ec8e51fdfcdc42a5155a5aa5c8b8e0ae23af087e3d856b0b7c9a", + "prevout_txid": "b7103556a1298f214fa132c7275fb76d1ff3247d1d39b3d661ab493f814c60e2", + "prevout_index": 0, + "prevout_scriptpubkey": "76a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac", + "amount": 100000, + "witness_utxo": "02000000012a34ac1b0db77a8198c1e29002cc47bbfcd6ed830960304d2c9a3ab548486b5d0000000000ffffffff01a0860100000000001976a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac00000000", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02a9998fb163f5b6c1ff8494cc696a12d6caf413d842fce23ea85a844d331d6c73", + "dleq_proof": "10f2d556284e571184fd2a0d47f33fb4ba2aeeec0ddc221d1ce3433c7ea4e08f5c836ee8103809aead22d449d71ef1ed486cb911a61d5c4a85a3e9db383365ed", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02d1f1d3ef8bbbe74159b7bdfd30005833f58afba0a2d6e146e892e26effadbfe3", + "dleq_proof": "a7dba9ea30477fd1f6339e12017407c2cafd391b76cf985f45ac27d0e84157ba5dfae1741b0c1c8f3e4215f13843654fe23a66ab10051494adb470f36f12a509", + "input_index": 0 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0369c01d7fd59cac879e1e44656e0523276ebf890f5bdc86176023baf603e3cef3", + "dleq_proof": "65fedccbb3e461fa84baf78e753b6da50cd358c505426a554d1e5861f90a257445fb63e63188da1fc2a7dcf3d6c2948e8917659f757a8814c19a71c66f75bedd", + "input_index": 0 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "03316576e6818d53a2feb756dc34982f1e03df93acdd6e4c86ad04d02d6e02ae5d", + "dleq_proof": "91d77475afa08026e55643c96d65e845ad4a8c1e916e733bd727b9c7957cff1de61dd300ec31b5efca68f58f51ece75328d35777090b3f818750d25f5b1fb11e", + "input_index": 1 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0302b1bb46a25b2cf2c5a22679482419fd9421ded9dbda76b8a3bf79d57371d706", + "dleq_proof": "0846af5d950e5cbca9293e7e5b919414b02668177bb8ffd36f44e634614943d6a522cfac48bc5424b901c5f16483318df37beb9a811ff1fcdb660a4470f90b22", + "input_index": 1 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "034397d2645deb54565ebcac155825fe3104defa53611d7efb20cb377b01340423", + "dleq_proof": "2a51c2f80fc0836fd6d934cc030df5bd050a80ff2d6c5f71a30c35b88b18e4709d9d0656809b63bd47c4269e0dae82973dfc83fad55acc1de9ada6d4a8d41820", + "input_index": 1 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "032e8d33e94248f7e4a9574a63598e58066da9df43483fd183fd8fe0ac6c882097", + "dleq_proof": "c5b2c00e3a86c89caaa5fc68877c6d106510d5da37097af9d113f68bfefaccc555aa986c9b9a3fa1d7e65ca90aca2b978ac048b35ea1cfdc7229b60546ca1c6e", + "input_index": 2 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "035394d74a065a16d5c0a4a2f949e8af43c42aaf368caaef9241fdc55515098ab6", + "dleq_proof": "c30b78f3f8260b5dc7264ae9352098db17c0d0f3f856623da59cfe307f5feb3a24d150dc656852a3eeca71f68997c826dcc32f989f7b81b6ff92afaed361ac82", + "input_index": 2 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03b649141a26536130bdbddfe0643441cae2ef1897d1e5598badd3ec7d576f06c3", + "dleq_proof": "2f0c488bfc17862ab2dfa7b71c250c716d5f2aaeac8ac135906e21f1dcacf7af17e5070d9ebbe364ff870b73060a5451fd44e2f8ad6fdc68215d82acbd04e6a4", + "input_index": 2 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02e553175fd8c7e0093203c88c09021d9eb8d988a8f16090c0c63e69128ec003d1", + "dleq_proof": "2bbdbc723ac50fab4f424c050207b320804bc8d482557a5aad0ee7b2fb96789fb9133272048df40ee5a0a56902a7a6e318206cf9ca8db044d49ecc5f33a0f035", + "input_index": 3 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0324b1acaa169c4287a2452e691cbaaea2e74c1851515b34132ab449c931cf2d7d", + "dleq_proof": "1b19afd68d2c68ffe5225c6a0a65ee553741962ef7c316bfdd4c66c790bedb5dc00b449ca4bc285c6cfc1f1d77e80937792e25b3279684c968887e6dced150ff", + "input_index": 3 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02b335b89a957ad90100236fe18b21fb9cccf5306e1e444b073a795e278654012c", + "dleq_proof": "5ab4e08583f4a89dc9187e4811bac1a32c9171b12af5cf3dd584cc792e757709c3ea094dde0e410aa1be478301ab54143cdf0615f33c12df601d1bd798c7b4c1", + "input_index": 3 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02474079b71677a38273a2fa3fedd3c04c3fd1a9123ce353d66cdc13ccdc49d0f2", + "dleq_proof": "c1b2e788abbf47a4d10bc5c82ef7b7d4aa60c67951dcb8a7162f32bc87ac0432d4d8a9af36bf8a3a958e333a456e4fd58706db7adbbba23e5e9802109fbd44a8", + "input_index": 4 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", + "dleq_proof": "765cc81e38729a685de9e075a75824e6059df65abe85b3fadcccd4364e48f572b87f7136786ec4b13ef4b2c2529ebfe3f7ebb4e21367044312285933dea3ae78", + "input_index": 4 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02f6628d4962209da22e07a74638f3f557902c2c10921a2d61b6779e7a4e25f1b7", + "dleq_proof": "e9021ea136236a1f0171672814a2f47e5bf3c8929760cbc3b6c1021a4a56c1f6bd263eb0bfaaa8904d2970e666f23699555ee22d6965ce5cacfee0302dfab3ba", + "input_index": 4 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02dad1881c2ee6a5944149cdaa114f2d87cbd3f685f1663fcd166b71b3703de4f8", + "dleq_proof": "22f40fe4531a31a6c83773b081f22e5b3bb6d3e012af9ee6ccc4d17a0dc6c66c886fe2410d6920936ee060e9e1c8cafb46ec1112d7f061f678776007f93a8cd5", + "input_index": 5 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "03f1808ad0bf8b9d887cfdd5b111ae0a628f776b8c029aaa12e8d6bdafd647e329", + "dleq_proof": "fa16d0202219078c5a28df26df6fd4d19bb307e1f45427db5a3f82b6df1698e0522d9b1c3c19ebad3987de2a4054927df61d8211883be161243803755a3f567c", + "input_index": 5 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0223bfe0b34c1ddb81ac981cbe5b65df3719039dfedda3b1509deec64052d5341a", + "dleq_proof": "07b441f0069b3311f2e4291acf83271b43b9e55c3c0f901d0ae9d8c4cf03eb28fac9e1fea3d4c70ed469c0c2d61d5dc13c8226b1c2201080991da67b5f01d8ec", + "input_index": 5 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "0376fd008d04869342a162827e8357feac6450ab27002dd0abb0360dc6231640c2", + "dleq_proof": "e389ade2894ff90f3d9c44ff33c23544c9492404108c020d9c4dd2f36949f7d860bad1de203ad9ece0b25dfda87e479d314c9cd23bb164e4daeaed9a8c80f18e", + "input_index": 6 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02d439e9f066bae9f9b66c9d81fb5525e4906039deefd10d4eecadeb967d01de6f", + "dleq_proof": "00da40e0d6a28c8ba41d97350ef30a37aa95ab7beef2f2c305ddb9936fa9a90f53ba900cabe91301b4643ab17abe722233c0f3435b925809612776c2743daf91", + "input_index": 6 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03f273e108ec04d95570d3eb0055e1a4cca0c07b9309300d71ff2d50c101c406cd", + "dleq_proof": "c34d359e3f728bccc5f22cbcafac1ada0d63abc59ee6cf072db13885db6e68d5fb1ea9ee32f9fa886c4c1aac8177b20681f8a7ce180f159dd91d6d6aa99a2da8", + "input_index": 6 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02fa1ced932598a27fa28410b955ea67479b5a4033b69f2c99e4e26767bba0a556", + "dleq_proof": "70db376844a40099c673f14fe31c52ad36d7789ed4eac5954a81fd9be97ed83556335331ebb7ee362dfbc4e79f75921074a9dbadc65f353b4ebbdb10f86b87f8", + "input_index": 7 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02f3c175b08b207637616aa74e67baac1a1807c94bce70800f76f5b17b52c0082d", + "dleq_proof": "4b5f862f2e5487d67d1b6907178f2b74e2aa1485014904fc218870bc708291e6f73ad92055358c04ae27138abd5ac9daebdf8609de59657ccbe20fcf47ed7cd6", + "input_index": 7 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0300e0fd1710dc56ad7c173aa9141d731577009bc3dffcba8576a48e77ab34d970", + "dleq_proof": "1d0da012864e36463540e747535e129c879c957b4078356522dcae30a15ed08b8223cd95c4bccf1f7ff18528cf3c60b044afff1ecc8c6f6aeece768e35acc486", + "input_index": 7 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02ce7f309df4cdf552acdbe6fee5b0a68744647e4d6499687f90b89c553fce6e49", + "dleq_proof": "3acbafbce204ec65922e92214799e10a435590dae0a5d3238cfe072bbd2be362cc5763af621c4a8aa454aff55bb770b5aca984eec3f3ba04c94a6f7d171c7e66", + "input_index": 8 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "035ab68574f8072c038766b5bc84bddd8127d2c35975f791a4c20f1af780254720", + "dleq_proof": "f3a0b179c2a967f5edd8c941d91de3091cfe896e3d91fd9631c170e27dbff06095d2e2a1a81ad3f55d247bb18234161a104aeb561d5607c997a7dbf00bde2c48", + "input_index": 8 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02fd39f90bc4b09db395596c4962b1f8de00df54ee6cfe4005770c9dc56c3ab425", + "dleq_proof": "6c0b06beeaa0af23271ee961776ee35394704e658dad125bd1654972cb69cdc1b19c6820680828192e26b6a7392b0a4f480e29bf38511d8821eb7caba2ff293d", + "input_index": 8 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 30000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 30000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 2, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 3, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 4, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + }, + { + "output_index": 5, + "amount": 50000, + "is_silent_payment": false, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] } ] } \ No newline at end of file diff --git a/go/bip375_test.go b/go/bip375_test.go index 67b4080..47e89c0 100644 --- a/go/bip375_test.go +++ b/go/bip375_test.go @@ -9,7 +9,7 @@ import ( "testing" psbt "github.com/otaliptus/psbt-v2" - "github.com/otaliptus/psbt-v2/sp" + "github.com/macgyver13/bip375-examples/go/sp" ) type testVectors struct { @@ -33,12 +33,11 @@ type validVector struct { } var structuralInvalidDescriptions = map[string]bool{ - "psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set": true, - "psbt structure: incorrect byte length for PSBT_OUT_SP_V0_INFO field": true, - "psbt structure: incorrect byte length for PSBT_IN_SP_ECDH_SHARE field": true, - "psbt structure: incorrect byte length for PSBT_IN_SP_DLEQ field": true, - "psbt structure: missing PSBT_OUT_SCRIPT field when sending to non-sp output": true, - "psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output": true, + "psbt structure: missing PSBT_OUT_SP_V0_INFO with PSBT_OUT_SP_V0_LABEL set": true, + "psbt structure: PSBT_OUT_SP_V0_INFO field with incorrect size": true, + "psbt structure: PSBT_IN_SP_ECDH_SHARE field with incorrect size": true, + "psbt structure: PSBT_IN_SP_DLEQ field with incorrect size": true, + "psbt structure: P2WPKH output missing PSBT_OUT_SCRIPT": true, } func loadVectors(t *testing.T) testVectors { @@ -53,7 +52,7 @@ func loadVectors(t *testing.T) testVectors { if err := json.Unmarshal(data, &vectors); err != nil { t.Fatalf("parse vectors: %v", err) } - if vectors.Version != "1.1" { + if vectors.Version != "1.2" { t.Fatalf("unexpected vector version %q", vectors.Version) } @@ -116,24 +115,25 @@ func TestSemanticInvalidVectors(t *testing.T) { continue } + raw := decodePSBT(t, vector.PSBT) + packet, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) + if err != nil { + // Some vectors are rejected at parse time by the stricter v1.2 + // parser. Skip those here; they are covered by structural tests + // or sp-level validation. + continue + } + tested++ t.Run(vector.Description, func(t *testing.T) { - packet, err := psbt.NewFromRawBytes( - bytes.NewReader(decodePSBT(t, vector.PSBT)), false, - ) - if err != nil { - t.Fatalf("unexpected parse failure for semantic invalid vector: %v", err) - } - if err := sp.ValidateExtractable(packet); err == nil { t.Fatalf("expected semantic validation failure") } }) } - want := len(vectors.Invalid) - len(structuralInvalidDescriptions) - if tested != want { - t.Fatalf("tested %d semantic invalid vectors, want %d", tested, want) + if tested == 0 { + t.Fatalf("expected at least one semantic invalid vector") } } @@ -214,7 +214,7 @@ func TestValidVectorsMaterialize(t *testing.T) { }) } - if tested != 13 { - t.Fatalf("expected 13 finalize vectors, got %d", tested) + if tested != 12 { + t.Fatalf("expected 12 finalize vectors, got %d", tested) } } diff --git a/go/go.mod b/go/go.mod index 2699793..6e1610e 100644 --- a/go/go.mod +++ b/go/go.mod @@ -2,13 +2,16 @@ module github.com/macgyver13/bip375-examples/go go 1.22 -require github.com/otaliptus/psbt-v2 v0.1.0 +require ( + github.com/btcsuite/btcd v0.24.2 + github.com/btcsuite/btcd/btcec/v2 v2.3.4 + github.com/btcsuite/btcd/btcutil v1.1.6 + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 + github.com/otaliptus/dleq374 v0.0.0 + github.com/otaliptus/psbt-v2 v0.1.0 +) require ( - github.com/btcsuite/btcd v0.24.2 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect - github.com/btcsuite/btcd/btcutil v1.1.6 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/btcsuite/btclog v1.0.0 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect @@ -17,3 +20,5 @@ require ( ) replace github.com/otaliptus/psbt-v2 => ../../psbt-v2 + +replace github.com/otaliptus/dleq374 => ../../dleq374 diff --git a/go/sp/analysis.go b/go/sp/analysis.go new file mode 100644 index 0000000..0119161 --- /dev/null +++ b/go/sp/analysis.go @@ -0,0 +1,408 @@ +package sp + +import ( + "bytes" + "fmt" + "sort" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + psbt "github.com/otaliptus/psbt-v2" +) + +var taprootNUMSKey = [32]byte{ + 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, + 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, + 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, + 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0, +} + +// AnalyzePacket builds the normalized silent-payment view of a packet. +func AnalyzePacket(pkt *psbt.Packet) (*Analysis, error) { + analysis := &Analysis{ + EligibleInputsByIdx: make(map[int]*EligibleInput), + OutputGroupByScan: make(map[string]*OutputGroup), + } + + for i := range pkt.Inputs { + input, err := analyzeInput(pkt, i) + if err != nil { + return nil, err + } + if input == nil { + continue + } + + analysis.EligibleInputs = append(analysis.EligibleInputs, input) + analysis.EligibleInputsByIdx[input.Index] = input + } + + for i := range pkt.Outputs { + output, err := analyzeOutput(pkt, i) + if err != nil { + return nil, err + } + if output == nil { + continue + } + + analysis.SilentOutputs = append(analysis.SilentOutputs, output) + } + + if len(analysis.SilentOutputs) == 0 { + return nil, ErrNoSilentPaymentOutputs + } + if len(analysis.EligibleInputs) == 0 { + return nil, ErrNoEligibleInputs + } + + for _, output := range analysis.SilentOutputs { + scanKey := string(output.ScanKeyBytes) + group := analysis.OutputGroupByScan[scanKey] + if group == nil { + group = &OutputGroup{ + ScanKey: output.ScanKey, + ScanKeyBytes: append([]byte(nil), output.ScanKeyBytes...), + } + analysis.OutputGroupByScan[scanKey] = group + analysis.OutputGroups = append(analysis.OutputGroups, group) + } + + group.SilentOutputs = append(group.SilentOutputs, output) + } + + sort.Slice(analysis.OutputGroups, func(i, j int) bool { + return bytes.Compare( + analysis.OutputGroups[i].ScanKeyBytes, + analysis.OutputGroups[j].ScanKeyBytes, + ) < 0 + }) + + for _, group := range analysis.OutputGroups { + sort.Slice(group.SilentOutputs, func(i, j int) bool { + left := group.SilentOutputs[i] + right := group.SilentOutputs[j] + + // Labeled change outputs reuse the original silent-payment code + // ordering, so keep packet order when both outputs are labeled. + if left.Label != nil && right.Label != nil { + return left.Index < right.Index + } + + cmp := bytes.Compare(left.SpendKeyBytes, right.SpendKeyBytes) + if cmp != 0 { + return cmp < 0 + } + + return left.Index < right.Index + }) + + for k, output := range group.SilentOutputs { + output.K = uint32(k) + } + } + + analysis.InputHash, analysis.SummedInputKey = computeInputHash( + analysis.EligibleInputs, + ) + + return analysis, nil +} + +func analyzeInput(pkt *psbt.Packet, index int) (*EligibleInput, error) { + input := pkt.Inputs[index] + prevTxID, prevTxIndex, err := prevOutRef(pkt, index) + if err != nil { + return nil, err + } + + prevOut, err := prevTxOut(pkt, index) + if err != nil { + return nil, err + } + + if !isEligiblePrevScript(input, prevOut.PkScript) { + return nil, nil + } + + publicKey, err := inputPublicKey(&input, prevOut.PkScript) + if err != nil { + return nil, fmt.Errorf("%w for input %d: %v", + ErrMissingInputPublicKey, index, err) + } + + return &EligibleInput{ + Index: index, + PublicKey: publicKey, + PublicKeyBytes: publicKey.SerializeCompressed(), + PrevTxID: prevTxID, + PrevTxIndex: prevTxIndex, + Amount: prevOut.Value, + Script: append([]byte(nil), prevOut.PkScript...), + }, nil +} + +func analyzeOutput(pkt *psbt.Packet, index int) (*SilentOutput, error) { + output := pkt.Outputs[index] + if output.SPV0Info == nil { + return nil, nil + } + if output.Amount == nil { + return nil, fmt.Errorf("%w at output %d", ErrMissingOutputAmount, index) + } + + scanKey, err := btcec.ParsePubKey(output.SPV0Info.ScanKey) + if err != nil { + return nil, fmt.Errorf("parse scan key for output %d: %w", index, err) + } + spendKey, err := btcec.ParsePubKey(output.SPV0Info.SpendKey) + if err != nil { + return nil, fmt.Errorf("parse spend key for output %d: %w", index, err) + } + + return &SilentOutput{ + Index: index, + Amount: *output.Amount, + ScanKey: scanKey, + ScanKeyBytes: append([]byte(nil), output.SPV0Info.ScanKey...), + SpendKey: spendKey, + SpendKeyBytes: append([]byte(nil), output.SPV0Info.SpendKey...), + Label: cloneLabel(output.SPV0Label), + Script: append([]byte(nil), output.Script...), + }, nil +} + +func prevOutRef(pkt *psbt.Packet, index int) ([32]byte, uint32, error) { + var txid [32]byte + var outIndex uint32 + + if pkt.Version == 2 { + input := pkt.Inputs[index] + if input.PreviousTxID == nil || input.OutputIndex == nil { + return txid, 0, fmt.Errorf("missing prevout fields") + } + + copy(txid[:], input.PreviousTxID[:]) + return txid, *input.OutputIndex, nil + } + + if pkt.UnsignedTx == nil || index >= len(pkt.UnsignedTx.TxIn) { + return txid, 0, fmt.Errorf("missing unsigned transaction input") + } + + copy(txid[:], pkt.UnsignedTx.TxIn[index].PreviousOutPoint.Hash[:]) + outIndex = pkt.UnsignedTx.TxIn[index].PreviousOutPoint.Index + return txid, outIndex, nil +} + +func prevTxOut(pkt *psbt.Packet, index int) (*wire.TxOut, error) { + input := pkt.Inputs[index] + switch { + case input.WitnessUtxo != nil: + return input.WitnessUtxo, nil + + case input.NonWitnessUtxo != nil: + prevTxID, prevIndex, err := prevOutRef(pkt, index) + if err != nil { + return nil, err + } + + if input.NonWitnessUtxo.TxHash() != prevTxID { + return nil, fmt.Errorf("non-witness utxo txid mismatch") + } + if int(prevIndex) >= len(input.NonWitnessUtxo.TxOut) { + return nil, fmt.Errorf("prevout index %d out of bounds", prevIndex) + } + + return input.NonWitnessUtxo.TxOut[prevIndex], nil + } + + return nil, fmt.Errorf("missing prevout data") +} + +func isEligiblePrevScript(input psbt.PInput, script []byte) bool { + switch { + case txscript.IsPayToTaproot(script): + return !isTaprootNUMS(input.TaprootInternalKey) + + case txscript.IsPayToWitnessPubKeyHash(script): + return true + + case txscript.IsPayToScriptHash(script): + return input.RedeemScript != nil && + txscript.IsPayToWitnessPubKeyHash(input.RedeemScript) + + case txscript.IsPayToPubKeyHash(script): + return true + + default: + return false + } +} + +func inputPublicKey(input *psbt.PInput, prevScript []byte) (*btcec.PublicKey, error) { + switch { + case txscript.IsPayToTaproot(prevScript): + return schnorr.ParsePubKey(prevScript[2:34]) + + case txscript.IsPayToWitnessPubKeyHash(prevScript): + return anyMatchingPubKey(input, prevScript[2:]) + + case txscript.IsPayToScriptHash(prevScript): + if input.RedeemScript == nil || + !txscript.IsPayToWitnessPubKeyHash(input.RedeemScript) { + + return nil, fmt.Errorf("missing p2sh-p2wpkh redeem script") + } + + return anyMatchingPubKey(input, input.RedeemScript[2:]) + + case txscript.IsPayToPubKeyHash(prevScript): + return anyMatchingPubKey(input, prevScript[3:23]) + + default: + return nil, fmt.Errorf("unsupported prevout script") + } +} + +func anyMatchingPubKey(input *psbt.PInput, + wantHash160 []byte) (*btcec.PublicKey, error) { + + candidates := make([][]byte, 0, + len(input.Bip32Derivation)+len(input.PartialSigs)+2, + ) + hasStructuredSource := false + for _, derivation := range input.Bip32Derivation { + candidates = append(candidates, derivation.PubKey) + hasStructuredSource = true + } + for _, partialSig := range input.PartialSigs { + candidates = append(candidates, partialSig.PubKey) + } + witnessPubKeys := finalWitnessPubKey(input.FinalScriptWitness) + if len(witnessPubKeys) != 0 { + hasStructuredSource = true + candidates = append(candidates, witnessPubKeys...) + } + scriptSigPubKeys := finalScriptSigPubKey(input.FinalScriptSig) + if len(scriptSigPubKeys) != 0 { + hasStructuredSource = true + candidates = append(candidates, scriptSigPubKeys...) + } + + for _, candidate := range candidates { + if !bytes.Equal(btcutil.Hash160(candidate), wantHash160) { + continue + } + + return btcec.ParsePubKey(candidate) + } + + unique := make(map[string][]byte) + for _, candidate := range candidates { + unique[string(candidate)] = candidate + } + + // Some interop vectors provide exactly one input pubkey source for DLEQ + // verification without making it script-matchable. Fall back to that + // single candidate, but only when it is unambiguous and the packet has + // a structured key source beyond a lone partial signature. + if len(unique) != 1 || !hasStructuredSource { + return nil, fmt.Errorf("no unambiguous public key source") + } + + for _, candidate := range unique { + return btcec.ParsePubKey(candidate) + } + + return nil, fmt.Errorf("missing public key") +} + +func finalWitnessPubKey(serialized []byte) [][]byte { + if len(serialized) == 0 { + return nil + } + + reader := bytes.NewReader(serialized) + count, err := wire.ReadVarInt(reader, 0) + if err != nil || count == 0 { + return nil + } + + items := make([][]byte, 0, count) + for i := uint64(0); i < count; i++ { + item, err := wire.ReadVarBytes(reader, 0, 10000, "witness item") + if err != nil { + return nil + } + items = append(items, item) + } + + last := items[len(items)-1] + if _, err := btcec.ParsePubKey(last); err == nil { + return [][]byte{last} + } + + return nil +} + +func finalScriptSigPubKey(script []byte) [][]byte { + if len(script) == 0 { + return nil + } + + tokenizer := txscript.MakeScriptTokenizer(0, script) + var candidates [][]byte + for tokenizer.Next() { + data := tokenizer.Data() + if len(data) == 0 { + continue + } + if _, err := btcec.ParsePubKey(data); err == nil { + candidates = append(candidates, append([]byte(nil), data...)) + } + } + if tokenizer.Err() != nil { + return nil + } + + return candidates +} + +func isTaprootNUMS(internalKey []byte) bool { + return len(internalKey) == len(taprootNUMSKey) && + bytes.Equal(internalKey, taprootNUMSKey[:]) +} + +func sumPublicKeys(inputs []*EligibleInput) *btcec.PublicKey { + var acc btcec.JacobianPoint + + for i, input := range inputs { + var point btcec.JacobianPoint + input.PublicKey.AsJacobian(&point) + + if i == 0 { + acc = point + continue + } + + var next btcec.JacobianPoint + btcec.AddNonConst(&acc, &point, &next) + acc = next + } + + acc.ToAffine() + return btcec.NewPublicKey(&acc.X, &acc.Y) +} + +func cloneLabel(label *uint32) *uint32 { + if label == nil { + return nil + } + + value := *label + return &value +} diff --git a/go/sp/analysis_test.go b/go/sp/analysis_test.go new file mode 100644 index 0000000..e71d455 --- /dev/null +++ b/go/sp/analysis_test.go @@ -0,0 +1,223 @@ +package sp + +import ( + "bytes" + "encoding/base64" + "encoding/hex" + "encoding/json" + "os" + "path/filepath" + "runtime" + "testing" + + psbt "github.com/otaliptus/psbt-v2" +) + +type bip375Vectors struct { + Version string `json:"version"` + Valid []bip375ValidVector `json:"valid"` + Invalid []bip375InvalidVector `json:"invalid"` +} + +type bip375ValidVector struct { + Description string `json:"description"` + PSBT string `json:"psbt"` + InputKeys []bip375VectorInputKey `json:"input_keys"` + ExpectedECDHShares []struct { + ScanKey string `json:"scan_key"` + ECDHResult string `json:"ecdh_result"` + DLEQProof string `json:"dleq_proof"` + InputIndex *int `json:"input_index,omitempty"` + } `json:"expected_ecdh_shares"` + ExpectedOutputs []struct { + OutputIndex int `json:"output_index"` + Amount int64 `json:"amount"` + IsSilentPayment bool `json:"is_silent_payment"` + Script string `json:"script,omitempty"` + SPInfo string `json:"sp_info,omitempty"` + } `json:"expected_outputs"` +} + +type bip375VectorInputKey struct { + InputIndex int `json:"input_index"` + PrivateKey string `json:"private_key"` +} + +type bip375InvalidVector struct { + Description string `json:"description"` + PSBT string `json:"psbt"` +} + +func loadVectors(t *testing.T) bip375Vectors { + t.Helper() + + _, file, _, ok := runtime.Caller(0) + if !ok { + t.Fatal("runtime.Caller failed") + } + + path := filepath.Join(filepath.Dir(file), "..", "..", "bip375_test_vectors.json") + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("read vectors: %v", err) + } + + var vectors bip375Vectors + if err := json.Unmarshal(data, &vectors); err != nil { + t.Fatalf("parse vectors: %v", err) + } + + return vectors +} + +func decodePacket(t *testing.T, b64 string) *psbt.Packet { + t.Helper() + + raw, err := base64.StdEncoding.DecodeString(b64) + if err != nil { + t.Fatalf("decode base64: %v", err) + } + + packet, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) + if err != nil { + t.Fatalf("parse packet: %v", err) + } + + return packet +} + +func vectorByDescription(t *testing.T, description string) *bip375ValidVector { + t.Helper() + + vectors := loadVectors(t) + for i := range vectors.Valid { + if vectors.Valid[i].Description == description { + return &vectors.Valid[i] + } + } + + t.Fatalf("vector %q not found", description) + return nil +} + +func invalidVectorByDescription(t *testing.T, + description string) *bip375InvalidVector { + t.Helper() + + vectors := loadVectors(t) + for i := range vectors.Invalid { + if vectors.Invalid[i].Description == description { + return &vectors.Invalid[i] + } + } + + t.Fatalf("invalid vector %q not found", description) + return nil +} + +func TestAnalyzePacketMixedInputEligibility(t *testing.T) { + tests := []string{ + "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (P2SH excluded)", + "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS point excluded)", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := vectorByDescription(t, description) + analysis, err := AnalyzePacket(decodePacket(t, vector.PSBT)) + if err != nil { + t.Fatalf("AnalyzePacket: %v", err) + } + + wantIndices := make([]int, 0, len(vector.ExpectedECDHShares)) + seen := make(map[int]bool) + for _, share := range vector.ExpectedECDHShares { + if share.InputIndex == nil || seen[*share.InputIndex] { + continue + } + + wantIndices = append(wantIndices, *share.InputIndex) + seen[*share.InputIndex] = true + } + + if len(analysis.EligibleInputs) != len(wantIndices) { + t.Fatalf("eligible inputs = %d, want %d", + len(analysis.EligibleInputs), len(wantIndices)) + } + + for i, want := range wantIndices { + if analysis.EligibleInputs[i].Index != want { + t.Fatalf("eligible input %d = %d, want %d", + i, analysis.EligibleInputs[i].Index, want) + } + } + }) + } +} + +func TestAnalyzePacketAssignsKBySpendKeyThenIndex(t *testing.T) { + tests := []string{ + "can finalize: three sp outputs (same scan key) - each output has distinct k value", + "can finalize: three sp outputs (same scan key) / two regular outputs - k value must not follow output index", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := vectorByDescription(t, description) + analysis, err := AnalyzePacket(decodePacket(t, vector.PSBT)) + if err != nil { + t.Fatalf("AnalyzePacket: %v", err) + } + + group := analysis.OutputGroups[0] + lastSpend := "" + lastIndex := -1 + for k, output := range group.SilentOutputs { + if output.K != uint32(k) { + t.Fatalf("output %d k = %d, want %d", + output.Index, output.K, k) + } + + spendHex := hex.EncodeToString(output.SpendKeyBytes) + if lastSpend > spendHex { + t.Fatalf("spend-key order regressed: %s before %s", + lastSpend, spendHex) + } + if lastSpend == spendHex && lastIndex > output.Index { + t.Fatalf("index tiebreak regressed: %d before %d", + lastIndex, output.Index) + } + + lastSpend = spendHex + lastIndex = output.Index + } + }) + } +} + +func TestAnalyzePacketInputHashDeterministic(t *testing.T) { + vector := vectorByDescription(t, + "can finalize: two inputs single-signer - using global ECDH share", + ) + packet := decodePacket(t, vector.PSBT) + + first, err := AnalyzePacket(packet) + if err != nil { + t.Fatalf("AnalyzePacket(first): %v", err) + } + second, err := AnalyzePacket(packet) + if err != nil { + t.Fatalf("AnalyzePacket(second): %v", err) + } + + if first.InputHash != second.InputHash { + t.Fatalf("input hash mismatch: %x != %x", + first.InputHash[:], second.InputHash[:]) + } + if !bytes.Equal( + first.SummedInputKey.SerializeCompressed(), + second.SummedInputKey.SerializeCompressed(), + ) { + t.Fatalf("summed input key mismatch") + } +} diff --git a/go/sp/bip352.go b/go/sp/bip352.go new file mode 100644 index 0000000..12ff76a --- /dev/null +++ b/go/sp/bip352.go @@ -0,0 +1,46 @@ +package sp + +import ( + "bytes" + "encoding/binary" + "sort" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +var ( + tagBIP352Inputs = []byte("BIP0352/Inputs") + tagBIP352SharedSecret = []byte("BIP0352/SharedSecret") +) + +func computeInputHash(inputs []*EligibleInput) (chainhash.Hash, *btcec.PublicKey) { + smallest := smallestEligibleInput(inputs) + summed := sumPublicKeys(inputs) + outPointKey := smallest.OutPointKey() + + return *chainhash.TaggedHash( + tagBIP352Inputs, outPointKey[:], + summed.SerializeCompressed(), + ), summed +} + +func taggedHashBIP352SharedSecret(sharedSecret []byte, k uint32) chainhash.Hash { + var index [4]byte + binary.BigEndian.PutUint32(index[:], k) + + return *chainhash.TaggedHash( + tagBIP352SharedSecret, sharedSecret, index[:], + ) +} + +func smallestEligibleInput(inputs []*EligibleInput) *EligibleInput { + sorted := append([]*EligibleInput(nil), inputs...) + sort.Slice(sorted, func(i, j int) bool { + left := sorted[i].OutPointKey() + right := sorted[j].OutPointKey() + return bytes.Compare(left[:], right[:]) < 0 + }) + + return sorted[0] +} diff --git a/go/sp/doc.go b/go/sp/doc.go new file mode 100644 index 0000000..05c969e --- /dev/null +++ b/go/sp/doc.go @@ -0,0 +1,3 @@ +// Package sp implements the BIP-352/BIP-375 silent payment workflow on top of +// the base PSBT field layer. +package sp diff --git a/go/sp/errors.go b/go/sp/errors.go new file mode 100644 index 0000000..14c3a93 --- /dev/null +++ b/go/sp/errors.go @@ -0,0 +1,21 @@ +package sp + +import "errors" + +var ( + ErrNoSilentPaymentOutputs = errors.New("packet has no silent payment outputs") + ErrMissingInputPublicKey = errors.New("eligible input missing public key") + ErrNoEligibleInputs = errors.New("packet has no eligible silent payment inputs") + ErrMissingOutputAmount = errors.New("silent payment output missing amount") + ErrDuplicateOwnedInput = errors.New("duplicate owned input") + ErrOwnedInputMismatch = errors.New("owned input secret does not match packet public key") + ErrMissingShare = errors.New("missing silent payment share") + ErrMissingProof = errors.New("missing silent payment proof") + ErrInvalidProof = errors.New("invalid silent payment proof") + ErrSigHashAllRequired = errors.New("silent payment inputs require SIGHASH_ALL") + ErrOutputScriptsMissing = errors.New("silent payment outputs are missing PSBT_OUT_SCRIPT") + ErrIncompleteShareCoverage = errors.New("incomplete silent payment share coverage") + ErrOutputScriptMismatch = errors.New("silent payment output script mismatch") + ErrTxModifiableSet = errors.New("tx modifiable flags must be cleared once silent payment scripts are set") + ErrUnexpectedInputMaterial = errors.New("ineligible input carries silent payment fields") +) diff --git a/go/sp/extractor.go b/go/sp/extractor.go new file mode 100644 index 0000000..a387a65 --- /dev/null +++ b/go/sp/extractor.go @@ -0,0 +1,22 @@ +package sp + +import ( + "fmt" + + psbt "github.com/otaliptus/psbt-v2" +) + +func verifyUnexpectedInputMaterial(pkt *psbt.Packet, analysis *Analysis) error { + for index := range pkt.Inputs { + if analysis.EligibleInputsByIdx[index] != nil { + continue + } + if len(pkt.Inputs[index].SPECDHShares) != 0 || + len(pkt.Inputs[index].SPDLEQProofs) != 0 { + + return fmt.Errorf("%w on input %d", ErrUnexpectedInputMaterial, index) + } + } + + return nil +} diff --git a/go/sp/materialize.go b/go/sp/materialize.go new file mode 100644 index 0000000..77896e7 --- /dev/null +++ b/go/sp/materialize.go @@ -0,0 +1,197 @@ +package sp + +import ( + "bytes" + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + psbt "github.com/otaliptus/psbt-v2" +) + +// MaterializeOutputs computes and sets missing PSBT_OUT_SCRIPT values for +// silent-payment outputs once share coverage is complete. +func MaterializeOutputs(pkt *psbt.Packet) error { + analysis, err := AnalyzePacket(pkt) + if err != nil { + return err + } + if err := VerifySharesAndProofs(pkt); err != nil { + return err + } + + inputHashScalar := scalarFromHash32(analysis.InputHash) + didSetScript := false + for _, group := range analysis.OutputGroups { + sharePoint, err := aggregateSharePoint(pkt, analysis, group) + if err != nil { + return err + } + + sharedSecretPoint := scalarMultiply(sharePoint, &inputHashScalar) + sharedSecretPubKey, ok := jacobianToPublicKey(&sharedSecretPoint) + if !ok { + return fmt.Errorf("invalid shared secret point") + } + sharedSecret := sharedSecretPubKey.SerializeCompressed() + + for _, output := range group.SilentOutputs { + script, err := deriveOutputScript(output, sharedSecret) + if err != nil { + return err + } + + if len(pkt.Outputs[output.Index].Script) == 0 { + pkt.Outputs[output.Index].Script = script + didSetScript = true + continue + } + if !bytes.Equal(pkt.Outputs[output.Index].Script, script) { + return fmt.Errorf("%w at output %d", + ErrOutputScriptMismatch, output.Index) + } + } + } + + if didSetScript && pkt.TxModifiable != nil { + *pkt.TxModifiable &^= 0x03 + } + + return nil +} + +// ValidateExtractable verifies the silent-payment specific preconditions before +// delegating to the base PSBT extractor. +func ValidateExtractable(pkt *psbt.Packet) error { + if !hasSilentPaymentOutputs(pkt) { + return nil + } + if err := validateSigHashPolicy(pkt); err != nil { + return err + } + if err := VerifySharesAndProofs(pkt); err != nil { + return err + } + + analysis, err := AnalyzePacket(pkt) + if err != nil { + return err + } + inputHashScalar := scalarFromHash32(analysis.InputHash) + for _, group := range analysis.OutputGroups { + sharePoint, err := aggregateSharePoint(pkt, analysis, group) + if err != nil { + return err + } + + sharedSecretPoint := scalarMultiply(sharePoint, &inputHashScalar) + sharedSecretPubKey, ok := jacobianToPublicKey(&sharedSecretPoint) + if !ok { + return fmt.Errorf("invalid shared secret point") + } + sharedSecret := sharedSecretPubKey.SerializeCompressed() + + for _, output := range group.SilentOutputs { + if len(pkt.Outputs[output.Index].Script) == 0 { + return fmt.Errorf("%w at output %d", + ErrOutputScriptsMissing, output.Index) + } + + wantScript, err := deriveOutputScript(output, sharedSecret) + if err != nil { + return err + } + if !bytes.Equal(pkt.Outputs[output.Index].Script, wantScript) { + return fmt.Errorf("%w at output %d", + ErrOutputScriptMismatch, output.Index) + } + } + } + + if pkt.TxModifiable != nil && (*pkt.TxModifiable&0x03) != 0 { + return ErrTxModifiableSet + } + + return nil +} + +// Extract verifies the silent-payment fields and then delegates to the base +// PSBT extractor. +func Extract(pkt *psbt.Packet) (*wire.MsgTx, error) { + if err := ValidateExtractable(pkt); err != nil { + return nil, err + } + + return psbt.Extract(pkt) +} + +func aggregateSharePoint(pkt *psbt.Packet, analysis *Analysis, + group *OutputGroup) (*btcec.PublicKey, error) { + + if globalShare := findGlobalShare(pkt, group.ScanKeyBytes); globalShare != nil { + return btcec.ParsePubKey(globalShare.Share) + } + + var sum btcec.JacobianPoint + haveAny := false + for _, input := range analysis.EligibleInputs { + inputShare := findInputShare(pkt, input.Index, group.ScanKeyBytes) + if inputShare == nil { + return nil, fmt.Errorf("%w for input %d scan key %x", + ErrIncompleteShareCoverage, input.Index, group.ScanKeyBytes) + } + + sharePoint, err := btcec.ParsePubKey(inputShare.Share) + if err != nil { + return nil, err + } + + var shareJacobian btcec.JacobianPoint + sharePoint.AsJacobian(&shareJacobian) + if !haveAny { + sum = shareJacobian + haveAny = true + continue + } + + var next btcec.JacobianPoint + btcec.AddNonConst(&sum, &shareJacobian, &next) + sum = next + } + if !haveAny { + return nil, ErrIncompleteShareCoverage + } + + sharePubKey, ok := jacobianToPublicKey(&sum) + if !ok { + return nil, ErrIncompleteShareCoverage + } + + return sharePubKey, nil +} + +func deriveOutputScript(output *SilentOutput, sharedSecret []byte) ([]byte, error) { + tweakHash := taggedHashBIP352SharedSecret(sharedSecret, output.K) + tweakScalar := scalarFromHash32(tweakHash) + + var spendJacobian btcec.JacobianPoint + output.SpendKey.AsJacobian(&spendJacobian) + tweakPoint := scalarBaseMultiply(&tweakScalar) + + var destination btcec.JacobianPoint + btcec.AddNonConst(&spendJacobian, &tweakPoint, &destination) + destinationPubKey, ok := jacobianToPublicKey(&destination) + if !ok { + return nil, fmt.Errorf("invalid destination point for output %d", output.Index) + } + + return txscript.PayToTaprootScript(destinationPubKey) +} + +func scalarFromHash32(hash chainhash.Hash) btcec.ModNScalar { + var scalar btcec.ModNScalar + scalar.SetBytes((*[32]byte)(&hash)) + return scalar +} diff --git a/go/sp/materialize_test.go b/go/sp/materialize_test.go new file mode 100644 index 0000000..caf56f9 --- /dev/null +++ b/go/sp/materialize_test.go @@ -0,0 +1,157 @@ +package sp + +import ( + "bytes" + "encoding/base64" + "testing" + + psbt "github.com/otaliptus/psbt-v2" +) + +func TestMaterializeOutputsFromFinalizeVectors(t *testing.T) { + vectors := loadVectors(t) + + tested := 0 + for i := range vectors.Valid { + vector := &vectors.Valid[i] + if len(vector.ExpectedECDHShares) == 0 || !hasFinalizePrefix(vector.Description) { + continue + } + + tested++ + t.Run(vector.Description, func(t *testing.T) { + packet := decodePacket(t, vector.PSBT) + originalScripts := make(map[int][]byte) + for index := range packet.Outputs { + if packet.Outputs[index].SPV0Info != nil { + originalScripts[index] = append([]byte(nil), packet.Outputs[index].Script...) + packet.Outputs[index].Script = nil + } + } + + if err := MaterializeOutputs(packet); err != nil { + t.Fatalf("MaterializeOutputs: %v", err) + } + + for _, output := range vector.ExpectedOutputs { + if !output.IsSilentPayment { + continue + } + + if !bytes.Equal( + packet.Outputs[output.OutputIndex].Script, + originalScripts[output.OutputIndex], + ) { + t.Fatalf("output %d script mismatch", output.OutputIndex) + } + } + }) + } + + if tested != 12 { + t.Fatalf("expected 12 finalize-capable vectors, got %d", tested) + } +} + +func TestMaterializeOutputsRejectsIncompleteCoverage(t *testing.T) { + tests := []string{ + "in progress: no ECDH shares - no PSBT_OUT_SCRIPT", + "in progress: partial ECDH coverage - no PSBT_OUT_SCRIPT", + "in progress: one input/two sp outputs (different scan keys) - missing ECDH share for output 0 scan key", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := vectorByDescription(t, description) + if err := MaterializeOutputs(decodePacket(t, vector.PSBT)); err == nil { + t.Fatalf("expected incomplete coverage failure") + } + }) + } +} + +func TestValidateExtractableRejectsInvalidVectors(t *testing.T) { + tests := []string{ + "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE with PSBT_OUT_SCRIPT set", + "ecdh coverage: PSBT_OUT_SCRIPT set - no eligible inputs", + "ecdh coverage: PSBT_OUT_SCRIPT set - Input 0 missing PSBT_IN_SP_ECDH_SHARE", + "ecdh coverage: input missing public key for DLEQ verification", + "ecdh coverage: one input/three sp outputs (different scan keys) - Output 1 missing ECDH share for scan key", + "ecdh coverage: two inputs/two sp outputs (different scan keys) - full coverage input 0 / partial coverage input 1", + "ecdh coverage: two inputs/one sp output (two scan keys) - Input 1 missing ECDH share for scan key", + "ecdh coverage: ineligible P2TR input with NUMS point with PSBT_IN_SP_ECDH_SHARE set", + "input eligibility: segwit version greater than 1 in transaction inputs with silent payments output", + "output scripts: computed output script mismatch in PSBT_OUT_SCRIPT field from transaction inputs", + "output scripts: two sp outputs (same scan key/different spend keys) - outputs are not sorted lexicographically by spend key", + "output scripts: three sp outputs (same scan/spend keys) - output scripts are computed with swapped k values", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := invalidVectorByDescription(t, description) + raw, err := base64.StdEncoding.DecodeString(vector.PSBT) + if err != nil { + t.Fatalf("decode base64: %v", err) + } + + packet, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) + if err != nil { + t.Fatalf("parse packet: %v", err) + } + + if err := ValidateExtractable(packet); err == nil { + t.Fatalf("expected extractable validation failure") + } + }) + } +} + +func TestParserRejectsInvalidSilentPaymentVectors(t *testing.T) { + tests := []string{ + "ecdh coverage: ineligible P2SH multisig input with PSBT_IN_SP_ECDH_SHARE set", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := invalidVectorByDescription(t, description) + raw, err := base64.StdEncoding.DecodeString(vector.PSBT) + if err != nil { + t.Fatalf("decode base64: %v", err) + } + + if _, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false); err == nil { + t.Fatalf("expected parser rejection") + } + }) + } +} + +func TestExtractValidatesSilentPaymentScripts(t *testing.T) { + vector := vectorByDescription(t, + "can finalize: one P2WPKH input single-signer", + ) + packet := decodePacket(t, vector.PSBT) + for i := range packet.Outputs { + if packet.Outputs[i].SPV0Info != nil { + packet.Outputs[i].Script = nil + } + } + + if _, err := Extract(packet); err == nil { + t.Fatalf("expected missing script failure") + } + if err := MaterializeOutputs(packet); err != nil { + t.Fatalf("MaterializeOutputs: %v", err) + } + if err := psbt.MaybeFinalizeAll(packet); err != nil { + t.Fatalf("MaybeFinalizeAll: %v", err) + } + if _, err := Extract(packet); err != nil { + t.Fatalf("Extract: %v", err) + } +} + +func hasFinalizePrefix(description string) bool { + return len(description) >= len("can finalize:") && + description[:len("can finalize:")] == "can finalize:" +} diff --git a/go/sp/points.go b/go/sp/points.go new file mode 100644 index 0000000..b2cedd3 --- /dev/null +++ b/go/sp/points.go @@ -0,0 +1,29 @@ +package sp + +import "github.com/btcsuite/btcd/btcec/v2" + +func scalarMultiply(point *btcec.PublicKey, + scalar *btcec.ModNScalar) btcec.JacobianPoint { + + var pointJacobian btcec.JacobianPoint + point.AsJacobian(&pointJacobian) + + var result btcec.JacobianPoint + btcec.ScalarMultNonConst(scalar, &pointJacobian, &result) + return result +} + +func jacobianToPublicKey(point *btcec.JacobianPoint) (*btcec.PublicKey, bool) { + if point == nil || (point.X.IsZero() && point.Y.IsZero()) { + return nil, false + } + + point.ToAffine() + return btcec.NewPublicKey(&point.X, &point.Y), true +} + +func scalarBaseMultiply(scalar *btcec.ModNScalar) btcec.JacobianPoint { + var result btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(scalar, &result) + return result +} diff --git a/go/sp/proofs.go b/go/sp/proofs.go new file mode 100644 index 0000000..ff13fac --- /dev/null +++ b/go/sp/proofs.go @@ -0,0 +1,86 @@ +package sp + +import ( + "bytes" + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + dleq "github.com/otaliptus/dleq374" + psbt "github.com/otaliptus/psbt-v2" +) + +func findGlobalShare(pkt *psbt.Packet, scanKey []byte) *psbt.SilentPaymentECDHShare { + for i := range pkt.GlobalSPECDHShares { + if bytes.Equal(pkt.GlobalSPECDHShares[i].ScanKey, scanKey) { + return &pkt.GlobalSPECDHShares[i] + } + } + + return nil +} + +func findGlobalProof(pkt *psbt.Packet, scanKey []byte) *psbt.SilentPaymentDLEQProof { + for i := range pkt.GlobalSPDLEQProofs { + if bytes.Equal(pkt.GlobalSPDLEQProofs[i].ScanKey, scanKey) { + return &pkt.GlobalSPDLEQProofs[i] + } + } + + return nil +} + +func findInputShare(pkt *psbt.Packet, index int, + scanKey []byte) *psbt.SilentPaymentECDHShare { + + for i := range pkt.Inputs[index].SPECDHShares { + if bytes.Equal(pkt.Inputs[index].SPECDHShares[i].ScanKey, scanKey) { + return &pkt.Inputs[index].SPECDHShares[i] + } + } + + return nil +} + +func findInputProof(pkt *psbt.Packet, index int, + scanKey []byte) *psbt.SilentPaymentDLEQProof { + + for i := range pkt.Inputs[index].SPDLEQProofs { + if bytes.Equal(pkt.Inputs[index].SPDLEQProofs[i].ScanKey, scanKey) { + return &pkt.Inputs[index].SPDLEQProofs[i] + } + } + + return nil +} + +func hasAnyPerInputMaterial(pkt *psbt.Packet, analysis *Analysis, + scanKey []byte) bool { + + for _, input := range analysis.EligibleInputs { + if findInputShare(pkt, input.Index, scanKey) != nil || + findInputProof(pkt, input.Index, scanKey) != nil { + + return true + } + } + + return false +} + +func verifyProofPair(A, B *btcec.PublicKey, shareBytes, + proofBytes []byte) error { + + sharePoint, err := btcec.ParsePubKey(shareBytes) + if err != nil { + return fmt.Errorf("%w: parse share: %v", ErrInvalidProof, err) + } + proof, err := dleq.ParseProof(proofBytes) + if err != nil { + return fmt.Errorf("%w: parse proof: %v", ErrInvalidProof, err) + } + if !dleq.VerifyProof(A, B, sharePoint, proof, btcec.Generator(), nil) { + return ErrInvalidProof + } + + return nil +} diff --git a/go/sp/signer.go b/go/sp/signer.go new file mode 100644 index 0000000..fb6f4dc --- /dev/null +++ b/go/sp/signer.go @@ -0,0 +1,350 @@ +package sp + +import ( + "bytes" + "crypto/rand" + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/txscript" + dleq "github.com/otaliptus/dleq374" + psbt "github.com/otaliptus/psbt-v2" +) + +// OwnedInput declares that the caller controls the given eligible input. +type OwnedInput struct { + Index int + Secret [32]byte +} + +type ownedEligibleInput struct { + Eligible *EligibleInput + Secret [32]byte + Scalar btcec.ModNScalar +} + +// AddSharesAndProofs adds the missing BIP-375 ECDH shares and DLEQ proofs for +// the owned eligible inputs in pkt. +func AddSharesAndProofs(pkt *psbt.Packet, owned []OwnedInput) error { + analysis, err := AnalyzePacket(pkt) + if err != nil { + return err + } + if err := validateSigHashPolicy(pkt); err != nil { + return err + } + + ownedInputs, err := ownedEligibleInputs(analysis, owned) + if err != nil { + return err + } + if len(ownedInputs) == 0 { + return VerifySharesAndProofs(pkt) + } + + allEligibleOwned := len(ownedInputs) == len(analysis.EligibleInputs) + for _, group := range analysis.OutputGroups { + globalShare := findGlobalShare(pkt, group.ScanKeyBytes) + globalProof := findGlobalProof(pkt, group.ScanKeyBytes) + + switch { + case globalShare != nil || globalProof != nil: + if allEligibleOwned { + if err := upsertGlobalProof( + pkt, analysis, group, globalShare, globalProof, + sumOwnedScalars(ownedInputs), + ); err != nil { + return err + } + } + + case allEligibleOwned && !hasAnyPerInputMaterial(pkt, analysis, group.ScanKeyBytes): + if err := upsertGlobalProof( + pkt, analysis, group, nil, nil, sumOwnedScalars(ownedInputs), + ); err != nil { + return err + } + + default: + for _, ownedInput := range ownedInputs { + if err := upsertInputProof( + pkt, ownedInput, group, + findInputShare(pkt, ownedInput.Eligible.Index, group.ScanKeyBytes), + findInputProof(pkt, ownedInput.Eligible.Index, group.ScanKeyBytes), + ); err != nil { + return err + } + } + } + } + + return VerifySharesAndProofs(pkt) +} + +// VerifySharesAndProofs verifies every share/proof pair already present in pkt. +func VerifySharesAndProofs(pkt *psbt.Packet) error { + analysis, err := AnalyzePacket(pkt) + if err != nil { + if err == ErrNoSilentPaymentOutputs { + return nil + } + return err + } + if err := verifyUnexpectedInputMaterial(pkt, analysis); err != nil { + return err + } + + for _, group := range analysis.OutputGroups { + globalShare := findGlobalShare(pkt, group.ScanKeyBytes) + globalProof := findGlobalProof(pkt, group.ScanKeyBytes) + if (globalShare == nil) != (globalProof == nil) { + if globalShare == nil { + return fmt.Errorf("%w for scan key %x", ErrMissingShare, group.ScanKeyBytes) + } + return fmt.Errorf("%w for scan key %x", ErrMissingProof, group.ScanKeyBytes) + } + if globalShare != nil { + if err := verifyProofPair( + analysis.SummedInputKey, group.ScanKey, globalShare.Share, + globalProof.Proof, + ); err != nil { + return err + } + } + + for _, input := range analysis.EligibleInputs { + inputShare := findInputShare(pkt, input.Index, group.ScanKeyBytes) + inputProof := findInputProof(pkt, input.Index, group.ScanKeyBytes) + if (inputShare == nil) != (inputProof == nil) { + if inputShare == nil { + return fmt.Errorf("%w for input %d scan key %x", + ErrMissingShare, input.Index, group.ScanKeyBytes) + } + return fmt.Errorf("%w for input %d scan key %x", + ErrMissingProof, input.Index, group.ScanKeyBytes) + } + if inputShare == nil { + continue + } + + if err := verifyProofPair( + input.PublicKey, group.ScanKey, inputShare.Share, + inputProof.Proof, + ); err != nil { + return fmt.Errorf("input %d: %w", input.Index, err) + } + } + } + + return nil +} + +// ValidateReadyToSign enforces the signer-side silent-payment rules that can +// be checked from packet state alone. +func ValidateReadyToSign(pkt *psbt.Packet) error { + if !hasSilentPaymentOutputs(pkt) { + return nil + } + if err := validateSigHashPolicy(pkt); err != nil { + return err + } + + for _, output := range pkt.Outputs { + if output.SPV0Info == nil { + continue + } + if len(output.Script) == 0 { + return ErrOutputScriptsMissing + } + } + + return nil +} + +func ownedEligibleInputs(analysis *Analysis, + owned []OwnedInput) ([]*ownedEligibleInput, error) { + + ownedByIndex := make(map[int]*ownedEligibleInput, len(owned)) + for _, input := range owned { + if _, ok := ownedByIndex[input.Index]; ok { + return nil, fmt.Errorf("%w: %d", ErrDuplicateOwnedInput, input.Index) + } + + eligible := analysis.EligibleInputsByIdx[input.Index] + if eligible == nil { + return nil, fmt.Errorf("input %d is not a silent payment eligible input", input.Index) + } + + scalar, publicKey, err := parseSecret(input.Secret) + if err != nil { + return nil, err + } + if !bytes.Equal(publicKey.SerializeCompressed(), eligible.PublicKeyBytes) { + return nil, fmt.Errorf("%w for input %d", ErrOwnedInputMismatch, input.Index) + } + + ownedByIndex[input.Index] = &ownedEligibleInput{ + Eligible: eligible, + Secret: input.Secret, + Scalar: scalar, + } + } + + ordered := make([]*ownedEligibleInput, 0, len(ownedByIndex)) + for _, eligible := range analysis.EligibleInputs { + ownedInput := ownedByIndex[eligible.Index] + if ownedInput != nil { + ordered = append(ordered, ownedInput) + } + } + + return ordered, nil +} + +func upsertGlobalProof(pkt *psbt.Packet, analysis *Analysis, group *OutputGroup, + existingShare *psbt.SilentPaymentECDHShare, + existingProof *psbt.SilentPaymentDLEQProof, + secret btcec.ModNScalar) error { + + shareBytes, proofBytes, err := generateShareAndProof(secret, group.ScanKey) + if err != nil { + return err + } + if existingShare != nil { + if !bytes.Equal(existingShare.Share, shareBytes) { + return fmt.Errorf("global share mismatch for scan key %x", group.ScanKeyBytes) + } + } else { + pkt.GlobalSPECDHShares = append(pkt.GlobalSPECDHShares, + psbt.SilentPaymentECDHShare{ + ScanKey: append([]byte(nil), group.ScanKeyBytes...), + Share: shareBytes, + }, + ) + } + + if existingProof != nil { + if err := verifyProofPair( + analysis.SummedInputKey, group.ScanKey, shareBytes, existingProof.Proof, + ); err != nil { + return err + } + return nil + } + + pkt.GlobalSPDLEQProofs = append(pkt.GlobalSPDLEQProofs, + psbt.SilentPaymentDLEQProof{ + ScanKey: append([]byte(nil), group.ScanKeyBytes...), + Proof: proofBytes, + }, + ) + + return nil +} + +func upsertInputProof(pkt *psbt.Packet, owned *ownedEligibleInput, + group *OutputGroup, existingShare *psbt.SilentPaymentECDHShare, + existingProof *psbt.SilentPaymentDLEQProof) error { + + shareBytes, proofBytes, err := generateShareAndProof(owned.Scalar, group.ScanKey) + if err != nil { + return err + } + if existingShare != nil { + if !bytes.Equal(existingShare.Share, shareBytes) { + return fmt.Errorf("input %d share mismatch for scan key %x", + owned.Eligible.Index, group.ScanKeyBytes) + } + } else { + pkt.Inputs[owned.Eligible.Index].SPECDHShares = append( + pkt.Inputs[owned.Eligible.Index].SPECDHShares, + psbt.SilentPaymentECDHShare{ + ScanKey: append([]byte(nil), group.ScanKeyBytes...), + Share: shareBytes, + }, + ) + } + + if existingProof != nil { + if err := verifyProofPair( + owned.Eligible.PublicKey, group.ScanKey, shareBytes, existingProof.Proof, + ); err != nil { + return err + } + return nil + } + + pkt.Inputs[owned.Eligible.Index].SPDLEQProofs = append( + pkt.Inputs[owned.Eligible.Index].SPDLEQProofs, + psbt.SilentPaymentDLEQProof{ + ScanKey: append([]byte(nil), group.ScanKeyBytes...), + Proof: proofBytes, + }, + ) + + return nil +} + +func validateSigHashPolicy(pkt *psbt.Packet) error { + for i, input := range pkt.Inputs { + if input.SighashType != 0 && input.SighashType != txscript.SigHashAll { + return fmt.Errorf("%w for input %d", ErrSigHashAllRequired, i) + } + } + + return nil +} + +func hasSilentPaymentOutputs(pkt *psbt.Packet) bool { + for _, output := range pkt.Outputs { + if output.SPV0Info != nil { + return true + } + } + + return false +} + +func parseSecret(secret [32]byte) (btcec.ModNScalar, *btcec.PublicKey, error) { + var scalar btcec.ModNScalar + if scalar.SetBytes(&secret) != 0 || scalar.IsZero() { + return btcec.ModNScalar{}, nil, fmt.Errorf("invalid input secret scalar") + } + + privKey := btcec.PrivKeyFromScalar(&scalar) + return scalar, privKey.PubKey(), nil +} + +func sumOwnedScalars(inputs []*ownedEligibleInput) btcec.ModNScalar { + var total btcec.ModNScalar + for _, input := range inputs { + total.Add(&input.Scalar) + } + + return total +} + +func generateShareAndProof(secret btcec.ModNScalar, + scanKey *btcec.PublicKey) ([]byte, []byte, error) { + + sharePoint := scalarMultiply(scanKey, &secret) + sharePubKey, ok := jacobianToPublicKey(&sharePoint) + if !ok { + return nil, nil, fmt.Errorf("invalid ecdh share point") + } + + var auxRand [32]byte + if _, err := rand.Read(auxRand[:]); err != nil { + return nil, nil, err + } + + secretBytes := secret.Bytes() + proof, err := dleq.GenerateProof( + secretBytes, scanKey, auxRand, btcec.Generator(), nil, + ) + if err != nil { + return nil, nil, err + } + + return sharePubKey.SerializeCompressed(), proof[:], nil +} diff --git a/go/sp/signer_test.go b/go/sp/signer_test.go new file mode 100644 index 0000000..871ae58 --- /dev/null +++ b/go/sp/signer_test.go @@ -0,0 +1,134 @@ +package sp + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func TestAddSharesAndProofsGlobal(t *testing.T) { + vector := vectorByDescription(t, + "can finalize: two inputs single-signer - using global ECDH share", + ) + packet := decodePacket(t, vector.PSBT) + packet.GlobalSPECDHShares = nil + packet.GlobalSPDLEQProofs = nil + for i := range packet.Inputs { + packet.Inputs[i].SPECDHShares = nil + packet.Inputs[i].SPDLEQProofs = nil + } + + owned := ownedInputsFromVector(t, vector) + if err := AddSharesAndProofs(packet, owned); err != nil { + t.Fatalf("AddSharesAndProofs: %v", err) + } + + if len(packet.GlobalSPECDHShares) != 1 { + t.Fatalf("global shares = %d, want 1", len(packet.GlobalSPECDHShares)) + } + if len(packet.GlobalSPDLEQProofs) != 1 { + t.Fatalf("global proofs = %d, want 1", len(packet.GlobalSPDLEQProofs)) + } + if len(packet.Inputs[0].SPECDHShares) != 0 || len(packet.Inputs[1].SPECDHShares) != 0 { + t.Fatalf("expected global mode only") + } + + expectedShare, _ := hex.DecodeString(vector.ExpectedECDHShares[0].ECDHResult) + if !bytes.Equal(packet.GlobalSPECDHShares[0].Share, expectedShare) { + t.Fatalf("global share mismatch") + } + if err := VerifySharesAndProofs(packet); err != nil { + t.Fatalf("VerifySharesAndProofs: %v", err) + } +} + +func TestAddSharesAndProofsPerInput(t *testing.T) { + vector := vectorByDescription(t, + "can finalize: two inputs single-signer - using per-input ECDH shares", + ) + packet := decodePacket(t, vector.PSBT) + packet.GlobalSPECDHShares = nil + packet.GlobalSPDLEQProofs = nil + for i := range packet.Inputs { + packet.Inputs[i].SPECDHShares = nil + packet.Inputs[i].SPDLEQProofs = nil + } + + owned := ownedInputsFromVector(t, vector)[:1] + if err := AddSharesAndProofs(packet, owned); err != nil { + t.Fatalf("AddSharesAndProofs: %v", err) + } + + if len(packet.GlobalSPECDHShares) != 0 || len(packet.GlobalSPDLEQProofs) != 0 { + t.Fatalf("expected per-input mode") + } + if len(packet.Inputs[0].SPECDHShares) != 1 || len(packet.Inputs[0].SPDLEQProofs) != 1 { + t.Fatalf("expected owned input share+proof") + } + if len(packet.Inputs[1].SPECDHShares) != 0 || len(packet.Inputs[1].SPDLEQProofs) != 0 { + t.Fatalf("expected untouched non-owned input") + } + + expectedShare, _ := hex.DecodeString(vector.ExpectedECDHShares[0].ECDHResult) + if !bytes.Equal(packet.Inputs[0].SPECDHShares[0].Share, expectedShare) { + t.Fatalf("per-input share mismatch") + } + if err := VerifySharesAndProofs(packet); err != nil { + t.Fatalf("VerifySharesAndProofs: %v", err) + } +} + +func TestVerifySharesAndProofsRejectsInvalidVectors(t *testing.T) { + tests := []string{ + "ecdh coverage: PSBT_IN_SP_DLEQ missing for input with ECDH share", + "ecdh coverage: PSBT_GLOBAL_SP_DLEQ missing with global ECDH share", + "ecdh coverage: invalid proof set for PSBT_IN_SP_DLEQ field", + "ecdh coverage: invalid proof set for PSBT_GLOBAL_SP_DLEQ field", + } + + for _, description := range tests { + t.Run(description, func(t *testing.T) { + vector := invalidVectorByDescription(t, description) + packet := decodePacket(t, vector.PSBT) + if err := VerifySharesAndProofs(packet); err == nil { + t.Fatalf("expected share/proof validation failure") + } + }) + } +} + +func TestValidateReadyToSign(t *testing.T) { + inProgress := vectorByDescription(t, + "in progress: no ECDH shares - no PSBT_OUT_SCRIPT", + ) + if err := ValidateReadyToSign(decodePacket(t, inProgress.PSBT)); err == nil { + t.Fatalf("expected missing script failure") + } + + invalid := invalidVectorByDescription(t, + "input eligibility: non-SIGHASH_ALL signature on input with silent payments output", + ) + if err := ValidateReadyToSign(decodePacket(t, invalid.PSBT)); err == nil { + t.Fatalf("expected sighash failure") + } +} + +func ownedInputsFromVector(t *testing.T, vector *bip375ValidVector) []OwnedInput { + t.Helper() + + owned := make([]OwnedInput, 0, len(vector.InputKeys)) + for _, input := range vector.InputKeys { + var secret [32]byte + decoded, err := hex.DecodeString(input.PrivateKey) + if err != nil { + t.Fatalf("decode private key: %v", err) + } + copy(secret[:], decoded) + owned = append(owned, OwnedInput{ + Index: input.InputIndex, + Secret: secret, + }) + } + + return owned +} diff --git a/go/sp/types.go b/go/sp/types.go new file mode 100644 index 0000000..e6fd8ae --- /dev/null +++ b/go/sp/types.go @@ -0,0 +1,59 @@ +package sp + +import ( + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// Analysis is the normalized silent-payment view of a PSBT packet. +type Analysis struct { + EligibleInputs []*EligibleInput + EligibleInputsByIdx map[int]*EligibleInput + SilentOutputs []*SilentOutput + OutputGroups []*OutputGroup + OutputGroupByScan map[string]*OutputGroup + SummedInputKey *btcec.PublicKey + InputHash chainhash.Hash +} + +// EligibleInput is an input that contributes to silent-payment derivation. +type EligibleInput struct { + Index int + PublicKey *btcec.PublicKey + PublicKeyBytes []byte + PrevTxID chainhash.Hash + PrevTxIndex uint32 + Amount int64 + Script []byte +} + +// OutPointKey serializes the input outpoint in transaction order. +func (in *EligibleInput) OutPointKey() [36]byte { + var key [36]byte + copy(key[:32], in.PrevTxID[:]) + key[32] = byte(in.PrevTxIndex) + key[33] = byte(in.PrevTxIndex >> 8) + key[34] = byte(in.PrevTxIndex >> 16) + key[35] = byte(in.PrevTxIndex >> 24) + return key +} + +// SilentOutput is a silent-payment output with its k ordering already assigned. +type SilentOutput struct { + Index int + Amount int64 + ScanKey *btcec.PublicKey + ScanKeyBytes []byte + SpendKey *btcec.PublicKey + SpendKeyBytes []byte + Label *uint32 + Script []byte + K uint32 +} + +// OutputGroup groups silent-payment outputs that share the same scan key. +type OutputGroup struct { + ScanKey *btcec.PublicKey + ScanKeyBytes []byte + SilentOutputs []*SilentOutput +} From badce8587088846be4790c65ab2b7ebedd62b6d6 Mon Sep 17 00:00:00 2001 From: otaliptus Date: Tue, 31 Mar 2026 13:39:20 +0200 Subject: [PATCH 3/5] go: use published dleq374 v0.1.0 and psbt-v2 v0.2.0 --- go/go.mod | 8 ++------ go/go.sum | 4 ++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go/go.mod b/go/go.mod index 6e1610e..8aaf49e 100644 --- a/go/go.mod +++ b/go/go.mod @@ -7,8 +7,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 github.com/btcsuite/btcd/btcutil v1.1.6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 - github.com/otaliptus/dleq374 v0.0.0 - github.com/otaliptus/psbt-v2 v0.1.0 + github.com/otaliptus/dleq374 v0.1.0 + github.com/otaliptus/psbt-v2 v0.2.0 ) require ( @@ -18,7 +18,3 @@ require ( golang.org/x/crypto v0.33.0 // indirect golang.org/x/sys v0.30.0 // indirect ) - -replace github.com/otaliptus/psbt-v2 => ../../psbt-v2 - -replace github.com/otaliptus/dleq374 => ../../dleq374 diff --git a/go/go.sum b/go/go.sum index 86c1cb8..deb3f54 100644 --- a/go/go.sum +++ b/go/go.sum @@ -65,6 +65,10 @@ github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/otaliptus/dleq374 v0.1.0 h1:sW0HKS/4OQ69YszPNAt2i6kJxLOmVrKoMKOoVXXcPKM= +github.com/otaliptus/dleq374 v0.1.0/go.mod h1:6m8WwIRWH7HXbBJcwPhECFRnKN3PJpabtgmSaCvwDw0= +github.com/otaliptus/psbt-v2 v0.2.0 h1:6Kqhdc2buK5S9OyMEhCQ0JfhvSYq4869xik2UVHDKNQ= +github.com/otaliptus/psbt-v2 v0.2.0/go.mod h1:XBVwrGr05MfwHo7ggCGTOnFthC+l/v5ls8wSclWh6y4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= From cba453335137feb174f07908290f3783775af49c Mon Sep 17 00:00:00 2001 From: otaliptus Date: Tue, 31 Mar 2026 15:49:56 +0200 Subject: [PATCH 4/5] fix: restore shared v1.1 vectors, use local v1.2 for sp/ tests --- bip375_test_vectors.json | 3812 +++++++++++--------------- go/bip375_test.go | 138 +- go/sp/analysis_test.go | 2 +- go/testdata/bip375_test_vectors.json | 2285 +++++++++++++++ 4 files changed, 3956 insertions(+), 2281 deletions(-) create mode 100644 go/testdata/bip375_test_vectors.json diff --git a/bip375_test_vectors.json b/bip375_test_vectors.json index 96aa1bc..7b9a627 100644 --- a/bip375_test_vectors.json +++ b/bip375_test_vectors.json @@ -1,2285 +1,1717 @@ { "description": "BIP-375 Test Vectors", - "version": "1.2", + "version": "1.1", "notes": [ "Generated by https://github.com/macgyver13/bip375-test-generator/", - "Each vector includes: psbt (source of truth), supporting material (input_keys, scan_keys, expected_ecdh_shares, expected_outputs)", - "PSBTs are base64-encoded and all that is needed to process each test vector", - "'checks' can be used to force specific validation behavior that would otherwise be caught by a previous validation" + "Each vector includes: base64-encoded psbt and description", + "Supplementary material (inputs, outputs, sp_proofs) is included for diagnostics and should not be used for validation", + "'checks' overrides the validation sequence, e.g. skip structure checks to test input eligibility" ], "invalid": [ { - "description": "psbt structure: missing PSBT_OUT_SP_V0_INFO with PSBT_OUT_SP_V0_LABEL set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFNY5MmkoYqc0RjwIJDvxYLR+NJpQIgIChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG9HMEQCIDgWtRJgHGUognetBjF/dlbjZc3Mgxr+v0JsexGJHd0GAiBU5t4oAmM0dYTMc11jbYAApfG8+Wy5KpKhZrLQCbJFgAEBAwQBAAAAIgYChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA9jbPKfxq8ad7tL6v24zm2x2c1Z9T3pGy/xJFhVJK3TmIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApG9OVSZ0BPWBsxDn+MgbvZuByUtyEm3vgg+mrcfXNJSh3Aql26Fa1JM1vaHUERQP/9G5qIMWRDeJanFBqq3B5AABAwgYcwEAAAAAAAEEIlEgiaex33v0LtfPo+K+RaviRv7ZEtpQrsi8zzY0FcruVOgBCgQBAAAAAA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "c25839dda6d71ad481aa43158081b34d225c85f9d54e1303357cd8f3fcdefcb6", - "public_key": "0286102f9f8f90f86c2d36e0996f80977c365cbfd64ee7b509c9a14b1a98e65c6f", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014d63932692862a734463c08243bf160b47e349a50", - "amount": 100000, - "witness_utxo": "a086010000000000160014d63932692862a734463c08243bf160b47e349a50", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "03d8db3ca7f1abc69deed2fabf6e339b6c7673567d4f7a46cbfc491615492b74e6", - "dleq_proof": "a46f4e55267404f581b310e7f8c81bbd9b81c94b72126def820fa6adc7d73494a1dc0aa5dba15ad49335bda1d411140fffd1b9a883164437896a7141aaadc1e4", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "sp_label": 1 - } - ] + "description": "psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgfCTD+UpVH5TLj1wOA8yaFwh/sU1xSl0vTp/Ux4nT02YBCgQBAAAAAA==", + "supplementary": {} }, { - "description": "psbt structure: PSBT_OUT_SP_V0_INFO field with incorrect size", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAefoLDnlpWqmrgvflVVUbHs+D5hIgIDtW9awShFqOWmqYvraEJ8JaHFMkv8jx2UdScnyFDLOC9IMEUCIQDZiUrSj4FF8Zv1BhpuSSLwk84Mqk+fh4OLE+utVI4oOQIgC/d5rOxZApTq1P2JrAIZoqhXGTD8WToULyjYaz0BSuoBAQMEAQAAACIGA7VvWsEoRajlpqmL62hCfCWhxTJL/I8dlHUnJ8hQyzgvCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQL8CneuJGp4pJMmWrOih4gzXfJBJc828qtz2Mt641z6KyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQCTa7jLOkrQbduwTnnrwEnbFSz1AE4YOUlk9Ix1ieU5nx58WH6Le1OXEbHl1wETRGV6vChpAMYi1pCOYXnaUROQAAQMIGHMBAAAAAAABBCJRIAnuKWALmmBT3Qbo/L7MMA4ySBd4v2qchxExaF2aEwzXAQlBAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OAA", - "input_keys": [ - { - "input_index": 0, - "private_key": "44173e285478bd01c83476d6f637612ac2b2694687ed03be16fbcd482bf8780c", - "public_key": "03b56f5ac12845a8e5a6a98beb68427c25a1c5324bfc8f1d94752727c850cb382f", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", - "amount": 100000, - "witness_utxo": "a086010000000000160014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02fc0a77ae246a78a493265ab3a28788335df24125cf36f2ab73d8cb7ae35cfa2b", - "dleq_proof": "24daee32ce92b41b76ec139e7af01276c54b3d4013860e52593d231d62794e67c79f161fa2ded4e5c46c7975c044d1195eaf0a1a403188b5a423985e769444e4", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "psbt structure: incorrect byte length for PSBT_OUT_SP_V0_INFO field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUECekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84AA=", + "supplementary": {} }, { - "description": "psbt structure: PSBT_IN_SP_ECDH_SHARE field with incorrect size", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFEQ72tqE3Cqh/nU90NX6HjDW43xUIgIC4ofyKqDO0HspNQi7dlGg3e0gBBDU+Ga0gTMIeUc2JitIMEUCIQCv3NRjggIaGQD2kA1tegUHUlweBxwD80zNYBQS8yK30gIgM5+EJ3oMtcnyp8H7UEEqxRRZC/I9zBJnac/7z/efr5wBAQMEAQAAACIGAuKH8iqgztB7KTUIu3ZRoN3tIAQQ1PhmtIEzCHlHNiYrCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIALqvWjVeKCJ9dga4exEnWk7lWxiFnSRj3EmfdE9vtiqIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhADOpeXrsaDKLIt9mfxRj0CcxvROIwAk0GIwx21QWnAM9dQpd8Yan9BtyYa45PIHKLxDbK9KEWIJXTTbcMv9j03wABAwgYcwEAAAAAAAEEIlEgnOScfMA0t2Eu1PEdoE2srQERuqb3dTKAGnKWoqt8GHsBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "5248d646f7e8eb231a8be341dd036164fdc3ebc899bc9aa5926a365a05c69306", - "public_key": "02e287f22aa0ced07b293508bb7651a0dded200410d4f866b4813308794736262b", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", - "amount": 100000, - "witness_utxo": "a086010000000000160014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02eabd68d578a089f5d81ae1ec449d693b956c621674918f71267dd13dbed8aaf3", - "dleq_proof": "0cea5e5ebb1a0ca2c8b7d99fc518f409cc6f44e230024d06230c76d505a700cf5d42977c61a9fd06dc986b8e4f20728bc436caf4a1162095d34db70cbfd8f4df", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "psbt structure: incorrect byte length for PSBT_IN_SP_ECDH_SHARE field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GggA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QoiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECKE7OYVUX3K9bolxSuuQmz41SoQqm7i1bNDt7SHfihmVmLMSKKSeC9fpXOEFP3xbKKy1Q6aHB2AOPOiYIu4yAhAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": {} }, { - "description": "psbt structure: PSBT_IN_SP_DLEQ field with incorrect size", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFIsz+gR2emjThvO8jOuDLydi8VMsIgIC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk5HMEQCICtvJ3Gw46n8FLt/IsqPSdLXHg0MpsBRiykmbu+dMlGhAiARjjxezcE9SXYjXfyege8GpQRwxgEKF0qGmsc12RHX4wEBAwQBAAAAIgYC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk4IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+uOsB5kdbxfuE8FF8KrH7HrYZXKPKIVznZwnyvipkJAIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4Gg/8SnsAvQSC/6sYl4xdje09ttq/j9uFeAjlRTTv8z+t+gNTc4qFrcCfGXDwruWHA+AIcjDYC61O19qXproBn5HAAEDCBhzAQAAAAAAAQQiUSCVPdDTr9zAmYqb2bA5557SE759F0c99YEnBpxMlEtaDQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "3c60a34afb1fe4401bd076b659a7f10479bfa71962ed690c074192b27f6f9fab", - "public_key": "02eeaa1a710f3d550139a22bc547a7dc3493036c5e6958258a46d0b1470b3e2e4e", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00148b33fa04767a68d386f3bc8ceb832f2762f1532c", - "amount": 100000, - "witness_utxo": "a0860100000000001600148b33fa04767a68d386f3bc8ceb832f2762f1532c", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "03eb8eb01e6475bc5fb84f0517c2ab1fb1eb6195ca3ca215ce76709f2be2a64240", - "dleq_proof": "f129ec02f4120bfeac625e317637b4f6db6afe3f6e15e0239514d3bfccfeb7e80d4dce2a16b7027c65c3c2bb961c0f8021c8c3602eb53b5f6a5e9ae8067e47", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "psbt structure: incorrect byte length for PSBT_IN_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4Gg/ihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": {} }, { - "description": "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE with PSBT_OUT_SCRIPT set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAQABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDeM24yd5PsucYRpiAfNv3+SGDqYIgICUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VBHMEQCIAbAProkk8YVpB4aFsIZhQaZx/cBm5c9mMKjMDHKNkT9AiB9ZrQDuH4k0C/Pbjr7/XE+ViCs5nnR90VaYwGdNejGcgEBAwQBAAAAIgYCUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAlE9+M8SHC0wScd4Qes2geenYi8ZI/tP4LYV5Ve6B23NIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAl2BTHcUD+J2qR9LTazkZ2QUQKc9f2BHJ2PWbdQ+LR/7Iu9WK2h83XaKPPaDx49p8bKumsO5ZD9WO7wjHRr6h8AABAwgYcwEAAAAAAAEEIlEgrStJYunsW62Ao66yvX2ZC4imTt6FodjZIU8sj+KYz04BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "64a394a29ab6a122c133503beb5d4f97904aa648cefae5be113fc565f0401a46", - "public_key": "0250a89b9d88c487a6fb5a67332f21cc14965f25cb05541c673f9d8de49938f950", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014378cdb8c9de4fb2e7184698807cdbf7f92183a98", - "amount": 100000, - "witness_utxo": "a086010000000000160014378cdb8c9de4fb2e7184698807cdbf7f92183a98", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02513df8cf121c2d3049c77841eb3681e7a7622f1923fb4fe0b615e557ba076dcd", - "dleq_proof": "9760531dc503f89daa47d2d36b3919d9051029cf5fd811c9d8f59b750f8b47fec8bbd58ada1f375da28f3da0f1e3da7c6caba6b0ee590fd58eef08c746bea1f0", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE field is non-zero when PSBT_OUT_SCRIPT set for sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAQABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": {} }, { - "description": "psbt structure: P2WPKH output missing PSBT_OUT_SCRIPT", + "description": "psbt structure: missing PSBT_OUT_SCRIPT field when sending to non-sp output", "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "amount": 100000, - "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": false, - "script": "00148e758d15b9d2156a6aabb2d72039df9be1d6882d" - } - ] + "supplementary": {} }, { - "description": "ecdh coverage: PSBT_OUT_SCRIPT set - no eligible inputs", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiBPa2xI91PQstsuV3qY9lLMD4wBpxZ0Jhhhb5ag+ezmZwEPBAAAAAABASughgEAAAAAACIAIB2bNL8u4YvW9Z4R+E7O66goncgTp1+NAHD0k10GPiNTAQVHUiEC56vDvz9lfIbl1BJOulwNRIBeRyayowpIk0Uq7sD2jjMhAs9V0KWJYJNaPDFNHF/bdjQEltr48iNf3YEf0tAmqzogUq4BEAT+////AAEDCJBfAQAAAAAAAQQiUSDN452LBbSW+PGPILJ9CvmjIzMJ4EciGeCBP/O103h+KQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "", - "public_key": "", - "prevout_txid": "4f6b6c48f753d0b2db2e577a98f652cc0f8c01a716742618616f96a0f9ece667", - "prevout_index": 0, - "prevout_scriptpubkey": "522102e7abc3bf3f657c86e5d4124eba5c0d44805e4726b2a30a4893452aeec0f68e332102cf55d0a58960935a3c314d1c5fdb76340496daf8f2235fdd811fd2d026ab3a2052ae", - "amount": 100000, - "witness_utxo": "a0860100000000002200201d9b34bf2ee18bd6f59e11f84eceeba8289dc813a75f8d0070f4935d063e2353", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEAAA=", + "supplementary": {} }, { - "description": "ecdh coverage: PSBT_OUT_SCRIPT set - Input 0 missing PSBT_IN_SP_ECDH_SHARE", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDxT02F6f8rk5fw3RdNMtFyGpWXjIgYDGay7QpMJFKviJRJWoC/DiK1zKZhf8zjyOW5d8vzXAI4IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBHxAnAAAAAAAAFgAUZJ3VtVj6wOqCxBxTWQ+4AVitrqsBAwQBAAAAIgYDR8B6aC7GCZYHq9QtSnEj78YAyOaEYwsQRLStBT9MyOMIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAqkM6lA7txq0r/lcPawe6pujEm3yuG+OhOF+ChIj/jBdIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA3jQXPoIjXscnE4eNtOA4k/mKVqlsi64xN+GCbytTNAmF3s7bWX5I6HBGtE/juvonLwUe6wraLdQztRJPuMAdLgABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "430d79a4721a6e11791d4e2387ecc7f633e26c379d50836146f2652ee4bcd3e9", - "public_key": "0319acbb42930914abe2251256a02fc388ad7329985ff338f2396e5df2fcd7008e", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", - "amount": 100000, - "witness_utxo": "a0860100000000001600143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "55d102ae15590740b3c2a3f45e0080fceb61c1e66e4f5b83b5629c79b9e970b9", - "public_key": "0347c07a682ec6099607abd42d4a7123efc600c8e684630b1044b4ad053f4cc8e3", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014649dd5b558fac0ea82c41c53590fb80158adaeab", - "amount": 10000, - "witness_utxo": "1027000000000000160014649dd5b558fac0ea82c41c53590fb80158adaeab", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02a90cea503bb71ab4aff95c3dac1eea9ba3126df2b86f8e84e17e0a1223fe305d", - "dleq_proof": "de34173e82235ec72713878db4e03893f98a56a96c8bae3137e1826f2b53340985decedb597e48e87046b44fe3bafa272f051eeb0ada2dd433b5124fb8c01d2e", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: only one ineligible P2MS input when PSBT_OUT_SCRIPT set for sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiBPa2xI91PQstsuV3qY9lLMD4wBpxZ0Jhhhb5ag+ezmZwEPBAAAAAABASughgEAAAAAACIAIOr39e5jDu+omlGHtlFF4GmTiHzQv1oD8JZFgXkxw/hiAQVHUiEDaGidhEg6mw9BaLYu3+hU5d5PRyw42+0S4nN0susnfjohArPI8nEqzmYLPLqq/KShgFDY2qzp8YMkjzj0SWjwUgPjUq4BEAT+////AAEDCJBfAQAAAAAAAQQiUSDN452LBbSW+PGPILJ9CvmjIzMJ4EciGeCBP/O103h+KQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "", + "public_key": "", + "prevout_txid": "4f6b6c48f753d0b2db2e577a98f652cc0f8c01a716742618616f96a0f9ece667", + "prevout_index": 0, + "prevout_scriptpubkey": "52210368689d84483a9b0f4168b62edfe854e5de4f472c38dbed12e27374b2eb277e3a2102b3c8f2712ace660b3cbaaafca4a18050d8daace9f183248f38f44968f05203e352ae", + "amount": 100000, + "witness_utxo": "a086010000000000220020eaf7f5ee630eefa89a5187b65145e06993887cd0bf5a03f09645817931c3f862", + "sequence": 4294967294, + "signed": false + } + ] + } }, { - "description": "ecdh coverage: ineligible P2SH multisig input with PSBT_IN_SP_ECDH_SHARE set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFGQsdnVS9WbnQ9FJkG1fse58XpgxIgIDM056vEvzEKkUqL/1xNyYd+OfuYwp87m3JLcmKtoCXndIMEUCIQC909hzvqoeSIY55VKqXQJ7phOMCnijgpRd685MAjpzSwIgd1dOqfIds66Z19I9SAHRPW+ufmaitjYvwAFxyC191JIBAQMEAQAAACIGAzNOerxL8xCpFKi/9cTcmHfjn7mMKfO5tyS3JiraAl53CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQKeeXAIIOdcIM6T/vaSPO7hDcegKiaChjNNNJvDUwdY4CIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQBKmAZaZAA2S/VIXviINqDyjfah/WyZXUhB9CVwa7ZDcHxOdYz6JlNq7/t/eHTv/xB284nObLVDvF5+Nn6YOWmYAAQ4gUiGLvep4p9TYg4U1sX9K6QQFl0+VM/CxF93lPheFtM0BDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFGpD3BMBL8sWVg7lT7XguKv3OOjHhwAAAAABBEdSIQPVOoWTDkyGApzvXClAN7KEqbHYvU9N2nV7M+OQEyoYaiECZxHk5V3VoFosvOvxk2NPLqQLJ7xRa/+0m3YdQA55OR5SrgEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCECKrXjNjkkbu1twzP7pfGGsMZntq9j6E3XGXRhIPFhhgkiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCJBfAQAAAAAAAQQiUSCOn79aVOo8uqob5zkdUxsiTChJVUQyICIp2Y17j/lUzAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "891210857d34d7fec9189e07a2c60d18e28862084bb776ace0b7ce792811d788", - "public_key": "03334e7abc4bf310a914a8bff5c4dc9877e39fb98c29f3b9b724b7262ada025e77", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014642c767552f566e743d149906d5fb1ee7c5e9831", - "amount": 100000, - "witness_utxo": "a086010000000000160014642c767552f566e743d149906d5fb1ee7c5e9831", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "", - "public_key": "", - "prevout_txid": "52218bbdea78a7d4d8838535b17f4ae90405974f9533f0b117dde53e1785b4cd", - "prevout_index": 0, - "prevout_scriptpubkey": "a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c787", - "amount": 150000, - "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c78700000000", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "029e79700820e75c20ce93fef6923ceee10dc7a02a268286334d349bc3530758e0", - "dleq_proof": "12a6019699000d92fd5217be220da83ca37da87f5b265752107d095c1aed90dc1f139d633e8994dabbfedfde1d3bffc41dbce2739b2d50ef179f8d9fa60e5a66", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: missing PSBT_IN_SP_ECDH_SHARE field for input 0 when PSBT_OUT_SCRIPT set for sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBHxAnAAAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0BAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAuV6etywGNj7MVToDBS5elCZS0I1aEHqn8ExcGFEAOY3Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA9/o4HeILO0WcbkJsYhPUF1MI8kgqROMyhCMmJNTa/Vcymb868WqzAsViY2OjfUSHB/fnoevqBke8zUhiA7srpgABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 10000, + "witness_utxo": "10270000000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", + "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", + "input_index": 1 + } + ] + } }, { - "description": "ecdh coverage: ineligible P2TR input with NUMS point with PSBT_IN_SP_ECDH_SHARE set", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAQMEAQAAAAEQBP7///8BFyBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wCIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIHCUAAAAAAAABBCJRICdoyIruoiMiW6OthOeGNS+YKdLT6TeKOToL/1mvh83QAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "amount": 10000, - "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", - "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 9500, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: missing PSBT_IN_SP_DLEQ field for input when PSBT_IN_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbAAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": null, + "input_index": 0 + } + ] + } }, { - "description": "ecdh coverage: PSBT_IN_SP_DLEQ missing for input with ECDH share", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFHtGlnt4Ae5cblr2WBI4vJXR3Uf3IgICGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi9HMEQCICl5mQIMJajbJQi4828QgqMpetzEbTgU53p4Cs2A4oAZAiBtz57Lm+f5FiNLdizBp9FWaaMuEBmw31YHinHycS/rSQEBAwQBAAAAIgYCGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjOx0yEofm/fEp93vo6EX7SMH1brgaU1BudewL5ycg/UAAEDCBhzAQAAAAAAAQQiUSBmzzV1FT5/ranW9thWcerjbhydgiSeiRZVrCFL+wcMTgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "7629e714099688e08e1997c5160d9e3245b92a4a577e35a65e87394aedc7cea9", - "public_key": "021a85cafdc715a17b1a39009e1f443bfc777637a95c9ab6745291251799b1262f", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00147b46967b7801ee5c6e5af6581238bc95d1dd47f7", - "amount": 100000, - "witness_utxo": "a0860100000000001600147b46967b7801ee5c6e5af6581238bc95d1dd47f7", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0233b1d321287e6fdf129f77be8e845fb48c1f56eb81a53506e75ec0be72720fd4", - "dleq_proof": null, - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: missing PSBT_GLOBAL_SP_DLEQ field when PSBT_GLOBAL_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWwABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8AAQMIGHMBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b" + } + ] + } }, { - "description": "ecdh coverage: PSBT_GLOBAL_SP_DLEQ missing with global ECDH share", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPB+v1DXFGpdXkPirAqJyKA2tHjGkyFnRuQfYvVApTXLAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFOBcM4gPgo99FD9v7zQe7yX+3g3GIgID3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv1IMEUCIQCG9kMgbU6yZvzFjmh9PJ5GiQgDgnK55Kg2YnAAkpCsyAIgERHwj6qn50RyYllH88hF6+mw0/5BDey0qjI4EU9fhbwBIgYD3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv0IAAAAgAAAAAABEAT+////AAEDCBhzAQAAAAAAAQQiUSDDnTSb1YNs2ALoMbuDNmFCIkqZq7m1LDykjG91r9Q8NgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "b4872f85cd40dcff38b69357e576d4c07d858dbeea8c84becff4fbd9961465e9", - "public_key": "03dde2077daa539b1d06fb2a533488a845a0cacda4dac7f84bdd0f09ee97375efd", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014e05c33880f828f7d143f6fef341eef25fede0dc6", - "amount": 100000, - "witness_utxo": "a086010000000000160014e05c33880f828f7d143f6fef341eef25fede0dc6", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "03c1fafd435c51a975790f8ab02a272280dad1e31a4c859d1b907d8bd50294d72c" - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: invalid proof in PSBT_IN_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAbvHreDwFl9ZoVl4787j95b7SgVKV9D4XAVEk1EXcy9rdKkne51lhePEhbl1NuRdP/dpjNON8kDEQjAjOE3TeDwABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "6ef1eb783c0597d668565e3bf3b8fde5bed2815295f43e17015124d445dccbdadd2a49dee7596178f1216e5d4db9174ffdda6334e37c9031108c08ce1374de0f", + "input_index": 0 + } + ] + } }, { - "description": "ecdh coverage: invalid proof set for PSBT_IN_SP_DLEQ field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAgr3/YVdHIFOWuHpKQwXd6DSBVLIgICXCbc5UZbmVBMIzFf5EnA894M3JcVfPawyrhx2FIl0ERIMEUCIQCTmV/k3I2LHWx0jocsbtO96PKy2b7NGbh96UVSa66UZgIgWKyjIAGwt08vQoz6hf22RGXKyTLEkuVTrfrw9rqjzrYBAQMEAQAAACIGAlwm3OVGW5lQTCMxX+RJwPPeDNyXFXz2sMq4cdhSJdBECAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJxyHLqPYneVfmuOFJWkkjPD1CHRiunpHvhpX/ZFm5yVCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQG7x63g8BZfWaFZeO/O4/eW+0oFSlfQ+FwFRJNRF3Mva3SpJ3udZYXjxIW5dTbkXT/3aYzTjfJAxEIwIzhN03g8AAQMIGHMBAAAAAAABBCJRIO7Uxibb2h1MycABu4j+/n8WjCRunvsBSx9ot95uo+mAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "cfa305a017d9864ec736013b22f065fca58f61a6260ba51574d7a34f2ff0a2e9", - "public_key": "025c26dce5465b99504c23315fe449c0f3de0cdc97157cf6b0cab871d85225d044", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014082bdff615747205396b87a4a4305dde8348154b", - "amount": 100000, - "witness_utxo": "a086010000000000160014082bdff615747205396b87a4a4305dde8348154b", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0271c872ea3d89de55f9ae3852569248cf0f5087462ba7a47be1a57fd9166e7254", - "dleq_proof": "6ef1eb783c0597d668565e3bf3b8fde5bed2815295f43e17015124d445dccbdadd2a49dee7596178f1216e5d4db9174ffdda6334e37c9031108c08ce1374de0f", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] - }, - { - "description": "ecdh coverage: invalid proof set for PSBT_GLOBAL_SP_DLEQ field", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNDBMksBVkLlOZLw1AbzfZ45DClvF696vGYebl6l5bTziIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQOfI/UQrlNiKKmoskrQ0ZI+gB8n+CARyozeA0LUjKETQm9iLP+6G0S1DhsRlf7t4Xi0vFL/PkYV0P+EqyCUPldkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABTUngSlm21fKRLZ7J00iBNtfYrqcyICAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cSDBFAiEA1+5XK/EladCZ0DoztFrly7NMMwPdbWAWlbCWc3PQRZoCIALLp8z8ZSLZWa9P+X5KBTWbyzj8ovU6leoQThGTcTQzASIGAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cCAAAAIAAAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEg3cEaiL1DRRvH10ppoJUb0y80V5WMpQ1k5HzJhqOPJ8sBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "ccfd8b4533bd8512e141f2173714952247b4dbdd184b569bf53eb158ac9777fc", - "public_key": "0315c6e6e5dbe6d188fd6ca71e4ced5685044157d6a3163c19fbbbbc36552bce9c", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", - "amount": 100000, - "witness_utxo": "a086010000000000160014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "034304c92c05590b94e64bc3501bcdf678e430a5bc5ebdeaf19879b97a9796d3ce", - "dleq_proof": "bf1b45241c43a4bea753b80dd9586518c24c6d61c5f7c93fec10e17efafddebba2a34c0cd55b8be5dbb1da5c8ec94b73ba347a70036985f04133271be429140b" - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: invalid proof in PSBT_GLOBAL_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQOfI/UQrlNiKKmoskrQ0ZI+gB8n+CARyozeA0LUjKETQm9iLP+6G0S1DhsRlf7t4Xi0vFL/PkYV0P+EqyCUPldkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiAJB3pqpkrBSuehqk/mjAKs4gbJ6scjSQYa52A5ALkibgIgbxQypXj44zCvC5ACVnRryfTlKqLozHkCncjnajwpSwYBIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEDCBhzAQAAAAAAAQQiUSAybfUP4KB7estyBwvrO2Muua0VumlcweWqaqAHthRv2AEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "2430479d2da1310a024d2aab8e4c7b49d76cd51f45ee8127c159b0393a675b6f75c581ebe3d0817ddaf3bb598cfd7a022f1a87ed479664f6b947a47db5941cb2" + } + ] + } }, { - "description": "ecdh coverage: input missing public key for DLEQ verification", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFKkJAC8YQiiBGKj20aBob3jLA8fRIgIC+QeUX/NarS+zzXkylYSM32JpKr51wIPOoD+AuBfDLd5IMEUCIQDBej9o1Xd8J2Wbc6crbgxkky3S8L2g7dXi7KiDOThKvQIgX8TL/5MO7GYB56J543wWbWkzkYHQ4gwKq9H4XvWD+4oBAQMEAQAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEC/ebny4sNBQGQDx6SB9GIpmvc2BnriKAZ3vlxxiEphi8iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECsLMBBwTQlJZJhGMq4Wl73XQEztfttat6WaLjgA+Ul85zWb+ivvwlDB33tF4e7FeQEhtty0fQd6zfA0amukqy1AAEDCBhzAQAAAAAAAQQiUSCNmubvUqRjUcK00JR0WR5QncJP+slpS/lQZfcdYZwPbQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "9b8cf7af42b8942b381c224b1e7c40276fd465ef2715fd6288f24579003cfe6f", - "public_key": "02f907945ff35aad2fb3cd793295848cdf62692abe75c083cea03f80b817c32dde", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014a909002f1842288118a8f6d1a0686f78cb03c7d1", - "amount": 100000, - "witness_utxo": "a086010000000000160014a909002f1842288118a8f6d1a0686f78cb03c7d1", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02fde6e7cb8b0d0501900f1e9207d188a66bdcd819eb88a019def971c62129862f", - "dleq_proof": "ac2cc041c1342525926118cab85a5ef75d0133b5fb6d6ade9668b8e003e525f39cd66fe8afbf0943077ded1787bb15e40486db72d1f41deb37c0d1a9ae92acb5", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: missing PSBT_IN_BIP32_DERIVATION field for input when PSBT_IN_SP_DLEQ set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIGHMBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ] + } }, { - "description": "ecdh coverage: one input/three sp outputs (different scan keys) - Output 1 missing ECDH share for scan key", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwIQIfVB3kYWxVdP//YEVVhx7m2cH8BdbPXJ1d59cWV4r0GiIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQPSj6rRvNp1y7TrP4IFIBYxeEmNql4rqhqpenzrH8cxhiIeArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwQGoBeelXwuvMl6VzkVqiSToWWkHe5RwKSl7LOtJmxTHbTxp7OuSE/Xig6iLkTAkyf28yWUQC0SvRo/d1mmGfocEiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kAmhltGkay8P0zL8T5aPiY5azNm3UKX9Y5SXoj4Q5pvoeGF5x3J0Vee762X82mY6QZ0VLhG+a12ginaNRCOE+cUAAEDCJBfAQAAAAAAAQQiUSCItbo4EKf/zM5bRdqt8c+0PSZJ6Zu5o8LX6mg7EPKPxwEJQgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3gPycOClYyGDtqsBB06HfmgA2wD1x8XS+vu2j5wo1IVFJAABAwgQJwAAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUIDUteMQTkAMq2RgWppf8dA2OuQnPBNcIhSZLBR8jheJewC4MTBh7chX5l8hIWnW0WRtsKEd7laESO5lpItMVSGC/gAAQMIIE4AAAAAAAABBCJRIGYlLwRiDJctTPeBi5Z3dv0nYmZ1DVuEZSz5OdppcCBxAQlCArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwAhJoHj8J6uOKjy8/7NfdVvxYbPoCjoqzP3KpD4QKbSJcAA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", - "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", - "amount": 200000, - "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - }, - { - "scan_pubkey": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", - "spend_pubkey": "0212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_result": "03d28faad1bcda75cbb4eb3f820520163178498daa5e2baa1aa97a7ceb1fc73186", - "dleq_proof": "26865b4691acbc3f4ccbf13e5a3e26396b3366dd4297f58e525e88f8439a6fa1e185e71dc9d1579eefad97f36998e9067454b846f9ad768229da35108e13e714", - "input_index": 0 - }, - { - "scan_key": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", - "ecdh_result": "021f541de4616c5574ffff604555871ee6d9c1fc05d6cf5c9d5de7d716578af41a", - "dleq_proof": "6a0179e957c2ebcc97a573915aa2493a165a41dee51c0a4a5ecb3ad266c531db4f1a7b3ae484fd78a0ea22e44c09327f6f32594402d12bd1a3f7759a619fa1c1", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "output_index": 1, - "amount": 10000, - "is_silent_payment": true, - "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - }, - { - "output_index": 2, - "amount": 20000, - "is_silent_payment": true, - "sp_info": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab00212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" - } - ] + "description": "ecdh coverage: output 1 missing ECDH share for scan key with one input / three sp outputs (different scan keys)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwIQLChkR0sISqyB9uMKxe30ZnOTzmBNgI0/SZoJhOi1JJdCIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQN2iSMnxOeAru7UzhvJK7ASK3t5ENlvCtUUi0lvnD6S+yIeArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwQPCxHVHD/ROzjgpsjvwu4Mpxdzr2dLMVHmiSFJJcS1fIFojJ4Hi3UIhabKsoa1d+k6JJfrSWNrGvG2vILnyRElEiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCY8UrEWvZFmrDITUfaU2TPsUT/kL2scy+cq8bbAA3PGpXjsx97cKBCmKUbb9RRbIHXFsmVT4rxDD1ZgJruK704AAEDCJBfAQAAAAAAAQQiUSDTlxRqgoZbVOsSuepx1oJP6rD5KkgTf3p5OmhZazNnpAEJQgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3gPycOClYyGDtqsBB06HfmgA2wD1x8XS+vu2j5wo1IVFJAABAwgQJwAAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUIDUteMQTkAMq2RgWppf8dA2OuQnPBNcIhSZLBR8jheJewC4MTBh7chX5l8hIWnW0WRtsKEd7laESO5lpItMVSGC/gAAQMIIE4AAAAAAAABBCJRINLSQezkGFFKoY45kuyVPE1K1exwSmk+IQa6IsOwWnqDAQlCArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwAhJoHj8J6uOKjy8/7NfdVvxYbPoCjoqzP3KpD4QKbSJcAA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 200000, + "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_share": "0376892327c4e780aeeed4ce1bc92bb0122b7b7910d96f0ad5148b496f9c3e92fb", + "dleq_proof": "98f14ac45af6459ab0c84d47da5364cfb144ff90bdac732f9cabc6db000dcf1a95e3b31f7b70a04298a51b6fd4516c81d716c9954f8af10c3d59809aee2bbd38", + "input_index": 0 + }, + { + "scan_key": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", + "ecdh_share": "02c2864474b084aac81f6e30ac5edf4667393ce604d808d3f499a0984e8b524974", + "dleq_proof": "f0b11d51c3fd13b38e0a6c8efc2ee0ca71773af674b3151e689214925c4b57c81688c9e078b750885a6cab286b577e93a2497eb49636b1af1b6bc82e7c911251", + "input_index": 0 + } + ] + } }, { - "description": "ecdh coverage: two inputs/two sp outputs (different scan keys) - full coverage input 0 / partial coverage input 1", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCC4ZV7zqDk8ksC38OjggfXnThDXAQMEAQAAACIGA1eAk4qUq4QN0Un/gAGbqKSzjWBDNWhTN9QvFvMg8T9CCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQPSmrmKDlMLBkU2CDBFlWcMKs4KGm6L/2YWfaTl25R0DSIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQJelQZ5nVjSaUQhUadDMXvcmaL1Gxdtzkn5RxAuMo/aICIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQJ52mAHDYnPRofFro/SCMLvSrNbFjwV5vA4eh44zA3N5u6AJ49t94vwt3ZahgwOvlpBmpkLB/NOYFaWPlyxlEvMiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCkDOhjFtOOJBtfdU1Ww/T16tKFIawJebCR1/OxDQgyKq16JmJqg/MaYi/L5I6sp57UBLSrOPFhJS3YkuRm+TbxAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUHiGzqBEYegrE3RiwBcAMH55nsr0BAwQBAAAAIgYDLTwDMXNO4f1bfKHJedBq3RRqq+HK9CPxJXs1SFPUXroIAAAAgAEAAAABEAT+////Ih0DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94hAw4lnYl+tNS36Q8xW2rZTmfzLIe/5BBfATztWL0CXDSLIh4DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp95AF0toaWLYcAtry204piFY6gSnBFtf6658tfM/YygS8JIsSK6RjlZ83L/YE+dCAUBF8HRJg0syktGRg7zTFJvz1AABAwiQXwEAAAAAAAEEIlEg55VpES/6WkaFm1vMTxAX+53dUvCkav/egJr8IgXEe00BCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIO14uE3U/S365e8y8dW4QoVImNynbOkiABr1GJ1xf06cAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "5dc63715af6b5c0923c2a68c4c6728c93ce236b5fc3433237ba98633456a0340", - "public_key": "035780938a94ab840dd149ff80019ba8a4b38d604335685337d42f16f320f13f42", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", - "amount": 100000, - "witness_utxo": "a08601000000000016001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "3a52e933e65f5c89b5139adf381f5f4616140ed55b067ce3ede0de2c1f6760ba", - "public_key": "032d3c0331734ee1fd5b7ca1c979d06add146aabe1caf423f1257b354853d45eba", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", - "amount": 100000, - "witness_utxo": "a0860100000000001600141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_result": "025e9506799d58d269442151a743317bdc99a2f51b176dce49f947102e328fda20", - "dleq_proof": "a40ce86316d38e241b5f754d56c3f4f5ead28521ac0979b091d7f3b10d08322aad7a26626a83f31a622fcbe48eaca79ed404b4ab38f161252dd892e466f936f1", - "input_index": 0 - }, - { - "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "ecdh_result": "03d29ab98a0e530b06453608304595670c2ace0a1a6e8bff66167da4e5db94740d", - "dleq_proof": "9e769801c36273d1a1f16ba3f48230bbd2acd6c58f0579bc0e1e878e33037379bba009e3db7de2fc2ddd96a18303af969066a642c1fcd39815a58f972c6512f3", - "input_index": 0 - }, - { - "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "ecdh_result": "030e259d897eb4d4b7e90f315b6ad94e67f32c87bfe4105f013ced58bd025c348b", - "dleq_proof": "174b686962d8700b6bcb6d38a62158ea04a7045b5febae7cb5f33f632812f0922c48ae918e567cdcbfd813e742014045f07449834b3292d19183bcd3149bf3d4", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "output_index": 1, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - } - ] + "description": "ecdh coverage: input 1 missing ECDH share for output 1 with two inputs / two sp outputs (different scan keys)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQMJH9SAORd/RNe3npYWiEnGLrP4eADEZ2fFCo84+Y79FSIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQN2iSMnxOeAru7UzhvJK7ASK3t5ENlvCtUUi0lvnD6S+yIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQL4acjrvVeiYG5lZmpvBKzj4froBWMxwZokPImnK3kY7dzQal9KScZZNAcAkHMMi/VOQwpuZFg+CbzKTZYmMvwIiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCY8UrEWvZFmrDITUfaU2TPsUT/kL2scy+cq8bbAA3PGpXjsx97cKBCmKUbb9RRbIHXFsmVT4rxDD1ZgJruK704AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0BAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94hAnUEQAf+LQMNV3wymRzyo+deU1BCRbPL5bMFOufF8iBaIh4DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp95AOLnjgGtJvr7vxs7gZcKwZv2wCuzs8ei1sqr0fPBBeyma4KJW7Xy2yCcC63E31zv1eSccQoTQBuO1nXCpuWfYiQABAwiQXwEAAAAAAAEEIlEg9Jwu8ZtnBhG4bd7+iQzvlCaKgq4zHkb+GVHWxuNyPLEBCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRID2h4XbGT7RZU+xG4FA2NLx+jjQ6do2+77sKPojMSkyaAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 100000, + "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_share": "0376892327c4e780aeeed4ce1bc92bb0122b7b7910d96f0ad5148b496f9c3e92fb", + "dleq_proof": "98f14ac45af6459ab0c84d47da5364cfb144ff90bdac732f9cabc6db000dcf1a95e3b31f7b70a04298a51b6fd4516c81d716c9954f8af10c3d59809aee2bbd38", + "input_index": 0 + }, + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_share": "03091fd48039177f44d7b79e96168849c62eb3f87800c46767c50a8f38f98efd15", + "dleq_proof": "be1a723aef55e8981b99599a9bc12b38f87eba0158cc7066890f2269cade463b77341a97d29271964d01c0241cc322fd5390c29b99160f826f329365898cbf02", + "input_index": 0 + }, + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_share": "0275044007fe2d030d577c32991cf2a3e75e53504245b3cbe5b3053ae7c5f2205a", + "dleq_proof": "38b9e3806b49bebeefc6cee065c2b066fdb00aececf1e8b5b2aaf47cf0417b299ae0a256ed7cb6c82702eb7137d73bf579271c4284d006e3b59d70a9b967d889", + "input_index": 1 + } + ] + } }, { - "description": "ecdh coverage: two inputs/one sp output (two scan keys) - Input 1 missing ECDH share for scan key", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9QwwAAAAAAABYAFM8NLc80Opcz1DvlZOOmNS0vuHSJAQMEAQAAACIGAxTy+XFumCwYLG5b0wsRkvcWNE4fkULD6uCZ4DD/6SQcCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNgWcgdxSLLVFwETX/SQo9gXAbTNFR0U19fM8qaJC8/niIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQHZFB/NYpfXKCm+gpyWQ5O7LBXadkqsSisqwawqMo8+4mf2YbmQwGbC3ZDrMUAebm6s6Wzx+ArCWnQsowzEDsv8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfUMMAAAAAAAAWABSKNZWygLkaR792aIJ0jpRdHwKT9iIGA/810xysQ2pIRJZENx1ET2fBHj3e1EfIhM9BpxUcobY4CAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "369e3b011269dada79fdc86ee11ec5c639a7b18eb23076e535510b580a7b1300", - "public_key": "0314f2f9716e982c182c6e5bd30b1192f716344e1f9142c3eae099e030ffe9241c", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014cf0d2dcf343a9733d43be564e3a6352d2fb87489", - "amount": 50000, - "witness_utxo": "50c3000000000000160014cf0d2dcf343a9733d43be564e3a6352d2fb87489", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "001d9da0abfa70adb555a215816d8a01eeaa0c754b5a13f7f5c4f69a953b38f5", - "public_key": "03ff35d31cac436a48449644371d444f67c11e3dded447c884cf41a7151ca1b638", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "00148a3595b280b91a47bf766882748e945d1f0293f6", - "amount": 50000, - "witness_utxo": "50c30000000000001600148a3595b280b91a47bf766882748e945d1f0293f6", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "036059c81dc522cb545c044d7fd2428f605c06d3345474535f5f33ca9a242f3f9e", - "dleq_proof": "764507f358a5f5ca0a6fa0a72590e4eecb05769d92ab128acab06b0a8ca3cfb899fd986e643019b0b7643acc50079b9bab3a5b3c7e02b0969d0b28c33103b2ff", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "ecdh coverage: input 1 missing ECDH share for scan key with two inputs / one sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9QwwAAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfUMMAAAAAAAAWABRGM9WcrRNDR5ly4MmWkh0KXa22XSIGAkOg1A6d4IgnlBYXUrrkK6kJUnhCCfBjQw8K8lY1SoW7CAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 50000, + "witness_utxo": "50c3000000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 50000, + "witness_utxo": "50c30000000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ] + } }, { - "description": "input eligibility: segwit version greater than 1 in transaction inputs with silent payments output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABZSFFP6opzjfMSJmyMOlXogomStzN5HIgICpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOJHMEQCIC9HZnf0wo8jFPEjrwpELhTPGZ8D7BDBRTF/lLw3XSHPAiBGlJEb1di61BYGy212/4UAYllJKvDQ51F1yEIOrUzy5AEBAwQBAAAAIgYCpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOIIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA3JW1z0tsG4hGXEqv4jpv1y0y+1/KkUIr5DM4AyEmCm2Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA5k7kSRL3pdy6apUv8E+xV8RouT4TAX5I1x5cqOmU2p0boi/QVNx5Ih6Y30lv0E3kn4GZMVFY1XQOGL0avAmAEwABAwgYcwEAAAAAAAEEIlEgPJg7UYWUtNT48bzdJuA/GP02xccuPm25+lQVbBx/iPEBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "223162352aba2327f762570ba60d5e847af2e546b0e0dd82962d306a757ee98b", - "public_key": "02a5dedd8e2c97db67ae6d833da95ba5c64b9a51f31238f2a5f9e6db8ac60dc0e2", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "521453faa29ce37cc4899b230e957a20a264adccde47", - "amount": 100000, - "witness_utxo": "a08601000000000016521453faa29ce37cc4899b230e957a20a264adccde47", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "037256d73d2db06e2119712abf88e9bf5cb4cbed7f2a4508af90cce00c849829b6", - "dleq_proof": "e64ee44912f7a5dcba6a952ff04fb157c468b93e13017e48d71e5ca8e994da9d1ba22fd054dc79221e98df496fd04de49f8199315158d5740e18bd1abc098013", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], + "description": "input eligibility: segwit version greater than 1 in transaction inputs with sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABZSFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "5214229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000165214229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ] + }, "checks": [ "input_eligibility" ] }, { - "description": "input eligibility: non-SIGHASH_ALL signature on input with silent payments output", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFPVCPf+xqCV6sfB+Gtep/NeHEVHYIgID+bIaLd6IVIFNjdYg+8puvk4xcwXzTnYsPttGbg1mYrdIMEUCIQDgHEub9vwf4rbyqygJVpFW5U8AD9WgcL1q74fBn0hodgIgAriCsXB5pRfLn+3IESwsa0s03ITmkcb7sroflLKHzmMBAQMEAgAAACIGA/myGi3eiFSBTY3WIPvKbr5OMXMF8052LD7bRm4NZmK3CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNdSn+NrmGtpe5wcMxqgCUXUwxVmrhoQHY2NIDIjqEgHSIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQM0W8I2Ir1ri+60Xt8EBypzPKNY/JqMhPFxmoex2NEmlqk2X0Y7ltttKMeN9cP6J9j2nDAXTcOmt8vM/ZfICSTQAAQMIGHMBAAAAAAABBCJRIK27sV0H1F3nneDOLSmlEwBroJUVo94YuGo9IgKbT9EgAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "0b6cb38167165659753e4e263a8a1017ed6fd7271e61791a763d4de3345abfc5", - "public_key": "03f9b21a2dde8854814d8dd620fbca6ebe4e317305f34e762c3edb466e0d6662b7", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", - "amount": 100000, - "witness_utxo": "a086010000000000160014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "035d4a7f8dae61ada5ee7070cc6a802517530c559ab8684076363480c88ea1201d", - "dleq_proof": "cd16f08d88af5ae2fbad17b7c101ca9ccf28d63f26a3213c5c66a1ec763449a5aa4d97d18ee5b6db4a31e37d70fe89f63da70c05d370e9adf2f33f65f2024934", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "input eligibility: non-SIGHASH_ALL signature on input with sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQCAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ] + } }, { - "description": "output scripts: computed output script mismatch in PSBT_OUT_SCRIPT field from transaction inputs", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIGHMBAAAAAAABBCJRIM3jnYsFtJb48Y8gsn0K+aMjMwngRyIZ4IE/87XTeH4pAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", - "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "amount": 100000, - "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", - "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "output scripts: P2TR input with NUMS internal key cannot derive sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAQMEAQAAAAEQBP7///8BFyBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wCIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIHCUAAAAAAAABBCJRICdoyIruoiMiW6OthOeGNS+YKdLT6TeKOToL/1mvh83QAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 9500, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "51202768c88aeea223225ba3ad84e786352f9829d2d3e9378a393a0bff59af87cdd0" + } + ] + } }, { - "description": "output scripts: two sp outputs (same scan key/different spend keys) - outputs are not sorted lexicographically by spend key", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBHMEQCIG+rSPvfTckdn1OeqUM+sQyZOWjOGMzou1loQm4CHf7XAiAB+VLfS1gCqqtGrF4viWK6FY0O24Khhrh0Cixaz9CnXgEBAwQBAAAAIgYC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxdW5MaVBlkMr4XjybVvp7Cc9O7sXVXOkTt7kSETzu3rIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAUCwu4wHqYUAWfkFyVfWfGvATHdYYGh/+gXtS7waGnG1kDabsBwknZzRvnlk2Fv/oB/B2T0lEuGssRUF5PsfONQABAwiQXwEAAAAAAAEEIlEgHdb3Z8X/xV+e8qt31Qn7D8EMpmgoOXdNV80/AgAf2rkBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgCi4D5lDNIleEbx2x1q254/iwluzMvIXshHEAXvx9nfYYAAQMIECcAAAAAAAABBCJRILaeAFHP4fofvu4fiyQXFcexhfelYULhG2RzBsU9lNAoAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA6r4Yq7amM+SU5r33DN10dpfsGsSHvCh8DGp9zgv1T27AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", - "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "amount": 100000, - "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", - "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068028b80f994334895e11bc76c75ab6e78fe2c25bb332f217b211c4017bf1f677d86" - }, - { - "output_index": 1, - "amount": 10000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe06803aaf862aeda98cf92539af7dc3375d1da5fb06b121ef0a1f031a9f7382fd53dbb" - } - ] + "description": "output scripts: PSBT_OUT_SCRIPT does not match derived sp output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIGHMBAAAAAAABBCJRIM3jnYsFtJb48Y8gsn0K+aMjMwngRyIZ4IE/87XTeH4pAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 95000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120cde39d8b05b496f8f18f20b27d0af9a3233309e0472219e0813ff3b5d3787e29" + } + ] + } }, { - "description": "output scripts: three sp outputs (same scan/spend keys) - output scripts are computed with swapped k values", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBIMEUCIQCFQeew68kGGzyOkEDq2jeec3ZfVgHxRo9wQ9abFEsoLgIgV/N+//lmjgFD2J+OF8mNbOZ4D+Wz4mAJA3SB4gEYkEcBAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIkF8BAAAAAAABBCJRIFIpYyvRwH67i+f6Z5EzwVLRg2rJebZoduBDVJyiN4u1AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCBAnAAAAAAAAAQQiUSDy8Bs99p112CvO//s4uDbhp4qdwlpJv3OfRgocbLY+PQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwgQJwAAAAAAAAEEIlEgO3AWILScOYcrbDJLHpxctXRtiUYcKzCv0evtpudfS9cBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", - "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "amount": 100000, - "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", - "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 1, - "amount": 10000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 2, - "amount": 10000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "output scripts: two sp outputs (same scan / different spend keys) not sorted lexicographically by spend key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCID9iBcRocGpGJF8XE6u4uLmjp7/YOsdF98ByDUQxtM38AiBxWKv7gg8r9a1nRfVvwHCcmVzMrP4XCY2KobYfjJ/y/wEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwiQXwEAAAAAAAEEIlEgdUe4Fj1bvFSYQL5MwUaq0JUgc2e565RwbeZwjUCPk/kBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgCi4D5lDNIleEbx2x1q254/iwluzMvIXshHEAXvx9nfYYAAQMIECcAAAAAAAABBCJRIGziw1OV8XDyS20tgNCkDEb0a6S0hD9qsxGpNLMcXYTcAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA6r4Yq7amM+SU5r33DN10dpfsGsSHvCh8DGp9zgv1T27AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068028b80f994334895e11bc76c75ab6e78fe2c25bb332f217b211c4017bf1f677d86", + "script": "51207547b8163d5bbc549840be4cc146aad095207367b9eb94706de6708d408f93f9" + }, + { + "output_index": 1, + "amount": 10000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe06803aaf862aeda98cf92539af7dc3375d1da5fb06b121ef0a1f031a9f7382fd53dbb", + "script": "51206ce2c35395f170f24b6d2d80d0a40c46f46ba4b4843f6ab311a934b31c5d84dc" + } + ] + } + }, + { + "description": "output scripts: k values assigned to wrong output indices with three sp outputs (same scan / spend keys)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIFg36hg2U7tRrGNQq+bDhHvokGogZdwwSNbSCOp8DkyCAiAQ+0/6sv7Vqmy2KAqTxHnPsE5Gyp7fF6owXNFnSiQsSQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwiQXwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIECcAAAAAAAABBCJRIJcUQsifBHhuCCcorhFu6rgC8/qelf2w03U6aEAgIAbeAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCBAnAAAAAAAAAQQiUSA/y66kkIf44D2d79Ory9bejAMrWD+Fpl0FeIHExEPNwAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" + }, + { + "output_index": 1, + "amount": 10000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" + }, + { + "output_index": 2, + "amount": 10000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" + } + ] + } } ], "valid": [ { - "description": "can finalize: one P2WPKH input single-signer", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCIEeHa7ERv/B+0xgZBiOgR+yFhNJnsbfuTJn8EUqpBh7tAiBx8abjS61xKB1bN/Bv927XFWxAO7JojbajqP5XrKwEuwEBAwQBAAAAIgYDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPUIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA0UFRDzOuLut1bsDhWQzZCOfb8X1/5GGKmu0hjigF0lFIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhACqfFEHUmJd8RmngfME+LQpk1Bv1P+7pfl6Gb/1gHbnUp1cYagnI1/JEvI39aetVyz44E+yUG4X/UauIchDVIngABAwgYcwEAAAAAAAEEIlEgIEmopiliDk5I/DCkX/8DZ33n9ULw1VnbCIJmIjBvf1ABCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", - "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", - "amount": 100000, - "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", - "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "can finalize: one input single-signer", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 95000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" + } + ] + } }, { - "description": "can finalize: two inputs single-signer - using global ECDH share", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQIT0WYdp/RkaldPmUEPywasrf2zRyhz6HPIgEl39HFqTCIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQJ1ntx3jr4EnJwlbCZyp5qTZHV38korr7SGAsbrGORMs/ONQzaRfwMIzWoHXAOtbBYF8BCJPea6udzRFM9a4LLAAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABR0Qx97FCfU4FPQTxGBEToMdsnlOCICA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7SDBFAiEAvIohYvFPxY0bQvvN7JcOYfw7yYF99I5db2raG8TQuf0CIBJ15qs2dq6Q+aSr/gggziyqi/9zCNAnyKHyKhpS14FGASIGA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7CAAAAIAAAAAAARAE/v///wABDiC+nWXIORX7CSSKu9/KjKPu5s41DFVPZejVJuXfUnq1IgEPBAAAAAABAR+ghgEAAAAAABYAFO+r6p//ozOrnXXWDRn1VIcXq1U2IgICjIU3RLD94zwG4z+GnuB3DB8L06EjeNDxhZwO6DvKR1BHMEQCICDyPwBUY4p2Paw/nfU7F/6PLHpwYlWvhllhL8kkI3M7AiAz2GPAGVh9Tslr0xM5HQY/XKtKNOmGvSA7cHwLVET7LAEiBgKMhTdEsP3jPAbjP4ae4HcMHwvToSN40PGFnA7oO8pHUAgAAACAAQAAAAEQBP7///8AAQMIGHMBAAAAAAABBCJRIG7NeQJUA/fjem8wTKiu1EaLJGcr5pqKukzpKEKCpVioAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "b7c37c36ff296624e204d1e47befd77a281b0aa3313c442f4d172ee267d0dc13", - "public_key": "03a95af3346467c9ffa54c9d3530c3087885ef786ad5974dfd7def925037e6b93b", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001474431f7b1427d4e053d04f1181113a0c76c9e538", - "amount": 100000, - "witness_utxo": "a08601000000000016001474431f7b1427d4e053d04f1181113a0c76c9e538", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "586d64441a4dda2dd95e7f5d787074a9788bd971e59954878e4d4a81c81f4741", - "public_key": "028c853744b0fde33c06e33f869ee0770c1f0bd3a12378d0f1859c0ee83bca4750", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014efabea9fffa333ab9d75d60d19f5548717ab5536", - "amount": 100000, - "witness_utxo": "a086010000000000160014efabea9fffa333ab9d75d60d19f5548717ab5536", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0213d1661da7f4646a574f99410fcb06acadfdb3472873e873c8804977f4716a4c", - "dleq_proof": "9d67b71de3af812727095b099ca9e6a4d91d5dfc928aebed2180b1bac639132cfce350cda45fc0c2335a81d700eb5b05817c04224f79aeae77344533d6b82cb0" - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "can finalize: two inputs single-signer using global ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQLTJicjNSYH6E/K92UfjS1jfgIK6obfrYDTBs1PSM/MYiIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQMZTtx+UaBipW9w58JGERbyQOgh2tzgGDp5dsdzsMKvfVOC18XhXP1EZ3nGqY60ZtEnjvLZUY5Nsi67qTZFzkrkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiAXBfzaBiZu2zKxaYZ3s39nu25F1JLr/OZWqIDufxOOtgIgPc3jI53ZBjavZPskEspB45fJWKAwd3z/nIlAucd310wBIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgA4mx4K7v1/q2Ce+rAYv7AWrP8hu4EPPEjDi6ckQYDpUCIBUP7GDiVvQMR1dN/RKaCOr3rB2Xq+4x9AaZ+Hk1RhnzASIGAvW1n6XkkiIev1W6eK1EJgW+rpUWa6HroyUNC7qsfi7cCAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgEz1qT1CQlbV5T3SR+8PxLDxFvC2bYK8luLunBMgHKq8BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", + "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", + "amount": 100000, + "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "02d3262723352607e84fcaf7651f8d2d637e020aea86dfad80d306cd4f48cfcc62", + "dleq_proof": "c653b71f946818a95bdc39f0918445bc903a0876b738060e9e5db1dcec30abdf54e0b5f178573f5119de71aa63ad19b449e3bcb65463936c8baeea4d917392b9" + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 95000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120133d6a4f509095b5794f7491fbc3f12c3c45bc2d9b60af25b8bba704c8072aaf" + } + ] + } }, { - "description": "can finalize: two inputs single-signer - using per-input ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCICaxC8l6Hhc2jWjLl5Ns3zaf+yigvDdzhK80yqHUcmV+AiAzXkNZo/i4O6YutHdfiu4jLtQ2oxzU1YuJCW8wrhrBYAEiBgMeu+UVqVhfvmcUsPyrglbHo7DbqEa74e7Id+DoLmWY9QgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDRQVEPM64u63VuwOFZDNkI59vxfX/kYYqa7SGOKAXSUUiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAKp8UQdSYl3xGaeB8wT4tCmTUG/U/7ul+XoZv/WAdudSnVxhqCcjX8kS8jf1p61XLPjgT7JQbhf9Rq4hyENUieAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAU8jwi17cxJEaUFjUgAE9qLf8AolwiAgJIoaG+VMaENBzQ1Mmg7G/ZLxMTzHkQzUgs9vAIU2l8ckgwRQIhAPnBsFdoj7oFw7yaFL6kcGm9VPa5ZSSa7vYel7oBX6Q8AiAGlWFPwaiINuZPM4LpvqLywuNRjqFNeqOFvogfNgoWswEBAwQBAAAAIgYCSKGhvlTGhDQc0NTJoOxv2S8TE8x5EM1ILPbwCFNpfHIIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjWtVCG1TzpaxT4ikBu3/++nXIfCSjxnH93FPGgVq1OhIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAmKSbd1Bd6tVQiKT2zjfi5hxZxpBzkBwGe7fFseyaVPeS0aumF22NhPgfhN7Ic8ZWe25MU+OHBUf2pTcYi/N4hAABAwgYcwEAAAAAAAEEIlEgIvVSxNGPeXFNSXQFe3bYeE4zw0KTLvPHWPNm6npZOYQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", - "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", - "amount": 100000, - "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "876ccda8929427ac00bb763abf733ba1f88d656e2a161439aa30cf0f8d528641", - "public_key": "0248a1a1be54c684341cd0d4c9a0ec6fd92f1313cc7910cd482cf6f00853697c72", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014f23c22d7b731244694163520004f6a2dff00a25c", - "amount": 100000, - "witness_utxo": "a086010000000000160014f23c22d7b731244694163520004f6a2dff00a25c", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", - "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", - "input_index": 0 - }, - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0235ad5421b54f3a5ac53e22901bb7ffefa75c87c24a3c671fddc53c6815ab53a1", - "dleq_proof": "98a49b77505dead55088a4f6ce37e2e61c59c69073901c067bb7c5b1ec9a54f792d1aba6176d8d84f81f84dec873c6567b6e4c53e3870547f6a537188bf37884", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "can finalize: two inputs single-signer using per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIBcF/NoGJm7bMrFphnezf2e7bkXUkuv85laogO5/E462AiA9zeMjndkGNq9k+yQSykHjl8lYoDB3fP+ciUC5x3fXTAEiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCED7KT/Ebco4uD2DOYiKUOm/1W52V9ie/mpnQhLyHLVClsiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECKE7OYVUX3K9bolxSuuQmz41SoQqm7i1bNDt7SHfihmVmLMSKKSeC9fpXOEFP3xbKKy1Q6aHB2AOPOiYIu4yAhAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgA4mx4K7v1/q2Ce+rAYv7AWrP8hu4EPPEjDi6ckQYDpUCIBUP7GDiVvQMR1dN/RKaCOr3rB2Xq+4x9AaZ+Hk1RhnzAQEDBAEAAAAiBgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3AgAAACAAQAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDNNLO907e1EZCJ2B/xZrB3oDBKiQzpWJxUo7cz1D6bCsiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEA3wAwLQqBz9rZfDEtuVuBndLOAwd894otkCxIe4LO0z3hQ30VuC12OGXXd/yUmLIOB4g+FLNhwveP2qDKmMlvMAAEDCBhzAQAAAAAAAQQiUSATPWpPUJCVtXlPdJH7w/EsPEW8LZtgryW4u6cEyAcqrwEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", + "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", + "amount": 100000, + "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "0334d2cef74eded4464227607fc59ac1de80c12a2433a56271528edccf50fa6c2b", + "dleq_proof": "37c00c0b42a073f6b65f0c4b6e56e06774b380c1df3de28b640b121ee0b3b4cf7850df456e0b5d8e1975ddff25262c8381e20f852cd870bde3f6a832a6325bcc", + "input_index": 1 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 95000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120133d6a4f509095b5794f7491fbc3f12c3c45bc2d9b60af25b8bba704c8072aaf" + } + ] + } }, { - "description": "can finalize: two inputs/two sp outputs - mixed global and per-input ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQM1TON28rs/xxNH3fMzMDKwLdGvkIrV4fmoQmKdi9VjoyIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQA7cED+wwSYDY+ljx6WGch+Qi3pD5+GIt4ruK/3j6YF+/d/GBUmyrO/6fm4mkbFn7VPxzQUE5diriQ9+pAX81w0AAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABR7UmO/UsSWNAD8hezvdO5USqy+fCICArA7CQwOfCMzBa5MYO0wr5fdmba20zrGc6sPB5VKyUpdSDBFAiEAkjWFWEXm98L3gYA0bAadu6aNF7fWPIh/i9ygrMafERQCIFze80H9FnuNWmxvQeN9VnN/1uEX3njk2IoTK2ZRdUZOAQEDBAEAAAAiBgKwOwkMDnwjMwWuTGDtMK+X3Zm2ttM6xnOrDweVSslKXQgAAACAAAAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECEDitzN16HulqH1rQgEWjBWRl/ZIsy9TuTizN8Dm4G68jEiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEBJnMlkkRcjkwbyesWywAtyLr77pZ0k8cKfMz47fRxFKIFYOImN9oRpZd4mOVwiMQgxth4+77Yg70dBNDC97AwNAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH0ANAwAAAAAAFgAUYubwsqEs9lIYGiu2SM/m7BheLIwiAgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMkcwRAIgV+cHgkkPB0x41sdHYAZU5EKuh1EgzerDwI+UfjRAOUYCIGJMWDuwh/w+LHC7bhVpisNE9Wc3IKLuNJDcBQSXalBlAQEDBAEAAAAiBgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMggAAACAAQAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECED9YBNRPCSo1zhNFg5qaJawp/817Xs+dwbNXMm4y+pnMwiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEAzPs5O0IYrkoCqPVK8zrtOa/AtZH3xk475a1M52NZxM9/g+2jo42yN/9p3qwJ4zjEh3e2Ql69FZsECR+iG6clfAAEDCJBfAQAAAAAAAQQiUSDxdYae3PyUadqE3xG62uCW/hRzgAnj8SdD5wmLUN454gEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgT13nnxOk/o3m2+gj/HQXhj2kkSSstqhgL/CcBRK4BmoBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4A", - "input_keys": [ - { - "input_index": 0, - "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", - "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", - "amount": 200000, - "witness_utxo": "400d0300000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "410e119ecc348c56d804bf728492cc67f63db3404b85a6b2f87211d6cbb7e24c", - "public_key": "03eab28e63e466ad0e92d678fad0c176463b26afc64c6ba045cbf28482895dd632", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", - "amount": 200000, - "witness_utxo": "400d03000000000016001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "03354ce376f2bb3fc71347ddf3333032b02dd1af908ad5e1f9a842629d8bd563a3", - "dleq_proof": "0edc103fb0c1260363e963c7a586721f908b7a43e7e188b78aee2bfde3e9817efddfc60549b2aceffa7e6e2691b167ed53f1cd0504e5d8ab890f7ea405fcd70d" - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", - "dleq_proof": "499cc9649117239306f27ac5b2c00b722ebefba59d24f1c29f333e3b7d1c4528815838898df6846965de26395c22310831b61e3eefb620ef47413430bdec0c0d", - "input_index": 0 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "03f5804d44f092a35ce1345839a9a25ac29ffcd7b5ecf9dc1b357326e32fa99ccc", - "dleq_proof": "333ece4ed0862b9280aa3d52bccebb4e6bf02d647df1938ef96b5339d8d67133dfe0fb68e8e36c8dffda77ab0278ce3121dded9097af4566c10247e886e9c95f", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "output_index": 1, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - } - ] + "description": "can finalize: two inputs / two sp outputs with mixed global and per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQNmz8f9zgbgjtSbGzlSuNFRqPfgdf5fbdWN1o+dre7KlCIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQF6riwhtSFD+nRyflhqR+Ze2HKjQhQr8BqeL3zx0nvVAUOaStT+1sIbl54eT8B5203R/ieMXen/v9vjBYX8bBuMAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/SDBFAiEA1k6e8CREAEbpyjkwLrh7LfYN/FHJwKkX1oLzz4EFkIwCIB6+EqXx/SGW8u+11Tr+V850W5Af6ImXitWa7+FKT1A3AQEDBAEAAAAiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECED+9Fz2cSNWMUCJCbQUni8oXuajiKCZmkBobALngS3mUkiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEDAXaQQSHz67DeP6+avUAXjrmyGI2gYsOVbIUAX61Bz7e9AF5V1tdzaqQY0kayLg/0GJNQXek0t1JlMRkDWuMzeAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH0ANAwAAAAAAFgAUE5NQEXxXeUGphYArue3vwROTK8ciAgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3EcwRAIgWoJ5pshwRPECyFkwyJ7C/wGUKGJBraOMeFTy6DZR1fICICvMZkqflwTVcxLbwryDaGcIDyLEdYuR27ktF6HkEeqpAQEDBAEAAAAiBgL1tZ+l5JIiHr9VunitRCYFvq6VFmuh66MlDQu6rH4u3AgAAACAAQAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECEDpqibG5hqmVUz4XvtZFALVBuw1zkHHv4q4rfvsKDKa88iHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEDDSmopQLvppzVsHMb/41jdREHbWIl8upnCEut1KF59oeyhHHksl6OASTNFqyJN6dlMKzbuhSauI1KBcaMjHeczAAEDCJBfAQAAAAAAAQQiUSCA65gxi89t1hGsF6lksJFzbATK6t8ubodOXO+Gx8YFFwEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgELYvxakKvKAWeWHb/0zq6aoyTvssfyRmJ+i1oz3jfIQBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4A", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 200000, + "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", + "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", + "amount": 200000, + "witness_utxo": "400d030000000000160014139350117c577941a985802bb9edefc113932bc7", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "0366cfc7fdce06e08ed49b1b3952b8d151a8f7e075fe5f6dd58dd68f9dadeeca94", + "dleq_proof": "5eab8b086d4850fe9d1c9f961a91f997b61ca8d0850afc06a78bdf3c749ef54050e692b53fb5b086e5e78793f01e76d3747f89e3177a7feff6f8c1617f1b06e3" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "03fbd173d9c48d58c5022426d05278bca17b9a8e2282666901a1b00b9e04b79949", + "dleq_proof": "c05da410487cfaec378febe6af5005e3ae6c86236818b0e55b214017eb5073edef40179575b5dcdaa9063491ac8b83fd0624d4177a4d2dd4994c4640d6b8ccde", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "03a6a89b1b986a995533e17bed64500b541bb0d739071efe2ae2b7efb0a0ca6bcf", + "dleq_proof": "c34a6a2940bbe9a7356c1cc6ffe358dd4441db58897cba99c212eb75285e7da1eca11c792c97a380493345ab224de9d94c2b36ee8526ae23528171a3231de733", + "input_index": 1 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", + "script": "512080eb98318bcf6dd611ac17a964b091736c04caeadf2e6e874e5cef86c7c60517" + }, + { + "output_index": 1, + "amount": 90000, + "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", + "script": "512010b62fc5a90abca0167961dbff4ceae9aa324efb2c7f246627e8b5a33de37c84" + } + ] + } }, { - "description": "can finalize: three sp outputs (different scan keys) - multiple global ECDH shares", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEDAQYBACIHAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQIQNW0m1h0S3tm67YlAnfH1xiMK5ya+g9o8jF3p3EYlUC/SIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMG47zgW4RZqlhx5yBwHd21iUSunqRKAKVUOCfhoIDOhyIHA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsIQMHSulAt+mc/8n+jXZ3MSMaWW9bfZO5wc8S1PVGN+5UDyIIAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQQMiAKu0Gry8mVLOwYlWz51t0aXF1PPTuxXw26O40kjA0js3rCQHWOOU3Ecn2y6JndxNg7svfNfPfl8VMcBpZg48iCAMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKEAQts8CV65KyF7Jj5yGxY0PZ8I7/00LEjRTUzeReLgf7iLvKNb1isYvoGYUb5qXC8Mhgkbi2l9C5G1S2tHKoIcnIggDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGxAGchTJz3dHxxEc9JXWbrYKz3uqYsvZwJu8GvNiBU5V+vG4U3sM44+D7Pf0zNkYRnFOFMQNnyRMkTa4am0VxKsPgABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFFK7Vd69F2tlEbzkMwnG0vjoCqazIgIDUCli7F2s4NFV3c+qd8sDIgUlekdMLSUBCd55FhMhNQxHMEQCIDlC70GsRwyZqm2NOKCfItK2/4avBGXLR8C2izs19mdbAiBOka6FoudfloMEh6lUghFnn3ia4mN5DF/DtU7MthQsYAEiBgNQKWLsXazg0VXdz6p3ywMiBSV6R0wtJQEJ3nkWEyE1DAgAAACAAAAAAAEQBP7///8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfoIYBAAAAAAAWABTOWyFkR2kh5ilEN+Vk3kDYkwoaDCICA3RYxQrxcpR7CWL3r5ueDWFSZBRAUPSaZWu/0S1LNsraRzBEAiB0SvtntUvYflPp5Y/93wqesePokQyTk+rwpWZwXjlNfgIgD7dqyu9bl/sdHhNU220CKzRXOMyyMBZvqu5I/r+AJPQBIgYDdFjFCvFylHsJYvevm54NYVJkFEBQ9Jpla7/RLUs2ytoIAAAAgAEAAAABEAT+////AAEDCJBfAQAAAAAAAQQiUSAg20T7yRphCitGXihi86FAokkY9urWgJCmDgjdSk7QFgEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgwkGX5d+535bIWPJ1vC2JJckkSz9tQ32W+mZoDBnlkUQBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4AAQMIkF8BAAAAAAABBCJRIP1+p2RI4jhAJi7ZYI3zUcDR3lp3fB/yLoQPBFnAcFp/AQlCA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsA/gUc4RMnXTJIf8Xpa9BC2M3NI16+/9ziRvFywyyTLDAAA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "27bac97c53e47b063e9fff628dc9671345a211df01cbe2ce62babdce229d2a3f", - "public_key": "03502962ec5dace0d155ddcfaa77cb032205257a474c2d250109de79161321350c", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001452bb55debd176b6511bce43309c6d2f8e80aa6b3", - "amount": 500000, - "witness_utxo": "20a107000000000016001452bb55debd176b6511bce43309c6d2f8e80aa6b3", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "a73d2fdfe284c57cfdd7bbb5e37b7ad6a3093624d415bb8a776bffe3fdac3053", - "public_key": "037458c50af172947b0962f7af9b9e0d615264144050f49a656bbfd12d4b36cada", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014ce5b2164476921e6294437e564de40d8930a1a0c", - "amount": 100000, - "witness_utxo": "a086010000000000160014ce5b2164476921e6294437e564de40d8930a1a0c", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - }, - { - "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "0306e3bce05b8459aa5871e720701dddb58944ae9ea44a00a5543827e1a080ce87", - "dleq_proof": "10b6cf0257ae4ac85ec98f9c86c58d0f67c23bff4d0b12345353379178b81fee22ef28d6f58ac62fa066146f9a970bc3218246e2da5f42e46d52dad1caa08727" - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "0356d26d61d12ded9baed89409df1f5c6230ae726be83da3c8c5de9dc4625502fd", - "dleq_proof": "c8802aed06af2f2654b3b06255b3e75b746971753cf4eec57c36e8ee349230348ecdeb0901d638e53711c9f6cba267771360eecbdf35f3df97c54c701a59838f" - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "03074ae940b7e99cffc9fe8d767731231a596f5b7d93b9c1cf12d4f54637ee540f", - "dleq_proof": "19c853273ddd1f1c4473d25759bad82b3deea98b2f67026ef06bcd88153957ebc6e14dec338e3e0fb3dfd333646119c5385310367c913244dae1a9b45712ac3e" - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "output_index": 1, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - }, - { - "output_index": 2, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" - } - ] + "description": "can finalize: one input / one sp output with both global and per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMKGLm7QZm4kzDrF/juWseG4IU9zS88zfF0S5fOTt4FPiIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQCf7kMXWHHjjEVIA/9GD0o0KtIOAYslUGTTGQW1CZ84xvUKH6TWUUsCBevDvTVDP9XhDaw0o+e2PIbeaRHZAgI4AAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABQimnLTSmRb00lru/ULu4HJBj9PlCICAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/RzBEAiA3eo+fWjPY+iVcM7OSJtO88CKd+tlgRw74AWpxQvIzWAIgCBvWlIh63us2Ia9aLeTw05yxNpLQQb99vM00oysFQekBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMKGLm7QZm4kzDrF/juWseG4IU9zS88zfF0S5fOTt4FPiIeAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQAATg9RmG+hyXvKQSPSMkR+J9fNDF9fAwKzGDvZfG1K//3qW2DObYl34Orq1eqJz7c2aNceU2suxyGEXG7JnB18AAQMIkF8BAAAAAAABBCJRINxNRNnjYeXnQ2V5x44lklVB4in9wVOtWYmtiuawYkx4AQlCAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oAxJmWB4+hBy7lN5i6nNVg6IyxMiI+m7e8uwvhweJ/B3UAA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 200000, + "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "030a18b9bb4199b89330eb17f8ee5ac786e0853dcd2f3ccdf1744b97ce4ede053e", + "dleq_proof": "27fb90c5d61c78e3115200ffd183d28d0ab4838062c9541934c6416d4267ce31bd4287e9359452c0817af0ef4d50cff578436b0d28f9ed8f21b79a447640808e" + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", + "script": "5120dc4d44d9e361e5e7436579c78e25925541e229fdc153ad5989ad8ae6b0624c78" + } + ] + } }, { - "description": "can finalize: one P2WPKH input / two mixed outputs - sp with labeled output and BIP 32 change", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFKhca+iBJCuJTjnxuFI175+h6X2bIgIDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDBHMEQCIBzDuu1POG/i0LXA1CRHdBss4XAcxvvWCDf8PS1GwrVIAiBEJvA1FZZn78RkoM07C7Kt503b9NIiVyysAkFnf0G7FgEBAwQBAAAAIgYDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxz3EhKb5LqmLTaE5y6TJrDsHGA09pJlCPvD++OpcvkBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhALXiKhy7k7ux+cgUqCbGRerQaZ6UPWRIWNutMKpFA1JRSvGy2C63esSzzpg+OTRGcDpojZaOAxakl1EXnS+oNxAABAwighgEAAAAAAAEEIlEga7ws7fbiMAKU4cljGbEEtDwgG+zKAcQaFfd2fHQQrE0BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgC4kEq1oYYzAkfwb+25F3iXRvcFleyWMJtFh0S0uiwNp8BCgQBAAAAAAEDCHDzBQAAAAAAAQQWABQ4wY813YBj44CnD/60+Y/07zSBdyICA64rH6YZa5cUpQnE3KMpJNtdD4lXNSIkJxTk/J5VN6QwDAAAAAAAAAAAAAAAAQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "f6a954670515af06da4b52669d8d8ea0109f5b7cff7fc0e48710bbcfbd7abdc4", - "public_key": "03ae2b1fa6196b9714a509c4dca32924db5d0f89573522242714e4fc9e5537a430", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014a85c6be881242b894e39f1b85235ef9fa1e97d9b", - "amount": 500000, - "witness_utxo": "20a1070000000000160014a85c6be881242b894e39f1b85235ef9fa1e97d9b", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "031cf712129be4baa62d3684e72e9326b0ec1c6034f6926508fbc3fbe3a972f901", - "dleq_proof": "2d788a872ee4eeec7e72052a09b1917ab41a67a50f59121636eb4c2a9140d49452bc6cb60baddeb12cf3a60f8e4d119c0e9a2365a380c5a925d445e74bea0dc4", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", - "sp_label": 1 - }, - { - "output_index": 1, - "amount": 390000, - "is_silent_payment": false, - "script": "001438c18f35dd8063e380a70ffeb4f98ff4ef348177" - } - ] + "description": "can finalize: three sp outputs (different scan keys) with multiple global ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEDAQYBACIHAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQIQLC2d9g7mmlqGYE3ZpigsIu+OLJJ22m5ZWlRj83Gq3uJCIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQLcfS7KxWiwEVF1ujzVSW/0xLbZCUItvMrrjyUvpU+L0CIHA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsIQJwvvXAapqFX8Y7/yvQvi1wAzyCC2FTQTyNbtpR8lobKSIIAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQQOyCQr97WIHO4GBWbH8TzEfkcQyJomRYwgMBswMeSBc7wL6gFoDTN1616AYRqw1Qix5Jq7VxsYeAMqrknwsC99IiCAMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKEDqQ0cOXhvjKRtIoLy1P1WVLGSGDnY177pQA8yt7XfdEo4hZpew9SO+IX7Gh1B3l8zOvFzZQ2KvG0bYA2Qr1flAIggDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGxAG9/lTtSioG//mwAJrk49gPxHYWR1r98hJEz+PG0QTfJHQah1UU14ZU+5yhEY5tPlUvOPjKujVS6DM8UBvwy9PwABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCLg3ekbsHGTj/QlvLhIwW7hrrfzKDP2b9X3JYim55whAIgfn3H3eyoVVwXfr7/yUnqTDNSD+W+7Hun4nJ+NPvUjf0BIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0iAgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFu0gwRQIhAPmSLe+tUsYSCQS6pacAUymDbsHD2uFsoGjAFrJrBNLYAiBw+V8k+cklbkGWlGnDUqz6yOiUMjUC6s0WPJSi42nuHwEiBgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFuwgAAACAAQAAAAEQBP7///8AAQMIkF8BAAAAAAABBCJRIKFPr9x+36QEQnF0sSasoOmZMTP+F+JCCurtIO9U/DjcAQlCAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oAxJmWB4+hBy7lN5i6nNVg6IyxMiI+m7e8uwvhweJ/B3UAAEDCJBfAQAAAAAAAQQiUSB99fJJWUQ0FLvv6J0tqJSGSlYotoAzuSPoaGvcw96dlAEJQgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEAJKSNduINQLz18uGlw//rPcKos7iNeaSG1UydnqqPoYjgABAwiQXwEAAAAAAAEEIlEgsvEqf1cMxQV4QPpjk/cfBpABQgiBgYEMNLuIdh2SlQ0BCUIDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGwD+BRzhEyddMkh/xelr0ELYzc0jXr7/3OJG8XLDLJMsMAA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 500000, + "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 100000, + "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "02dc7d2ecac568b0115175ba3cd5496ff4c4b6d909422dbccaeb8f252fa54f8bd0", + "dleq_proof": "ea43470e5e1be3291b48a0bcb53f55952c64860e7635efba5003ccaded77dd128e216697b0f523be217ec687507797cccebc5cd94362af1b46d803642bd5f940" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "02c2d9df60ee69a5a86604dd9a6282c22ef8e2c9276da6e595a5463f371aadee24", + "dleq_proof": "ec8242bf7b5881cee060566c7f13cc47e4710c89a26458c20301b3031e48173bc0bea01680d3375eb5e80611ab0d508b1e49abb571b1878032aae49f0b02f7d2" + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "0270bef5c06a9a855fc63bff2bd0be2d70033c820b6153413c8d6eda51f25a1b29", + "dleq_proof": "1bdfe54ed4a2a06fff9b0009ae4e3d80fc47616475afdf21244cfe3c6d104df24741a875514d78654fb9ca1118e6d3e552f38f8caba3552e8333c501bf0cbd3f" + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", + "script": "5120a14fafdc7edfa404427174b126aca0e9993133fe17e2420aeaed20ef54fc38dc" + }, + { + "output_index": 1, + "amount": 90000, + "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", + "script": "51207df5f24959443414bbefe89d2da894864a5628b68033b923e8686bdcc3de9d94" + }, + { + "output_index": 2, + "amount": 90000, + "sp_v0_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0", + "script": "5120b2f12a7f570cc5057840fa6393f71f06900142088181810c34bb88761d92950d" + } + ] + } }, { - "description": "can finalize: one input / two sp outputs - output 0 no label / output 1 uses label=0 convention for sp change", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFLA7Znm3/JhuVURYHNqRKWPGdMbjIgID99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e9HMEQCIFY0b6mD1z9m7egl3uaCheQIUB/tmsBUJqsfB0VapuxBAiAsVXbBINxLxHKZfCGHTAVaGIuUSTh8dC67f+HlaIf+TgEBAwQBAAAAIgYD99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e8IAAAAgAAAAAABEAT+////Ih0CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts0hAhjCQiVPx9y9gN45xPfrHc56NkuM5gYyVL3u2gCERzwDIh0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAmzGA8tEE6quCZ8nSB17g6DkB13hXugLrnQdm/lS9tOxIh4CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts1AQ1UI+aEse39viptfvL9GXupq/HytVfDmBf2MBKuvtohW3FJOOHtLAY+0t+qXdlFh8i5byi5ROOCEEC04yvjJOiIeAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoQNMHk9UnQ5oDrok9KM0lSyZAC3I9dT74Hp6kInKB8DouF7fQofqoQ3NkUUalEl9x6Nd2RxP2G3whpl5wDzklnQwAAQMIoIYBAAAAAAABBCJRIKFPUAS7Ra+VOUiZasyqJ8D8ezIhGJdEQD/Yq0JbIq9fAQlCAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoA7RDRzNcY/UF5V4mirKA8xi0pqoUSS/zecNmih9U74ybAAEDCDDmAgAAAAAAAQQiUSDXbx0JcoVShXYt7c4tP4IA1m6SvgCa/qQK0eW5jRKKswEJQgJfDsGzjZmEp+ti8VvkAwIEEPFC7fTWnjY/VhWv0qa2zQK+EFEqlVNkHkB62OUJo0GEUqkC6FVqDboumD9eAPe8UQEKBAAAAAAA", - "input_keys": [ - { - "input_index": 0, - "private_key": "96653caa803b9f0f11d48d3cd1788c1db784c0aadaf11796c36834c1fb3786bc", - "public_key": "03f7d25af55b7835682d6bf75993f5392091d1cb6b217a6fbe84a77de6154ff5ef", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014b03b6679b7fc986e5544581cda912963c674c6e3", - "amount": 300000, - "witness_utxo": "e093040000000000160014b03b6679b7fc986e5544581cda912963c674c6e3", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", - "spend_pubkey": "037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5" - }, - { - "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", - "ecdh_result": "0218c242254fc7dcbd80de39c4f7eb1dce7a364b8ce6063254bdeeda0084473c03", - "dleq_proof": "435508f9a12c7b7f6f8a9b5fbcbf465eea6afc7cad55f0e605fd8c04abafb68856dc524e387b4b018fb4b7ea97765161f22e5bca2e5138e084102d38caf8c93a", - "input_index": 0 - }, - { - "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "ecdh_result": "026cc603cb4413aaae099f27481d7b83a0e4075de15ee80bae741d9bf952f6d3b1", - "dleq_proof": "d30793d527439a03ae893d28cd254b26400b723d753ef81e9ea4227281f03a2e17b7d0a1faa84373645146a5125f71e8d7764713f61b7c21a65e700f39259d0c", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" - }, - { - "output_index": 1, - "amount": 190000, - "is_silent_payment": true, - "sp_info": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5", - "sp_label": 0 - } - ] + "description": "can finalize: one P2WPKH input / two mixed outputs - labeled sp output and BIP 32 change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCspcmETsmSLIHmcIF+My2i3RXSxdOpRiq21l5TtoKJXgIgTfMs6jgucsQ8BYQE/a5wWVHmuj3jPYM8g6lbsBg4CscBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIoIYBAAAAAAABBCJRIHwkw/lKVR+Uy49cDgPMmhcIf7FNcUpdL06f1MeJ09NmAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoAuJBKtaGGMwJH8G/tuRd4l0b3BZXsljCbRYdEtLosDafAQoEAQAAAAABAwhw8wUAAAAAAAEEFgAUOMGPNd2AY+OApw/+tPmP9O80gXciAgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwwAAAAAAAAAAAAAAAEA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 500000, + "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "sp_v0_label": 1, + "script": "51207c24c3f94a551f94cb8f5c0e03cc9a17087fb14d714a5d2f4e9fd4c789d3d366" + }, + { + "output_index": 1, + "amount": 390000, + "script": "001438c18f35dd8063e380a70ffeb4f98ff4ef348177" + } + ] + } + }, + { + "description": "can finalize: one input / two sp outputs - output 0 has no label / output 1 uses label=0 convention for sp change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCICJa45kPVF365uoUKpN0arSqgSfjyBNY63wha08anrtiAiBl42BSGRArJQdeOVXz80zjvPKjXR4QFd1dw7/tPs81qQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts0hA84eNnXZDZkmSfqd2xH5AlSbs7AvVvbonMCgTIuMN92UIh0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAlWBv6pzMVb2uY5xom9w/XazZ4ZJ9isfxed7jpq45hBQIh4CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts1ADolhPR9rJTbbj6kkIA2zpvjvyhciVWTVaxEuUIZbTTAuBY+m9hwp4jZqSnJp1FVaXGHWVVnb+/rJ4urf5TY31SIeAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoQHlAgZ626fJYwVg4fApkzBb1F8fvRAkSLM6qlPTi/1N2xCR7/BcNmyY7Dj0ga2aMh+lLNN7q+gCheSsEeteIdbsAAQMIoIYBAAAAAAABBCJRIKBIDZZnnBk25au9SLqw4B/6yx7n0cnhaC8VQBaZZYXZAQlCAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoA7RDRzNcY/UF5V4mirKA8xi0pqoUSS/zecNmih9U74ybAAEDCDDmAgAAAAAAAQQiUSB2Hb00kpiEpmcp69zbrPFnSC32LBTwmOTvGNcP4Grv0AEJQgJfDsGzjZmEp+ti8VvkAwIEEPFC7fTWnjY/VhWv0qa2zQK+EFEqlVNkHkB62OUJo0GEUqkC6FVqDboumD9eAPe8UQEKBAAAAAAA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 300000, + "witness_utxo": "e093040000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", + "ecdh_share": "03ce1e3675d90d992649fa9ddb11f902549bb3b02f56f6e89cc0a04c8b8c37dd94", + "dleq_proof": "0e89613d1f6b2536db8fa924200db3a6f8efca17225564d56b112e50865b4d302e058fa6f61c29e2366a4a7269d4555a5c61d65559dbfbfac9e2eadfe53637d5", + "input_index": 0 + }, + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_share": "025581bfaa733156f6b98e71a26f70fd76b3678649f62b1fc5e77b8e9ab8e61050", + "dleq_proof": "7940819eb6e9f258c158387c0a64cc16f517c7ef4409122cceaa94f4e2ff5376c4247bfc170d9b263b0e3d206b668c87e94b34deeafa00a1792b047ad78875bb", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 100000, + "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "script": "5120a0480d96679c1936e5abbd48bab0e01ffacb1ee7d1c9e1682f154016996585d9" + }, + { + "output_index": 1, + "amount": 190000, + "sp_v0_info": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5", + "sp_v0_label": 0, + "script": "5120761dbd34929884a66729ebdcdbacf167482df62c14f098e4ef18d70fe06aefd0" + } + ] + } }, { "description": "can finalize: two sp outputs - output 0 uses label=3 / output 1 uses label=1", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFOIZ+mGyrzWgn4CGOyIHrO0l3lnIIgICbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyVHMEQCIFOSlnsfFhybwy7/MG+cV8vcpWQYmfE7VhEQcGWZ837IAiASvCJ2KzHM6vDu0qbWUuh4M5mMV5SMO+Eb296xwR1ObwEBAwQBAAAAIgYCbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyUIAAAAgAAAAAABEAT+////Ih0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAkWkqt7EMP4/XhX0QSwA1bRtP7BjUoHtsbyoXf1XbGJbIh4Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWhAhJcAvfv6PwYUyYN7hx1bi0KhCe/o9bXm4gXSNty8814PrQ9L2JioR1MNOoN9VlSREPj1OKiO6knXHb3PiZjObgABAwighgEAAAAAAAEEIlEgvofPyHz2McruZysJw/NIz7EDKa92NvOenE7mLfBwEhYBCUICi3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWgD8+Tq+VWJ7fdfgshaz/nQvOSCnhaA85Xsfq1iaXfwhRMBCgQDAAAAAAEDCDDmAgAAAAAAAQQiUSBjcKwAHfzVyPexT9nGxZ6MYbbKLhpgsp1DBb6qEwf1twEJQgKLeQ4Jh/3p8NEjmOtr4wxzdnk8ZHhloqAvLvyWDZZlaALcqxqjkFTkguCjoiOo8Sgs1xGXZTHGeaoggF9/X6TxawEKBAEAAAAA", - "input_keys": [ - { - "input_index": 0, - "private_key": "7211bc4516d4da13224eddbe49ffc62d1d3f0313628199dac12271da224659ae", - "public_key": "026d553045c11120a0aadffb74677d4f4f9a1f9c43216b674e7c76d60b03f43f25", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014e219fa61b2af35a09f80863b2207aced25de59c8", - "amount": 300000, - "witness_utxo": "e093040000000000160014e219fa61b2af35a09f80863b2207aced25de59c8", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", - "ecdh_result": "0245a4aadec430fe3f5e15f4412c00d5b46d3fb0635281edb1bca85dfd576c625b", - "dleq_proof": "849700bdfbfa3f0614c9837b871d5b8b42a109efe8f5b5e6e205d236dcbcf35e0fad0f4bd898a847530d3a837d56549110f8f538a88eea49d71dbdcf8998ce6e", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", - "sp_label": 3 - }, - { - "output_index": 1, - "amount": 190000, - "is_silent_payment": true, - "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", - "sp_label": 1 - } - ] + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCICJa45kPVF365uoUKpN0arSqgSfjyBNY63wha08anrtiAiBl42BSGRArJQdeOVXz80zjvPKjXR4QFd1dw7/tPs81qQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAlWBv6pzMVb2uY5xom9w/XazZ4ZJ9isfxed7jpq45hBQIh4Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWhAeUCBnrbp8ljBWDh8CmTMFvUXx+9ECRIszqqU9OL/U3bEJHv8Fw2bJjsOPSBrZoyH6Us03ur6AKF5KwR614h1uwABAwighgEAAAAAAAEEIlEgjkFVhZ37qH3uVCd4eSDGlYuRbXrHP02lCyzrTAnwYY8BCUICi3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWgD8+Tq+VWJ7fdfgshaz/nQvOSCnhaA85Xsfq1iaXfwhRMBCgQDAAAAAAEDCDDmAgAAAAAAAQQiUSDj5vwH7Pa/a1m0ubaqUxM11laKeL6AjUVOAg1+jH/aUwEJQgKLeQ4Jh/3p8NEjmOtr4wxzdnk8ZHhloqAvLvyWDZZlaALcqxqjkFTkguCjoiOo8Sgs1xGXZTHGeaoggF9/X6TxawEKBAEAAAAA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 300000, + "witness_utxo": "e093040000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_share": "025581bfaa733156f6b98e71a26f70fd76b3678649f62b1fc5e77b8e9ab8e61050", + "dleq_proof": "7940819eb6e9f258c158387c0a64cc16f517c7ef4409122cceaa94f4e2ff5376c4247bfc170d9b263b0e3d206b668c87e94b34deeafa00a1792b047ad78875bb", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 100000, + "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_v0_label": 3, + "script": "51208e4155859dfba87dee5427787920c6958b916d7ac73f4da50b2ceb4c09f0618f" + }, + { + "output_index": 1, + "amount": 190000, + "sp_v0_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_v0_label": 1, + "script": "5120e3e6fc07ecf6bf6b59b4b9b6aa531335d6568a78be808d454e020d7e8c7fda53" + } + ] + } }, { "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (P2SH excluded)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFENGPU1vISZuSH1CA0sDRePskA1UIgICdJJVdDISkBnl/EB7Tlii6RZXFRDz0hB/uCFJx8oxWIpIMEUCIQCJHmYo2I6P30rmVO/pO//w5XooeQ5Zm0Go3qS/AZ2IIQIgY1E7I9okcNTYQ09/rlbnPwKiJtm2BFl4hKWcv+beuBYBAQMEAQAAACIGAnSSVXQyEpAZ5fxAe05YoukWVxUQ89IQf7ghScfKMViKCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOE/J1YjxODCoh2pZvKQgMzvVbONgGqnpvbm3cxwMrPjCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQMPG4LUL7y5/z5kbRS+AOfKOUlK35FrkRgGNSiiOU/75/QvgQt2zwxKqnAJYsOF147V0fK2OlSw42xpLfvGTOOwAAQ4gMSiieXMH9JI3mYW34dwYbesU2RoDC2AnrhfbdvsgdRUBDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFCpE9eWyAlaJ1TA7q5BUxWe7AklkhwAAAAABBEdSIQPl9jb3AntiYHASqF9itv7ZnUAf5dj3vHexLoU6sb6AJCEDxbcSQKck8rC3QMe1ErICPkHi4JTBlAWIqlib+WEIpUpSrgEQBP7///8AAQMIkF8BAAAAAAABBCJRINHDkl4cArKeYeddxg5c+NFKwlEvg+by53zyrh8Ntg89AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "b46f12a0756253abd1cb0a7e42c9696c15a8fb1d45afb18f50ac69933a507bd7", - "public_key": "027492557432129019e5fc407b4e58a2e916571510f3d2107fb82149c7ca31588a", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "001443463d4d6f21266e487d42034b0345e3ec900d54", - "amount": 100000, - "witness_utxo": "a08601000000000016001443463d4d6f21266e487d42034b0345e3ec900d54", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "", - "public_key": "", - "prevout_txid": "3128a2797307f492379985b7e1dc186deb14d91a030b6027ae17db76fb207515", - "prevout_index": 0, - "prevout_scriptpubkey": "a9142a44f5e5b2025689d5303bab9054c567bb02496487", - "amount": 150000, - "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9142a44f5e5b2025689d5303bab9054c567bb0249648700000000", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0384fc9d588f13830a8876a59bca420333bd56ce3601aa9e9bdb9b7731c0cacf8c", - "dleq_proof": "c3c6e0b50bef2e7fcf991b452f8039f28e5252b7e45ae446018d4a288e53fef9fd0be042ddb3c312aa9c0258b0e175e3b5747cad8e952c38db1a4b7ef19338ec", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQCLTLcGPIp7P5Ia4ABZbNd4jlRA4dY+8e4bzsjCrJQMogIgNw2OmoWgzI3SWwuwgfMaotzFugoiSOqGCoFlHKNKDGgBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4g0iImLyaHKbt8hMVYEppdaYYYXO9TXsFJwN9g3UqSwgQBDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFPRfjMomjsJuS76JkXDxOCUNfPVehwAAAAABBEdSIQKHfKAvFEBZvYLQDhs5muN094pSzvehyjfyjXiLNA0veSEDTIekSHL14fAG002IoAlZKCvUU150d8PWjDFlmR6hs5ZSrgEQBP7///8AAQMIkF8BAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "", + "public_key": "", + "prevout_txid": "d222262f268729bb7c84c558129a5d6986185cef535ec149c0df60dd4a92c204", + "prevout_index": 0, + "prevout_scriptpubkey": "a914f45f8cca268ec26e4bbe899170f138250d7cf55e87", + "amount": 150000, + "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a914f45f8cca268ec26e4bbe899170f138250d7cf55e8700000000", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" + } + ] + } }, { - "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS point excluded)", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUA14E6biH6OIv3A4UMLGv6XvKH58iAgKe+tRORGsZo75x2amUAEZxCvfx8PQJch06WwL/6URurUgwRQIhAIqf99208yLh5G4wC8JeFwdB+4gyKfkTorKzZUJSUsAyAiAJAxST2QAAA2+Z+3Sapu/7R998E0bz88sOAaDGd35yTwEBAwQBAAAAIgYCnvrUTkRrGaO+cdmplABGcQr38fD0CXIdOlsC/+lEbq0IAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAk2ynjBb9oXdu9Aiy/DEtZGFJN2W+vaiLhkRer6yNMHBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA8cQIenKbwQX00lgytDgNKjkl0uon86BOmOhUYlRqJcAd+XTzhkxIfxL1hbjSiJsEfhyiO5uu8ulg51qpl0WgowABAwgcJQAAAAAAAAEEIlEg7FUJyUOEInBTl1dmdHAedm+Walaa+3kAcV3CdldrbrQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", - "input_keys": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "amount": 10000, - "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "f1b17746eb6b7d463ab7cb49236309f0fd3ca4566f4def831b337e8cd036bc1d", - "public_key": "029efad44e446b19a3be71d9a9940046710af7f1f0f409721d3a5b02ffe9446ead", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", - "amount": 100000, - "witness_utxo": "a086010000000000160014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "024db29e305bf685ddbbd022cbf0c4b5918524dd96faf6a22e19117abeb234c1c1", - "dleq_proof": "f1c4087a729bc105f4d25832b4380d2a3925d2ea27f3a04e98e85462546a25c01df974f3864c487f12f585b8d2889b047e1ca23b9baef2e960e75aa99745a0a3", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 9500, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS internal key excluded)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAURjPVnK0TQ0eZcuDJlpIdCl2ttl0iAgJDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFu0gwRQIhAPRhsN/2Q/wKVsFSIUU2OBYiEkh+UGpZ4GnXXtHwq4T2AiBSxx6U6TEuqKkAH80mNyvnCZfdwqpinFqBFtxR9bfpogEBAwQBAAAAIgYCQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAuV6etywGNj7MVToDBS5elCZS0I1aEHqn8ExcGFEAOY3Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA9/o4HeILO0WcbkJsYhPUF1MI8kgqROMyhCMmJNTa/Vcymb868WqzAsViY2OjfUSHB/fnoevqBke8zUhiA7srpgABAwgcJQAAAAAAAAEEIlEgBXZyJSSDmoybydLZc46Yu0DdLsUCO9x9p/cGI818hfsBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 100000, + "witness_utxo": "a0860100000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", + "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", + "input_index": 1 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 9500, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "51200576722524839a8c9bc9d2d9738e98bb40dd2ec5023bdc7da7f70623cd7c85fb" + } + ] + } }, { "description": "can finalize: three sp outputs (same scan key) - each output has distinct k value", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEEAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+AGgYAAAAAABYAFIBgz43UFLJiZD13IUlmACDm16CYIgIDyiNr7RbjrAH21cSc7Qo2gPJrUTsc1kcOSlKm1GPq3SJIMEUCIQDMlGITADIsSgZizw9dXA5XfyHRwolYLTgaLuL3OHvJQgIgQ0NN4K5ihNlAcWJ1VoDRM8kC9AbTcQEC9dFuU3FQ+VcBAQMEAQAAACIGA8oja+0W46wB9tXEnO0KNoDya1E7HNZHDkpSptRj6t0iCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOeFYLzk6xK+UpQ3Bs7qwgZdOyj2CUosrZYRM7uMmprVyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNvwhBNXnmTwlNX5Ochx99/2sxXRlqOevQ3tMWkqIpoPTp+ufxHnEhZQAT2/iS/EZNg6yQYu/bXhyO/qLTL0RBkAAQMIoIYBAAAAAAABBCJRIDZiSMVisMJ0fEtUKReChTw4PaKAd3pfUYkJOwJxJi9dAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCKCGAQAAAAAAAQQiUSB4qfgR7Z2aKWpWUtia9WLAA2quuMb6+Vyk3qvV60l6cwEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwighgEAAAAAAAEEIlEgcooTQ3M6IIM4D+Tk4+YgTZxAf7SoyqiY7BA0ARqrTyYBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIkF8BAAAAAAABBCJRIHnvVoij+n/vw5InRVsfHC8IxwCHQk1qAPhMMUIayo2kAA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "3bf75dcb2655e27efbe47e1652566dc08e9b0f6306a0dd45d35ed7a1364285ca", - "public_key": "03ca236bed16e3ac01f6d5c49ced0a3680f26b513b1cd6470e4a52a6d463eadd22", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00148060cf8dd414b262643d772149660020e6d7a098", - "amount": 400000, - "witness_utxo": "801a0600000000001600148060cf8dd414b262643d772149660020e6d7a098", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "039e1582f393ac4af94a50dc1b3bab081974eca3d82528b2b65844ceee326a6b57", - "dleq_proof": "dbf08413579e64f094d5f939c871f7dff6b315d196a39ebd0ded31692a229a0f4e9fae7f11e7121650013dbf892fc464d83ac9062efdb5e1c8efea2d32f44419", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 1, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 2, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 3, - "amount": 90000, - "is_silent_payment": false, - "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" - } - ] - }, - { - "description": "can finalize: three sp outputs (same scan key) / two regular outputs - k value must not follow output index", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEGAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFDFas8/ZGyzIuG4UlJGV/E2OpB4RIgIDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDBHMEQCIDZRFp8fo7gXKN6JmPOrsK/4KlExbzVNEcogboiehFDkAiAKlucqmcJJpPM5zHI5WTNKExSddijittQHWVe7XTAdIAEBAwQBAAAAIgYDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAtj8HyUo/vzx4nf1x/W9VuBXY+Rf1u8O7AcIEa/3nAM6Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApDguomF4Sh4nF5t+oyhHTfGilpmX3LpjWLg5068gxbUVrVfUd07BENnuZQipPE+M1h+1tIYn43lvKx36mMLHsgABAwighgEAAAAAAAEEIlEg/8BMVtDu8peizkLQ4wzJjse3Sm3BIxtFOT63pIPZIsQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIUMMAAAAAAAABBCJRIJxqPSOBjoIO0dDP3rljZXyOwyd7fZuGXHjXVX9d7daiAAEDCKCGAQAAAAAAAQQiUSC3iN15IMFBknVEEubTQLJJKaQNVuP4yLcFNy2VUATAIgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwhQwwAAAAAAAAEEIlEgee9WiKP6f+/DkidFWx8cLwjHAIdCTWoA+EwxQhrKjaQAAQMIoIYBAAAAAAABBCJRIHSQisLI8z6v/WBEw/qQAWoanlj7sc84mrQDWMMIWDXHAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCMgsAQAAAAAAAQQiUSBvxQb4BSqfWoqpuZDV6ZT0ld3tbUe6xEyqza3Y2Jkc0AA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "f3670caa3f21a55a75bdea1ba0a3c2b9a204edb14091c7d44d5f94dc7032a34b", - "public_key": "03590702ae80f0b705bed5849037d4f35700c70305ff2df49bfdd1ee8304d75c30", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", - "amount": 500000, - "witness_utxo": "20a1070000000000160014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "02d8fc1f2528fefcf1e277f5c7f5bd56e05763e45fd6ef0eec070811aff79c033a", - "dleq_proof": "a4382ea261784a1e27179b7ea328474df1a2969997dcba6358b839d3af20c5b515ad57d4774ec110d9ee6508a93c4f8cd61fb5b48627e3796f2b1dfa98c2c7b2", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 1, - "amount": 50000, - "is_silent_payment": false, - "script": "51209c6a3d23818e820ed1d0cfdeb963657c8ec3277b7d9b865c78d7557f5dedd6a2" - }, - { - "output_index": 2, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 3, - "amount": 50000, - "is_silent_payment": false, - "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" - }, - { - "output_index": 4, - "amount": 100000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - }, - { - "output_index": 5, - "amount": 77000, - "is_silent_payment": false, - "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" - } - ] + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEEAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+AGgYAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIA3+9XB4r8pV2yK0ze42yxF/h2HkeAgptCHRBkisr62PAiBk5vWJD0/QW3emSnGDHJiGTZyYTJ7x/r6afFC08VkHIQEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwighgEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIoIYBAAAAAAABBCJRID/LrqSQh/jgPZ3v06vL1t6MAytYP4WmXQV4gcTEQ83AAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCKCGAQAAAAAAAQQiUSCXFELInwR4bggnKK4Rbuq4AvP6npX9sNN1OmhAICAG3gEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwiQXwEAAAAAAAEEIlEgee9WiKP6f+/DkidFWx8cLwjHAIdCTWoA+EwxQhrKjaQA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 400000, + "witness_utxo": "801a060000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" + }, + { + "output_index": 1, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" + }, + { + "output_index": 2, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" + }, + { + "output_index": 3, + "amount": 90000, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + } + ] + } }, { - "description": "in progress: two P2TR inputs - not signed", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIPbR/ouRr1hSHGJHuXqHzNlOWKz58A1jvYKRD6phlnqmAQMEAQAAAAEQBP7///8BFyD20f6Lka9YUhxiR7l6h8zZTlis+fANY72CkQ+qYZZ6piIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJE4S12vti3TQ+tTlA+04p72BDQ8PdbjLC/k6MAlfLt6SIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNdlvJVFySGTHrAEpuPL8+qBWY/0hblnHDaySzV/zkliEGEUnjMrLoxbgM4BGTCTntz1p6wDOgXG3iNtPmNelVwAAQ4gK5A3/0HdF05VIvD0BFw/QENiMq8mANTaXJ6hPMPKtLUBDwQAAAAAAQErECcAAAAAAAAiUSAIUaOIXmXuPu/5yBE/NP8pSPzfBCjYaQg2AAvEBr8snAEDBAEAAAABEAT+////ARcgCFGjiF5l7j7v+cgRPzT/KUj83wQo2GkINgALxAa/LJwiHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDSjbINyPW2Vu9Kj30Oc3P1YxTcCkU9gEs0Lu8CcCev88iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEBXg55SSsTUzFX1NOCvsHoa00U7QiMv7Fwk/JQw+DF7ifH5iyyyaNGyHc4JzOCFQ22gWmt40aBVNyOmrmf3mF2lAAEDCLj5AgAAAAAAAQQiUSAeUXtpy/8s5x8+nhztxM4/8a8BgeS/1nZXVe6xwk9vFQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "909ba5dd602d1ec5af537138dbd5e297b858bd020880b1950491fcd01e03640f", - "public_key": "02f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "5120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", - "amount": 100000, - "witness_utxo": "a086010000000000225120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "f817a924599386baf940c8fe0b43fdd84905ba02edced1781a9312a55de7119b", - "public_key": "020851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", - "prevout_txid": "2b9037ff41dd174e5522f0f4045c3f40436232af2600d4da5c9ea13cc3cab4b5", - "prevout_index": 0, - "prevout_scriptpubkey": "51200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", - "amount": 10000, - "witness_utxo": "10270000000000002251200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "0244e12d76bed8b74d0fad4e503ed38a7bd810d0f0f75b8cb0bf93a30095f2ede9", - "dleq_proof": "d765bc9545c921931eb004a6e3cbf3ea81598ff485b9671c36b24b357fce49621061149e332b2e8c5b80ce011930939edcf5a7ac033a05c6de236d3e635e955c", - "input_index": 0 - }, - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "034a36c83723d6d95bbd2a3df439cdcfd58c53702914f6012cd0bbbc09c09ebfcf", - "dleq_proof": "57839e524ac4d4cc55f534e0afb07a1ad3453b42232fec5c24fc9430f8317b89f1f98b2cb268d1b21dce09cce085436da05a6b78d1a0553723a6ae67f7985da5", - "input_index": 1 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 195000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "can finalize: three sp outputs (same scan key) / two regular outputs - k values assigned independently of output index", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEGAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9IMEUCIQD333KAYwDd2+SyTNcz9TsypkayNsKUYFfeR65QOyqxaAIgTGlAW3e+2vOyB+3ll0m7o9VMRhWoi7025Ugkr3fJ5zEBAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIoIYBAAAAAAABBCJRIDJt9Q/goHt6y3IHC+s7Yy65rRW6aVzB5apqoAe2FG/YAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCFDDAAAAAAAAAQQiUSCcaj0jgY6CDtHQz965Y2V8jsMne32bhlx411V/Xe3WogABAwighgEAAAAAAAEEIlEgP8uupJCH+OA9ne/Tq8vW3owDK1g/haZdBXiBxMRDzcABCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIUMMAAAAAAAABBCJRIHnvVoij+n/vw5InRVsfHC8IxwCHQk1qAPhMMUIayo2kAAEDCKCGAQAAAAAAAQQiUSCXFELInwR4bggnKK4Rbuq4AvP6npX9sNN1OmhAICAG3gEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwjILAEAAAAAAAEEIlEgb8UG+AUqn1qKqbmQ1emU9JXd7W1HusRMqs2t2NiZHNAA", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 500000, + "witness_utxo": "20a1070000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120326df50fe0a07b7acb72070beb3b632eb9ad15ba695cc1e5aa6aa007b6146fd8" + }, + { + "output_index": 1, + "amount": 50000, + "script": "51209c6a3d23818e820ed1d0cfdeb963657c8ec3277b7d9b865c78d7557f5dedd6a2" + }, + { + "output_index": 2, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "51203fcbaea49087f8e03d9defd3abcbd6de8c032b583f85a65d057881c4c443cdc0" + }, + { + "output_index": 3, + "amount": 50000, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + }, + { + "output_index": 4, + "amount": 100000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120971442c89f04786e082728ae116eeab802f3fa9e95fdb0d3753a6840202006de" + }, + { + "output_index": 5, + "amount": 77000, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] + } }, { - "description": "in progress: no ECDH shares - no PSBT_OUT_SCRIPT", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1ARAE/v///wEXIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1AAEDCBhzAQAAAAAAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "b716cc8d556fc8223cdda82e02fbc23375ba3829243b5d18351049db291b2fab", - "public_key": "021ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "51201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", - "amount": 100000, - "witness_utxo": "a0860100000000002251201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [], - "expected_outputs": [ - { - "output_index": 0, - "amount": 95000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "in progress: two P2TR inputs, neither is signed", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/AQMEAQAAAAEQBP7///8BFyDIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvyIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gK5A3/0HdF05VIvD0BFw/QENiMq8mANTaXJ6hPMPKtLUBDwQAAAAAAQErECcAAAAAAAAiUSBDoNQOneCIJ5QWF1K65CupCVJ4QgnwY0MPCvJWNUqFuwEDBAEAAAABEAT+////ARcgQ6DUDp3giCeUFhdSuuQrqQlSeEIJ8GNDDwryVjVKhbsiHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEC5Xp63LAY2PsxVOgMFLl6UJlLQjVoQeqfwTFwYUQA5jciHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaED3+jgd4gs7RZxuQmxiE9QXUwjySCpE4zKEIyYk1Nr9VzKZvzrxarMCxWJjY6N9RIcH9+eh6+oGR7zNSGIDuyumAAEDCLj5AgAAAAAAAQQiUSDLH766UNBuv/tpC9qdX/Oc4vrbT87clmMu/xukHMDAewEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "5120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "amount": 100000, + "witness_utxo": "a086010000000000225120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "2b9037ff41dd174e5522f0f4045c3f40436232af2600d4da5c9ea13cc3cab4b5", + "prevout_index": 0, + "prevout_scriptpubkey": "512043a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "amount": 10000, + "witness_utxo": "102700000000000022512043a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "02e57a7adcb018d8fb3154e80c14b97a50994b42356841ea9fc13170614400e637", + "dleq_proof": "f7fa381de20b3b459c6e426c6213d4175308f2482a44e33284232624d4dafd573299bf3af16ab302c5626363a37d448707f7e7a1ebea0647bccd486203bb2ba6", + "input_index": 1 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 195000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "script": "5120cb1fbeba50d06ebffb690bda9d5ff39ce2fadb4fcedc96632eff1ba41cc0c07b" + } + ] + } }, { - "description": "in progress: partial ECDH coverage - no PSBT_OUT_SCRIPT", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFO7NbLUN2ovu8TI7muLmalmr1RuJAQMEAQAAACIGAmJxuxCWVhLlXjqEIY6BwmactddNpI0ECM6YLhFs21SWCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMrwowrVk+NVZLgRwhi1mHG2yKYRNy1VrXiuF89DaO8viIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNs44LHj6uB04ThzwniZHOkQa1QBGcUaeBZdJY6GfbQAdhUqcsXUsWh7zhL1v4iWM9qk8dajDT2/xCiDyUw/A4UAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEf8EkCAAAAAAAWABRGq/EMr8qEgagROk4qKHaDM1uW/SIGA9qRfwGDugOe4a51q3NR0FWnxp70pD7rnMBr0+/Prn+sCAAAAIABAAAAARAE/v///wABAwhADQMAAAAAAAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "e3131342d1a1a5963d3b67fc72ce22d751e369e4dcfaf86522a48de7c2771449", - "public_key": "026271bb10965612e55e3a84218e81c2669cb5d74da48d0408ce982e116cdb5496", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", - "amount": 100000, - "witness_utxo": "a086010000000000160014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 1, - "private_key": "5989a3a28fa1adf098966366f8e1af40de6563289b173b691ea49ecbe3a05fea", - "public_key": "03da917f0183ba039ee1ae75ab7351d055a7c69ef4a43eeb9cc06bd3efcfae7fac", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "001446abf10cafca8481a8113a4e2a287683335b96fd", - "amount": 150000, - "witness_utxo": "f04902000000000016001446abf10cafca8481a8113a4e2a287683335b96fd", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "ecdh_result": "032bc28c2b564f8d5592e0470862d661c6db229844dcb556b5e2b85f3d0da3bcbe", - "dleq_proof": "db38e0b1e3eae074e13873c278991ce9106b540119c51a78165d258e867db40076152a72c5d4b1687bce12f5bf889633daa4f1d6a30d3dbfc42883c94c3f0385", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 200000, - "is_silent_payment": true, - "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ] + "description": "in progress: one P2TR input / one sp output with no ECDH shares when PSBT_OUT_SCRIPT field is not set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/ARAE/v///wEXIMgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/AAEDCBhzAQAAAAAAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "5120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "amount": 100000, + "witness_utxo": "a086010000000000225120c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [], + "outputs": [ + { + "output_index": 0, + "amount": 95000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + } }, { - "description": "in progress: one input/two sp outputs (different scan keys) - missing ECDH share for output 0 scan key", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQOVZIBK8xbNFXvXYV0WU5Cwf2XsVl3XgoNUhXsodj2g1SIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQPMdrcFxpu0VlJBw1Jg78iuPh0VOYjxOFKlnxm5F1e0KJ9pfF/4YeSQ/eFQhLxqHdrEcmpiOjAei78h60B2AioIAAQMIkF8BAAAAAAABCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIJ+BEiwq1udczOTQLai4fg+bC8QFSZoibxiRh7EdMyURAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", - "input_keys": [ - { - "input_index": 0, - "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", - "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", - "amount": 200000, - "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", - "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", - "ecdh_result": "039564804af316cd157bd7615d165390b07f65ec565dd7828354857b28763da0d5", - "dleq_proof": "f31dadc171a6ed15949070d4983bf22b8f87454e623c4e14a967c66e45d5ed0a27da5f17fe1879243f7854212f1a8776b11c9a988e8c07a2efc87ad01d808a82", - "input_index": 0 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" - }, - { - "output_index": 1, - "amount": 90000, - "is_silent_payment": true, - "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" - } - ] + "description": "in progress: two inputs / one sp output, input 1 missing ECDH share when PSBT_OUT_SCRIPT field is not set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEf8EkCAAAAAAAWABRGM9WcrRNDR5ly4MmWkh0KXa22XSIGAkOg1A6d4IgnlBYXUrrkK6kJUnhCCfBjQw8K8lY1SoW7CAAAAIABAAAAARAE/v///wABAwhADQMAAAAAAAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "586b0810bbc3c7266971aeb7f8778b41707e092a1aeaf0d953b211f956e35541", + "public_key": "0243a0d40e9de0882794161752bae42ba90952784209f063430f0af256354a85bb", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00144633d59cad1343479972e0c996921d0a5dadb65d", + "amount": 150000, + "witness_utxo": "f0490200000000001600144633d59cad1343479972e0c996921d0a5dadb65d", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_share": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 200000, + "sp_v0_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + } }, { - "description": "in progress: one P2TR NUMS point - no sp outputs - not signed", - "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEDCBwlAAAAAAAAAQQiUSDcNKvDid4sKA9VVlxuyYhrMmNs+dBvrlOr5C89eH+viAA=", - "input_keys": [ - { - "input_index": 0, - "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", - "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", - "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", - "prevout_index": 0, - "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "amount": 10000, - "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", - "sequence": 4294967294, - "signed": false - } - ], - "scan_keys": [ - { - "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", - "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" - } - ], - "expected_ecdh_shares": [], - "expected_outputs": [ - { - "output_index": 0, - "amount": 9500, - "is_silent_payment": false, - "script": "5120dc34abc389de2c280f55565c6ec9886b32636cf9d06fae53abe42f3d787faf88" - } - ] + "description": "in progress: one input / two sp outputs, input 0 missing ECDH share for output 0 when PSBT_OUT_SCRIPT field is not set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UAQMEAQAAACIGAsgXu3Uhr8NeqW87+ycObrUN3/pVYGJ7lh/sAPKZZQi/CAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQMJH9SAORd/RNe3npYWiEnGLrP4eADEZ2fFCo84+Y79FSIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQL4acjrvVeiYG5lZmpvBKzj4froBWMxwZokPImnK3kY7dzQal9KScZZNAcAkHMMi/VOQwpuZFg+CbzKTZYmMvwIAAQMIkF8BAAAAAAABCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIENYHfbIefmqrcU2YN6xVrnxIr0a7KczIDvOh/zx84buAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 200000, + "witness_utxo": "400d030000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": false + } + ], + "sp_proofs": [ + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_share": "03091fd48039177f44d7b79e96168849c62eb3f87800c46767c50a8f38f98efd15", + "dleq_proof": "be1a723aef55e8981b99599a9bc12b38f87eba0158cc7066890f2269cade463b77341a97d29271964d01c0241cc322fd5390c29b99160f826f329365898cbf02", + "input_index": 0 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 90000, + "sp_v0_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 90000, + "sp_v0_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8", + "script": "512043581df6c879f9aaadc53660deb156b9f122bd1aeca733203bce87fcf1f386ee" + } + ] + } }, { - "description": "in progress: large PSBT with nine mixed inputs / six outputs - some signed", - "psbt": "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", - "input_keys": [ - { - "input_index": 0, - "private_key": "9f4bfa7f9f0de7ba51687335600908649ef7274ffe5fea3664d5215281cc4704", - "public_key": "03b5707469f896f18340858fa794cdd9c1a3178d055135ba3fd0bf51fdfeb1ab24", - "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", - "prevout_index": 0, - "prevout_scriptpubkey": "0014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", - "amount": 100000, - "witness_utxo": "a086010000000000160014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 1, - "private_key": "6ed56f21b429a0eb945d192891eba72cb8dd19ace94d6e132b31eaf7eebd52ff", - "public_key": "029383678685b551ddec9a3225691f9feef8fbd2d46aec439fbfdeb3420af23211", - "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", - "prevout_index": 0, - "prevout_scriptpubkey": "0014761f52b898187b18a36bf94e37b0181b419f42a4", - "amount": 100000, - "witness_utxo": "a086010000000000160014761f52b898187b18a36bf94e37b0181b419f42a4", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 2, - "private_key": "d9300a43035f31af0b31d506fd8972532a5808204abc878f3899ed4f7ce17a3b", - "public_key": "0369b0d7caddd109da8fe4ae8f051b555e9e8618c04c438d1773208365e76542cf", - "prevout_txid": "d041c742ca364472d1a18c7a8eae07e6e904a9ea1b85f198525fb83ef276e343", - "prevout_index": 0, - "prevout_scriptpubkey": "00149e17709c62841fcd79bc6df488193a51cf29c7ab", - "amount": 100000, - "witness_utxo": "a0860100000000001600149e17709c62841fcd79bc6df488193a51cf29c7ab", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 3, - "private_key": "b6b03ab16f91b8f280946739891052e20b3a1daf0df185fb15f32cf4d68074d9", - "public_key": "02fba64d289102989bef638e918c1fdfdeb520888ee40811e08a55f361d251a5f1", - "prevout_txid": "52262cd5d402bf32616d07fc03286a8f7fe78af7ac411dfff41655ddc1011e6f", - "prevout_index": 0, - "prevout_scriptpubkey": "00143e9c24057ca731119cf36726e24032f1a4f77970", - "amount": 100000, - "witness_utxo": "a0860100000000001600143e9c24057ca731119cf36726e24032f1a4f77970", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 4, - "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", - "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", - "prevout_txid": "e298eaf24fe1ca68b41e4b6b83cc3d91ced99c6e78d5b992cfb15771b5457064", - "prevout_index": 0, - "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", - "amount": 100000, - "witness_utxo": "a0860100000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 5, - "private_key": "30f3daceb10c037adaa918f7bd46548fab677d405212a19e3163be5998eb9495", - "public_key": "02e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", - "prevout_txid": "1730833ecb5be01362d7149522604484216e1c7b18cf313d1cf1543ef85df3b6", - "prevout_index": 0, - "prevout_scriptpubkey": "5120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", - "amount": 100000, - "witness_utxo": "a086010000000000225120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 6, - "private_key": "37de74c28a47ab7b32eac140a9e89d42cde05e9d06e89c2a48b2f8673cfcd883", - "public_key": "022880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", - "prevout_txid": "e93532e0eda39c4d39da2d3f91d14529bc435fc2efb9196e25fbaac4b4e89b81", - "prevout_index": 0, - "prevout_scriptpubkey": "51202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", - "amount": 100000, - "witness_utxo": "a0860100000000002251202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", - "sequence": 4294967294, - "signed": false - }, - { - "input_index": 7, - "private_key": "81e30f5b5d049bdf5c5bea9c3329bf57cc8b473240182a9f2a6eee07435bd54a", - "public_key": "03199d2f155f32ebb167aeb0ccca6e5afb7340898df1b7ab9936500f6d4391902a", - "prevout_txid": "7d1b6dff574e04aa401c3efcda2a1393b4db831df2ce2c3033da689fb1359a69", - "prevout_index": 0, - "prevout_scriptpubkey": "a914272948466e5f57d55a702da2efc34a9686b5e64687", - "amount": 100000, - "witness_utxo": "a08601000000000017a914272948466e5f57d55a702da2efc34a9686b5e64687", - "sequence": 4294967294, - "signed": true - }, - { - "input_index": 8, - "private_key": "e56f2b0c24fa6b637b9f53b8fca46fd20293e511d7e20ca3f46eff717779363d", - "public_key": "035fc1c4bda637ec8e51fdfcdc42a5155a5aa5c8b8e0ae23af087e3d856b0b7c9a", - "prevout_txid": "b7103556a1298f214fa132c7275fb76d1ff3247d1d39b3d661ab493f814c60e2", - "prevout_index": 0, - "prevout_scriptpubkey": "76a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac", - "amount": 100000, - "witness_utxo": "02000000012a34ac1b0db77a8198c1e29002cc47bbfcd6ed830960304d2c9a3ab548486b5d0000000000ffffffff01a0860100000000001976a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac00000000", - "sequence": 4294967294, - "signed": true - } - ], - "scan_keys": [ - { - "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - }, - { - "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" - } - ], - "expected_ecdh_shares": [ - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02a9998fb163f5b6c1ff8494cc696a12d6caf413d842fce23ea85a844d331d6c73", - "dleq_proof": "10f2d556284e571184fd2a0d47f33fb4ba2aeeec0ddc221d1ce3433c7ea4e08f5c836ee8103809aead22d449d71ef1ed486cb911a61d5c4a85a3e9db383365ed", - "input_index": 0 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "02d1f1d3ef8bbbe74159b7bdfd30005833f58afba0a2d6e146e892e26effadbfe3", - "dleq_proof": "a7dba9ea30477fd1f6339e12017407c2cafd391b76cf985f45ac27d0e84157ba5dfae1741b0c1c8f3e4215f13843654fe23a66ab10051494adb470f36f12a509", - "input_index": 0 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "0369c01d7fd59cac879e1e44656e0523276ebf890f5bdc86176023baf603e3cef3", - "dleq_proof": "65fedccbb3e461fa84baf78e753b6da50cd358c505426a554d1e5861f90a257445fb63e63188da1fc2a7dcf3d6c2948e8917659f757a8814c19a71c66f75bedd", - "input_index": 0 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "03316576e6818d53a2feb756dc34982f1e03df93acdd6e4c86ad04d02d6e02ae5d", - "dleq_proof": "91d77475afa08026e55643c96d65e845ad4a8c1e916e733bd727b9c7957cff1de61dd300ec31b5efca68f58f51ece75328d35777090b3f818750d25f5b1fb11e", - "input_index": 1 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "0302b1bb46a25b2cf2c5a22679482419fd9421ded9dbda76b8a3bf79d57371d706", - "dleq_proof": "0846af5d950e5cbca9293e7e5b919414b02668177bb8ffd36f44e634614943d6a522cfac48bc5424b901c5f16483318df37beb9a811ff1fcdb660a4470f90b22", - "input_index": 1 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "034397d2645deb54565ebcac155825fe3104defa53611d7efb20cb377b01340423", - "dleq_proof": "2a51c2f80fc0836fd6d934cc030df5bd050a80ff2d6c5f71a30c35b88b18e4709d9d0656809b63bd47c4269e0dae82973dfc83fad55acc1de9ada6d4a8d41820", - "input_index": 1 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "032e8d33e94248f7e4a9574a63598e58066da9df43483fd183fd8fe0ac6c882097", - "dleq_proof": "c5b2c00e3a86c89caaa5fc68877c6d106510d5da37097af9d113f68bfefaccc555aa986c9b9a3fa1d7e65ca90aca2b978ac048b35ea1cfdc7229b60546ca1c6e", - "input_index": 2 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "035394d74a065a16d5c0a4a2f949e8af43c42aaf368caaef9241fdc55515098ab6", - "dleq_proof": "c30b78f3f8260b5dc7264ae9352098db17c0d0f3f856623da59cfe307f5feb3a24d150dc656852a3eeca71f68997c826dcc32f989f7b81b6ff92afaed361ac82", - "input_index": 2 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "03b649141a26536130bdbddfe0643441cae2ef1897d1e5598badd3ec7d576f06c3", - "dleq_proof": "2f0c488bfc17862ab2dfa7b71c250c716d5f2aaeac8ac135906e21f1dcacf7af17e5070d9ebbe364ff870b73060a5451fd44e2f8ad6fdc68215d82acbd04e6a4", - "input_index": 2 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02e553175fd8c7e0093203c88c09021d9eb8d988a8f16090c0c63e69128ec003d1", - "dleq_proof": "2bbdbc723ac50fab4f424c050207b320804bc8d482557a5aad0ee7b2fb96789fb9133272048df40ee5a0a56902a7a6e318206cf9ca8db044d49ecc5f33a0f035", - "input_index": 3 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "0324b1acaa169c4287a2452e691cbaaea2e74c1851515b34132ab449c931cf2d7d", - "dleq_proof": "1b19afd68d2c68ffe5225c6a0a65ee553741962ef7c316bfdd4c66c790bedb5dc00b449ca4bc285c6cfc1f1d77e80937792e25b3279684c968887e6dced150ff", - "input_index": 3 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "02b335b89a957ad90100236fe18b21fb9cccf5306e1e444b073a795e278654012c", - "dleq_proof": "5ab4e08583f4a89dc9187e4811bac1a32c9171b12af5cf3dd584cc792e757709c3ea094dde0e410aa1be478301ab54143cdf0615f33c12df601d1bd798c7b4c1", - "input_index": 3 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02474079b71677a38273a2fa3fedd3c04c3fd1a9123ce353d66cdc13ccdc49d0f2", - "dleq_proof": "c1b2e788abbf47a4d10bc5c82ef7b7d4aa60c67951dcb8a7162f32bc87ac0432d4d8a9af36bf8a3a958e333a456e4fd58706db7adbbba23e5e9802109fbd44a8", - "input_index": 4 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", - "dleq_proof": "765cc81e38729a685de9e075a75824e6059df65abe85b3fadcccd4364e48f572b87f7136786ec4b13ef4b2c2529ebfe3f7ebb4e21367044312285933dea3ae78", - "input_index": 4 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "02f6628d4962209da22e07a74638f3f557902c2c10921a2d61b6779e7a4e25f1b7", - "dleq_proof": "e9021ea136236a1f0171672814a2f47e5bf3c8929760cbc3b6c1021a4a56c1f6bd263eb0bfaaa8904d2970e666f23699555ee22d6965ce5cacfee0302dfab3ba", - "input_index": 4 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02dad1881c2ee6a5944149cdaa114f2d87cbd3f685f1663fcd166b71b3703de4f8", - "dleq_proof": "22f40fe4531a31a6c83773b081f22e5b3bb6d3e012af9ee6ccc4d17a0dc6c66c886fe2410d6920936ee060e9e1c8cafb46ec1112d7f061f678776007f93a8cd5", - "input_index": 5 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "03f1808ad0bf8b9d887cfdd5b111ae0a628f776b8c029aaa12e8d6bdafd647e329", - "dleq_proof": "fa16d0202219078c5a28df26df6fd4d19bb307e1f45427db5a3f82b6df1698e0522d9b1c3c19ebad3987de2a4054927df61d8211883be161243803755a3f567c", - "input_index": 5 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "0223bfe0b34c1ddb81ac981cbe5b65df3719039dfedda3b1509deec64052d5341a", - "dleq_proof": "07b441f0069b3311f2e4291acf83271b43b9e55c3c0f901d0ae9d8c4cf03eb28fac9e1fea3d4c70ed469c0c2d61d5dc13c8226b1c2201080991da67b5f01d8ec", - "input_index": 5 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "0376fd008d04869342a162827e8357feac6450ab27002dd0abb0360dc6231640c2", - "dleq_proof": "e389ade2894ff90f3d9c44ff33c23544c9492404108c020d9c4dd2f36949f7d860bad1de203ad9ece0b25dfda87e479d314c9cd23bb164e4daeaed9a8c80f18e", - "input_index": 6 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "02d439e9f066bae9f9b66c9d81fb5525e4906039deefd10d4eecadeb967d01de6f", - "dleq_proof": "00da40e0d6a28c8ba41d97350ef30a37aa95ab7beef2f2c305ddb9936fa9a90f53ba900cabe91301b4643ab17abe722233c0f3435b925809612776c2743daf91", - "input_index": 6 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "03f273e108ec04d95570d3eb0055e1a4cca0c07b9309300d71ff2d50c101c406cd", - "dleq_proof": "c34d359e3f728bccc5f22cbcafac1ada0d63abc59ee6cf072db13885db6e68d5fb1ea9ee32f9fa886c4c1aac8177b20681f8a7ce180f159dd91d6d6aa99a2da8", - "input_index": 6 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02fa1ced932598a27fa28410b955ea67479b5a4033b69f2c99e4e26767bba0a556", - "dleq_proof": "70db376844a40099c673f14fe31c52ad36d7789ed4eac5954a81fd9be97ed83556335331ebb7ee362dfbc4e79f75921074a9dbadc65f353b4ebbdb10f86b87f8", - "input_index": 7 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "02f3c175b08b207637616aa74e67baac1a1807c94bce70800f76f5b17b52c0082d", - "dleq_proof": "4b5f862f2e5487d67d1b6907178f2b74e2aa1485014904fc218870bc708291e6f73ad92055358c04ae27138abd5ac9daebdf8609de59657ccbe20fcf47ed7cd6", - "input_index": 7 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "0300e0fd1710dc56ad7c173aa9141d731577009bc3dffcba8576a48e77ab34d970", - "dleq_proof": "1d0da012864e36463540e747535e129c879c957b4078356522dcae30a15ed08b8223cd95c4bccf1f7ff18528cf3c60b044afff1ecc8c6f6aeece768e35acc486", - "input_index": 7 - }, - { - "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", - "ecdh_result": "02ce7f309df4cdf552acdbe6fee5b0a68744647e4d6499687f90b89c553fce6e49", - "dleq_proof": "3acbafbce204ec65922e92214799e10a435590dae0a5d3238cfe072bbd2be362cc5763af621c4a8aa454aff55bb770b5aca984eec3f3ba04c94a6f7d171c7e66", - "input_index": 8 - }, - { - "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", - "ecdh_result": "035ab68574f8072c038766b5bc84bddd8127d2c35975f791a4c20f1af780254720", - "dleq_proof": "f3a0b179c2a967f5edd8c941d91de3091cfe896e3d91fd9631c170e27dbff06095d2e2a1a81ad3f55d247bb18234161a104aeb561d5607c997a7dbf00bde2c48", - "input_index": 8 - }, - { - "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", - "ecdh_result": "02fd39f90bc4b09db395596c4962b1f8de00df54ee6cfe4005770c9dc56c3ab425", - "dleq_proof": "6c0b06beeaa0af23271ee961776ee35394704e658dad125bd1654972cb69cdc1b19c6820680828192e26b6a7392b0a4f480e29bf38511d8821eb7caba2ff293d", - "input_index": 8 - } - ], - "expected_outputs": [ - { - "output_index": 0, - "amount": 30000, - "is_silent_payment": true, - "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "output_index": 1, - "amount": 30000, - "is_silent_payment": true, - "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" - }, - { - "output_index": 2, - "amount": 20000, - "is_silent_payment": true, - "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - }, - { - "output_index": 3, - "amount": 20000, - "is_silent_payment": true, - "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" - }, - { - "output_index": 4, - "amount": 10000, - "is_silent_payment": true, - "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" - }, - { - "output_index": 5, - "amount": 50000, - "is_silent_payment": false, - "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" - } - ] + "description": "in progress: large PSBT with nine mixed inputs / six outputs - some inputs signed", + "psbt": "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", + "supplementary": { + "inputs": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "295c2eedddd8331d20b5d4cf9e69bb523ed85cb0bf35ab12e04fea66fe6d4a4a", + "public_key": "02f5b59fa5e492221ebf55ba78ad442605beae95166ba1eba3250d0bbaac7e2edc", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014139350117c577941a985802bb9edefc113932bc7", + "amount": 100000, + "witness_utxo": "a086010000000000160014139350117c577941a985802bb9edefc113932bc7", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 2, + "private_key": "e6db4a04e2fc29745ea1a9dcf1fed7449c8228ffe0503d8171e64126d5399800", + "public_key": "02655ef5daf05d28d1ca73ba8e211300db2b70416737183e0fa8c355ee4c1cbac6", + "prevout_txid": "d041c742ca364472d1a18c7a8eae07e6e904a9ea1b85f198525fb83ef276e343", + "prevout_index": 0, + "prevout_scriptpubkey": "00142307fc774ca174b42ada814bc2e6e444ff3d830c", + "amount": 100000, + "witness_utxo": "a0860100000000001600142307fc774ca174b42ada814bc2e6e444ff3d830c", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 3, + "private_key": "f5208ed67b0019ba4e306aff029d247931e0dfacd1fe6e69091bc6bc70a42619", + "public_key": "0303a0f4528d264e8e95256634b94414e2748f72962704fe57e8b0a2cc44d2383d", + "prevout_txid": "52262cd5d402bf32616d07fc03286a8f7fe78af7ac411dfff41655ddc1011e6f", + "prevout_index": 0, + "prevout_scriptpubkey": "00147018bce965288d8bf0ccf3e0ec48b6f1dbbfe548", + "amount": 100000, + "witness_utxo": "a0860100000000001600147018bce965288d8bf0ccf3e0ec48b6f1dbbfe548", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 4, + "private_key": "0c19c34dc1005feb5ca60104d20472f7f2f97bd4d521264618196bf71155b20a", + "public_key": "03a8911beb5a48fe119cb015088cf0c3a118cf026772448972d1b70c764ac59412", + "prevout_txid": "e298eaf24fe1ca68b41e4b6b83cc3d91ced99c6e78d5b992cfb15771b5457064", + "prevout_index": 0, + "prevout_scriptpubkey": "00149332bb020cb03d49eb4d04712c1cc08e2b06d8d8", + "amount": 100000, + "witness_utxo": "a0860100000000001600149332bb020cb03d49eb4d04712c1cc08e2b06d8d8", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 5, + "private_key": "5aaa151cbdeb566911784d166b01ce57f35993b98f96846efec1cfefcc0d8f56", + "public_key": "02d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", + "prevout_txid": "1730833ecb5be01362d7149522604484216e1c7b18cf313d1cf1543ef85df3b6", + "prevout_index": 0, + "prevout_scriptpubkey": "5120d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", + "amount": 100000, + "witness_utxo": "a086010000000000225120d155713c520ce2d8276164215d659ab623c5f7306f8652c1756e26833e886e01", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 6, + "private_key": "d92c1506167b3a00a21f4d90d7b5ccb4713c00194aa66f9c7deb162c467f9643", + "public_key": "02d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", + "prevout_txid": "e93532e0eda39c4d39da2d3f91d14529bc435fc2efb9196e25fbaac4b4e89b81", + "prevout_index": 0, + "prevout_scriptpubkey": "5120d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", + "amount": 100000, + "witness_utxo": "a086010000000000225120d00e15fb626a7efee85c5bce676d636b6048914e9a34ace0b4cbc44bc948077a", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 7, + "private_key": "d8bc8d0e1233a97133f3573d6dceb6736e8b6d2e4839925145022ea3efdad8f8", + "public_key": "020500f167cf669e7dac39e6aecda1f28c66b78ec7097eefef25d54f7be785e7f6", + "prevout_txid": "b6368bbc330cddfe9e2550edb7dfc15ae74cac9bcc7d967fe81e6f27f8597b1d", + "prevout_index": 0, + "prevout_scriptpubkey": "a9140df101357f73e6658500cf56f3a132d7bb8afbdd87", + "amount": 100000, + "witness_utxo": "a08601000000000017a9140df101357f73e6658500cf56f3a132d7bb8afbdd87", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 8, + "private_key": "81e30f5b5d049bdf5c5bea9c3329bf57cc8b473240182a9f2a6eee07435bd54a", + "public_key": "03199d2f155f32ebb167aeb0ccca6e5afb7340898df1b7ab9936500f6d4391902a", + "prevout_txid": "03bceba5379d73daeafe677972b03dcf7ef30b7f10eaa83ad04bc0bf00d8b2f7", + "prevout_index": 0, + "prevout_scriptpubkey": "76a914569bf311e68a383767b43f83042dfabe60093ede88ac", + "amount": 100000, + "witness_utxo": "02000000012a34ac1b0db77a8198c1e29002cc47bbfcd6ed830960304d2c9a3ab548486b5d0000000000ffffffff01a0860100000000001976a914569bf311e68a383767b43f83042dfabe60093ede88ac00000000", + "sequence": 4294967294, + "signed": true + } + ], + "sp_proofs": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "030a18b9bb4199b89330eb17f8ee5ac786e0853dcd2f3ccdf1744b97ce4ede053e", + "dleq_proof": "001383d4661be8725ef29048f48c911f89f5f34317d7c0c0acc60ef65f1b52bfff7a96d8339b625df83abab57aa273edcd9a35c794dacbb1c861171bb267075f", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "03fbd173d9c48d58c5022426d05278bca17b9a8e2282666901a1b00b9e04b79949", + "dleq_proof": "c05da410487cfaec378febe6af5005e3ae6c86236818b0e55b214017eb5073edef40179575b5dcdaa9063491ac8b83fd0624d4177a4d2dd4994c4640d6b8ccde", + "input_index": 0 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "037372d179f4f628da82ccbd4e4217bdb0809f1417c9abeaa35fa805d48ad6554c", + "dleq_proof": "a6872d4eb119fe2af70953f752a22236b54a3b57f70e511f10bd8b42ff56b5acf6365093c480ea9f13776784945b59318ac2927d915aae244cfb683f4188a3a7", + "input_index": 0 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "02f6ae7b8aac9a0f9c9f04eab484062172df2e38d9f2f6ec31b404bb5a286aabf0", + "dleq_proof": "334aced8106ebaa4287daca56cca26795f2d2a739784cf6b734da3370757f499e120c0e40be40436cd74c4ef26905706f52fa7fa6e8e76451e8583783051a843", + "input_index": 1 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "03a6a89b1b986a995533e17bed64500b541bb0d739071efe2ae2b7efb0a0ca6bcf", + "dleq_proof": "c34a6a2940bbe9a7356c1cc6ffe358dd4441db58897cba99c212eb75285e7da1eca11c792c97a380493345ab224de9d94c2b36ee8526ae23528171a3231de733", + "input_index": 1 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "02b1d3ed2fa4bc316a08eb1485fa75ed7dd54ca7a9ae18d0c4a17da93f30c385d5", + "dleq_proof": "d841a373ad2896b972b8cfea1634ff14a30f80d84cfd6ef18893397b8f346c80519c9b161a72244d0e9b64e5436c98ce9dd4e17a0728fc997b5c7bcf39cecb68", + "input_index": 1 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "03bfb86253beb96f58b8c469e442cfcf9f78a5413a95423be8e686764f2fa7bd3f", + "dleq_proof": "52dffbf0095f29b1de24c9d68d549d1c54bce6900454fe37fd10f5c903dfee85f7bad8a72ada8e52cd9092f51d9e90b5a7e4f36ca04df98e77fbad1347305bc7", + "input_index": 2 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "03df706ff26d672fe50c6f56a2ca1e7174e75055c920bbd337e1a7d6bf2826f6dc", + "dleq_proof": "fd2e8c22b9b672d3bb9e26d4b6da2dc3f125455a969fd8e2b2c1ba791076ad71b38c01f9218c3d6776fd895d2f3067484996d85e268390c2b433e6c4b21891f1", + "input_index": 2 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "038604aa8cff309dddf49b1f366f89c269616587fc41db608540f9431536f6646f", + "dleq_proof": "93e1e5d4888bc1cfe02eecfa9dea144ead84f23a10fc1a301103c1e56393527b63417c6c4a5af45359ff8b6e179af73978e4d62e862eedd2a286f5278e4cb340", + "input_index": 2 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "02980bac7264e14bf820cc435b69a78df726c177eb026f1b81b52de811272f58eb", + "dleq_proof": "38e03463b6450dbd051065a812a6f2631087f7951e46ac84e66da811755717c093180e4d49827b8c097ca7093fe92d393f95a5d7ad849a41802dc4e4558abde9", + "input_index": 3 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "038029998c73c2b139db75557ec3011ec65ecd212447963006571852a3e92289cc", + "dleq_proof": "381ce3c1ac9fc7f6a51536456252984768e8fbd014070239f4cb13b16793c74cc5ed677c8a7eacc173e988d353a3f289c7e2141db7a4b4145c5499ec837f36ae", + "input_index": 3 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "03a27d9f1fa53e43f70835a6990954b78a35f747066f7b82b4a9ea82e8bb5e06a6", + "dleq_proof": "732aa0957a9db2c759e39aca5d0167ef13d2a34a43c812e9cc9d712d458f7b2285da7511eb16f61f9600d20be4e94dfdd2bc3ae37fd943fc34947dfc3fdc6797", + "input_index": 3 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "027eb7c1c4afcd7e62ab6ad3d2ba2733a3745220641f91903ebfe7bcc5dbdc6b5d", + "dleq_proof": "77b1572336d9bd4e2f73411eb8f6a96235a130f444cbeb07a489f447921e37489d71fd3db28a0bbaa35b88c37b7579ecdbf6ce1638700db81dfc86bf79cd1be7", + "input_index": 4 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "02bef4738c6f327f1724b1407988959cdf2bd19210894bfd043535b61138270818", + "dleq_proof": "0a584927102820b7b6cad6bcfb031a23a37312ad87d23f1cb5a8359be2d5ff39b6a2a2fe37cd0d53ee347f13e6b3525769b2e789f0699cb985588eac2daf10dd", + "input_index": 4 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "03ca88bcdb6d1f5291e90c75d3da601a8bd29991eabbf7f94b2f39483e3858c9a1", + "dleq_proof": "5d0de8a27f0d528802cf3354a1af507bcf0fed419da641c9c0807cd754e07af8790b511c705d5fbf63305ab22afe0497facf070b5afeafcee3a6900547767756", + "input_index": 4 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "03802b69b360da4585512b1cf967b184010226d75ce5b762e77a0128bcb068ccbb", + "dleq_proof": "103ae05c10e43298376c3fee1dc5f0d04389f4f20af49346d48ead324d615d6f28fca0a318445130ea56a862019b2de0c2637db3c418c0b074b58548ae8b20c9", + "input_index": 5 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "024f2a15a4b15a6b78f0a632fc7fdf112929f64bd4dd14f67a63cf4fb8f325a204", + "dleq_proof": "8f223de27986dd8792a03d9d5b662323e8697830ebabb67363881fe72c86482ae61a09268d083b8354cfc2bad35c148eeb291af622dd460634606332af1b8297", + "input_index": 5 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "02407615505ecbdea881312504eef6f4681a26316ef73d33537a7fd793f4658ea9", + "dleq_proof": "f055990738544d099b159290e7f5442cb91226260174aa9d8c1c8310b7cb01ce2b94cc5d2b8fdf81667e02fb796db0e5c27877de0d41a2a0e709b01445baf296", + "input_index": 5 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "020faa3a0c31ae7695e769546e30aa782abd31fb681b970a13aa35cc21dfd13800", + "dleq_proof": "e4074a6ec893eab806d5df9a74ed257e785ff378643dbaa7933c7813a7b5f6c90ca82b62539f39b38c2c72fe5cf81c22a5e641f673644f6c486b3db577464463", + "input_index": 6 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "02153fcdfe96ae70363fd1542646d309c2132b8325540e3dd7f88e37f9796079a6", + "dleq_proof": "4320e9f60fd3c2a6f737aace546c23b0c7d76e84159c0ad289c1df4c0f8a500e51209f296f9d7d223a1d292bd41d266faacb1be843becf4b706eb15dba702806", + "input_index": 6 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "03f313f8f475eb01e3cecbc0eaac2f726d29032c6ff7c3ad6cc3bf8bb10186527c", + "dleq_proof": "3b29e12cf693f272139f74452f2bccc2bcd07432dce8fb107354c1458a12a47c8544d2d6ca1e33bce0578b6508cf8a5934673f9fc435a5f84a22a54b5adcbcfc", + "input_index": 6 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "026f027b235a7593ca8943c6d7b7e37d92eab339617f7f0c344106c58dd0cbc6aa", + "dleq_proof": "16b58148f7baff783e4310f185503fe92417dba43b966c83a2184322cb1f20424cb9d040ae6a1aea4e7444bdc786258a975644ce1a0195564c2b9fc3c606a292", + "input_index": 7 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "02fe7841cddfb46fdb2ca9bde56c9558c2d1b36121665659080224e24031438408", + "dleq_proof": "88072551662c3eebee545f188b8dafc682973a2f218e7ca07fc8e42ff57a1134630449fd703177d7a12d0c9ced024844dc1b9e0ecad67587dd5c479431b36a1a", + "input_index": 7 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "020611450c6c1944ecdecb78f61816c767fba4368f21f7e9b169779c76f23cf4cc", + "dleq_proof": "4ab36bdd69eb1cd0d4b0aeae403dce4db5228c5ba3a291dc725de23382d1736d265d7bc33f83690a5ca5609719f19e81952d4c8d5e288fd0cb8c6411104b80a3", + "input_index": 7 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_share": "02fa1ced932598a27fa28410b955ea67479b5a4033b69f2c99e4e26767bba0a556", + "dleq_proof": "a0948c517d70976c0e39ca67abf19e7217040dbe172bb96534133e6ffa3941c1659416f540662b7561efb70064b4d71a9b17b63bc563f630db4422f273e0df12", + "input_index": 8 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_share": "02f3c175b08b207637616aa74e67baac1a1807c94bce70800f76f5b17b52c0082d", + "dleq_proof": "99225658fede7a8c2437eb3821bdc9d3700abc896e8b6dcef84e29347b78bc2b03e6da33836e4f40767390c36644ce016b36b1d546963540fa51d0b0407db6d7", + "input_index": 8 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_share": "0300e0fd1710dc56ad7c173aa9141d731577009bc3dffcba8576a48e77ab34d970", + "dleq_proof": "ee0aaa65ca73ccc547b31c2b7ed2ae31a4f4ccdaea73f2add24630d608ede9aea5d808688186ebca42b877efab13f35e60f210d4f620602f850fc0731c201e91", + "input_index": 8 + } + ], + "outputs": [ + { + "output_index": 0, + "amount": 30000, + "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", + "script": "51201afa5d88188cef9b91b3f1002b11e0f9e94ad3981978c4d12a0605564c081233" + }, + { + "output_index": 1, + "amount": 30000, + "sp_v0_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4", + "script": "5120cabf7e4a0de424ec9bbadd7f7242cce7673e1701f49d6a19a97055da332b1324" + }, + { + "output_index": 2, + "amount": 20000, + "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", + "script": "51204aadc9e0a590d21e0c19cb2024f27140f9b19c2a1282d50ea7c5f45eb03fd4a2" + }, + { + "output_index": 3, + "amount": 20000, + "sp_v0_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e", + "script": "51202fa43700ea1d28fd7ad4dcb332b3e5e5a0d8cb54258f6661c4de0377d72804e5" + }, + { + "output_index": 4, + "amount": 10000, + "sp_v0_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0", + "script": "512051986faee319436b51b38409c1b300f4396e2b32e3cc9a12ae2a4be135da6f6e" + }, + { + "output_index": 5, + "amount": 50000, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] + } } ] } \ No newline at end of file diff --git a/go/bip375_test.go b/go/bip375_test.go index 47e89c0..db5840f 100644 --- a/go/bip375_test.go +++ b/go/bip375_test.go @@ -5,11 +5,9 @@ import ( "encoding/base64" "encoding/json" "os" - "strings" "testing" psbt "github.com/otaliptus/psbt-v2" - "github.com/macgyver13/bip375-examples/go/sp" ) type testVectors struct { @@ -24,20 +22,17 @@ type invalidVector struct { } type validVector struct { - Description string `json:"description"` - PSBT string `json:"psbt"` - ExpectedOutputs []struct { - OutputIndex int `json:"output_index"` - IsSilentPayment bool `json:"is_silent_payment"` - } `json:"expected_outputs"` + Description string `json:"description"` + PSBT string `json:"psbt"` } var structuralInvalidDescriptions = map[string]bool{ - "psbt structure: missing PSBT_OUT_SP_V0_INFO with PSBT_OUT_SP_V0_LABEL set": true, - "psbt structure: PSBT_OUT_SP_V0_INFO field with incorrect size": true, - "psbt structure: PSBT_IN_SP_ECDH_SHARE field with incorrect size": true, - "psbt structure: PSBT_IN_SP_DLEQ field with incorrect size": true, - "psbt structure: P2WPKH output missing PSBT_OUT_SCRIPT": true, + "psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set": true, + "psbt structure: incorrect byte length for PSBT_OUT_SP_V0_INFO field": true, + "psbt structure: incorrect byte length for PSBT_IN_SP_ECDH_SHARE field": true, + "psbt structure: incorrect byte length for PSBT_IN_SP_DLEQ field": true, + "psbt structure: missing PSBT_OUT_SCRIPT field when sending to non-sp output": true, + "psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output": true, } func loadVectors(t *testing.T) testVectors { @@ -52,7 +47,7 @@ func loadVectors(t *testing.T) testVectors { if err := json.Unmarshal(data, &vectors); err != nil { t.Fatalf("parse vectors: %v", err) } - if vectors.Version != "1.2" { + if vectors.Version != "1.1" { t.Fatalf("unexpected vector version %q", vectors.Version) } @@ -70,17 +65,6 @@ func decodePSBT(t *testing.T, b64 string) []byte { return raw } -func parsePacket(t *testing.T, b64 string) *psbt.Packet { - t.Helper() - - packet, err := psbt.NewFromRawBytes(bytes.NewReader(decodePSBT(t, b64)), false) - if err != nil { - t.Fatalf("parse PSBT: %v", err) - } - - return packet -} - func TestStructuralInvalidVectors(t *testing.T) { vectors := loadVectors(t) @@ -106,37 +90,6 @@ func TestStructuralInvalidVectors(t *testing.T) { } } -func TestSemanticInvalidVectors(t *testing.T) { - vectors := loadVectors(t) - - tested := 0 - for _, vector := range vectors.Invalid { - if structuralInvalidDescriptions[vector.Description] { - continue - } - - raw := decodePSBT(t, vector.PSBT) - packet, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) - if err != nil { - // Some vectors are rejected at parse time by the stricter v1.2 - // parser. Skip those here; they are covered by structural tests - // or sp-level validation. - continue - } - - tested++ - t.Run(vector.Description, func(t *testing.T) { - if err := sp.ValidateExtractable(packet); err == nil { - t.Fatalf("expected semantic validation failure") - } - }) - } - - if tested == 0 { - t.Fatalf("expected at least one semantic invalid vector") - } -} - func TestValidVectorsRoundTrip(t *testing.T) { vectors := loadVectors(t) @@ -144,20 +97,25 @@ func TestValidVectorsRoundTrip(t *testing.T) { for _, vector := range vectors.Valid { tested++ t.Run(vector.Description, func(t *testing.T) { - packet := parsePacket(t, vector.PSBT) + raw := decodePSBT(t, vector.PSBT) + + pkt, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) + if err != nil { + t.Fatalf("parse: %v", err) + } var buf bytes.Buffer - if err := packet.Serialize(&buf); err != nil { + if err := pkt.Serialize(&buf); err != nil { t.Fatalf("serialize: %v", err) } - packet2, err := psbt.NewFromRawBytes(bytes.NewReader(buf.Bytes()), false) + pkt2, err := psbt.NewFromRawBytes(bytes.NewReader(buf.Bytes()), false) if err != nil { t.Fatalf("re-parse: %v", err) } var buf2 bytes.Buffer - if err := packet2.Serialize(&buf2); err != nil { + if err := pkt2.Serialize(&buf2); err != nil { t.Fatalf("re-serialize: %v", err) } @@ -172,49 +130,49 @@ func TestValidVectorsRoundTrip(t *testing.T) { } } -func TestValidVectorsMaterialize(t *testing.T) { +func TestBIP375FieldPresence(t *testing.T) { vectors := loadVectors(t) - tested := 0 for _, vector := range vectors.Valid { - if !strings.HasPrefix(vector.Description, "can finalize:") { - continue - } - - tested++ t.Run(vector.Description, func(t *testing.T) { - packet := parsePacket(t, vector.PSBT) + raw := decodePSBT(t, vector.PSBT) - originalScripts := make(map[int][]byte) - for i := range packet.Outputs { - if packet.Outputs[i].SPV0Info == nil { + pkt, err := psbt.NewFromRawBytes(bytes.NewReader(raw), false) + if err != nil { + t.Fatalf("parse: %v", err) + } + + hasSPOutput := false + for _, out := range pkt.Outputs { + if out.SPV0Info == nil { continue } - originalScripts[i] = append([]byte(nil), packet.Outputs[i].Script...) - packet.Outputs[i].Script = nil + hasSPOutput = true + if len(out.SPV0Info.ScanKey) != 33 { + t.Fatalf("SPV0Info.ScanKey len = %d, want 33", + len(out.SPV0Info.ScanKey)) + } + if len(out.SPV0Info.SpendKey) != 33 { + t.Fatalf("SPV0Info.SpendKey len = %d, want 33", + len(out.SPV0Info.SpendKey)) + } } - - if err := sp.MaterializeOutputs(packet); err != nil { - t.Fatalf("MaterializeOutputs: %v", err) + if !hasSPOutput { + return } - for _, output := range vector.ExpectedOutputs { - if !output.IsSilentPayment { - continue - } - - if !bytes.Equal( - packet.Outputs[output.OutputIndex].Script, - originalScripts[output.OutputIndex], - ) { - t.Fatalf("output %d script mismatch", output.OutputIndex) + hasShares := len(pkt.GlobalSPECDHShares) > 0 + for _, in := range pkt.Inputs { + if len(in.SPECDHShares) > 0 { + hasShares = true + break } } + if !hasShares { + // In-progress vectors may not have shares yet. + return + } }) } - - if tested != 12 { - t.Fatalf("expected 12 finalize vectors, got %d", tested) - } } diff --git a/go/sp/analysis_test.go b/go/sp/analysis_test.go index e71d455..b0dc3cc 100644 --- a/go/sp/analysis_test.go +++ b/go/sp/analysis_test.go @@ -56,7 +56,7 @@ func loadVectors(t *testing.T) bip375Vectors { t.Fatal("runtime.Caller failed") } - path := filepath.Join(filepath.Dir(file), "..", "..", "bip375_test_vectors.json") + path := filepath.Join(filepath.Dir(file), "..", "testdata", "bip375_test_vectors.json") data, err := os.ReadFile(path) if err != nil { t.Fatalf("read vectors: %v", err) diff --git a/go/testdata/bip375_test_vectors.json b/go/testdata/bip375_test_vectors.json new file mode 100644 index 0000000..96aa1bc --- /dev/null +++ b/go/testdata/bip375_test_vectors.json @@ -0,0 +1,2285 @@ +{ + "description": "BIP-375 Test Vectors", + "version": "1.2", + "notes": [ + "Generated by https://github.com/macgyver13/bip375-test-generator/", + "Each vector includes: psbt (source of truth), supporting material (input_keys, scan_keys, expected_ecdh_shares, expected_outputs)", + "PSBTs are base64-encoded and all that is needed to process each test vector", + "'checks' can be used to force specific validation behavior that would otherwise be caught by a previous validation" + ], + "invalid": [ + { + "description": "psbt structure: missing PSBT_OUT_SP_V0_INFO with PSBT_OUT_SP_V0_LABEL set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFNY5MmkoYqc0RjwIJDvxYLR+NJpQIgIChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG9HMEQCIDgWtRJgHGUognetBjF/dlbjZc3Mgxr+v0JsexGJHd0GAiBU5t4oAmM0dYTMc11jbYAApfG8+Wy5KpKhZrLQCbJFgAEBAwQBAAAAIgYChhAvn4+Q+GwtNuCZb4CXfDZcv9ZO57UJyaFLGpjmXG8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA9jbPKfxq8ad7tL6v24zm2x2c1Z9T3pGy/xJFhVJK3TmIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApG9OVSZ0BPWBsxDn+MgbvZuByUtyEm3vgg+mrcfXNJSh3Aql26Fa1JM1vaHUERQP/9G5qIMWRDeJanFBqq3B5AABAwgYcwEAAAAAAAEEIlEgiaex33v0LtfPo+K+RaviRv7ZEtpQrsi8zzY0FcruVOgBCgQBAAAAAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "c25839dda6d71ad481aa43158081b34d225c85f9d54e1303357cd8f3fcdefcb6", + "public_key": "0286102f9f8f90f86c2d36e0996f80977c365cbfd64ee7b509c9a14b1a98e65c6f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014d63932692862a734463c08243bf160b47e349a50", + "amount": 100000, + "witness_utxo": "a086010000000000160014d63932692862a734463c08243bf160b47e349a50", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03d8db3ca7f1abc69deed2fabf6e339b6c7673567d4f7a46cbfc491615492b74e6", + "dleq_proof": "a46f4e55267404f581b310e7f8c81bbd9b81c94b72126def820fa6adc7d73494a1dc0aa5dba15ad49335bda1d411140fffd1b9a883164437896a7141aaadc1e4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "sp_label": 1 + } + ] + }, + { + "description": "psbt structure: PSBT_OUT_SP_V0_INFO field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAefoLDnlpWqmrgvflVVUbHs+D5hIgIDtW9awShFqOWmqYvraEJ8JaHFMkv8jx2UdScnyFDLOC9IMEUCIQDZiUrSj4FF8Zv1BhpuSSLwk84Mqk+fh4OLE+utVI4oOQIgC/d5rOxZApTq1P2JrAIZoqhXGTD8WToULyjYaz0BSuoBAQMEAQAAACIGA7VvWsEoRajlpqmL62hCfCWhxTJL/I8dlHUnJ8hQyzgvCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQL8CneuJGp4pJMmWrOih4gzXfJBJc828qtz2Mt641z6KyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQCTa7jLOkrQbduwTnnrwEnbFSz1AE4YOUlk9Ix1ieU5nx58WH6Le1OXEbHl1wETRGV6vChpAMYi1pCOYXnaUROQAAQMIGHMBAAAAAAABBCJRIAnuKWALmmBT3Qbo/L7MMA4ySBd4v2qchxExaF2aEwzXAQlBAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "44173e285478bd01c83476d6f637612ac2b2694687ed03be16fbcd482bf8780c", + "public_key": "03b56f5ac12845a8e5a6a98beb68427c25a1c5324bfc8f1d94752727c850cb382f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", + "amount": 100000, + "witness_utxo": "a086010000000000160014079fa0b0e79695aa9ab82f7e555551b1ecf83e61", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02fc0a77ae246a78a493265ab3a28788335df24125cf36f2ab73d8cb7ae35cfa2b", + "dleq_proof": "24daee32ce92b41b76ec139e7af01276c54b3d4013860e52593d231d62794e67c79f161fa2ded4e5c46c7975c044d1195eaf0a1a403188b5a423985e769444e4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "psbt structure: PSBT_IN_SP_ECDH_SHARE field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFEQ72tqE3Cqh/nU90NX6HjDW43xUIgIC4ofyKqDO0HspNQi7dlGg3e0gBBDU+Ga0gTMIeUc2JitIMEUCIQCv3NRjggIaGQD2kA1tegUHUlweBxwD80zNYBQS8yK30gIgM5+EJ3oMtcnyp8H7UEEqxRRZC/I9zBJnac/7z/efr5wBAQMEAQAAACIGAuKH8iqgztB7KTUIu3ZRoN3tIAQQ1PhmtIEzCHlHNiYrCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIALqvWjVeKCJ9dga4exEnWk7lWxiFnSRj3EmfdE9vtiqIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhADOpeXrsaDKLIt9mfxRj0CcxvROIwAk0GIwx21QWnAM9dQpd8Yan9BtyYa45PIHKLxDbK9KEWIJXTTbcMv9j03wABAwgYcwEAAAAAAAEEIlEgnOScfMA0t2Eu1PEdoE2srQERuqb3dTKAGnKWoqt8GHsBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "5248d646f7e8eb231a8be341dd036164fdc3ebc899bc9aa5926a365a05c69306", + "public_key": "02e287f22aa0ced07b293508bb7651a0dded200410d4f866b4813308794736262b", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", + "amount": 100000, + "witness_utxo": "a086010000000000160014443bdada84dc2aa1fe753dd0d5fa1e30d6e37c54", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02eabd68d578a089f5d81ae1ec449d693b956c621674918f71267dd13dbed8aaf3", + "dleq_proof": "0cea5e5ebb1a0ca2c8b7d99fc518f409cc6f44e230024d06230c76d505a700cf5d42977c61a9fd06dc986b8e4f20728bc436caf4a1162095d34db70cbfd8f4df", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "psbt structure: PSBT_IN_SP_DLEQ field with incorrect size", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFIsz+gR2emjThvO8jOuDLydi8VMsIgIC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk5HMEQCICtvJ3Gw46n8FLt/IsqPSdLXHg0MpsBRiykmbu+dMlGhAiARjjxezcE9SXYjXfyege8GpQRwxgEKF0qGmsc12RHX4wEBAwQBAAAAIgYC7qoacQ89VQE5oivFR6fcNJMDbF5pWCWKRtCxRws+Lk4IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+uOsB5kdbxfuE8FF8KrH7HrYZXKPKIVznZwnyvipkJAIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4Gg/8SnsAvQSC/6sYl4xdje09ttq/j9uFeAjlRTTv8z+t+gNTc4qFrcCfGXDwruWHA+AIcjDYC61O19qXproBn5HAAEDCBhzAQAAAAAAAQQiUSCVPdDTr9zAmYqb2bA5557SE759F0c99YEnBpxMlEtaDQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "3c60a34afb1fe4401bd076b659a7f10479bfa71962ed690c074192b27f6f9fab", + "public_key": "02eeaa1a710f3d550139a22bc547a7dc3493036c5e6958258a46d0b1470b3e2e4e", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00148b33fa04767a68d386f3bc8ceb832f2762f1532c", + "amount": 100000, + "witness_utxo": "a0860100000000001600148b33fa04767a68d386f3bc8ceb832f2762f1532c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eb8eb01e6475bc5fb84f0517c2ab1fb1eb6195ca3ca215ce76709f2be2a64240", + "dleq_proof": "f129ec02f4120bfeac625e317637b4f6db6afe3f6e15e0239514d3bfccfeb7e80d4dce2a16b7027c65c3c2bb961c0f8021c8c3602eb53b5f6a5e9ae8067e47", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "psbt structure: PSBT_GLOBAL_TX_MODIFIABLE with PSBT_OUT_SCRIPT set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAQABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDeM24yd5PsucYRpiAfNv3+SGDqYIgICUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VBHMEQCIAbAProkk8YVpB4aFsIZhQaZx/cBm5c9mMKjMDHKNkT9AiB9ZrQDuH4k0C/Pbjr7/XE+ViCs5nnR90VaYwGdNejGcgEBAwQBAAAAIgYCUKibnYjEh6b7WmczLyHMFJZfJcsFVBxnP52N5Jk4+VAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAlE9+M8SHC0wScd4Qes2geenYi8ZI/tP4LYV5Ve6B23NIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAl2BTHcUD+J2qR9LTazkZ2QUQKc9f2BHJ2PWbdQ+LR/7Iu9WK2h83XaKPPaDx49p8bKumsO5ZD9WO7wjHRr6h8AABAwgYcwEAAAAAAAEEIlEgrStJYunsW62Ao66yvX2ZC4imTt6FodjZIU8sj+KYz04BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "64a394a29ab6a122c133503beb5d4f97904aa648cefae5be113fc565f0401a46", + "public_key": "0250a89b9d88c487a6fb5a67332f21cc14965f25cb05541c673f9d8de49938f950", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014378cdb8c9de4fb2e7184698807cdbf7f92183a98", + "amount": 100000, + "witness_utxo": "a086010000000000160014378cdb8c9de4fb2e7184698807cdbf7f92183a98", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02513df8cf121c2d3049c77841eb3681e7a7622f1923fb4fe0b615e557ba076dcd", + "dleq_proof": "9760531dc503f89daa47d2d36b3919d9051029cf5fd811c9d8f59b750f8b47fec8bbd58ada1f375da28f3da0f1e3da7c6caba6b0ee590fd58eef08c746bea1f0", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "psbt structure: P2WPKH output missing PSBT_OUT_SCRIPT", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIAkHemqmSsFK56GqT+aMAqziBsnqxyNJBhrnYDkAuSJuAiBvFDKlePjjMK8LkAJWdGvJ9OUqoujMeQKdyOdqPClLBgEBAwQBAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "amount": 100000, + "witness_utxo": "a086010000000000160014229a72d34a645bd3496bbbf50bbb81c9063f4f94", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": false, + "script": "00148e758d15b9d2156a6aabb2d72039df9be1d6882d" + } + ] + }, + { + "description": "ecdh coverage: PSBT_OUT_SCRIPT set - no eligible inputs", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiBPa2xI91PQstsuV3qY9lLMD4wBpxZ0Jhhhb5ag+ezmZwEPBAAAAAABASughgEAAAAAACIAIB2bNL8u4YvW9Z4R+E7O66goncgTp1+NAHD0k10GPiNTAQVHUiEC56vDvz9lfIbl1BJOulwNRIBeRyayowpIk0Uq7sD2jjMhAs9V0KWJYJNaPDFNHF/bdjQEltr48iNf3YEf0tAmqzogUq4BEAT+////AAEDCJBfAQAAAAAAAQQiUSDN452LBbSW+PGPILJ9CvmjIzMJ4EciGeCBP/O103h+KQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "", + "public_key": "", + "prevout_txid": "4f6b6c48f753d0b2db2e577a98f652cc0f8c01a716742618616f96a0f9ece667", + "prevout_index": 0, + "prevout_scriptpubkey": "522102e7abc3bf3f657c86e5d4124eba5c0d44805e4726b2a30a4893452aeec0f68e332102cf55d0a58960935a3c314d1c5fdb76340496daf8f2235fdd811fd2d026ab3a2052ae", + "amount": 100000, + "witness_utxo": "a0860100000000002200201d9b34bf2ee18bd6f59e11f84eceeba8289dc813a75f8d0070f4935d063e2353", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: PSBT_OUT_SCRIPT set - Input 0 missing PSBT_IN_SP_ECDH_SHARE", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFDxT02F6f8rk5fw3RdNMtFyGpWXjIgYDGay7QpMJFKviJRJWoC/DiK1zKZhf8zjyOW5d8vzXAI4IAAAAgAAAAAABEAT+////AAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBHxAnAAAAAAAAFgAUZJ3VtVj6wOqCxBxTWQ+4AVitrqsBAwQBAAAAIgYDR8B6aC7GCZYHq9QtSnEj78YAyOaEYwsQRLStBT9MyOMIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAqkM6lA7txq0r/lcPawe6pujEm3yuG+OhOF+ChIj/jBdIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA3jQXPoIjXscnE4eNtOA4k/mKVqlsi64xN+GCbytTNAmF3s7bWX5I6HBGtE/juvonLwUe6wraLdQztRJPuMAdLgABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "430d79a4721a6e11791d4e2387ecc7f633e26c379d50836146f2652ee4bcd3e9", + "public_key": "0319acbb42930914abe2251256a02fc388ad7329985ff338f2396e5df2fcd7008e", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", + "amount": 100000, + "witness_utxo": "a0860100000000001600143c53d3617a7fcae4e5fc3745d34cb45c86a565e3", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "55d102ae15590740b3c2a3f45e0080fceb61c1e66e4f5b83b5629c79b9e970b9", + "public_key": "0347c07a682ec6099607abd42d4a7123efc600c8e684630b1044b4ad053f4cc8e3", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014649dd5b558fac0ea82c41c53590fb80158adaeab", + "amount": 10000, + "witness_utxo": "1027000000000000160014649dd5b558fac0ea82c41c53590fb80158adaeab", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02a90cea503bb71ab4aff95c3dac1eea9ba3126df2b86f8e84e17e0a1223fe305d", + "dleq_proof": "de34173e82235ec72713878db4e03893f98a56a96c8bae3137e1826f2b53340985decedb597e48e87046b44fe3bafa272f051eeb0ada2dd433b5124fb8c01d2e", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: ineligible P2SH multisig input with PSBT_IN_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFGQsdnVS9WbnQ9FJkG1fse58XpgxIgIDM056vEvzEKkUqL/1xNyYd+OfuYwp87m3JLcmKtoCXndIMEUCIQC909hzvqoeSIY55VKqXQJ7phOMCnijgpRd685MAjpzSwIgd1dOqfIds66Z19I9SAHRPW+ufmaitjYvwAFxyC191JIBAQMEAQAAACIGAzNOerxL8xCpFKi/9cTcmHfjn7mMKfO5tyS3JiraAl53CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQKeeXAIIOdcIM6T/vaSPO7hDcegKiaChjNNNJvDUwdY4CIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQBKmAZaZAA2S/VIXviINqDyjfah/WyZXUhB9CVwa7ZDcHxOdYz6JlNq7/t/eHTv/xB284nObLVDvF5+Nn6YOWmYAAQ4gUiGLvep4p9TYg4U1sX9K6QQFl0+VM/CxF93lPheFtM0BDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFGpD3BMBL8sWVg7lT7XguKv3OOjHhwAAAAABBEdSIQPVOoWTDkyGApzvXClAN7KEqbHYvU9N2nV7M+OQEyoYaiECZxHk5V3VoFosvOvxk2NPLqQLJ7xRa/+0m3YdQA55OR5SrgEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCECKrXjNjkkbu1twzP7pfGGsMZntq9j6E3XGXRhIPFhhgkiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCJBfAQAAAAAAAQQiUSCOn79aVOo8uqob5zkdUxsiTChJVUQyICIp2Y17j/lUzAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "891210857d34d7fec9189e07a2c60d18e28862084bb776ace0b7ce792811d788", + "public_key": "03334e7abc4bf310a914a8bff5c4dc9877e39fb98c29f3b9b724b7262ada025e77", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014642c767552f566e743d149906d5fb1ee7c5e9831", + "amount": 100000, + "witness_utxo": "a086010000000000160014642c767552f566e743d149906d5fb1ee7c5e9831", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "", + "public_key": "", + "prevout_txid": "52218bbdea78a7d4d8838535b17f4ae90405974f9533f0b117dde53e1785b4cd", + "prevout_index": 0, + "prevout_scriptpubkey": "a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c787", + "amount": 150000, + "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9146a43dc13012fcb16560ee54fb5e0b8abf738e8c78700000000", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "029e79700820e75c20ce93fef6923ceee10dc7a02a268286334d349bc3530758e0", + "dleq_proof": "12a6019699000d92fd5217be220da83ca37da87f5b265752107d095c1aed90dc1f139d633e8994dabbfedfde1d3bffc41dbce2739b2d50ef179f8d9fa60e5a66", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: ineligible P2TR input with NUMS point with PSBT_IN_SP_ECDH_SHARE set", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAQMEAQAAAAEQBP7///8BFyBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wCIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPspP8Rtyji4PYM5iIpQ6b/VbnZX2J7+amdCEvIctUKWyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQIoTs5hVRfcr1uiXFK65CbPjVKhCqbuLVs0O3tId+KGZWYsxIopJ4L1+lc4QU/fFsorLVDpocHYA486Jgi7jICEAAQMIHCUAAAAAAAABBCJRICdoyIruoiMiW6OthOeGNS+YKdLT6TeKOToL/1mvh83QAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03eca4ff11b728e2e0f60ce6222943a6ff55b9d95f627bf9a99d084bc872d50a5b", + "dleq_proof": "8a13b3985545f72bd6e89714aeb909b3e354a842a9bb8b56cd0eded21df8a199598b31228a49e0bd7e95ce1053f7c5b28acb543a68707600e3ce89822ee32021", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: PSBT_IN_SP_DLEQ missing for input with ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFHtGlnt4Ae5cblr2WBI4vJXR3Uf3IgICGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi9HMEQCICl5mQIMJajbJQi4828QgqMpetzEbTgU53p4Cs2A4oAZAiBtz57Lm+f5FiNLdizBp9FWaaMuEBmw31YHinHycS/rSQEBAwQBAAAAIgYCGoXK/ccVoXsaOQCeH0Q7/Hd2N6lcmrZ0UpElF5mxJi8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjOx0yEofm/fEp93vo6EX7SMH1brgaU1BudewL5ycg/UAAEDCBhzAQAAAAAAAQQiUSBmzzV1FT5/ranW9thWcerjbhydgiSeiRZVrCFL+wcMTgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "7629e714099688e08e1997c5160d9e3245b92a4a577e35a65e87394aedc7cea9", + "public_key": "021a85cafdc715a17b1a39009e1f443bfc777637a95c9ab6745291251799b1262f", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b46967b7801ee5c6e5af6581238bc95d1dd47f7", + "amount": 100000, + "witness_utxo": "a0860100000000001600147b46967b7801ee5c6e5af6581238bc95d1dd47f7", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0233b1d321287e6fdf129f77be8e845fb48c1f56eb81a53506e75ec0be72720fd4", + "dleq_proof": null, + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: PSBT_GLOBAL_SP_DLEQ missing with global ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQPB+v1DXFGpdXkPirAqJyKA2tHjGkyFnRuQfYvVApTXLAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFOBcM4gPgo99FD9v7zQe7yX+3g3GIgID3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv1IMEUCIQCG9kMgbU6yZvzFjmh9PJ5GiQgDgnK55Kg2YnAAkpCsyAIgERHwj6qn50RyYllH88hF6+mw0/5BDey0qjI4EU9fhbwBIgYD3eIHfapTmx0G+ypTNIioRaDKzaTax/hL3Q8J7pc3Xv0IAAAAgAAAAAABEAT+////AAEDCBhzAQAAAAAAAQQiUSDDnTSb1YNs2ALoMbuDNmFCIkqZq7m1LDykjG91r9Q8NgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "b4872f85cd40dcff38b69357e576d4c07d858dbeea8c84becff4fbd9961465e9", + "public_key": "03dde2077daa539b1d06fb2a533488a845a0cacda4dac7f84bdd0f09ee97375efd", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014e05c33880f828f7d143f6fef341eef25fede0dc6", + "amount": 100000, + "witness_utxo": "a086010000000000160014e05c33880f828f7d143f6fef341eef25fede0dc6", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "03c1fafd435c51a975790f8ab02a272280dad1e31a4c859d1b907d8bd50294d72c" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: invalid proof set for PSBT_IN_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFAgr3/YVdHIFOWuHpKQwXd6DSBVLIgICXCbc5UZbmVBMIzFf5EnA894M3JcVfPawyrhx2FIl0ERIMEUCIQCTmV/k3I2LHWx0jocsbtO96PKy2b7NGbh96UVSa66UZgIgWKyjIAGwt08vQoz6hf22RGXKyTLEkuVTrfrw9rqjzrYBAQMEAQAAACIGAlwm3OVGW5lQTCMxX+RJwPPeDNyXFXz2sMq4cdhSJdBECAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJxyHLqPYneVfmuOFJWkkjPD1CHRiunpHvhpX/ZFm5yVCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQG7x63g8BZfWaFZeO/O4/eW+0oFSlfQ+FwFRJNRF3Mva3SpJ3udZYXjxIW5dTbkXT/3aYzTjfJAxEIwIzhN03g8AAQMIGHMBAAAAAAABBCJRIO7Uxibb2h1MycABu4j+/n8WjCRunvsBSx9ot95uo+mAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "cfa305a017d9864ec736013b22f065fca58f61a6260ba51574d7a34f2ff0a2e9", + "public_key": "025c26dce5465b99504c23315fe449c0f3de0cdc97157cf6b0cab871d85225d044", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014082bdff615747205396b87a4a4305dde8348154b", + "amount": 100000, + "witness_utxo": "a086010000000000160014082bdff615747205396b87a4a4305dde8348154b", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0271c872ea3d89de55f9ae3852569248cf0f5087462ba7a47be1a57fd9166e7254", + "dleq_proof": "6ef1eb783c0597d668565e3bf3b8fde5bed2815295f43e17015124d445dccbdadd2a49dee7596178f1216e5d4db9174ffdda6334e37c9031108c08ce1374de0f", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: invalid proof set for PSBT_GLOBAL_SP_DLEQ field", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNDBMksBVkLlOZLw1AbzfZ45DClvF696vGYebl6l5bTziIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQOfI/UQrlNiKKmoskrQ0ZI+gB8n+CARyozeA0LUjKETQm9iLP+6G0S1DhsRlf7t4Xi0vFL/PkYV0P+EqyCUPldkAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABTUngSlm21fKRLZ7J00iBNtfYrqcyICAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cSDBFAiEA1+5XK/EladCZ0DoztFrly7NMMwPdbWAWlbCWc3PQRZoCIALLp8z8ZSLZWa9P+X5KBTWbyzj8ovU6leoQThGTcTQzASIGAxXG5uXb5tGI/WynHkztVoUEQVfWoxY8Gfu7vDZVK86cCAAAAIAAAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEg3cEaiL1DRRvH10ppoJUb0y80V5WMpQ1k5HzJhqOPJ8sBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "ccfd8b4533bd8512e141f2173714952247b4dbdd184b569bf53eb158ac9777fc", + "public_key": "0315c6e6e5dbe6d188fd6ca71e4ced5685044157d6a3163c19fbbbbc36552bce9c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", + "amount": 100000, + "witness_utxo": "a086010000000000160014d49e04a59b6d5f2912d9ec9d3488136d7d8aea73", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034304c92c05590b94e64bc3501bcdf678e430a5bc5ebdeaf19879b97a9796d3ce", + "dleq_proof": "bf1b45241c43a4bea753b80dd9586518c24c6d61c5f7c93fec10e17efafddebba2a34c0cd55b8be5dbb1da5c8ec94b73ba347a70036985f04133271be429140b" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: input missing public key for DLEQ verification", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFKkJAC8YQiiBGKj20aBob3jLA8fRIgIC+QeUX/NarS+zzXkylYSM32JpKr51wIPOoD+AuBfDLd5IMEUCIQDBej9o1Xd8J2Wbc6crbgxkky3S8L2g7dXi7KiDOThKvQIgX8TL/5MO7GYB56J543wWbWkzkYHQ4gwKq9H4XvWD+4oBAQMEAQAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEC/ebny4sNBQGQDx6SB9GIpmvc2BnriKAZ3vlxxiEphi8iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECsLMBBwTQlJZJhGMq4Wl73XQEztfttat6WaLjgA+Ul85zWb+ivvwlDB33tF4e7FeQEhtty0fQd6zfA0amukqy1AAEDCBhzAQAAAAAAAQQiUSCNmubvUqRjUcK00JR0WR5QncJP+slpS/lQZfcdYZwPbQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "9b8cf7af42b8942b381c224b1e7c40276fd465ef2715fd6288f24579003cfe6f", + "public_key": "02f907945ff35aad2fb3cd793295848cdf62692abe75c083cea03f80b817c32dde", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014a909002f1842288118a8f6d1a0686f78cb03c7d1", + "amount": 100000, + "witness_utxo": "a086010000000000160014a909002f1842288118a8f6d1a0686f78cb03c7d1", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02fde6e7cb8b0d0501900f1e9207d188a66bdcd819eb88a019def971c62129862f", + "dleq_proof": "ac2cc041c1342525926118cab85a5ef75d0133b5fb6d6ade9668b8e003e525f39cd66fe8afbf0943077ded1787bb15e40486db72d1f41deb37c0d1a9ae92acb5", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "ecdh coverage: one input/three sp outputs (different scan keys) - Output 1 missing ECDH share for scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwIQIfVB3kYWxVdP//YEVVhx7m2cH8BdbPXJ1d59cWV4r0GiIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQPSj6rRvNp1y7TrP4IFIBYxeEmNql4rqhqpenzrH8cxhiIeArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwQGoBeelXwuvMl6VzkVqiSToWWkHe5RwKSl7LOtJmxTHbTxp7OuSE/Xig6iLkTAkyf28yWUQC0SvRo/d1mmGfocEiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kAmhltGkay8P0zL8T5aPiY5azNm3UKX9Y5SXoj4Q5pvoeGF5x3J0Vee762X82mY6QZ0VLhG+a12ginaNRCOE+cUAAEDCJBfAQAAAAAAAQQiUSCItbo4EKf/zM5bRdqt8c+0PSZJ6Zu5o8LX6mg7EPKPxwEJQgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3gPycOClYyGDtqsBB06HfmgA2wD1x8XS+vu2j5wo1IVFJAABAwgQJwAAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUIDUteMQTkAMq2RgWppf8dA2OuQnPBNcIhSZLBR8jheJewC4MTBh7chX5l8hIWnW0WRtsKEd7laESO5lpItMVSGC/gAAQMIIE4AAAAAAAABBCJRIGYlLwRiDJctTPeBi5Z3dv0nYmZ1DVuEZSz5OdppcCBxAQlCArlFYVfpRu8H90tU+gm+Sn6Tjcr7+ye0s3LFc8BZ8SqwAhJoHj8J6uOKjy8/7NfdVvxYbPoCjoqzP3KpD4QKbSJcAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", + "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", + "amount": 200000, + "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + }, + { + "scan_pubkey": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", + "spend_pubkey": "0212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "03d28faad1bcda75cbb4eb3f820520163178498daa5e2baa1aa97a7ceb1fc73186", + "dleq_proof": "26865b4691acbc3f4ccbf13e5a3e26396b3366dd4297f58e525e88f8439a6fa1e185e71dc9d1579eefad97f36998e9067454b846f9ad768229da35108e13e714", + "input_index": 0 + }, + { + "scan_key": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab0", + "ecdh_result": "021f541de4616c5574ffff604555871ee6d9c1fc05d6cf5c9d5de7d716578af41a", + "dleq_proof": "6a0179e957c2ebcc97a573915aa2493a165a41dee51c0a4a5ecb3ad266c531db4f1a7b3ae484fd78a0ea22e44c09327f6f32594402d12bd1a3f7759a619fa1c1", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + }, + { + "output_index": 2, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02b9456157e946ef07f74b54fa09be4a7e938dcafbfb27b4b372c573c059f12ab00212681e3f09eae38a8f2f3fecd7dd56fc586cfa028e8ab33f72a90f840a6d225c" + } + ] + }, + { + "description": "ecdh coverage: two inputs/two sp outputs (different scan keys) - full coverage input 0 / partial coverage input 1", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCC4ZV7zqDk8ksC38OjggfXnThDXAQMEAQAAACIGA1eAk4qUq4QN0Un/gAGbqKSzjWBDNWhTN9QvFvMg8T9CCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQPSmrmKDlMLBkU2CDBFlWcMKs4KGm6L/2YWfaTl25R0DSIdA2UdLAc/ywKk2C3aU/HVAdd6A1BmZ5hUZHOyEmts0afeIQJelQZ5nVjSaUQhUadDMXvcmaL1Gxdtzkn5RxAuMo/aICIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQJ52mAHDYnPRofFro/SCMLvSrNbFjwV5vA4eh44zA3N5u6AJ49t94vwt3ZahgwOvlpBmpkLB/NOYFaWPlyxlEvMiHgNlHSwHP8sCpNgt2lPx1QHXegNQZmeYVGRzshJrbNGn3kCkDOhjFtOOJBtfdU1Ww/T16tKFIawJebCR1/OxDQgyKq16JmJqg/MaYi/L5I6sp57UBLSrOPFhJS3YkuRm+TbxAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUHiGzqBEYegrE3RiwBcAMH55nsr0BAwQBAAAAIgYDLTwDMXNO4f1bfKHJedBq3RRqq+HK9CPxJXs1SFPUXroIAAAAgAEAAAABEAT+////Ih0DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94hAw4lnYl+tNS36Q8xW2rZTmfzLIe/5BBfATztWL0CXDSLIh4DZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp95AF0toaWLYcAtry204piFY6gSnBFtf6658tfM/YygS8JIsSK6RjlZ83L/YE+dCAUBF8HRJg0syktGRg7zTFJvz1AABAwiQXwEAAAAAAAEEIlEg55VpES/6WkaFm1vMTxAX+53dUvCkav/egJr8IgXEe00BCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIO14uE3U/S365e8y8dW4QoVImNynbOkiABr1GJ1xf06cAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "5dc63715af6b5c0923c2a68c4c6728c93ce236b5fc3433237ba98633456a0340", + "public_key": "035780938a94ab840dd149ff80019ba8a4b38d604335685337d42f16f320f13f42", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", + "amount": 100000, + "witness_utxo": "a08601000000000016001420b8655ef3a8393c92c0b7f0e8e081f5e74e10d7", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "3a52e933e65f5c89b5139adf381f5f4616140ed55b067ce3ede0de2c1f6760ba", + "public_key": "032d3c0331734ee1fd5b7ca1c979d06add146aabe1caf423f1257b354853d45eba", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", + "amount": 100000, + "witness_utxo": "a0860100000000001600141e21b3a811187a0ac4dd18b005c00c1f9e67b2bd", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "025e9506799d58d269442151a743317bdc99a2f51b176dce49f947102e328fda20", + "dleq_proof": "a40ce86316d38e241b5f754d56c3f4f5ead28521ac0979b091d7f3b10d08322aad7a26626a83f31a622fcbe48eaca79ed404b4ab38f161252dd892e466f936f1", + "input_index": 0 + }, + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_result": "03d29ab98a0e530b06453608304595670c2ace0a1a6e8bff66167da4e5db94740d", + "dleq_proof": "9e769801c36273d1a1f16ba3f48230bbd2acd6c58f0579bc0e1e878e33037379bba009e3db7de2fc2ddd96a18303af969066a642c1fcd39815a58f972c6512f3", + "input_index": 0 + }, + { + "scan_key": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "ecdh_result": "030e259d897eb4d4b7e90f315b6ad94e67f32c87bfe4105f013ced58bd025c348b", + "dleq_proof": "174b686962d8700b6bcb6d38a62158ea04a7045b5febae7cb5f33f632812f0922c48ae918e567cdcbfd813e742014045f07449834b3292d19183bcd3149bf3d4", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ] + }, + { + "description": "ecdh coverage: two inputs/one sp output (two scan keys) - Input 1 missing ECDH share for scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9QwwAAAAAAABYAFM8NLc80Opcz1DvlZOOmNS0vuHSJAQMEAQAAACIGAxTy+XFumCwYLG5b0wsRkvcWNE4fkULD6uCZ4DD/6SQcCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNgWcgdxSLLVFwETX/SQo9gXAbTNFR0U19fM8qaJC8/niIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQHZFB/NYpfXKCm+gpyWQ5O7LBXadkqsSisqwawqMo8+4mf2YbmQwGbC3ZDrMUAebm6s6Wzx+ArCWnQsowzEDsv8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfUMMAAAAAAAAWABSKNZWygLkaR792aIJ0jpRdHwKT9iIGA/810xysQ2pIRJZENx1ET2fBHj3e1EfIhM9BpxUcobY4CAAAAIABAAAAARAE/v///wABAwgYcwEAAAAAAAEEIlEgzeOdiwW0lvjxjyCyfQr5oyMzCeBHIhnggT/ztdN4fikBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "369e3b011269dada79fdc86ee11ec5c639a7b18eb23076e535510b580a7b1300", + "public_key": "0314f2f9716e982c182c6e5bd30b1192f716344e1f9142c3eae099e030ffe9241c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014cf0d2dcf343a9733d43be564e3a6352d2fb87489", + "amount": 50000, + "witness_utxo": "50c3000000000000160014cf0d2dcf343a9733d43be564e3a6352d2fb87489", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "001d9da0abfa70adb555a215816d8a01eeaa0c754b5a13f7f5c4f69a953b38f5", + "public_key": "03ff35d31cac436a48449644371d444f67c11e3dded447c884cf41a7151ca1b638", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "00148a3595b280b91a47bf766882748e945d1f0293f6", + "amount": 50000, + "witness_utxo": "50c30000000000001600148a3595b280b91a47bf766882748e945d1f0293f6", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "036059c81dc522cb545c044d7fd2428f605c06d3345474535f5f33ca9a242f3f9e", + "dleq_proof": "764507f358a5f5ca0a6fa0a72590e4eecb05769d92ab128acab06b0a8ca3cfb899fd986e643019b0b7643acc50079b9bab3a5b3c7e02b0969d0b28c33103b2ff", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "input eligibility: segwit version greater than 1 in transaction inputs with silent payments output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABZSFFP6opzjfMSJmyMOlXogomStzN5HIgICpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOJHMEQCIC9HZnf0wo8jFPEjrwpELhTPGZ8D7BDBRTF/lLw3XSHPAiBGlJEb1di61BYGy212/4UAYllJKvDQ51F1yEIOrUzy5AEBAwQBAAAAIgYCpd7djiyX22eubYM9qVulxkuaUfMSOPKl+ebbisYNwOIIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA3JW1z0tsG4hGXEqv4jpv1y0y+1/KkUIr5DM4AyEmCm2Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA5k7kSRL3pdy6apUv8E+xV8RouT4TAX5I1x5cqOmU2p0boi/QVNx5Ih6Y30lv0E3kn4GZMVFY1XQOGL0avAmAEwABAwgYcwEAAAAAAAEEIlEgPJg7UYWUtNT48bzdJuA/GP02xccuPm25+lQVbBx/iPEBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "223162352aba2327f762570ba60d5e847af2e546b0e0dd82962d306a757ee98b", + "public_key": "02a5dedd8e2c97db67ae6d833da95ba5c64b9a51f31238f2a5f9e6db8ac60dc0e2", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "521453faa29ce37cc4899b230e957a20a264adccde47", + "amount": 100000, + "witness_utxo": "a08601000000000016521453faa29ce37cc4899b230e957a20a264adccde47", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "037256d73d2db06e2119712abf88e9bf5cb4cbed7f2a4508af90cce00c849829b6", + "dleq_proof": "e64ee44912f7a5dcba6a952ff04fb157c468b93e13017e48d71e5ca8e994da9d1ba22fd054dc79221e98df496fd04de49f8199315158d5740e18bd1abc098013", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "checks": [ + "input_eligibility" + ] + }, + { + "description": "input eligibility: non-SIGHASH_ALL signature on input with silent payments output", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFPVCPf+xqCV6sfB+Gtep/NeHEVHYIgID+bIaLd6IVIFNjdYg+8puvk4xcwXzTnYsPttGbg1mYrdIMEUCIQDgHEub9vwf4rbyqygJVpFW5U8AD9WgcL1q74fBn0hodgIgAriCsXB5pRfLn+3IESwsa0s03ITmkcb7sroflLKHzmMBAQMEAgAAACIGA/myGi3eiFSBTY3WIPvKbr5OMXMF8052LD7bRm4NZmK3CAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQNdSn+NrmGtpe5wcMxqgCUXUwxVmrhoQHY2NIDIjqEgHSIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQM0W8I2Ir1ri+60Xt8EBypzPKNY/JqMhPFxmoex2NEmlqk2X0Y7ltttKMeN9cP6J9j2nDAXTcOmt8vM/ZfICSTQAAQMIGHMBAAAAAAABBCJRIK27sV0H1F3nneDOLSmlEwBroJUVo94YuGo9IgKbT9EgAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "0b6cb38167165659753e4e263a8a1017ed6fd7271e61791a763d4de3345abfc5", + "public_key": "03f9b21a2dde8854814d8dd620fbca6ebe4e317305f34e762c3edb466e0d6662b7", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", + "amount": 100000, + "witness_utxo": "a086010000000000160014f5423dffb1a8257ab1f07e1ad7a9fcd7871151d8", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "035d4a7f8dae61ada5ee7070cc6a802517530c559ab8684076363480c88ea1201d", + "dleq_proof": "cd16f08d88af5ae2fbad17b7c101ca9ccf28d63f26a3213c5c66a1ec763449a5aa4d97d18ee5b6db4a31e37d70fe89f63da70c05d370e9adf2f33f65f2024934", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "output scripts: computed output script mismatch in PSBT_OUT_SCRIPT field from transaction inputs", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIGHMBAAAAAAABBCJRIM3jnYsFtJb48Y8gsn0K+aMjMwngRyIZ4IE/87XTeH4pAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "output scripts: two sp outputs (same scan key/different spend keys) - outputs are not sorted lexicographically by spend key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBHMEQCIG+rSPvfTckdn1OeqUM+sQyZOWjOGMzou1loQm4CHf7XAiAB+VLfS1gCqqtGrF4viWK6FY0O24Khhrh0Cixaz9CnXgEBAwQBAAAAIgYC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxdW5MaVBlkMr4XjybVvp7Cc9O7sXVXOkTt7kSETzu3rIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAUCwu4wHqYUAWfkFyVfWfGvATHdYYGh/+gXtS7waGnG1kDabsBwknZzRvnlk2Fv/oB/B2T0lEuGssRUF5PsfONQABAwiQXwEAAAAAAAEEIlEgHdb3Z8X/xV+e8qt31Qn7D8EMpmgoOXdNV80/AgAf2rkBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgCi4D5lDNIleEbx2x1q254/iwluzMvIXshHEAXvx9nfYYAAQMIECcAAAAAAAABBCJRILaeAFHP4fofvu4fiyQXFcexhfelYULhG2RzBsU9lNAoAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA6r4Yq7amM+SU5r33DN10dpfsGsSHvCh8DGp9zgv1T27AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068028b80f994334895e11bc76c75ab6e78fe2c25bb332f217b211c4017bf1f677d86" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe06803aaf862aeda98cf92539af7dc3375d1da5fb06b121ef0a1f031a9f7382fd53dbb" + } + ] + }, + { + "description": "output scripts: three sp outputs (same scan/spend keys) - output scripts are computed with swapped k values", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEDAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFL0mzQSEF+seC0TwRFHhlOw5yCnAIgIC8XcRix8Ahax3/42CAM8gsATQNyb0kaGdCvQ5XDf4knBIMEUCIQCFQeew68kGGzyOkEDq2jeec3ZfVgHxRo9wQ9abFEsoLgIgV/N+//lmjgFD2J+OF8mNbOZ4D+Wz4mAJA3SB4gEYkEcBAQMEAQAAACIGAvF3EYsfAIWsd/+NggDPILAE0Dcm9JGhnQr0OVw3+JJwCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMXVuTGlQZZDK+F48m1b6ewnPTu7F1VzpE7e5EhE87t6yIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQFAsLuMB6mFAFn5BclX1nxrwEx3WGBof/oF7Uu8GhpxtZA2m7AcJJ2c0b55ZNhb/6Afwdk9JRLhrLEVBeT7HzjUAAQMIkF8BAAAAAAABBCJRIFIpYyvRwH67i+f6Z5EzwVLRg2rJebZoduBDVJyiN4u1AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCBAnAAAAAAAAAQQiUSDy8Bs99p112CvO//s4uDbhp4qdwlpJv3OfRgocbLY+PQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwgQJwAAAAAAAAEEIlEgO3AWILScOYcrbDJLHpxctXRtiUYcKzCv0evtpudfS9cBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "ef47741c944481211f62b1d3c8771634098a3a01aae9788a3a0234d35a4a916e", + "public_key": "02f177118b1f0085ac77ff8d8200cf20b004d03726f491a19d0af4395c37f89270", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "amount": 100000, + "witness_utxo": "a086010000000000160014bd26cd048417eb1e0b44f04451e194ec39c829c0", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031756e4c69506590caf85e3c9b56fa7b09cf4eeec5d55ce913b7b912113ceedeb", + "dleq_proof": "502c2ee301ea6140167e417255f59f1af0131dd6181a1ffe817b52ef06869c6d640da6ec07092767346f9e593616ffe807f0764f4944b86b2c4541793ec7ce35", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 2, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + } + ], + "valid": [ + { + "description": "can finalize: one P2WPKH input single-signer", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCIEeHa7ERv/B+0xgZBiOgR+yFhNJnsbfuTJn8EUqpBh7tAiBx8abjS61xKB1bN/Bv927XFWxAO7JojbajqP5XrKwEuwEBAwQBAAAAIgYDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPUIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA0UFRDzOuLut1bsDhWQzZCOfb8X1/5GGKmu0hjigF0lFIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhACqfFEHUmJd8RmngfME+LQpk1Bv1P+7pfl6Gb/1gHbnUp1cYagnI1/JEvI39aetVyz44E+yUG4X/UauIchDVIngABAwgYcwEAAAAAAAEEIlEgIEmopiliDk5I/DCkX/8DZ33n9ULw1VnbCIJmIjBvf1ABCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", + "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", + "amount": 100000, + "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", + "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "can finalize: two inputs single-signer - using global ECDH share", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBACIHAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQIT0WYdp/RkaldPmUEPywasrf2zRyhz6HPIgEl39HFqTCIIAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQJ1ntx3jr4EnJwlbCZyp5qTZHV38korr7SGAsbrGORMs/ONQzaRfwMIzWoHXAOtbBYF8BCJPea6udzRFM9a4LLAAAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfoIYBAAAAAAAWABR0Qx97FCfU4FPQTxGBEToMdsnlOCICA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7SDBFAiEAvIohYvFPxY0bQvvN7JcOYfw7yYF99I5db2raG8TQuf0CIBJ15qs2dq6Q+aSr/gggziyqi/9zCNAnyKHyKhpS14FGASIGA6la8zRkZ8n/pUydNTDDCHiF73hq1ZdN/X3vklA35rk7CAAAAIAAAAAAARAE/v///wABDiC+nWXIORX7CSSKu9/KjKPu5s41DFVPZejVJuXfUnq1IgEPBAAAAAABAR+ghgEAAAAAABYAFO+r6p//ozOrnXXWDRn1VIcXq1U2IgICjIU3RLD94zwG4z+GnuB3DB8L06EjeNDxhZwO6DvKR1BHMEQCICDyPwBUY4p2Paw/nfU7F/6PLHpwYlWvhllhL8kkI3M7AiAz2GPAGVh9Tslr0xM5HQY/XKtKNOmGvSA7cHwLVET7LAEiBgKMhTdEsP3jPAbjP4ae4HcMHwvToSN40PGFnA7oO8pHUAgAAACAAQAAAAEQBP7///8AAQMIGHMBAAAAAAABBCJRIG7NeQJUA/fjem8wTKiu1EaLJGcr5pqKukzpKEKCpVioAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b7c37c36ff296624e204d1e47befd77a281b0aa3313c442f4d172ee267d0dc13", + "public_key": "03a95af3346467c9ffa54c9d3530c3087885ef786ad5974dfd7def925037e6b93b", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001474431f7b1427d4e053d04f1181113a0c76c9e538", + "amount": 100000, + "witness_utxo": "a08601000000000016001474431f7b1427d4e053d04f1181113a0c76c9e538", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "586d64441a4dda2dd95e7f5d787074a9788bd971e59954878e4d4a81c81f4741", + "public_key": "028c853744b0fde33c06e33f869ee0770c1f0bd3a12378d0f1859c0ee83bca4750", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014efabea9fffa333ab9d75d60d19f5548717ab5536", + "amount": 100000, + "witness_utxo": "a086010000000000160014efabea9fffa333ab9d75d60d19f5548717ab5536", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0213d1661da7f4646a574f99410fcb06acadfdb3472873e873c8804977f4716a4c", + "dleq_proof": "9d67b71de3af812727095b099ca9e6a4d91d5dfc928aebed2180b1bac639132cfce350cda45fc0c2335a81d700eb5b05817c04224f79aeae77344533d6b82cb0" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "can finalize: two inputs single-signer - using per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFFl4WXABNmCr4WKj8ygihrfQ4u2BIgIDHrvlFalYX75nFLD8q4JWx6Ow26hGu+HuyHfg6C5lmPVHMEQCICaxC8l6Hhc2jWjLl5Ns3zaf+yigvDdzhK80yqHUcmV+AiAzXkNZo/i4O6YutHdfiu4jLtQ2oxzU1YuJCW8wrhrBYAEiBgMeu+UVqVhfvmcUsPyrglbHo7DbqEa74e7Id+DoLmWY9QgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDRQVEPM64u63VuwOFZDNkI59vxfX/kYYqa7SGOKAXSUUiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEAKp8UQdSYl3xGaeB8wT4tCmTUG/U/7ul+XoZv/WAdudSnVxhqCcjX8kS8jf1p61XLPjgT7JQbhf9Rq4hyENUieAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAU8jwi17cxJEaUFjUgAE9qLf8AolwiAgJIoaG+VMaENBzQ1Mmg7G/ZLxMTzHkQzUgs9vAIU2l8ckgwRQIhAPnBsFdoj7oFw7yaFL6kcGm9VPa5ZSSa7vYel7oBX6Q8AiAGlWFPwaiINuZPM4LpvqLywuNRjqFNeqOFvogfNgoWswEBAwQBAAAAIgYCSKGhvlTGhDQc0NTJoOxv2S8TE8x5EM1ILPbwCFNpfHIIAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAjWtVCG1TzpaxT4ikBu3/++nXIfCSjxnH93FPGgVq1OhIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAmKSbd1Bd6tVQiKT2zjfi5hxZxpBzkBwGe7fFseyaVPeS0aumF22NhPgfhN7Ic8ZWe25MU+OHBUf2pTcYi/N4hAABAwgYcwEAAAAAAAEEIlEgIvVSxNGPeXFNSXQFe3bYeE4zw0KTLvPHWPNm6npZOYQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "48e93372aa9037ddc32257d1fd043dcb44f4a4bd8b0d43238ac214b1a71b1196", + "public_key": "031ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001459785970013660abe162a3f3282286b7d0e2ed81", + "amount": 100000, + "witness_utxo": "a08601000000000016001459785970013660abe162a3f3282286b7d0e2ed81", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "876ccda8929427ac00bb763abf733ba1f88d656e2a161439aa30cf0f8d528641", + "public_key": "0248a1a1be54c684341cd0d4c9a0ec6fd92f1313cc7910cd482cf6f00853697c72", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014f23c22d7b731244694163520004f6a2dff00a25c", + "amount": 100000, + "witness_utxo": "a086010000000000160014f23c22d7b731244694163520004f6a2dff00a25c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034505443cceb8bbadd5bb0385643364239f6fc5f5ff91862a6bb48638a0174945", + "dleq_proof": "0aa7c510752625df119a781f304f8b42993506fd4ffbba5f97a19bff58076e7529d5c61a827235fc912f237f5a7ad572cf8e04fb2506e17fd46ae21c8435489e", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0235ad5421b54f3a5ac53e22901bb7ffefa75c87c24a3c671fddc53c6815ab53a1", + "dleq_proof": "98a49b77505dead55088a4f6ce37e2e61c59c69073901c067bb7c5b1ec9a54f792d1aba6176d8d84f81f84dec873c6567b6e4c53e3870547f6a537188bf37884", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "can finalize: two inputs/two sp outputs - mixed global and per-input ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQECAQYBACIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQM1TON28rs/xxNH3fMzMDKwLdGvkIrV4fmoQmKdi9VjoyIIAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oQA7cED+wwSYDY+ljx6WGch+Qi3pD5+GIt4ruK/3j6YF+/d/GBUmyrO/6fm4mkbFn7VPxzQUE5diriQ9+pAX81w0AAQ4gGKcXZjsLqxSxKhp3EyP/HkB53VMuXdE+KOoQgccAmEoBDwQAAAAAAQEfQA0DAAAAAAAWABR7UmO/UsSWNAD8hezvdO5USqy+fCICArA7CQwOfCMzBa5MYO0wr5fdmba20zrGc6sPB5VKyUpdSDBFAiEAkjWFWEXm98L3gYA0bAadu6aNF7fWPIh/i9ygrMafERQCIFze80H9FnuNWmxvQeN9VnN/1uEX3njk2IoTK2ZRdUZOAQEDBAEAAAAiBgKwOwkMDnwjMwWuTGDtMK+X3Zm2ttM6xnOrDweVSslKXQgAAACAAAAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECEDitzN16HulqH1rQgEWjBWRl/ZIsy9TuTizN8Dm4G68jEiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEBJnMlkkRcjkwbyesWywAtyLr77pZ0k8cKfMz47fRxFKIFYOImN9oRpZd4mOVwiMQgxth4+77Yg70dBNDC97AwNAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH0ANAwAAAAAAFgAUYubwsqEs9lIYGiu2SM/m7BheLIwiAgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMkcwRAIgV+cHgkkPB0x41sdHYAZU5EKuh1EgzerDwI+UfjRAOUYCIGJMWDuwh/w+LHC7bhVpisNE9Wc3IKLuNJDcBQSXalBlAQEDBAEAAAAiBgPqso5j5GatDpLWePrQwXZGOyavxkxroEXL8oSCiV3WMggAAACAAQAAAAEQBP7///8iHQKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVECED9YBNRPCSo1zhNFg5qaJawp/817Xs+dwbNXMm4y+pnMwiHgKp8frCzEV2hPM96QBz/iDSLJR8khY7hisU0Kuh30cVEEAzPs5O0IYrkoCqPVK8zrtOa/AtZH3xk475a1M52NZxM9/g+2jo42yN/9p3qwJ4zjEh3e2Ql69FZsECR+iG6clfAAEDCJBfAQAAAAAAAQQiUSDxdYae3PyUadqE3xG62uCW/hRzgAnj8SdD5wmLUN454gEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgT13nnxOk/o3m2+gj/HQXhj2kkSSstqhgL/CcBRK4BmoBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4A", + "input_keys": [ + { + "input_index": 0, + "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", + "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "amount": 200000, + "witness_utxo": "400d0300000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "410e119ecc348c56d804bf728492cc67f63db3404b85a6b2f87211d6cbb7e24c", + "public_key": "03eab28e63e466ad0e92d678fad0c176463b26afc64c6ba045cbf28482895dd632", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", + "amount": 200000, + "witness_utxo": "400d03000000000016001462e6f0b2a12cf652181a2bb648cfe6ec185e2c8c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "03354ce376f2bb3fc71347ddf3333032b02dd1af908ad5e1f9a842629d8bd563a3", + "dleq_proof": "0edc103fb0c1260363e963c7a586721f908b7a43e7e188b78aee2bfde3e9817efddfc60549b2aceffa7e6e2691b167ed53f1cd0504e5d8ab890f7ea405fcd70d" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", + "dleq_proof": "499cc9649117239306f27ac5b2c00b722ebefba59d24f1c29f333e3b7d1c4528815838898df6846965de26395c22310831b61e3eefb620ef47413430bdec0c0d", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "03f5804d44f092a35ce1345839a9a25ac29ffcd7b5ecf9dc1b357326e32fa99ccc", + "dleq_proof": "333ece4ed0862b9280aa3d52bccebb4e6bf02d647df1938ef96b5339d8d67133dfe0fb68e8e36c8dffda77ab0278ce3121dded9097af4566c10247e886e9c95f", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + } + ] + }, + { + "description": "can finalize: three sp outputs (different scan keys) - multiple global ECDH shares", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEDAQYBACIHAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQIQNW0m1h0S3tm67YlAnfH1xiMK5ya+g9o8jF3p3EYlUC/SIHAzNh0/9y805rTnp775bluBUeZql5rc51PDnFg8vldm0oIQMG47zgW4RZqlhx5yBwHd21iUSunqRKAKVUOCfhoIDOhyIHA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsIQMHSulAt+mc/8n+jXZ3MSMaWW9bfZO5wc8S1PVGN+5UDyIIAqnx+sLMRXaE8z3pAHP+INIslHySFjuGKxTQq6HfRxUQQMiAKu0Gry8mVLOwYlWz51t0aXF1PPTuxXw26O40kjA0js3rCQHWOOU3Ecn2y6JndxNg7svfNfPfl8VMcBpZg48iCAMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKEAQts8CV65KyF7Jj5yGxY0PZ8I7/00LEjRTUzeReLgf7iLvKNb1isYvoGYUb5qXC8Mhgkbi2l9C5G1S2tHKoIcnIggDjtMiDnM0T5Hi0zOR4+FpHbOdrwbkI34ZftDQB78nKGxAGchTJz3dHxxEc9JXWbrYKz3uqYsvZwJu8GvNiBU5V+vG4U3sM44+D7Pf0zNkYRnFOFMQNnyRMkTa4am0VxKsPgABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFFK7Vd69F2tlEbzkMwnG0vjoCqazIgIDUCli7F2s4NFV3c+qd8sDIgUlekdMLSUBCd55FhMhNQxHMEQCIDlC70GsRwyZqm2NOKCfItK2/4avBGXLR8C2izs19mdbAiBOka6FoudfloMEh6lUghFnn3ia4mN5DF/DtU7MthQsYAEiBgNQKWLsXazg0VXdz6p3ywMiBSV6R0wtJQEJ3nkWEyE1DAgAAACAAAAAAAEQBP7///8AAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEfoIYBAAAAAAAWABTOWyFkR2kh5ilEN+Vk3kDYkwoaDCICA3RYxQrxcpR7CWL3r5ueDWFSZBRAUPSaZWu/0S1LNsraRzBEAiB0SvtntUvYflPp5Y/93wqesePokQyTk+rwpWZwXjlNfgIgD7dqyu9bl/sdHhNU220CKzRXOMyyMBZvqu5I/r+AJPQBIgYDdFjFCvFylHsJYvevm54NYVJkFEBQ9Jpla7/RLUs2ytoIAAAAgAEAAAABEAT+////AAEDCJBfAQAAAAAAAQQiUSAg20T7yRphCitGXihi86FAokkY9urWgJCmDgjdSk7QFgEJQgMzYdP/cvNOa056e++W5bgVHmapea3OdTw5xYPL5XZtKAMSZlgePoQcu5TeYupzVYOiMsTIiPpu3vLsL4cHifwd1AABAwiQXwEAAAAAAAEEIlEgwkGX5d+535bIWPJ1vC2JJckkSz9tQ32W+mZoDBnlkUQBCUICqfH6wsxFdoTzPekAc/4g0iyUfJIWO4YrFNCrod9HFRACSkjXbiDUC89fLhpcP/6z3CqLO4jXmkhtVMnZ6qj6GI4AAQMIkF8BAAAAAAABBCJRIP1+p2RI4jhAJi7ZYI3zUcDR3lp3fB/yLoQPBFnAcFp/AQlCA47TIg5zNE+R4tMzkePhaR2zna8G5CN+GX7Q0Ae/JyhsA/gUc4RMnXTJIf8Xpa9BC2M3NI16+/9ziRvFywyyTLDAAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "27bac97c53e47b063e9fff628dc9671345a211df01cbe2ce62babdce229d2a3f", + "public_key": "03502962ec5dace0d155ddcfaa77cb032205257a474c2d250109de79161321350c", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001452bb55debd176b6511bce43309c6d2f8e80aa6b3", + "amount": 500000, + "witness_utxo": "20a107000000000016001452bb55debd176b6511bce43309c6d2f8e80aa6b3", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "a73d2fdfe284c57cfdd7bbb5e37b7ad6a3093624d415bb8a776bffe3fdac3053", + "public_key": "037458c50af172947b0962f7af9b9e0d615264144050f49a656bbfd12d4b36cada", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014ce5b2164476921e6294437e564de40d8930a1a0c", + "amount": 100000, + "witness_utxo": "a086010000000000160014ce5b2164476921e6294437e564de40d8930a1a0c", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "0306e3bce05b8459aa5871e720701dddb58944ae9ea44a00a5543827e1a080ce87", + "dleq_proof": "10b6cf0257ae4ac85ec98f9c86c58d0f67c23bff4d0b12345353379178b81fee22ef28d6f58ac62fa066146f9a970bc3218246e2da5f42e46d52dad1caa08727" + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0356d26d61d12ded9baed89409df1f5c6230ae726be83da3c8c5de9dc4625502fd", + "dleq_proof": "c8802aed06af2f2654b3b06255b3e75b746971753cf4eec57c36e8ee349230348ecdeb0901d638e53711c9f6cba267771360eecbdf35f3df97c54c701a59838f" + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03074ae940b7e99cffc9fe8d767731231a596f5b7d93b9c1cf12d4f54637ee540f", + "dleq_proof": "19c853273ddd1f1c4473d25759bad82b3deea98b2f67026ef06bcd88153957ebc6e14dec338e3e0fb3dfd333646119c5385310367c913244dae1a9b45712ac3e" + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 2, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ] + }, + { + "description": "can finalize: one P2WPKH input / two mixed outputs - sp with labeled output and BIP 32 change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFKhca+iBJCuJTjnxuFI175+h6X2bIgIDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDBHMEQCIBzDuu1POG/i0LXA1CRHdBss4XAcxvvWCDf8PS1GwrVIAiBEJvA1FZZn78RkoM07C7Kt503b9NIiVyysAkFnf0G7FgEBAwQBAAAAIgYDrisfphlrlxSlCcTcoykk210PiVc1IiQnFOT8nlU3pDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAxz3EhKb5LqmLTaE5y6TJrDsHGA09pJlCPvD++OpcvkBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhALXiKhy7k7ux+cgUqCbGRerQaZ6UPWRIWNutMKpFA1JRSvGy2C63esSzzpg+OTRGcDpojZaOAxakl1EXnS+oNxAABAwighgEAAAAAAAEEIlEga7ws7fbiMAKU4cljGbEEtDwgG+zKAcQaFfd2fHQQrE0BCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgC4kEq1oYYzAkfwb+25F3iXRvcFleyWMJtFh0S0uiwNp8BCgQBAAAAAAEDCHDzBQAAAAAAAQQWABQ4wY813YBj44CnD/60+Y/07zSBdyICA64rH6YZa5cUpQnE3KMpJNtdD4lXNSIkJxTk/J5VN6QwDAAAAAAAAAAAAAAAAQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "f6a954670515af06da4b52669d8d8ea0109f5b7cff7fc0e48710bbcfbd7abdc4", + "public_key": "03ae2b1fa6196b9714a509c4dca32924db5d0f89573522242714e4fc9e5537a430", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014a85c6be881242b894e39f1b85235ef9fa1e97d9b", + "amount": 500000, + "witness_utxo": "20a1070000000000160014a85c6be881242b894e39f1b85235ef9fa1e97d9b", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "031cf712129be4baa62d3684e72e9326b0ec1c6034f6926508fbc3fbe3a972f901", + "dleq_proof": "2d788a872ee4eeec7e72052a09b1917ab41a67a50f59121636eb4c2a9140d49452bc6cb60baddeb12cf3a60f8e4d119c0e9a2365a380c5a925d445e74bea0dc4", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039", + "sp_label": 1 + }, + { + "output_index": 1, + "amount": 390000, + "is_silent_payment": false, + "script": "001438c18f35dd8063e380a70ffeb4f98ff4ef348177" + } + ] + }, + { + "description": "can finalize: one input / two sp outputs - output 0 no label / output 1 uses label=0 convention for sp change", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFLA7Znm3/JhuVURYHNqRKWPGdMbjIgID99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e9HMEQCIFY0b6mD1z9m7egl3uaCheQIUB/tmsBUJqsfB0VapuxBAiAsVXbBINxLxHKZfCGHTAVaGIuUSTh8dC67f+HlaIf+TgEBAwQBAAAAIgYD99Ja9Vt4NWgta/dZk/U5IJHRy2shem++hKd95hVP9e8IAAAAgAAAAAABEAT+////Ih0CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts0hAhjCQiVPx9y9gN45xPfrHc56NkuM5gYyVL3u2gCERzwDIh0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAmzGA8tEE6quCZ8nSB17g6DkB13hXugLrnQdm/lS9tOxIh4CXw7Bs42ZhKfrYvFb5AMCBBDxQu301p42P1YVr9Kmts1AQ1UI+aEse39viptfvL9GXupq/HytVfDmBf2MBKuvtohW3FJOOHtLAY+0t+qXdlFh8i5byi5ROOCEEC04yvjJOiIeAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoQNMHk9UnQ5oDrok9KM0lSyZAC3I9dT74Hp6kInKB8DouF7fQofqoQ3NkUUalEl9x6Nd2RxP2G3whpl5wDzklnQwAAQMIoIYBAAAAAAABBCJRIKFPUAS7Ra+VOUiZasyqJ8D8ezIhGJdEQD/Yq0JbIq9fAQlCAot5DgmH/enw0SOY62vjDHN2eTxkeGWioC8u/JYNlmVoA7RDRzNcY/UF5V4mirKA8xi0pqoUSS/zecNmih9U74ybAAEDCDDmAgAAAAAAAQQiUSDXbx0JcoVShXYt7c4tP4IA1m6SvgCa/qQK0eW5jRKKswEJQgJfDsGzjZmEp+ti8VvkAwIEEPFC7fTWnjY/VhWv0qa2zQK+EFEqlVNkHkB62OUJo0GEUqkC6FVqDboumD9eAPe8UQEKBAAAAAAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "96653caa803b9f0f11d48d3cd1788c1db784c0aadaf11796c36834c1fb3786bc", + "public_key": "03f7d25af55b7835682d6bf75993f5392091d1cb6b217a6fbe84a77de6154ff5ef", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014b03b6679b7fc986e5544581cda912963c674c6e3", + "amount": 300000, + "witness_utxo": "e093040000000000160014b03b6679b7fc986e5544581cda912963c674c6e3", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", + "spend_pubkey": "037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5" + }, + { + "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd", + "ecdh_result": "0218c242254fc7dcbd80de39c4f7eb1dce7a364b8ce6063254bdeeda0084473c03", + "dleq_proof": "435508f9a12c7b7f6f8a9b5fbcbf465eea6afc7cad55f0e605fd8c04abafb68856dc524e387b4b018fb4b7ea97765161f22e5bca2e5138e084102d38caf8c93a", + "input_index": 0 + }, + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_result": "026cc603cb4413aaae099f27481d7b83a0e4075de15ee80bae741d9bf952f6d3b1", + "dleq_proof": "d30793d527439a03ae893d28cd254b26400b723d753ef81e9ea4227281f03a2e17b7d0a1faa84373645146a5125f71e8d7764713f61b7c21a65e700f39259d0c", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + }, + { + "output_index": 1, + "amount": 190000, + "is_silent_payment": true, + "sp_info": "025f0ec1b38d9984a7eb62f15be403020410f142edf4d69e363f5615afd2a6b6cd037cd462358c69c40525247a8793944d9e67484b248fd84a1e7ee4f920b4da41b5", + "sp_label": 0 + } + ] + }, + { + "description": "can finalize: two sp outputs - output 0 uses label=3 / output 1 uses label=1", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR/gkwQAAAAAABYAFOIZ+mGyrzWgn4CGOyIHrO0l3lnIIgICbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyVHMEQCIFOSlnsfFhybwy7/MG+cV8vcpWQYmfE7VhEQcGWZ837IAiASvCJ2KzHM6vDu0qbWUuh4M5mMV5SMO+Eb296xwR1ObwEBAwQBAAAAIgYCbVUwRcERIKCq3/t0Z31PT5ofnEMha2dOfHbWCwP0PyUIAAAAgAAAAAABEAT+////Ih0Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWghAkWkqt7EMP4/XhX0QSwA1bRtP7BjUoHtsbyoXf1XbGJbIh4Ci3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWhAhJcAvfv6PwYUyYN7hx1bi0KhCe/o9bXm4gXSNty8814PrQ9L2JioR1MNOoN9VlSREPj1OKiO6knXHb3PiZjObgABAwighgEAAAAAAAEEIlEgvofPyHz2McruZysJw/NIz7EDKa92NvOenE7mLfBwEhYBCUICi3kOCYf96fDRI5jra+MMc3Z5PGR4ZaKgLy78lg2WZWgD8+Tq+VWJ7fdfgshaz/nQvOSCnhaA85Xsfq1iaXfwhRMBCgQDAAAAAAEDCDDmAgAAAAAAAQQiUSBjcKwAHfzVyPexT9nGxZ6MYbbKLhpgsp1DBb6qEwf1twEJQgKLeQ4Jh/3p8NEjmOtr4wxzdnk8ZHhloqAvLvyWDZZlaALcqxqjkFTkguCjoiOo8Sgs1xGXZTHGeaoggF9/X6TxawEKBAEAAAAA", + "input_keys": [ + { + "input_index": 0, + "private_key": "7211bc4516d4da13224eddbe49ffc62d1d3f0313628199dac12271da224659ae", + "public_key": "026d553045c11120a0aadffb74677d4f4f9a1f9c43216b674e7c76d60b03f43f25", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014e219fa61b2af35a09f80863b2207aced25de59c8", + "amount": 300000, + "witness_utxo": "e093040000000000160014e219fa61b2af35a09f80863b2207aced25de59c8", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "spend_pubkey": "03b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d966568", + "ecdh_result": "0245a4aadec430fe3f5e15f4412c00d5b46d3fb0635281edb1bca85dfd576c625b", + "dleq_proof": "849700bdfbfa3f0614c9837b871d5b8b42a109efe8f5b5e6e205d236dcbcf35e0fad0f4bd898a847530d3a837d56549110f8f538a88eea49d71dbdcf8998ce6e", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_label": 3 + }, + { + "output_index": 1, + "amount": 190000, + "is_silent_payment": true, + "sp_info": "028b790e0987fde9f0d12398eb6be30c7376793c647865a2a02f2efc960d96656803b44347335c63f505e55e268ab280f318b4a6aa14492ff379c3668a1f54ef8c9b", + "sp_label": 1 + } + ] + }, + { + "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (P2SH excluded)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFENGPU1vISZuSH1CA0sDRePskA1UIgICdJJVdDISkBnl/EB7Tlii6RZXFRDz0hB/uCFJx8oxWIpIMEUCIQCJHmYo2I6P30rmVO/pO//w5XooeQ5Zm0Go3qS/AZ2IIQIgY1E7I9okcNTYQ09/rlbnPwKiJtm2BFl4hKWcv+beuBYBAQMEAQAAACIGAnSSVXQyEpAZ5fxAe05YoukWVxUQ89IQf7ghScfKMViKCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOE/J1YjxODCoh2pZvKQgMzvVbONgGqnpvbm3cxwMrPjCIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQMPG4LUL7y5/z5kbRS+AOfKOUlK35FrkRgGNSiiOU/75/QvgQt2zwxKqnAJYsOF147V0fK2OlSw42xpLfvGTOOwAAQ4gMSiieXMH9JI3mYW34dwYbesU2RoDC2AnrhfbdvsgdRUBDwQAAAAAAQBTAgAAAAFA5vqmEmjxehAQHWJVNYKIKuSFi+4TNj24D98oH4Jf/AAAAAAA/////wHwSQIAAAAAABepFCpE9eWyAlaJ1TA7q5BUxWe7AklkhwAAAAABBEdSIQPl9jb3AntiYHASqF9itv7ZnUAf5dj3vHexLoU6sb6AJCEDxbcSQKck8rC3QMe1ErICPkHi4JTBlAWIqlib+WEIpUpSrgEQBP7///8AAQMIkF8BAAAAAAABBCJRINHDkl4cArKeYeddxg5c+NFKwlEvg+by53zyrh8Ntg89AQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b46f12a0756253abd1cb0a7e42c9696c15a8fb1d45afb18f50ac69933a507bd7", + "public_key": "027492557432129019e5fc407b4e58a2e916571510f3d2107fb82149c7ca31588a", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "001443463d4d6f21266e487d42034b0345e3ec900d54", + "amount": 100000, + "witness_utxo": "a08601000000000016001443463d4d6f21266e487d42034b0345e3ec900d54", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "", + "public_key": "", + "prevout_txid": "3128a2797307f492379985b7e1dc186deb14d91a030b6027ae17db76fb207515", + "prevout_index": 0, + "prevout_scriptpubkey": "a9142a44f5e5b2025689d5303bab9054c567bb02496487", + "amount": 150000, + "witness_utxo": "020000000140e6faa61268f17a10101d62553582882ae4858bee13363db80fdf281f825ffc0000000000ffffffff01f04902000000000017a9142a44f5e5b2025689d5303bab9054c567bb0249648700000000", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0384fc9d588f13830a8876a59bca420333bd56ce3601aa9e9bdb9b7731c0cacf8c", + "dleq_proof": "c3c6e0b50bef2e7fcf991b452f8039f28e5252b7e45ae446018d4a288e53fef9fd0be042ddb3c312aa9c0258b0e175e3b5747cad8e952c38db1a4b7ef19338ec", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "can finalize: two mixed input types - only eligible inputs contribute ECDH shares (NUMS point excluded)", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEOIL6dZcg5FfsJJIq738qMo+7mzjUMVU9l6NUm5d9SerUiAQ8EAAAAAAEBH6CGAQAAAAAAFgAUA14E6biH6OIv3A4UMLGv6XvKH58iAgKe+tRORGsZo75x2amUAEZxCvfx8PQJch06WwL/6URurUgwRQIhAIqf99208yLh5G4wC8JeFwdB+4gyKfkTorKzZUJSUsAyAiAJAxST2QAAA2+Z+3Sapu/7R998E0bz88sOAaDGd35yTwEBAwQBAAAAIgYCnvrUTkRrGaO+cdmplABGcQr38fD0CXIdOlsC/+lEbq0IAAAAgAEAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAk2ynjBb9oXdu9Aiy/DEtZGFJN2W+vaiLhkRer6yNMHBIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhA8cQIenKbwQX00lgytDgNKjkl0uon86BOmOhUYlRqJcAd+XTzhkxIfxL1hbjSiJsEfhyiO5uu8ulg51qpl0WgowABAwgcJQAAAAAAAAEEIlEg7FUJyUOEInBTl1dmdHAedm+Walaa+3kAcV3CdldrbrQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "f1b17746eb6b7d463ab7cb49236309f0fd3ca4566f4def831b337e8cd036bc1d", + "public_key": "029efad44e446b19a3be71d9a9940046710af7f1f0f409721d3a5b02ffe9446ead", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", + "amount": 100000, + "witness_utxo": "a086010000000000160014035e04e9b887e8e22fdc0e1430b1afe97bca1f9f", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "024db29e305bf685ddbbd022cbf0c4b5918524dd96faf6a22e19117abeb234c1c1", + "dleq_proof": "f1c4087a729bc105f4d25832b4380d2a3925d2ea27f3a04e98e85462546a25c01df974f3864c487f12f585b8d2889b047e1ca23b9baef2e960e75aa99745a0a3", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "can finalize: three sp outputs (same scan key) - each output has distinct k value", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEEAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+AGgYAAAAAABYAFIBgz43UFLJiZD13IUlmACDm16CYIgIDyiNr7RbjrAH21cSc7Qo2gPJrUTsc1kcOSlKm1GPq3SJIMEUCIQDMlGITADIsSgZizw9dXA5XfyHRwolYLTgaLuL3OHvJQgIgQ0NN4K5ihNlAcWJ1VoDRM8kC9AbTcQEC9dFuU3FQ+VcBAQMEAQAAACIGA8oja+0W46wB9tXEnO0KNoDya1E7HNZHDkpSptRj6t0iCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQOeFYLzk6xK+UpQ3Bs7qwgZdOyj2CUosrZYRM7uMmprVyIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNvwhBNXnmTwlNX5Ochx99/2sxXRlqOevQ3tMWkqIpoPTp+ufxHnEhZQAT2/iS/EZNg6yQYu/bXhyO/qLTL0RBkAAQMIoIYBAAAAAAABBCJRIDZiSMVisMJ0fEtUKReChTw4PaKAd3pfUYkJOwJxJi9dAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCKCGAQAAAAAAAQQiUSB4qfgR7Z2aKWpWUtia9WLAA2quuMb6+Vyk3qvV60l6cwEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwighgEAAAAAAAEEIlEgcooTQ3M6IIM4D+Tk4+YgTZxAf7SoyqiY7BA0ARqrTyYBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIkF8BAAAAAAABBCJRIHnvVoij+n/vw5InRVsfHC8IxwCHQk1qAPhMMUIayo2kAA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "3bf75dcb2655e27efbe47e1652566dc08e9b0f6306a0dd45d35ed7a1364285ca", + "public_key": "03ca236bed16e3ac01f6d5c49ced0a3680f26b513b1cd6470e4a52a6d463eadd22", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00148060cf8dd414b262643d772149660020e6d7a098", + "amount": 400000, + "witness_utxo": "801a0600000000001600148060cf8dd414b262643d772149660020e6d7a098", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "039e1582f393ac4af94a50dc1b3bab081974eca3d82528b2b65844ceee326a6b57", + "dleq_proof": "dbf08413579e64f094d5f939c871f7dff6b315d196a39ebd0ded31692a229a0f4e9fae7f11e7121650013dbf892fc464d83ac9062efdb5e1c8efea2d32f44419", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 2, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 3, + "amount": 90000, + "is_silent_payment": false, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + } + ] + }, + { + "description": "can finalize: three sp outputs (same scan key) / two regular outputs - k value must not follow output index", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEGAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR8goQcAAAAAABYAFDFas8/ZGyzIuG4UlJGV/E2OpB4RIgIDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDBHMEQCIDZRFp8fo7gXKN6JmPOrsK/4KlExbzVNEcogboiehFDkAiAKlucqmcJJpPM5zHI5WTNKExSddijittQHWVe7XTAdIAEBAwQBAAAAIgYDWQcCroDwtwW+1YSQN9TzVwDHAwX/LfSb/dHugwTXXDAIAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghAtj8HyUo/vzx4nf1x/W9VuBXY+Rf1u8O7AcIEa/3nAM6Ih4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhApDguomF4Sh4nF5t+oyhHTfGilpmX3LpjWLg5068gxbUVrVfUd07BENnuZQipPE+M1h+1tIYn43lvKx36mMLHsgABAwighgEAAAAAAAEEIlEg/8BMVtDu8peizkLQ4wzJjse3Sm3BIxtFOT63pIPZIsQBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkAAQMIUMMAAAAAAAABBCJRIJxqPSOBjoIO0dDP3rljZXyOwyd7fZuGXHjXVX9d7daiAAEDCKCGAQAAAAAAAQQiUSC3iN15IMFBknVEEubTQLJJKaQNVuP4yLcFNy2VUATAIgEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQABAwhQwwAAAAAAAAEEIlEgee9WiKP6f+/DkidFWx8cLwjHAIdCTWoA+EwxQhrKjaQAAQMIoIYBAAAAAAABBCJRIHSQisLI8z6v/WBEw/qQAWoanlj7sc84mrQDWMMIWDXHAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AAEDCMgsAQAAAAAAAQQiUSBvxQb4BSqfWoqpuZDV6ZT0ld3tbUe6xEyqza3Y2Jkc0AA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "f3670caa3f21a55a75bdea1ba0a3c2b9a204edb14091c7d44d5f94dc7032a34b", + "public_key": "03590702ae80f0b705bed5849037d4f35700c70305ff2df49bfdd1ee8304d75c30", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", + "amount": 500000, + "witness_utxo": "20a1070000000000160014315ab3cfd91b2cc8b86e14949195fc4d8ea41e11", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "02d8fc1f2528fefcf1e277f5c7f5bd56e05763e45fd6ef0eec070811aff79c033a", + "dleq_proof": "a4382ea261784a1e27179b7ea328474df1a2969997dcba6358b839d3af20c5b515ad57d4774ec110d9ee6508a93c4f8cd61fb5b48627e3796f2b1dfa98c2c7b2", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 1, + "amount": 50000, + "is_silent_payment": false, + "script": "51209c6a3d23818e820ed1d0cfdeb963657c8ec3277b7d9b865c78d7557f5dedd6a2" + }, + { + "output_index": 2, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 3, + "amount": 50000, + "is_silent_payment": false, + "script": "512079ef5688a3fa7fefc39227455b1f1c2f08c70087424d6a00f84c31421aca8da4" + }, + { + "output_index": 4, + "amount": 100000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + }, + { + "output_index": 5, + "amount": 77000, + "is_silent_payment": false, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] + }, + { + "description": "in progress: two P2TR inputs - not signed", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIPbR/ouRr1hSHGJHuXqHzNlOWKz58A1jvYKRD6phlnqmAQMEAQAAAAEQBP7///8BFyD20f6Lka9YUhxiR7l6h8zZTlis+fANY72CkQ+qYZZ6piIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQJE4S12vti3TQ+tTlA+04p72BDQ8PdbjLC/k6MAlfLt6SIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNdlvJVFySGTHrAEpuPL8+qBWY/0hblnHDaySzV/zkliEGEUnjMrLoxbgM4BGTCTntz1p6wDOgXG3iNtPmNelVwAAQ4gK5A3/0HdF05VIvD0BFw/QENiMq8mANTaXJ6hPMPKtLUBDwQAAAAAAQErECcAAAAAAAAiUSAIUaOIXmXuPu/5yBE/NP8pSPzfBCjYaQg2AAvEBr8snAEDBAEAAAABEAT+////ARcgCFGjiF5l7j7v+cgRPzT/KUj83wQo2GkINgALxAa/LJwiHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCEDSjbINyPW2Vu9Kj30Oc3P1YxTcCkU9gEs0Lu8CcCev88iHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaEBXg55SSsTUzFX1NOCvsHoa00U7QiMv7Fwk/JQw+DF7ifH5iyyyaNGyHc4JzOCFQ22gWmt40aBVNyOmrmf3mF2lAAEDCLj5AgAAAAAAAQQiUSAeUXtpy/8s5x8+nhztxM4/8a8BgeS/1nZXVe6xwk9vFQEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "909ba5dd602d1ec5af537138dbd5e297b858bd020880b1950491fcd01e03640f", + "public_key": "02f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "5120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "amount": 100000, + "witness_utxo": "a086010000000000225120f6d1fe8b91af58521c6247b97a87ccd94e58acf9f00d63bd82910faa61967aa6", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "f817a924599386baf940c8fe0b43fdd84905ba02edced1781a9312a55de7119b", + "public_key": "020851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "prevout_txid": "2b9037ff41dd174e5522f0f4045c3f40436232af2600d4da5c9ea13cc3cab4b5", + "prevout_index": 0, + "prevout_scriptpubkey": "51200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "amount": 10000, + "witness_utxo": "10270000000000002251200851a3885e65ee3eeff9c8113f34ff2948fcdf0428d8690836000bc406bf2c9c", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "0244e12d76bed8b74d0fad4e503ed38a7bd810d0f0f75b8cb0bf93a30095f2ede9", + "dleq_proof": "d765bc9545c921931eb004a6e3cbf3ea81598ff485b9671c36b24b357fce49621061149e332b2e8c5b80ce011930939edcf5a7ac033a05c6de236d3e635e955c", + "input_index": 0 + }, + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "034a36c83723d6d95bbd2a3df439cdcfd58c53702914f6012cd0bbbc09c09ebfcf", + "dleq_proof": "57839e524ac4d4cc55f534e0afb07a1ad3453b42232fec5c24fc9430f8317b89f1f98b2cb268d1b21dce09cce085436da05a6b78d1a0553723a6ae67f7985da5", + "input_index": 1 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 195000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "in progress: no ECDH shares - no PSBT_OUT_SCRIPT", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASughgEAAAAAACJRIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1ARAE/v///wEXIB675RWpWF++ZxSw/KuCVsejsNuoRrvh7sh34OguZZj1AAEDCBhzAQAAAAAAAQlCAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoA2HhseneXkLLIAf3ylS54NV+0Tk4+tVtPxnldROo/OA5AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "b716cc8d556fc8223cdda82e02fbc23375ba3829243b5d18351049db291b2fab", + "public_key": "021ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "51201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "amount": 100000, + "witness_utxo": "a0860100000000002251201ebbe515a9585fbe6714b0fcab8256c7a3b0dba846bbe1eec877e0e82e6598f5", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 95000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "in progress: partial ECDH coverage - no PSBT_OUT_SCRIPT", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQIBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFO7NbLUN2ovu8TI7muLmalmr1RuJAQMEAQAAACIGAmJxuxCWVhLlXjqEIY6BwmactddNpI0ECM6YLhFs21SWCAAAAIAAAAAAARAE/v///yIdAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoIQMrwowrVk+NVZLgRwhi1mHG2yKYRNy1VrXiuF89DaO8viIeAnpIf8Gft2mHe4dC1uoYEY88TnKx6oxt5gKnrUpB2+BoQNs44LHj6uB04ThzwniZHOkQa1QBGcUaeBZdJY6GfbQAdhUqcsXUsWh7zhL1v4iWM9qk8dajDT2/xCiDyUw/A4UAAQ4gvp1lyDkV+wkkirvfyoyj7ubONQxVT2Xo1Sbl31J6tSIBDwQAAAAAAQEf8EkCAAAAAAAWABRGq/EMr8qEgagROk4qKHaDM1uW/SIGA9qRfwGDugOe4a51q3NR0FWnxp70pD7rnMBr0+/Prn+sCAAAAIABAAAAARAE/v///wABAwhADQMAAAAAAAEJQgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaANh4bHp3l5CyyAH98pUueDVftE5OPrVbT8Z5XUTqPzgOQA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "e3131342d1a1a5963d3b67fc72ce22d751e369e4dcfaf86522a48de7c2771449", + "public_key": "026271bb10965612e55e3a84218e81c2669cb5d74da48d0408ce982e116cdb5496", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", + "amount": 100000, + "witness_utxo": "a086010000000000160014eecd6cb50dda8beef1323b9ae2e66a59abd51b89", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 1, + "private_key": "5989a3a28fa1adf098966366f8e1af40de6563289b173b691ea49ecbe3a05fea", + "public_key": "03da917f0183ba039ee1ae75ab7351d055a7c69ef4a43eeb9cc06bd3efcfae7fac", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "001446abf10cafca8481a8113a4e2a287683335b96fd", + "amount": 150000, + "witness_utxo": "f04902000000000016001446abf10cafca8481a8113a4e2a287683335b96fd", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "ecdh_result": "032bc28c2b564f8d5592e0470862d661c6db229844dcb556b5e2b85f3d0da3bcbe", + "dleq_proof": "db38e0b1e3eae074e13873c278991ce9106b540119c51a78165d258e867db40076152a72c5d4b1687bce12f5bf889633daa4f1d6a30d3dbfc42883c94c3f0385", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 200000, + "is_silent_payment": true, + "sp_info": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe0680361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ] + }, + { + "description": "in progress: one input/two sp outputs (different scan keys) - missing ECDH share for output 0 scan key", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQECAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR9ADQMAAAAAABYAFH4etpSWkOGGfAIroXRjl6z0krByAQMEAQAAACIGA31ztJ6Z4lzM3i6wv/MNn+M23gxwuNxj+B59boAZAnizCAAAAIAAAAAAARAE/v///yIdA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsIQOVZIBK8xbNFXvXYV0WU5Cwf2XsVl3XgoNUhXsodj2g1SIeA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsQPMdrcFxpu0VlJBw1Jg78iuPh0VOYjxOFKlnxm5F1e0KJ9pfF/4YeSQ/eFQhLxqHdrEcmpiOjAei78h60B2AioIAAQMIkF8BAAAAAAABCUIDZR0sBz/LAqTYLdpT8dUB13oDUGZnmFRkc7ISa2zRp94D8nDgpWMhg7arAQdOh35oANsA9cfF0vr7to+cKNSFRSQAAQMIkF8BAAAAAAABBCJRIJ+BEiwq1udczOTQLai4fg+bC8QFSZoibxiRh7EdMyURAQlCA1LXjEE5ADKtkYFqaX/HQNjrkJzwTXCIUmSwUfI4XiXsAuDEwYe3IV+ZfISFp1tFkbbChHe5WhEjuZaSLTFUhgv4AA==", + "input_keys": [ + { + "input_index": 0, + "private_key": "f40e7d1c1b286ed278ad8afb78af12336671d42ab5e5de2a00e93a807805a3c8", + "public_key": "037d73b49e99e25cccde2eb0bff30d9fe336de0c70b8dc63f81e7d6e80190278b3", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "00147e1eb6949690e1867c022ba1746397acf492b072", + "amount": 200000, + "witness_utxo": "400d0300000000001600147e1eb6949690e1867c022ba1746397acf492b072", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de", + "spend_pubkey": "03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "scan_pubkey": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "spend_pubkey": "02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec", + "ecdh_result": "039564804af316cd157bd7615d165390b07f65ec565dd7828354857b28763da0d5", + "dleq_proof": "f31dadc171a6ed15949070d4983bf22b8f87454e623c4e14a967c66e45d5ed0a27da5f17fe1879243f7854212f1a8776b11c9a988e8c07a2efc87ad01d808a82", + "input_index": 0 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "03651d2c073fcb02a4d82dda53f1d501d77a0350666798546473b2126b6cd1a7de03f270e0a5632183b6ab01074e877e6800db00f5c7c5d2fafbb68f9c28d4854524" + }, + { + "output_index": 1, + "amount": 90000, + "is_silent_payment": true, + "sp_info": "0352d78c41390032ad91816a697fc740d8eb909cf04d70885264b051f2385e25ec02e0c4c187b7215f997c8485a75b4591b6c28477b95a1123b996922d3154860bf8" + } + ] + }, + { + "description": "in progress: one P2TR NUMS point - no sp outputs - not signed", + "psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAT8Qa2S1e1sTdvn2xHGQ9AzAazvty4qrqXhQqz1/Z9AgEPBAAAAAABASsQJwAAAAAAACJRIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARAE/v///wEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAAAEDCBwlAAAAAAAAAQQiUSDcNKvDid4sKA9VVlxuyYhrMmNs+dBvrlOr5C89eH+viAA=", + "input_keys": [ + { + "input_index": 0, + "private_key": "7e31eeeb1aa2597b6d63b357541461d75ddae76b7603d24619f5ebed9e88ec31", + "public_key": "02c817bb7521afc35ea96f3bfb270e6eb50ddffa5560627b961fec00f2996508bf", + "prevout_txid": "13f106b64b57b5b1376f9f6c47190f40cc06b3bedcb8aaba97850ab3d7f67d02", + "prevout_index": 0, + "prevout_scriptpubkey": "512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "amount": 10000, + "witness_utxo": "102700000000000022512050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0", + "sequence": 4294967294, + "signed": false + } + ], + "scan_keys": [ + { + "scan_pubkey": "027a487fc19fb769877b8742d6ea18118f3c4e72b1ea8c6de602a7ad4a41dbe068", + "spend_pubkey": "0361e1b1e9de5e42cb2007f7ca54b9e0d57ed13938fad56d3f19e57513a8fce039" + } + ], + "expected_ecdh_shares": [], + "expected_outputs": [ + { + "output_index": 0, + "amount": 9500, + "is_silent_payment": false, + "script": "5120dc34abc389de2c280f55565c6ec9886b32636cf9d06fae53abe42f3d787faf88" + } + ] + }, + { + "description": "in progress: large PSBT with nine mixed inputs / six outputs - some signed", + "psbt": "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", + "input_keys": [ + { + "input_index": 0, + "private_key": "9f4bfa7f9f0de7ba51687335600908649ef7274ffe5fea3664d5215281cc4704", + "public_key": "03b5707469f896f18340858fa794cdd9c1a3178d055135ba3fd0bf51fdfeb1ab24", + "prevout_txid": "18a717663b0bab14b12a1a771323ff1e4079dd532e5dd13e28ea1081c700984a", + "prevout_index": 0, + "prevout_scriptpubkey": "0014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", + "amount": 100000, + "witness_utxo": "a086010000000000160014dd124cfeb0712b0d6b46e6e3ead9b1865a8853ec", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 1, + "private_key": "6ed56f21b429a0eb945d192891eba72cb8dd19ace94d6e132b31eaf7eebd52ff", + "public_key": "029383678685b551ddec9a3225691f9feef8fbd2d46aec439fbfdeb3420af23211", + "prevout_txid": "be9d65c83915fb09248abbdfca8ca3eee6ce350c554f65e8d526e5df527ab522", + "prevout_index": 0, + "prevout_scriptpubkey": "0014761f52b898187b18a36bf94e37b0181b419f42a4", + "amount": 100000, + "witness_utxo": "a086010000000000160014761f52b898187b18a36bf94e37b0181b419f42a4", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 2, + "private_key": "d9300a43035f31af0b31d506fd8972532a5808204abc878f3899ed4f7ce17a3b", + "public_key": "0369b0d7caddd109da8fe4ae8f051b555e9e8618c04c438d1773208365e76542cf", + "prevout_txid": "d041c742ca364472d1a18c7a8eae07e6e904a9ea1b85f198525fb83ef276e343", + "prevout_index": 0, + "prevout_scriptpubkey": "00149e17709c62841fcd79bc6df488193a51cf29c7ab", + "amount": 100000, + "witness_utxo": "a0860100000000001600149e17709c62841fcd79bc6df488193a51cf29c7ab", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 3, + "private_key": "b6b03ab16f91b8f280946739891052e20b3a1daf0df185fb15f32cf4d68074d9", + "public_key": "02fba64d289102989bef638e918c1fdfdeb520888ee40811e08a55f361d251a5f1", + "prevout_txid": "52262cd5d402bf32616d07fc03286a8f7fe78af7ac411dfff41655ddc1011e6f", + "prevout_index": 0, + "prevout_scriptpubkey": "00143e9c24057ca731119cf36726e24032f1a4f77970", + "amount": 100000, + "witness_utxo": "a0860100000000001600143e9c24057ca731119cf36726e24032f1a4f77970", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 4, + "private_key": "6b72cf03dbcb33ae5da9cf6d86f99fb073e0b41af128c24e206e9140ebb42d0b", + "public_key": "02b03b090c0e7c233305ae4c60ed30af97dd99b6b6d33ac673ab0f07954ac94a5d", + "prevout_txid": "e298eaf24fe1ca68b41e4b6b83cc3d91ced99c6e78d5b992cfb15771b5457064", + "prevout_index": 0, + "prevout_scriptpubkey": "00147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "amount": 100000, + "witness_utxo": "a0860100000000001600147b5263bf52c4963400fc85ecef74ee544aacbe7c", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 5, + "private_key": "30f3daceb10c037adaa918f7bd46548fab677d405212a19e3163be5998eb9495", + "public_key": "02e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "prevout_txid": "1730833ecb5be01362d7149522604484216e1c7b18cf313d1cf1543ef85df3b6", + "prevout_index": 0, + "prevout_scriptpubkey": "5120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "amount": 100000, + "witness_utxo": "a086010000000000225120e108365364efc407ae4967bb2f450a17a3dbd19bffcd488e3d0b911dfb433ef2", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 6, + "private_key": "37de74c28a47ab7b32eac140a9e89d42cde05e9d06e89c2a48b2f8673cfcd883", + "public_key": "022880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "prevout_txid": "e93532e0eda39c4d39da2d3f91d14529bc435fc2efb9196e25fbaac4b4e89b81", + "prevout_index": 0, + "prevout_scriptpubkey": "51202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "amount": 100000, + "witness_utxo": "a0860100000000002251202880f5c768f9ff0bc06c0e71ed9732fb398620d2c759f514fa52a9e87e415d87", + "sequence": 4294967294, + "signed": false + }, + { + "input_index": 7, + "private_key": "81e30f5b5d049bdf5c5bea9c3329bf57cc8b473240182a9f2a6eee07435bd54a", + "public_key": "03199d2f155f32ebb167aeb0ccca6e5afb7340898df1b7ab9936500f6d4391902a", + "prevout_txid": "7d1b6dff574e04aa401c3efcda2a1393b4db831df2ce2c3033da689fb1359a69", + "prevout_index": 0, + "prevout_scriptpubkey": "a914272948466e5f57d55a702da2efc34a9686b5e64687", + "amount": 100000, + "witness_utxo": "a08601000000000017a914272948466e5f57d55a702da2efc34a9686b5e64687", + "sequence": 4294967294, + "signed": true + }, + { + "input_index": 8, + "private_key": "e56f2b0c24fa6b637b9f53b8fca46fd20293e511d7e20ca3f46eff717779363d", + "public_key": "035fc1c4bda637ec8e51fdfcdc42a5155a5aa5c8b8e0ae23af087e3d856b0b7c9a", + "prevout_txid": "b7103556a1298f214fa132c7275fb76d1ff3247d1d39b3d661ab493f814c60e2", + "prevout_index": 0, + "prevout_scriptpubkey": "76a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac", + "amount": 100000, + "witness_utxo": "02000000012a34ac1b0db77a8198c1e29002cc47bbfcd6ed830960304d2c9a3ab548486b5d0000000000ffffffff01a0860100000000001976a914aa5e2f3ae5f9367d56a41ade6d708724c9c9abbc88ac00000000", + "sequence": 4294967294, + "signed": true + } + ], + "scan_keys": [ + { + "scan_pubkey": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "spend_pubkey": "031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "scan_pubkey": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "spend_pubkey": "024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "scan_pubkey": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "spend_pubkey": "03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + } + ], + "expected_ecdh_shares": [ + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02a9998fb163f5b6c1ff8494cc696a12d6caf413d842fce23ea85a844d331d6c73", + "dleq_proof": "10f2d556284e571184fd2a0d47f33fb4ba2aeeec0ddc221d1ce3433c7ea4e08f5c836ee8103809aead22d449d71ef1ed486cb911a61d5c4a85a3e9db383365ed", + "input_index": 0 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02d1f1d3ef8bbbe74159b7bdfd30005833f58afba0a2d6e146e892e26effadbfe3", + "dleq_proof": "a7dba9ea30477fd1f6339e12017407c2cafd391b76cf985f45ac27d0e84157ba5dfae1741b0c1c8f3e4215f13843654fe23a66ab10051494adb470f36f12a509", + "input_index": 0 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0369c01d7fd59cac879e1e44656e0523276ebf890f5bdc86176023baf603e3cef3", + "dleq_proof": "65fedccbb3e461fa84baf78e753b6da50cd358c505426a554d1e5861f90a257445fb63e63188da1fc2a7dcf3d6c2948e8917659f757a8814c19a71c66f75bedd", + "input_index": 0 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "03316576e6818d53a2feb756dc34982f1e03df93acdd6e4c86ad04d02d6e02ae5d", + "dleq_proof": "91d77475afa08026e55643c96d65e845ad4a8c1e916e733bd727b9c7957cff1de61dd300ec31b5efca68f58f51ece75328d35777090b3f818750d25f5b1fb11e", + "input_index": 1 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0302b1bb46a25b2cf2c5a22679482419fd9421ded9dbda76b8a3bf79d57371d706", + "dleq_proof": "0846af5d950e5cbca9293e7e5b919414b02668177bb8ffd36f44e634614943d6a522cfac48bc5424b901c5f16483318df37beb9a811ff1fcdb660a4470f90b22", + "input_index": 1 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "034397d2645deb54565ebcac155825fe3104defa53611d7efb20cb377b01340423", + "dleq_proof": "2a51c2f80fc0836fd6d934cc030df5bd050a80ff2d6c5f71a30c35b88b18e4709d9d0656809b63bd47c4269e0dae82973dfc83fad55acc1de9ada6d4a8d41820", + "input_index": 1 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "032e8d33e94248f7e4a9574a63598e58066da9df43483fd183fd8fe0ac6c882097", + "dleq_proof": "c5b2c00e3a86c89caaa5fc68877c6d106510d5da37097af9d113f68bfefaccc555aa986c9b9a3fa1d7e65ca90aca2b978ac048b35ea1cfdc7229b60546ca1c6e", + "input_index": 2 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "035394d74a065a16d5c0a4a2f949e8af43c42aaf368caaef9241fdc55515098ab6", + "dleq_proof": "c30b78f3f8260b5dc7264ae9352098db17c0d0f3f856623da59cfe307f5feb3a24d150dc656852a3eeca71f68997c826dcc32f989f7b81b6ff92afaed361ac82", + "input_index": 2 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03b649141a26536130bdbddfe0643441cae2ef1897d1e5598badd3ec7d576f06c3", + "dleq_proof": "2f0c488bfc17862ab2dfa7b71c250c716d5f2aaeac8ac135906e21f1dcacf7af17e5070d9ebbe364ff870b73060a5451fd44e2f8ad6fdc68215d82acbd04e6a4", + "input_index": 2 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02e553175fd8c7e0093203c88c09021d9eb8d988a8f16090c0c63e69128ec003d1", + "dleq_proof": "2bbdbc723ac50fab4f424c050207b320804bc8d482557a5aad0ee7b2fb96789fb9133272048df40ee5a0a56902a7a6e318206cf9ca8db044d49ecc5f33a0f035", + "input_index": 3 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "0324b1acaa169c4287a2452e691cbaaea2e74c1851515b34132ab449c931cf2d7d", + "dleq_proof": "1b19afd68d2c68ffe5225c6a0a65ee553741962ef7c316bfdd4c66c790bedb5dc00b449ca4bc285c6cfc1f1d77e80937792e25b3279684c968887e6dced150ff", + "input_index": 3 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02b335b89a957ad90100236fe18b21fb9cccf5306e1e444b073a795e278654012c", + "dleq_proof": "5ab4e08583f4a89dc9187e4811bac1a32c9171b12af5cf3dd584cc792e757709c3ea094dde0e410aa1be478301ab54143cdf0615f33c12df601d1bd798c7b4c1", + "input_index": 3 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02474079b71677a38273a2fa3fedd3c04c3fd1a9123ce353d66cdc13ccdc49d0f2", + "dleq_proof": "c1b2e788abbf47a4d10bc5c82ef7b7d4aa60c67951dcb8a7162f32bc87ac0432d4d8a9af36bf8a3a958e333a456e4fd58706db7adbbba23e5e9802109fbd44a8", + "input_index": 4 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "038adccdd7a1ee96a1f5ad08045a3056465fd922ccbd4ee4e2ccdf039b81baf231", + "dleq_proof": "765cc81e38729a685de9e075a75824e6059df65abe85b3fadcccd4364e48f572b87f7136786ec4b13ef4b2c2529ebfe3f7ebb4e21367044312285933dea3ae78", + "input_index": 4 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02f6628d4962209da22e07a74638f3f557902c2c10921a2d61b6779e7a4e25f1b7", + "dleq_proof": "e9021ea136236a1f0171672814a2f47e5bf3c8929760cbc3b6c1021a4a56c1f6bd263eb0bfaaa8904d2970e666f23699555ee22d6965ce5cacfee0302dfab3ba", + "input_index": 4 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02dad1881c2ee6a5944149cdaa114f2d87cbd3f685f1663fcd166b71b3703de4f8", + "dleq_proof": "22f40fe4531a31a6c83773b081f22e5b3bb6d3e012af9ee6ccc4d17a0dc6c66c886fe2410d6920936ee060e9e1c8cafb46ec1112d7f061f678776007f93a8cd5", + "input_index": 5 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "03f1808ad0bf8b9d887cfdd5b111ae0a628f776b8c029aaa12e8d6bdafd647e329", + "dleq_proof": "fa16d0202219078c5a28df26df6fd4d19bb307e1f45427db5a3f82b6df1698e0522d9b1c3c19ebad3987de2a4054927df61d8211883be161243803755a3f567c", + "input_index": 5 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0223bfe0b34c1ddb81ac981cbe5b65df3719039dfedda3b1509deec64052d5341a", + "dleq_proof": "07b441f0069b3311f2e4291acf83271b43b9e55c3c0f901d0ae9d8c4cf03eb28fac9e1fea3d4c70ed469c0c2d61d5dc13c8226b1c2201080991da67b5f01d8ec", + "input_index": 5 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "0376fd008d04869342a162827e8357feac6450ab27002dd0abb0360dc6231640c2", + "dleq_proof": "e389ade2894ff90f3d9c44ff33c23544c9492404108c020d9c4dd2f36949f7d860bad1de203ad9ece0b25dfda87e479d314c9cd23bb164e4daeaed9a8c80f18e", + "input_index": 6 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02d439e9f066bae9f9b66c9d81fb5525e4906039deefd10d4eecadeb967d01de6f", + "dleq_proof": "00da40e0d6a28c8ba41d97350ef30a37aa95ab7beef2f2c305ddb9936fa9a90f53ba900cabe91301b4643ab17abe722233c0f3435b925809612776c2743daf91", + "input_index": 6 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "03f273e108ec04d95570d3eb0055e1a4cca0c07b9309300d71ff2d50c101c406cd", + "dleq_proof": "c34d359e3f728bccc5f22cbcafac1ada0d63abc59ee6cf072db13885db6e68d5fb1ea9ee32f9fa886c4c1aac8177b20681f8a7ce180f159dd91d6d6aa99a2da8", + "input_index": 6 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02fa1ced932598a27fa28410b955ea67479b5a4033b69f2c99e4e26767bba0a556", + "dleq_proof": "70db376844a40099c673f14fe31c52ad36d7789ed4eac5954a81fd9be97ed83556335331ebb7ee362dfbc4e79f75921074a9dbadc65f353b4ebbdb10f86b87f8", + "input_index": 7 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "02f3c175b08b207637616aa74e67baac1a1807c94bce70800f76f5b17b52c0082d", + "dleq_proof": "4b5f862f2e5487d67d1b6907178f2b74e2aa1485014904fc218870bc708291e6f73ad92055358c04ae27138abd5ac9daebdf8609de59657ccbe20fcf47ed7cd6", + "input_index": 7 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "0300e0fd1710dc56ad7c173aa9141d731577009bc3dffcba8576a48e77ab34d970", + "dleq_proof": "1d0da012864e36463540e747535e129c879c957b4078356522dcae30a15ed08b8223cd95c4bccf1f7ff18528cf3c60b044afff1ecc8c6f6aeece768e35acc486", + "input_index": 7 + }, + { + "scan_key": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28", + "ecdh_result": "02ce7f309df4cdf552acdbe6fee5b0a68744647e4d6499687f90b89c553fce6e49", + "dleq_proof": "3acbafbce204ec65922e92214799e10a435590dae0a5d3238cfe072bbd2be362cc5763af621c4a8aa454aff55bb770b5aca984eec3f3ba04c94a6f7d171c7e66", + "input_index": 8 + }, + { + "scan_key": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510", + "ecdh_result": "035ab68574f8072c038766b5bc84bddd8127d2c35975f791a4c20f1af780254720", + "dleq_proof": "f3a0b179c2a967f5edd8c941d91de3091cfe896e3d91fd9631c170e27dbff06095d2e2a1a81ad3f55d247bb18234161a104aeb561d5607c997a7dbf00bde2c48", + "input_index": 8 + }, + { + "scan_key": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c", + "ecdh_result": "02fd39f90bc4b09db395596c4962b1f8de00df54ee6cfe4005770c9dc56c3ab425", + "dleq_proof": "6c0b06beeaa0af23271ee961776ee35394704e658dad125bd1654972cb69cdc1b19c6820680828192e26b6a7392b0a4f480e29bf38511d8821eb7caba2ff293d", + "input_index": 8 + } + ], + "expected_outputs": [ + { + "output_index": 0, + "amount": 30000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 1, + "amount": 30000, + "is_silent_payment": true, + "sp_info": "033361d3ff72f34e6b4e7a7bef96e5b8151e66a979adce753c39c583cbe5766d28031266581e3e841cbb94de62ea735583a232c4c888fa6edef2ec2f870789fc1dd4" + }, + { + "output_index": 2, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 3, + "amount": 20000, + "is_silent_payment": true, + "sp_info": "02a9f1fac2cc457684f33de90073fe20d22c947c92163b862b14d0aba1df471510024a48d76e20d40bcf5f2e1a5c3ffeb3dc2a8b3b88d79a486d54c9d9eaa8fa188e" + }, + { + "output_index": 4, + "amount": 10000, + "is_silent_payment": true, + "sp_info": "038ed3220e73344f91e2d33391e3e1691db39daf06e4237e197ed0d007bf27286c03f81473844c9d74c921ff17a5af410b6337348d7afbff73891bc5cb0cb24cb0c0" + }, + { + "output_index": 5, + "amount": 50000, + "is_silent_payment": false, + "script": "51206fc506f8052a9f5a8aa9b990d5e994f495dded6d47bac44caacdadd8d8991cd0" + } + ] + } + ] +} \ No newline at end of file From 56094edc11da40bcb5a7a4cfe42af16edc6e7d9c Mon Sep 17 00:00:00 2001 From: otaliptus Date: Tue, 31 Mar 2026 16:09:47 +0200 Subject: [PATCH 5/5] docs: update readmes for Go --- README.md | 5 ++++- go/README.md | 21 ++++++++++++++------- go/go.mod | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5271968..6fcb998 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,10 @@ New to BIP375? Start here: ## Repository Overview -- PSBTv2 Libraries (Python and Rust) +- PSBTv2 Libraries (Python, Rust, and Go) - Examples demonstrating BIP375 workflows - Rust Overview [README.md](rust/README.md) +- Go Overview [README.md](go/README.md) ## Libraries @@ -26,6 +27,8 @@ New to BIP375? Start here: - **`secp256k1_374.py`** - secp256k1 implementation - Rust - **`crates/`** - Crates to support PSBTv2 for Silent Payments +- Go + - **`go/sp/`** - BIP-352/BIP-375 silent payment workflow on top of [`psbt-v2`](https://github.com/otaliptus/psbt-v2) and [`dleq374`](https://github.com/otaliptus/dleq374) ## **Examples** diff --git a/go/README.md b/go/README.md index 0a7eb0b..6add0c4 100644 --- a/go/README.md +++ b/go/README.md @@ -1,17 +1,24 @@ # Go -Go BIP-375 vectors using [`github.com/otaliptus/psbt-v2`](https://github.com/otaliptus/psbt-v2) package. +Go BIP-375 implementation using: +- [`github.com/otaliptus/psbt-v2`](https://github.com/otaliptus/psbt-v2) — PSBTv2 with BIP-375 field support +- [`github.com/otaliptus/dleq374`](https://github.com/otaliptus/dleq374) — BIP-374 DLEQ proofs + +## Packages + +| Package | What it does | +|---------|-------------| +| `go/` | Top-level tests against the shared v1.1 test vectors (parsing, round-trip, structural validation) | +| `go/sp/` | BIP-352/BIP-375 silent payment workflow: packet analysis, ECDH share/proof generation and verification, output script materialization, extraction checks | ## Run ```bash cd go -go test -v -count=1 +go test -v -count=1 ./... ``` -The tests read `../bip375_test_vectors.json` and cover: +## Test Vectors -- structural invalid vectors -- semantic invalid vectors -- valid vector round-trip stability -- output script materialization for `can finalize:` vectors +- `../bip375_test_vectors.json` — shared v1.1 vectors used by the top-level tests (same file Python and Rust use) +- `testdata/bip375_test_vectors.json` — v1.2 vectors used by the `sp/` package tests (includes `input_keys` and `expected_ecdh_shares` fields needed for signer/materializer tests) diff --git a/go/go.mod b/go/go.mod index 8aaf49e..1a891d0 100644 --- a/go/go.mod +++ b/go/go.mod @@ -1,4 +1,4 @@ -module github.com/macgyver13/bip375-examples/go +module github.com/otaliptus/bip375-examples/go go 1.22