From 68a3b99bfed1023604ee606e29e88dedb3626cb3 Mon Sep 17 00:00:00 2001 From: Rongjian Lan Date: Fri, 15 Feb 2019 11:46:11 -0800 Subject: [PATCH 1/4] Add keytransparency and trillian into submodule --- .gitmodules | 12 ++++++++++++ keytransparency | 1 + trillian | 1 + 3 files changed, 14 insertions(+) create mode 160000 keytransparency create mode 160000 trillian diff --git a/.gitmodules b/.gitmodules index ad2702ed2..e7d1bb3a0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,15 @@ [submodule "vendor/github.com/libp2p/go-libp2p-kad-dht"] path = vendor/github.com/libp2p/go-libp2p-kad-dht url = https://github.com/libp2p/go-libp2p-kad-dht +[submodule "vendor/github.com/google/keytransparency"] + path = vendor/github.com/google/keytransparency + url = https://github.com/google/keytransparency +[submodule "vendor/github.com/google/trillian"] + path = vendor/github.com/google/trillian + url = https://github.com/google/trillian +[submodule "keytransparency"] + path = keytransparency + url = git@github.com:google/keytransparency.git +[submodule "trillian"] + path = trillian + url = git@github.com:google/trillian.git diff --git a/keytransparency b/keytransparency new file mode 160000 index 000000000..3fda514f0 --- /dev/null +++ b/keytransparency @@ -0,0 +1 @@ +Subproject commit 3fda514f045e9cba8e238e75ac9efe84aa1d8783 diff --git a/trillian b/trillian new file mode 160000 index 000000000..b6ba309d0 --- /dev/null +++ b/trillian @@ -0,0 +1 @@ +Subproject commit b6ba309d0ed1934a3e68df816682beca7681f313 From 213b1c6d82560e6fa801e02011424d4746a4c9a8 Mon Sep 17 00:00:00 2001 From: Rongjian Lan Date: Fri, 15 Feb 2019 11:53:57 -0800 Subject: [PATCH 2/4] Remove the extra tests that havev heavy external dependency, we actually don't need them --- .gitmodules | 12 ---- crypto/vrf/p256/p256_test.go | 121 ----------------------------------- keytransparency | 1 - trillian | 1 - 4 files changed, 135 deletions(-) delete mode 160000 keytransparency delete mode 160000 trillian diff --git a/.gitmodules b/.gitmodules index e7d1bb3a0..ad2702ed2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,15 +5,3 @@ [submodule "vendor/github.com/libp2p/go-libp2p-kad-dht"] path = vendor/github.com/libp2p/go-libp2p-kad-dht url = https://github.com/libp2p/go-libp2p-kad-dht -[submodule "vendor/github.com/google/keytransparency"] - path = vendor/github.com/google/keytransparency - url = https://github.com/google/keytransparency -[submodule "vendor/github.com/google/trillian"] - path = vendor/github.com/google/trillian - url = https://github.com/google/trillian -[submodule "keytransparency"] - path = keytransparency - url = git@github.com:google/keytransparency.git -[submodule "trillian"] - path = trillian - url = git@github.com:google/trillian.git diff --git a/crypto/vrf/p256/p256_test.go b/crypto/vrf/p256/p256_test.go index 534701cc7..52619d2f1 100644 --- a/crypto/vrf/p256/p256_test.go +++ b/crypto/vrf/p256/p256_test.go @@ -16,24 +16,10 @@ package p256 import ( "bytes" - "context" "crypto/rand" "encoding/hex" - "encoding/json" - "io/ioutil" "math" - "os" "testing" - - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - "github.com/google/keytransparency/core/testdata" - "github.com/google/trillian/crypto/keys" - "github.com/google/trillian/crypto/keys/der" - "github.com/google/trillian/crypto/keyspb" - - pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto" - _ "github.com/google/trillian/crypto/keys/der/proto" ) const ( @@ -80,76 +66,6 @@ func TestH2(t *testing.T) { } } -func TestNewFromWrappedKey(t *testing.T) { - ctx := context.Background() - for _, tc := range []struct { - desc string - wantFromWrappedErr bool - spec *keyspb.Specification - keygen keys.ProtoGenerator - }{ - { - desc: "DER with ECDSA spec", - spec: &keyspb.Specification{ - Params: &keyspb.Specification_EcdsaParams{ - EcdsaParams: &keyspb.Specification_ECDSA{ - Curve: keyspb.Specification_ECDSA_P256, - }, - }, - }, - keygen: func(ctx context.Context, spec *keyspb.Specification) (proto.Message, error) { - return der.NewProtoFromSpec(spec) - }, - }, - { - desc: "DER with Non-ECDSA spec", - wantFromWrappedErr: true, - spec: &keyspb.Specification{ - Params: &keyspb.Specification_RsaParams{ - RsaParams: &keyspb.Specification_RSA{Bits: 2048}, - }, - }, - keygen: func(ctx context.Context, spec *keyspb.Specification) (proto.Message, error) { - return der.NewProtoFromSpec(spec) - }, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - // Generate VRF key. - wrapped, err := tc.keygen(ctx, tc.spec) - if err != nil { - t.Fatalf("keygen failed: %v", err) - } - vrfPriv, err := NewFromWrappedKey(ctx, wrapped) - if got, want := err != nil, tc.wantFromWrappedErr; got != want { - t.Errorf("NewFromWrappedKey (): %v, want err: %v", err, want) - } - if err != nil { - return - } - - vrfPubDER, err := der.MarshalPublicKey(vrfPriv.Public()) - if err != nil { - t.Fatalf("MarshalPublicKey failed: %v", err) - } - vrfPub, err := NewVRFVerifierFromRawKey(vrfPubDER) - if err != nil { - t.Fatalf("NewVRFVerifierFromRawKey(): %v", err) - } - // Test that the public and private components match. - m := []byte("foobar") - indexA, proof := vrfPriv.Evaluate(m) - indexB, err := vrfPub.ProofToHash(m, proof) - if err != nil { - t.Fatalf("ProofToHash(): %v", err) - } - if got, want := indexB, indexA; got != want { - t.Errorf("ProofToHash(%s, %x): %x, want %x", m, proof, got, want) - } - }) - } -} - func TestVRF(t *testing.T) { k, pk := GenerateKey() @@ -184,43 +100,6 @@ func TestVRF(t *testing.T) { } } -// Test vectors in core/testdata are generated by running -// go generate ./core/testdata -func TestProofToHash(t *testing.T) { - directoryFile := "../../../test/testdata/directory.json" - f, err := os.Open(directoryFile) - if err != nil { - t.Fatalf("ReadFile(%v): %v", directoryFile, err) - } - defer f.Close() - var directory pb.Directory - if err := jsonpb.Unmarshal(f, &directory); err != nil { - t.Fatalf("jsonpb.Unmarshal(): %v", err) - } - pk, err := NewVRFVerifierFromRawKey(directory.GetVrf().GetDer()) - if err != nil { - t.Fatalf("NewVRFVerifier failure: %v", err) - } - - respFile := "../../../test/testdata/getentryresponse.json" - b, err := ioutil.ReadFile(respFile) - if err != nil { - t.Fatalf("ReadFile(%v): %v", respFile, err) - } - var getUserResponses []testdata.ResponseVector - if err := json.Unmarshal(b, &getUserResponses); err != nil { - t.Fatalf("Unmarshal(): %v", err) - } - for _, tc := range getUserResponses { - t.Run(tc.Desc, func(t *testing.T) { - _, err := pk.ProofToHash([]byte(tc.UserIDs[0]), tc.GetUserResp.GetLeaf().GetVrfProof()) - if err != nil { - t.Errorf("ProofToHash(%v): %v)", tc.Desc, err) - } - }) - } -} - func TestReadFromOpenSSL(t *testing.T) { for _, tc := range []struct { priv string diff --git a/keytransparency b/keytransparency deleted file mode 160000 index 3fda514f0..000000000 --- a/keytransparency +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3fda514f045e9cba8e238e75ac9efe84aa1d8783 diff --git a/trillian b/trillian deleted file mode 160000 index b6ba309d0..000000000 --- a/trillian +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b6ba309d0ed1934a3e68df816682beca7681f313 From 8176fbf51184892967aed5858b35ec972658430e Mon Sep 17 00:00:00 2001 From: Rongjian Lan Date: Fri, 15 Feb 2019 11:56:10 -0800 Subject: [PATCH 3/4] Remove trillian dependency in p256 --- crypto/vrf/p256/p256.go | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/crypto/vrf/p256/p256.go b/crypto/vrf/p256/p256.go index 097566037..538b20978 100644 --- a/crypto/vrf/p256/p256.go +++ b/crypto/vrf/p256/p256.go @@ -22,7 +22,6 @@ package p256 import ( "bytes" - "context" "crypto" "crypto/ecdsa" "crypto/elliptic" @@ -34,13 +33,9 @@ import ( "encoding/binary" "encoding/pem" "errors" - "fmt" "math/big" - "github.com/google/trillian/crypto/keys" "github.com/harmony-one/harmony/crypto/vrf" - - "github.com/golang/protobuf/proto" ) var ( @@ -229,23 +224,6 @@ func (pk *PublicKey) ProofToHash(m, proof []byte) (index [32]byte, err error) { return sha256.Sum256(vrf), nil } -// NewFromWrappedKey creates a VRF signer object from an encrypted private key. -// The opaque private key must resolve to an `ecdsa.PrivateKey` in order to work. -func NewFromWrappedKey(ctx context.Context, wrapped proto.Message) (vrf.PrivateKey, error) { - // Unwrap. - signer, err := keys.NewSigner(ctx, wrapped) - if err != nil { - return nil, err - } - - switch key := signer.(type) { - case *ecdsa.PrivateKey: - return NewVRFSigner(key) - default: - return nil, fmt.Errorf("wrapped key has wrong type: %T, want ecdsa.PrivateKey", key) - } -} - // NewVRFSigner creates a signer object from a private key. func NewVRFSigner(key *ecdsa.PrivateKey) (vrf.PrivateKey, error) { if *(key.Params()) != *curve.Params() { From c0741c6af3027be9e01a59e10f1eafb27c7290f8 Mon Sep 17 00:00:00 2001 From: Rongjian Lan Date: Fri, 15 Feb 2019 11:56:49 -0800 Subject: [PATCH 4/4] Remove testdata --- test/testdata/directory.json | 28 - test/testdata/getentryresponse.json | 2137 --------------------------- 2 files changed, 2165 deletions(-) delete mode 100644 test/testdata/directory.json delete mode 100644 test/testdata/getentryresponse.json diff --git a/test/testdata/directory.json b/test/testdata/directory.json deleted file mode 100644 index 217b7dd4e..000000000 --- a/test/testdata/directory.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "directoryId": "integration", - "log": { - "treeId": "6511398593182094144", - "treeType": "PREORDERED_LOG", - "hashStrategy": "RFC6962_SHA256", - "hashAlgorithm": "SHA256", - "signatureAlgorithm": "ECDSA", - "publicKey": { - "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A==" - } - }, - "map": { - "treeId": "7627063266021945174", - "treeType": "MAP", - "hashStrategy": "CONIKS_SHA256", - "hashAlgorithm": "SHA256", - "signatureAlgorithm": "ECDSA", - "publicKey": { - "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWLHm0TLYaTzENpPkBl2E79ySqJI+EW51VpoWh7wqY3OjSJcft4zgEeNeHYEb/T2jBFH4eYg4iSN7D/VYaJxJRA==" - } - }, - "vrf": { - "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF2Pm2kKya+JBun1QRmKQMcoMOIBNWp8fjECkJX+/hNWdV1UKb12W+yXcX2MqN7ZMX77hS9mLus/WaE0NS370mA==" - }, - "minInterval": "0.100s", - "maxInterval": "216000s" -} \ No newline at end of file diff --git a/test/testdata/getentryresponse.json b/test/testdata/getentryresponse.json deleted file mode 100644 index a5c5357ca..000000000 --- a/test/testdata/getentryresponse.json +++ /dev/null @@ -1,2137 +0,0 @@ -[ - { - "Desc": "empty_alice", - "UserIDs": [ - "alice" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEgoMiXEtKsVlKmOMkHhZ8DIdUpVxBXevDQqyz8HlVTYpwVg0ku8ZcHVAAAAAAAAAAAAAA=", - "signature": "MEYCIQDhwON1ZH6j7qw5/kQTtGgO4a3zI028ajCIOQ6BdtMB3AIhAJE+NqncdDfJmYGklOFxyD9vfEWm5RlqRXvkRxV/jgEl" - } - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163163063238915, - "root_hash": "zLL4sTnEciIm2uaPl/n7XPbiawbtx+63RyxDJz6fVJI=", - "tree_size": 1, - "tree_revision": 1, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAAASDMsvixOcRyIiba5o+X+ftc9uJrBu3H7rdHLEMnPp9UkhWDSS8GR8EDAAAAAAAAAAEAAA==", - "log_root_signature": "MEYCIQDV9wVMePn/6JEOnmvr56evMDPWAs9ocmx9BZryPbumJgIhAM/RuOeXp+9eyqnuX0Xb07efPjvDX/ugRFy/ILp3CuZo" - } - } - }, - "leaf": { - "vrf_proof": "CsrlVdKdfH2wcfVeaNtlVpVgUyLFmuRtLr9Q6sZa1m+Y+GgE1x2VXo+mfpKU0Txz7OPUv3JH0fMotV+NRWj33ARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo", - "map_inclusion": { - "leaf": { - "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM=" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": true - }, - { - "Desc": "bob0_set", - "UserIDs": [ - "bob" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEg+O7XQigTSTtnjWvypQfnoTvYtsZMirOiOG6wsJEZk+UVg0kvHAH/3QAAAAAAAAABABISAhgBEgwQmv2Yq/Gl0sEVGAI=", - "signature": "MEUCIGHAhD1602oqYuCCV/SK4Y+isQzqGWvPCRGUAMf5CeMYAiEAxKMu4h5+elzr+/S5c4aOlPN9hS2EZSZK0QMxVVa3S34=" - }, - "log_inclusion": [ - "zLL4sTnEciIm2uaPl/n7XPbiawbtx+63RyxDJz6fVJI=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163163560158238, - "root_hash": "VigWWNMYkkC/tjfy+5vtTukZXZnppaYja73iLZoyD7c=", - "tree_size": 2, - "tree_revision": 2, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAAAiBWKBZY0xiSQL+2N/L7m+1O6RldmemlpiNrveItmjIPtxWDSS8j5iQeAAAAAAAAAAIAAA==", - "log_root_signature": "MEUCIHhitMsUiIXsnyQjLImwpMxZRt6OjQ9N5RVqtNqxxPqaAiEA5xHhyJctJsoiWNhysxmeHNrkqkNcJctY8Z77va6prkA=" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=" - ] - } - }, - "leaf": { - "vrf_proof": "eKDyJl+cnnPH5/6ssSxdSiizLlATcMNwgYAFaynyuImzKHJqvl6cQ3TCnArWDnImX6OOGBGrsK4ZOf9qilihEwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU", - "map_inclusion": { - "leaf": { - "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "3ZKTcseQ0R0OSbWOic6vzi/yxHE5c0lpJCz3pjhLlKc=", - "" - ] - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": false - }, - { - "Desc": "set_carol", - "UserIDs": [ - "carol" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEgwS/id1lfTZjhbfKdlZN0T6SNj+lsTgrvgC3tLQYJqakVg0kvNAxqPwAAAAAAAAACABwSAhgBEhYImv2Yq/Gl0sEVEMrXsu/ypdLBFRgC", - "signature": "MEYCIQDdMG9YU9AsqeGRbBcB3TPoBmpXXROtqDti1eWNzKRV9wIhANPkgGRQ7AZPxMIL3phdEwoxom+T8nuNTCHxMMC0VGYV" - }, - "log_inclusion": [ - "VigWWNMYkkC/tjfy+5vtTukZXZnppaYja73iLZoyD7c=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163164059865137, - "root_hash": "nC756jJgJOBGCYGS/xtyZ7eTNNkwKZ95MSHz+d766bM=", - "tree_size": 3, - "tree_revision": 3, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAAAyCcLvnqMmAk4EYJgZL/G3Jnt5M02TApn3kxIfP53vrpsxWDSS9BrxAxAAAAAAAAAAMAAA==", - "log_root_signature": "MEQCIClfsNvnG/4xpxbTs4jzwsE4Vikpe0Fro0OfdT3efOM4AiADIW6Z63SOUxg+lYUl2MX8rYdlAfKp2n+NxgalObtZuA==" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=", - "jfNr9jOWGPAwb9oanLSYBabZXp5ShHREKQkDXxJ58Ts=" - ] - } - }, - "leaf": { - "vrf_proof": "jUkQi8HRJjH94aNdAxbVNcIP+Yq8wh937Odr8hZCgBkQfNa5pbQrNbyrc3Kn7DXa/djUY9pqrhiAb6VfnKxzNwSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc", - "map_inclusion": { - "leaf": { - "index": "JYx5mwUZM4rLnxSas5/NC9GiuqMYVWThqNqJdDz6bvw=" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "CS0fqBO+DMoGNyIO4OtmyMS99zrCjYAsidzOoIuujVU=", - "5QCCepR0tYVczBRnCvxlBMim8tO00KBKfX6dgKpDDQ8=", - "" - ] - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": false - }, - { - "Desc": "bob1_get", - "UserIDs": [ - "bob" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEgr8xAKP6EGtoSi+ZFNI6ZwPimd9+KywJtad/yEJNevXgVg0kvUUZDTwAAAAAAAAADACYSDBDchvfv9KXSwRUYARIWCMrXsu/ypdLBFRDK17Lv8qXSwRUYAg==", - "signature": "MEUCIQDOirn/pstnBvgxdGn1kjNh5+fU5r2nrQvixjrboEHWigIgUFhzwB9b2+wEtd7hEuhTOOVx51/mO2CL+7tRrdFQ4D8=" - }, - "log_inclusion": [ - "jfNr9jOWGPAwb9oanLSYBabZXp5ShHREKQkDXxJ58Ts=", - "VigWWNMYkkC/tjfy+5vtTukZXZnppaYja73iLZoyD7c=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163164559404835, - "root_hash": "rPSTqha5qIxXu6quztMmbIFdA6JNSzcUt+SvWyfwoEw=", - "tree_size": 4, - "tree_revision": 4, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAABCCs9JOqFrmojFe7qq7O0yZsgV0Dok1LNxS35K9bJ/CgTBWDSS9fdW8jAAAAAAAAAAQAAA==", - "log_root_signature": "MEQCIDM6z/nW99h5K/uRJXb26Mhby7CIfXOWJjw8Uw57HLuhAiA0zeJKHaA0PKpi2gI1xVYVm2GFI3U0I1nmIuWqhLSbsw==" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=", - "vhBdOlNe4DDPlfxT3Bd1xabPmwVsu5CKflo21y6C8Ms=" - ] - } - }, - "leaf": { - "vrf_proof": "X4rdMUgJvFL9XtkGlXq8e4D5nxsI13ZGSlcGYlGhtn0RM0u8sBtETbUIxDkZqYAIIHSNKzzeNwELrmNES9gr5ASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU", - "map_inclusion": { - "leaf": { - "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=", - "leaf_hash": "SQW0xHDpdSOozSCd4yT9rzz1fKmsJECsgcucG7F2ax0=", - "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgUnwYF+DKuiCzn5AtkpYfMrJLLhmHjQFOs5PN/b2TTDQ6lQEIARKQAQqHAQo1dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuRWNkc2FQdWJsaWNLZXkSTBIGCAMQAhgCGiD7FU52mGR+kS2Xs4XygLK9bDfV1XiGcZtcM9t0WUvWeSIgmsoZ6shH0XVzZaQU9lPYV3EsZYiiNax6wCRQ8d53LbQYAxABGAEgA0Ig47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUSRjBEAiBlnjoyOans9beKGWEzPPslAcXzzI2f2c6iMNbSvcxwbwIgKaJFc0fkIYLqmGXTcoifGz/SpWsxxG0VWmmcJuqm03k=" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "Rkta1z50aDLsEglMAtxm5hm1eskPnOzZaIoDVWuYRTo=", - "" - ] - }, - "committed": { - "key": "lOyD/kDFCHddGQaufT0A9Q==", - "data": "Ym9iLWtleTE=" - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": false - }, - { - "Desc": "bob1_set", - "UserIDs": [ - "bob" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEgr8xAKP6EGtoSi+ZFNI6ZwPimd9+KywJtad/yEJNevXgVg0kvUUZDTwAAAAAAAAADACYSDBDchvfv9KXSwRUYARIWCMrXsu/ypdLBFRDK17Lv8qXSwRUYAg==", - "signature": "MEUCIQDOirn/pstnBvgxdGn1kjNh5+fU5r2nrQvixjrboEHWigIgUFhzwB9b2+wEtd7hEuhTOOVx51/mO2CL+7tRrdFQ4D8=" - }, - "log_inclusion": [ - "jfNr9jOWGPAwb9oanLSYBabZXp5ShHREKQkDXxJ58Ts=", - "VigWWNMYkkC/tjfy+5vtTukZXZnppaYja73iLZoyD7c=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163164559404835, - "root_hash": "rPSTqha5qIxXu6quztMmbIFdA6JNSzcUt+SvWyfwoEw=", - "tree_size": 4, - "tree_revision": 4, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAABCCs9JOqFrmojFe7qq7O0yZsgV0Dok1LNxS35K9bJ/CgTBWDSS9fdW8jAAAAAAAAAAQAAA==", - "log_root_signature": "MEQCIDM6z/nW99h5K/uRJXb26Mhby7CIfXOWJjw8Uw57HLuhAiA0zeJKHaA0PKpi2gI1xVYVm2GFI3U0I1nmIuWqhLSbsw==" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=", - "vhBdOlNe4DDPlfxT3Bd1xabPmwVsu5CKflo21y6C8Ms=" - ] - } - }, - "leaf": { - "vrf_proof": "1AP1ak1iddu5JsgtPI+bH0DOnqV40H/10G5oa92euFHvrxacC0E3bf4Sx4c9l01939a+ggMbJW+bQtaVVfoW2gSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU", - "map_inclusion": { - "leaf": { - "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=", - "leaf_hash": "SQW0xHDpdSOozSCd4yT9rzz1fKmsJECsgcucG7F2ax0=", - "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgUnwYF+DKuiCzn5AtkpYfMrJLLhmHjQFOs5PN/b2TTDQ6lQEIARKQAQqHAQo1dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuRWNkc2FQdWJsaWNLZXkSTBIGCAMQAhgCGiD7FU52mGR+kS2Xs4XygLK9bDfV1XiGcZtcM9t0WUvWeSIgmsoZ6shH0XVzZaQU9lPYV3EsZYiiNax6wCRQ8d53LbQYAxABGAEgA0Ig47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUSRjBEAiBlnjoyOans9beKGWEzPPslAcXzzI2f2c6iMNbSvcxwbwIgKaJFc0fkIYLqmGXTcoifGz/SpWsxxG0VWmmcJuqm03k=" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "Rkta1z50aDLsEglMAtxm5hm1eskPnOzZaIoDVWuYRTo=", - "" - ] - }, - "committed": { - "key": "lOyD/kDFCHddGQaufT0A9Q==", - "data": "Ym9iLWtleTE=" - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": false - }, - { - "Desc": "bob2_setkeys", - "UserIDs": [ - "bob" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEg5FcjGwHeNaom4LLIVsDoAq78pdUAmPh4aO73uTsFxgkVg0kvddsCAwAAAAAAAAAEADASFgjchvfv9KXSwRUQ3Ib37/Sl0sEVGAESFgjK17Lv8qXSwRUQ1Lm98fal0sEVGAI=", - "signature": "MEUCIHWmtQTKyy50UJSRn5LwvDTbaCUxu0p81Ni9C3w9/wj8AiEAhab0XFv1oRLDYY6glFksjySMozOKs96TjQOv6lf/UX4=" - }, - "log_inclusion": [ - "rPSTqha5qIxXu6quztMmbIFdA6JNSzcUt+SvWyfwoEw=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163165060111318, - "root_hash": "LAc8Z7Ikc8riPIslJt9F5znG1UQ++Dkn17hCGMzDqfc=", - "tree_size": 5, - "tree_revision": 5, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAABSAsBzxnsiRzyuI8iyUm30XnOcbVRD74OSfXuEIYzMOp9xWDSS99TZvWAAAAAAAAAAUAAA==", - "log_root_signature": "MEYCIQC4mAyVpIIvN0RY6qnIKP1JzpWZ3Pu6KW7YyZvcJOjuVwIhAKfT+h+rqHo/89BcbDlr1WifsSJTqPK2Oyn3DuT5am7A" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=", - "vhBdOlNe4DDPlfxT3Bd1xabPmwVsu5CKflo21y6C8Ms=", - "M8kPsR06rZIcu6/1lIROQQF0CMbJyu9lax9B9R6YK8c=" - ] - } - }, - "leaf": { - "vrf_proof": "GLa+Gy7Oacf0fOcldzfdn8u22z30nk79AOodoUPGSo2xW3ch7yU415QSuJq81bicrnUOI0SHyE6DAJMeSoqWZgSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU", - "map_inclusion": { - "leaf": { - "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=", - "leaf_hash": "N6v5xDU33hGz222cGxckUks1jgMs/v5CQl9wUEhIVQU=", - "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgS3wBoYbDyPPn1y3yT4dSrxcsUDwCTY0nsXHyPptnH3I6lQEIARKQAQqHAQo1dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuRWNkc2FQdWJsaWNLZXkSTBIGCAMQAhgCGiD7FU52mGR+kS2Xs4XygLK9bDfV1XiGcZtcM9t0WUvWeSIgmsoZ6shH0XVzZaQU9lPYV3EsZYiiNax6wCRQ8d53LbQYAxABGAEgA0IgjKqSavCq1amOKbJKnkFkGDb6+bovPPwVkOU6pEwvIGQSRzBFAiEA8EyAUwNQjico7PZJHAJj9bENb1BFu++5FYwm2AFnkQUCIGCLB6s9C3t+O8hzmF9qhOCRKkUCdxIr79ZitbSdrHHn" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "Rkta1z50aDLsEglMAtxm5hm1eskPnOzZaIoDVWuYRTo=", - "" - ] - }, - "committed": { - "key": "TIb45cgNVG99ZcMZZwKITg==", - "data": "Ym9iLWtleTI=" - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": false - }, - { - "Desc": "bob3_setnewkeys", - "UserIDs": [ - "bob" - ], - "GetUserResp": { - "revision": { - "map_root": { - "map_root": { - "map_root": "AAEgDEDkZ5Tp6QdJEtRV64qx1/BDWrHSacJRpuqjquFRwHgVg0kvjXzLqgAAAAAAAAAFADASFgjchvfv9KXSwRUQ3Ib37/Sl0sEVGAESFgjUub3x9qXSwRUQ/ISMyfil0sEVGAI=", - "signature": "MEUCIF/M2SrwldR0o6165z08Z+9qO2VZbai3VNPu/bFFQYJHAiEA9xFhOEKVvCEbDIIgP8n1G21IZwXRDzPsQnj3zvMs1LM=" - }, - "log_inclusion": [ - "M8kPsR06rZIcu6/1lIROQQF0CMbJyu9lax9B9R6YK8c=", - "rPSTqha5qIxXu6quztMmbIFdA6JNSzcUt+SvWyfwoEw=" - ] - }, - "latest_log_root": { - "log_root": { - "timestamp_nanos": 1550163165559842130, - "root_hash": "yqUFUtrPFww3aKN+UqSpmY02Gjp0Dyq8PzXHynF6tEE=", - "tree_size": 6, - "tree_revision": 6, - "key_hint": "Wl0ihYmY00A=", - "log_root": "AAEAAAAAAAAABiDKpQVS2s8XDDdoo35SpKmZjTYaOnQPKrw/NcfKcXq0QRWDSS+bFuVSAAAAAAAAAAYAAA==", - "log_root_signature": "MEQCIAZ9y3+bWwHTN232J6i52pBpdCGNdvmTEgOVVkztLq7WAiAarGKYogkwbmvSSvLUoLLcnB2pGI3CayBfC0TkWCGtAw==" - }, - "log_consistency": [ - "bg5yr6Foqkjs6NdFXL3HqQqTBzy8hIsJ/a4JdgCH2jg=", - "vhBdOlNe4DDPlfxT3Bd1xabPmwVsu5CKflo21y6C8Ms=", - "a/zGHQv9tBdH+doHigIOUzgLqJlKMamdrgsOC59ah2o=" - ] - } - }, - "leaf": { - "vrf_proof": "4SwdCKyFF9PinfDMpOdaxQYU2RPOxGNBT61RkTZ/81aaozLD9UIt1zfau/0IJy+wQ5A9QSdAuNKE2MV2J4G7cwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU", - "map_inclusion": { - "leaf": { - "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=", - "leaf_hash": "Z8QYCCHOq9Wu/AGoO/nievbwKK1LDO+Ob3qcjprsbqE=", - "leaf_value": "CpEDGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgvpXp3sPS32ohOJNBIQi0hEPCxpaxv3ONUe26VKz0Tk06qAIIAhKQAQqHAQo1dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuRWNkc2FQdWJsaWNLZXkSTBIGCAMQAhgCGiD7FU52mGR+kS2Xs4XygLK9bDfV1XiGcZtcM9t0WUvWeSIgmsoZ6shH0XVzZaQU9lPYV3EsZYiiNax6wCRQ8d53LbQYAxABGAEgAxKQAQqHAQo1dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuRWNkc2FQdWJsaWNLZXkSTBIGCAMQAhgCGiAkoNtHi7KFIxdbzTHTY21hFQWUxBss4D60t78xvBnr1CIgkXRukcfdn/bWwunc+1FbMiO7yI0vvetbBCwOhXkfdZQYAxABGAIgA0IgSQjPfrKaUfNwT7SzUAlctcI2sRG/9MOqWc9FwP+ZSrISRjBEAiBFlOdB2SS19frUv7lXcwaMJmooaRP7l7JfRku+tSjVTQIgO7Ctz7gBqv7FEqrM04WfzmBUQU4bUUHNTzaxhZPgd9oSRzBFAiEAmdsQwMPZxuUUoYPgCAP+yWgUR8/5sR5Rfby+3JFjpcoCIB5shoI3OKMpO97q5VdCSuUOkWbra7tRehiFmQ/JAT12" - }, - "inclusion": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "Rkta1z50aDLsEglMAtxm5hm1eskPnOzZaIoDVWuYRTo=", - "" - ] - }, - "committed": { - "key": "ijmEOG0QwH9tYl3DhXBT5g==", - "data": "Ym9iLWtleTM=" - } - } - }, - "BatchListUserRevisionsResp": null, - "TrustNewLog": true - } -] \ No newline at end of file