123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- package shachain
- import (
- "bytes"
- "testing"
- "github.com/btcsuite/btcd/chaincfg/chainhash"
- )
- type testInsert struct {
- index index
- secret string
- successful bool
- }
- // tests encodes the test vectors specified in BOLT-03, Appendix D,
- // Storage Tests.
- var tests = []struct {
- name string
- inserts []testInsert
- }{
- {
- name: "insert_secret correct sequence",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1" +
- "a8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab2" +
- "1e9b506fd4998a51d54502e99116",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "c65716add7aa98ba7acb236352d665cab173" +
- "45fe45b55fb879ff80e6bd0c41dd",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "969660042a28f32d9be17344e09374b37996" +
- "2d03db1574df5a8a5a47e19ce3f2",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "a5a64476122ca0925fb344bdc1854c1c0a59" +
- "fc614298e50a33e331980a220f32",
- successful: true,
- },
- {
- index: 281474976710648,
- secret: "05cde6323d949933f7f7b78776bcc1ea6d9b" +
- "31447732e3802e1f7ac44b650e17",
- successful: true,
- },
- },
- },
- {
- name: "insert_secret #1 incorrect",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "02a40c85b6f28da08dfdbe0926c53fab2d" +
- "e6d28c10301f8f7c4073d5e42e3148",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659" +
- "c1a8b4b5bec0c4b872abeba4cb8964",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #2 incorrect (#1 derived from incorrect)",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "02a40c85b6f28da08dfdbe0926c53fab2de6" +
- "d28c10301f8f7c4073d5e42e3148",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "dddc3a8d14fddf2b68fa8c7fbad274827493" +
- "7479dd0f8930d5ebb4ab6bd866a3",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22a" +
- "b21e9b506fd4998a51d54502e99116",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #3 incorrect",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1" +
- "a8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "c51a18b13e8527e579ec56365482c62f180b" +
- "7d5760b46e9477dae59e87ed423a",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab2" +
- "1e9b506fd4998a51d54502e99116",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #4 incorrect (1,2,3 derived from incorrect)",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "02a40c85b6f28da08dfdbe0926c53fab2de6" +
- "d28c10301f8f7c4073d5e42e3148",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "dddc3a8d14fddf2b68fa8c7fbad274827493" +
- "7479dd0f8930d5ebb4ab6bd866a3",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "c51a18b13e8527e579ec56365482c62f18" +
- "0b7d5760b46e9477dae59e87ed423a",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "ba65d7b0ef55a3ba300d4e87af29868f39" +
- "4f8f138d78a7011669c79b37b936f4",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "c65716add7aa98ba7acb236352d665cab1" +
- "7345fe45b55fb879ff80e6bd0c41dd",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "969660042a28f32d9be17344e09374b379" +
- "962d03db1574df5a8a5a47e19ce3f2",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "a5a64476122ca0925fb344bdc1854c1c0a" +
- "59fc614298e50a33e331980a220f32",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "05cde6323d949933f7f7b78776bcc1ea6d9b" +
- "31447732e3802e1f7ac44b650e17",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #5 incorrect",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1a" +
- "8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab21" +
- "e9b506fd4998a51d54502e99116",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "631373ad5f9ef654bb3dade742d09504c567" +
- "edd24320d2fcd68e3cc47e2ff6a6",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "969660042a28f32d9be17344e09374b37996" +
- "2d03db1574df5a8a5a47e19ce3f2",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #6 incorrect (5 derived from incorrect)",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1a" +
- "8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab21" +
- "e9b506fd4998a51d54502e99116",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "631373ad5f9ef654bb3dade742d09504c567" +
- "edd24320d2fcd68e3cc47e2ff6a6",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "b7e76a83668bde38b373970155c868a65330" +
- "4308f9896692f904a23731224bb1",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "a5a64476122ca0925fb344bdc1854c1c0a59f" +
- "c614298e50a33e331980a220f32",
- successful: true,
- },
- {
- index: 281474976710648,
- secret: "05cde6323d949933f7f7b78776bcc1ea6d9b" +
- "31447732e3802e1f7ac44b650e17",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #7 incorrect",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1a" +
- "8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab21" +
- "e9b506fd4998a51d54502e99116",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "c65716add7aa98ba7acb236352d665cab173" +
- "45fe45b55fb879ff80e6bd0c41dd",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "969660042a28f32d9be17344e09374b37996" +
- "2d03db1574df5a8a5a47e19ce3f2",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "e7971de736e01da8ed58b94c2fc216cb1d" +
- "ca9e326f3a96e7194fe8ea8af6c0a3",
- successful: true,
- },
- {
- index: 281474976710648,
- secret: "05cde6323d949933f7f7b78776bcc1ea6d" +
- "9b31447732e3802e1f7ac44b650e17",
- successful: false,
- },
- },
- },
- {
- name: "insert_secret #8 incorrect",
- inserts: []testInsert{
- {
- index: 281474976710655,
- secret: "7cc854b54e3e0dcdb010d7a3fee464a9687b" +
- "e6e8db3be6854c475621e007a5dc",
- successful: true,
- },
- {
- index: 281474976710654,
- secret: "c7518c8ae4660ed02894df8976fa1a3659c1a" +
- "8b4b5bec0c4b872abeba4cb8964",
- successful: true,
- },
- {
- index: 281474976710653,
- secret: "2273e227a5b7449b6e70f1fb4652864038b1" +
- "cbf9cd7c043a7d6456b7fc275ad8",
- successful: true,
- },
- {
- index: 281474976710652,
- secret: "27cddaa5624534cb6cb9d7da077cf2b22ab21" +
- "e9b506fd4998a51d54502e99116",
- successful: true,
- },
- {
- index: 281474976710651,
- secret: "c65716add7aa98ba7acb236352d665cab173" +
- "45fe45b55fb879ff80e6bd0c41dd",
- successful: true,
- },
- {
- index: 281474976710650,
- secret: "969660042a28f32d9be17344e09374b37996" +
- "2d03db1574df5a8a5a47e19ce3f2",
- successful: true,
- },
- {
- index: 281474976710649,
- secret: "a5a64476122ca0925fb344bdc1854c1c0a" +
- "59fc614298e50a33e331980a220f32",
- successful: true,
- },
- {
- index: 281474976710648,
- secret: "a7efbc61aac46d34f77778bac22c8a20c6" +
- "a46ca460addc49009bda875ec88fa4",
- successful: false,
- },
- },
- },
- }
- // TestSpecificationShaChainInsert is used to check the consistency with
- // specification hash insert function.
- func TestSpecificationShaChainInsert(t *testing.T) {
- t.Parallel()
- for _, test := range tests {
- receiver := NewRevocationStore()
- for _, insert := range test.inserts {
- secret, err := hashFromString(insert.secret)
- if err != nil {
- t.Fatal(err)
- }
- if err := receiver.AddNextEntry(secret); err != nil {
- if insert.successful {
- t.Fatalf("Failed (%v): error was "+
- "received but it shouldn't: "+
- "%v", test.name, err)
- }
- } else {
- if !insert.successful {
- t.Fatalf("Failed (%v): error wasn't "+
- "received", test.name)
- }
- }
- }
- t.Logf("Passed (%v)", test.name)
- }
- }
- // TestShaChainStore checks the ability of shachain store to hold the produced
- // secrets after recovering from bytes data.
- func TestShaChainStore(t *testing.T) {
- t.Parallel()
- seed := chainhash.DoubleHashH([]byte("shachaintest"))
- sender := NewRevocationProducer(seed)
- receiver := NewRevocationStore()
- for n := uint64(0); n < 10000; n++ {
- sha, err := sender.AtIndex(n)
- if err != nil {
- t.Fatal(err)
- }
- if err = receiver.AddNextEntry(sha); err != nil {
- t.Fatal(err)
- }
- }
- var b bytes.Buffer
- if err := receiver.Encode(&b); err != nil {
- t.Fatal(err)
- }
- newReceiver, err := NewRevocationStoreFromBytes(&b)
- if err != nil {
- t.Fatal(err)
- }
- for n := uint64(0); n < 10000; n++ {
- if _, err := newReceiver.LookUp(n); err != nil {
- t.Fatal(err)
- }
- }
- }
|