diff --git a/core/api/gen.go b/core/api/gen.go
index 03939e20e..c3b83474e 100644
--- a/core/api/gen.go
+++ b/core/api/gen.go
@@ -18,5 +18,6 @@ package api
//go:generate protoc -I=. -I=$GOPATH/src/github.com/google/trillian/ -I=$GOPATH/src/github.com/googleapis/googleapis/ -I=$GOPATH/src/github.com/google/tink/proto --grpc-gateway_out=logtostderr=true:$GOPATH/src v1/keytransparency.proto v1/admin.proto v1/frontend.proto
//go:generate protoc -I=. -I=$GOPATH/src/github.com/google/trillian/ -I=$GOPATH/src/github.com/googleapis/googleapis/ -I=$GOPATH/src/github.com/google/tink/proto --doc_out=markdown,api.md:../../docs/ v1/keytransparency.proto v1/admin.proto v1/frontend.proto
+//go:generate protoc -I=. -I=$GOPATH/src/github.com/google/trillian/ -I=$GOPATH/src/github.com/googleapis/googleapis/ -I=$GOPATH/src/github.com/google/tink/proto --go_out=,plugins=grpc:$GOPATH/src transcript/transcript.proto
//go:generate protoc -I=. -I=$GOPATH/src/github.com/google/trillian/ -I=$GOPATH/src/github.com/googleapis/googleapis/ -I=$GOPATH/src/github.com/google/tink/proto --go_out=,plugins=grpc:$GOPATH/src monitor/v1/monitor.proto
//go:generate protoc -I=. -I=$GOPATH/src/github.com/google/trillian/ -I=$GOPATH/src/github.com/googleapis/googleapis/ -I=$GOPATH/src/github.com/google/tink/proto --grpc-gateway_out=logtostderr=true:$GOPATH/src monitor/v1/monitor.proto
diff --git a/core/api/transcript/transcript.proto b/core/api/transcript/transcript.proto
new file mode 100644
index 000000000..c1d851371
--- /dev/null
+++ b/core/api/transcript/transcript.proto
@@ -0,0 +1,54 @@
+// Copyright 2019 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.keytransparency.transcript;
+
+option go_package = "github.com/google/keytransparency/core/api/transcript_go_proto";
+
+import "v1/keytransparency.proto";
+import "v1/admin.proto";
+
+message Transcript {
+ string description = 1;
+ v1.Directory directory = 2;
+ repeated Unary rpcs = 3;
+}
+
+message Unary {
+ string full_method = 1;
+ string desc = 2;
+ v1.LogRootRequest last_verified_log_root = 3;
+ oneof req_resp_pair {
+ GetUser get_user = 4;
+ BatchGetUser batch_get_user = 5;
+ BatchListUserRevisions batch_list_user_revisions = 6;
+ }
+}
+
+message GetUser {
+ v1.GetUserRequest request = 1;
+ v1.GetUserResponse response = 2;
+}
+
+message BatchGetUser {
+ v1.BatchGetUserRequest request = 1;
+ v1.BatchGetUserResponse response = 2;
+}
+
+message BatchListUserRevisions {
+ v1.BatchListUserRevisionsRequest request = 1;
+ v1.BatchListUserRevisionsResponse response = 2;
+}
diff --git a/core/api/transcript_go_proto/transcript.pb.go b/core/api/transcript_go_proto/transcript.pb.go
new file mode 100644
index 000000000..e3de12ec8
--- /dev/null
+++ b/core/api/transcript_go_proto/transcript.pb.go
@@ -0,0 +1,384 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: transcript/transcript.proto
+
+package transcript_go_proto
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ keytransparency_go_proto "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type Transcript struct {
+ Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
+ Directory *keytransparency_go_proto.Directory `protobuf:"bytes,2,opt,name=directory,proto3" json:"directory,omitempty"`
+ Rpcs []*Unary `protobuf:"bytes,3,rep,name=rpcs,proto3" json:"rpcs,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Transcript) Reset() { *m = Transcript{} }
+func (m *Transcript) String() string { return proto.CompactTextString(m) }
+func (*Transcript) ProtoMessage() {}
+func (*Transcript) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5bd339d1227847d1, []int{0}
+}
+
+func (m *Transcript) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Transcript.Unmarshal(m, b)
+}
+func (m *Transcript) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Transcript.Marshal(b, m, deterministic)
+}
+func (m *Transcript) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Transcript.Merge(m, src)
+}
+func (m *Transcript) XXX_Size() int {
+ return xxx_messageInfo_Transcript.Size(m)
+}
+func (m *Transcript) XXX_DiscardUnknown() {
+ xxx_messageInfo_Transcript.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Transcript proto.InternalMessageInfo
+
+func (m *Transcript) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *Transcript) GetDirectory() *keytransparency_go_proto.Directory {
+ if m != nil {
+ return m.Directory
+ }
+ return nil
+}
+
+func (m *Transcript) GetRpcs() []*Unary {
+ if m != nil {
+ return m.Rpcs
+ }
+ return nil
+}
+
+type Unary struct {
+ FullMethod string `protobuf:"bytes,1,opt,name=full_method,json=fullMethod,proto3" json:"full_method,omitempty"`
+ Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"`
+ LastVerifiedLogRoot *keytransparency_go_proto.LogRootRequest `protobuf:"bytes,3,opt,name=last_verified_log_root,json=lastVerifiedLogRoot,proto3" json:"last_verified_log_root,omitempty"`
+ // Types that are valid to be assigned to ReqRespPair:
+ // *Unary_GetUser
+ // *Unary_BatchGetUser
+ // *Unary_BatchListUserRevisions
+ ReqRespPair isUnary_ReqRespPair `protobuf_oneof:"req_resp_pair"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *Unary) Reset() { *m = Unary{} }
+func (m *Unary) String() string { return proto.CompactTextString(m) }
+func (*Unary) ProtoMessage() {}
+func (*Unary) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5bd339d1227847d1, []int{1}
+}
+
+func (m *Unary) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_Unary.Unmarshal(m, b)
+}
+func (m *Unary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_Unary.Marshal(b, m, deterministic)
+}
+func (m *Unary) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Unary.Merge(m, src)
+}
+func (m *Unary) XXX_Size() int {
+ return xxx_messageInfo_Unary.Size(m)
+}
+func (m *Unary) XXX_DiscardUnknown() {
+ xxx_messageInfo_Unary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Unary proto.InternalMessageInfo
+
+func (m *Unary) GetFullMethod() string {
+ if m != nil {
+ return m.FullMethod
+ }
+ return ""
+}
+
+func (m *Unary) GetDesc() string {
+ if m != nil {
+ return m.Desc
+ }
+ return ""
+}
+
+func (m *Unary) GetLastVerifiedLogRoot() *keytransparency_go_proto.LogRootRequest {
+ if m != nil {
+ return m.LastVerifiedLogRoot
+ }
+ return nil
+}
+
+type isUnary_ReqRespPair interface {
+ isUnary_ReqRespPair()
+}
+
+type Unary_GetUser struct {
+ GetUser *GetUser `protobuf:"bytes,4,opt,name=get_user,json=getUser,proto3,oneof"`
+}
+
+type Unary_BatchGetUser struct {
+ BatchGetUser *BatchGetUser `protobuf:"bytes,5,opt,name=batch_get_user,json=batchGetUser,proto3,oneof"`
+}
+
+type Unary_BatchListUserRevisions struct {
+ BatchListUserRevisions *BatchListUserRevisions `protobuf:"bytes,6,opt,name=batch_list_user_revisions,json=batchListUserRevisions,proto3,oneof"`
+}
+
+func (*Unary_GetUser) isUnary_ReqRespPair() {}
+
+func (*Unary_BatchGetUser) isUnary_ReqRespPair() {}
+
+func (*Unary_BatchListUserRevisions) isUnary_ReqRespPair() {}
+
+func (m *Unary) GetReqRespPair() isUnary_ReqRespPair {
+ if m != nil {
+ return m.ReqRespPair
+ }
+ return nil
+}
+
+func (m *Unary) GetGetUser() *GetUser {
+ if x, ok := m.GetReqRespPair().(*Unary_GetUser); ok {
+ return x.GetUser
+ }
+ return nil
+}
+
+func (m *Unary) GetBatchGetUser() *BatchGetUser {
+ if x, ok := m.GetReqRespPair().(*Unary_BatchGetUser); ok {
+ return x.BatchGetUser
+ }
+ return nil
+}
+
+func (m *Unary) GetBatchListUserRevisions() *BatchListUserRevisions {
+ if x, ok := m.GetReqRespPair().(*Unary_BatchListUserRevisions); ok {
+ return x.BatchListUserRevisions
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Unary) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*Unary_GetUser)(nil),
+ (*Unary_BatchGetUser)(nil),
+ (*Unary_BatchListUserRevisions)(nil),
+ }
+}
+
+type GetUser struct {
+ Request *keytransparency_go_proto.GetUserRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
+ Response *keytransparency_go_proto.GetUserResponse `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetUser) Reset() { *m = GetUser{} }
+func (m *GetUser) String() string { return proto.CompactTextString(m) }
+func (*GetUser) ProtoMessage() {}
+func (*GetUser) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5bd339d1227847d1, []int{2}
+}
+
+func (m *GetUser) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetUser.Unmarshal(m, b)
+}
+func (m *GetUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetUser.Marshal(b, m, deterministic)
+}
+func (m *GetUser) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetUser.Merge(m, src)
+}
+func (m *GetUser) XXX_Size() int {
+ return xxx_messageInfo_GetUser.Size(m)
+}
+func (m *GetUser) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetUser.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUser proto.InternalMessageInfo
+
+func (m *GetUser) GetRequest() *keytransparency_go_proto.GetUserRequest {
+ if m != nil {
+ return m.Request
+ }
+ return nil
+}
+
+func (m *GetUser) GetResponse() *keytransparency_go_proto.GetUserResponse {
+ if m != nil {
+ return m.Response
+ }
+ return nil
+}
+
+type BatchGetUser struct {
+ Request *keytransparency_go_proto.BatchGetUserRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
+ Response *keytransparency_go_proto.BatchGetUserResponse `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BatchGetUser) Reset() { *m = BatchGetUser{} }
+func (m *BatchGetUser) String() string { return proto.CompactTextString(m) }
+func (*BatchGetUser) ProtoMessage() {}
+func (*BatchGetUser) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5bd339d1227847d1, []int{3}
+}
+
+func (m *BatchGetUser) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BatchGetUser.Unmarshal(m, b)
+}
+func (m *BatchGetUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BatchGetUser.Marshal(b, m, deterministic)
+}
+func (m *BatchGetUser) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BatchGetUser.Merge(m, src)
+}
+func (m *BatchGetUser) XXX_Size() int {
+ return xxx_messageInfo_BatchGetUser.Size(m)
+}
+func (m *BatchGetUser) XXX_DiscardUnknown() {
+ xxx_messageInfo_BatchGetUser.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchGetUser proto.InternalMessageInfo
+
+func (m *BatchGetUser) GetRequest() *keytransparency_go_proto.BatchGetUserRequest {
+ if m != nil {
+ return m.Request
+ }
+ return nil
+}
+
+func (m *BatchGetUser) GetResponse() *keytransparency_go_proto.BatchGetUserResponse {
+ if m != nil {
+ return m.Response
+ }
+ return nil
+}
+
+type BatchListUserRevisions struct {
+ Request *keytransparency_go_proto.BatchListUserRevisionsRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
+ Response *keytransparency_go_proto.BatchListUserRevisionsResponse `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *BatchListUserRevisions) Reset() { *m = BatchListUserRevisions{} }
+func (m *BatchListUserRevisions) String() string { return proto.CompactTextString(m) }
+func (*BatchListUserRevisions) ProtoMessage() {}
+func (*BatchListUserRevisions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5bd339d1227847d1, []int{4}
+}
+
+func (m *BatchListUserRevisions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_BatchListUserRevisions.Unmarshal(m, b)
+}
+func (m *BatchListUserRevisions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_BatchListUserRevisions.Marshal(b, m, deterministic)
+}
+func (m *BatchListUserRevisions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_BatchListUserRevisions.Merge(m, src)
+}
+func (m *BatchListUserRevisions) XXX_Size() int {
+ return xxx_messageInfo_BatchListUserRevisions.Size(m)
+}
+func (m *BatchListUserRevisions) XXX_DiscardUnknown() {
+ xxx_messageInfo_BatchListUserRevisions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchListUserRevisions proto.InternalMessageInfo
+
+func (m *BatchListUserRevisions) GetRequest() *keytransparency_go_proto.BatchListUserRevisionsRequest {
+ if m != nil {
+ return m.Request
+ }
+ return nil
+}
+
+func (m *BatchListUserRevisions) GetResponse() *keytransparency_go_proto.BatchListUserRevisionsResponse {
+ if m != nil {
+ return m.Response
+ }
+ return nil
+}
+
+func init() {
+ proto.RegisterType((*Transcript)(nil), "google.keytransparency.transcript.Transcript")
+ proto.RegisterType((*Unary)(nil), "google.keytransparency.transcript.Unary")
+ proto.RegisterType((*GetUser)(nil), "google.keytransparency.transcript.GetUser")
+ proto.RegisterType((*BatchGetUser)(nil), "google.keytransparency.transcript.BatchGetUser")
+ proto.RegisterType((*BatchListUserRevisions)(nil), "google.keytransparency.transcript.BatchListUserRevisions")
+}
+
+func init() { proto.RegisterFile("transcript/transcript.proto", fileDescriptor_5bd339d1227847d1) }
+
+var fileDescriptor_5bd339d1227847d1 = []byte{
+ // 514 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x6f, 0xd3, 0x30,
+ 0x14, 0xc7, 0x17, 0xba, 0xad, 0xeb, 0xeb, 0x18, 0x92, 0x91, 0xaa, 0x30, 0x0e, 0x94, 0x8a, 0x43,
+ 0xd9, 0x21, 0x51, 0xc7, 0x85, 0x49, 0x08, 0xa1, 0x82, 0x58, 0x25, 0xc6, 0xc5, 0xa2, 0x20, 0x71,
+ 0xc0, 0x4a, 0xd3, 0xb7, 0xd4, 0x22, 0x8d, 0x33, 0xdb, 0x8d, 0xd4, 0x2f, 0xc2, 0x37, 0xe0, 0xce,
+ 0x77, 0xe0, 0xc0, 0xd7, 0x42, 0x71, 0x92, 0x36, 0x4a, 0x46, 0x17, 0x71, 0xca, 0xb3, 0x9f, 0xff,
+ 0x3f, 0xff, 0x9f, 0x5f, 0xf4, 0xe0, 0xb1, 0x96, 0x5e, 0xa4, 0x7c, 0xc9, 0x63, 0xed, 0x6e, 0x43,
+ 0x27, 0x96, 0x42, 0x0b, 0xf2, 0x34, 0x10, 0x22, 0x08, 0xd1, 0xf9, 0x8e, 0x6b, 0x93, 0x8b, 0x3d,
+ 0x89, 0x91, 0xbf, 0x76, 0xb6, 0x07, 0x4f, 0xed, 0x64, 0xe4, 0x56, 0xd3, 0x46, 0x7c, 0x7a, 0x92,
+ 0x8c, 0x5c, 0x6f, 0xbe, 0xe4, 0x51, 0xb6, 0x1e, 0xfc, 0xb2, 0x00, 0x3e, 0x6d, 0x84, 0xa4, 0x0f,
+ 0xdd, 0x39, 0x66, 0x31, 0x17, 0x91, 0x6d, 0xf5, 0xad, 0x61, 0x87, 0x96, 0xb7, 0xc8, 0x18, 0x3a,
+ 0x73, 0x2e, 0xd1, 0xd7, 0x42, 0xae, 0xed, 0x7b, 0x7d, 0x6b, 0xd8, 0x3d, 0x7f, 0xe6, 0xfc, 0xc3,
+ 0x51, 0x32, 0x72, 0xde, 0x15, 0x67, 0xe9, 0x56, 0x46, 0x5e, 0xc1, 0xbe, 0x8c, 0x7d, 0x65, 0xb7,
+ 0xfa, 0xad, 0x61, 0xf7, 0x7c, 0xe8, 0xdc, 0x59, 0x90, 0x33, 0x8d, 0x3c, 0xb9, 0xa6, 0x46, 0x35,
+ 0xf8, 0xd3, 0x82, 0x03, 0xb3, 0x26, 0x4f, 0xa0, 0x7b, 0xbd, 0x0a, 0x43, 0xb6, 0x44, 0xbd, 0x10,
+ 0xf3, 0xdc, 0x2d, 0xa4, 0x5b, 0x1f, 0xcd, 0x0e, 0x21, 0xb0, 0x9f, 0x7a, 0x37, 0x3e, 0x3b, 0xd4,
+ 0xc4, 0xe4, 0x1b, 0xf4, 0x42, 0x4f, 0x69, 0x96, 0xa0, 0xe4, 0xd7, 0x1c, 0xe7, 0x2c, 0x14, 0x01,
+ 0x93, 0x42, 0x68, 0xbb, 0x65, 0xaa, 0x79, 0xbe, 0xa3, 0x9a, 0x2b, 0x11, 0x50, 0x21, 0x34, 0xc5,
+ 0x9b, 0x15, 0x2a, 0x4d, 0x1f, 0xa6, 0xa0, 0xcf, 0x39, 0x27, 0xcf, 0x91, 0x4b, 0x38, 0x0a, 0x50,
+ 0xb3, 0x95, 0x42, 0x69, 0xef, 0x1b, 0xe2, 0x59, 0x83, 0x02, 0x2f, 0x51, 0x4f, 0x15, 0xca, 0xc9,
+ 0x1e, 0x6d, 0x07, 0x59, 0x48, 0xbe, 0xc0, 0xc9, 0xcc, 0xd3, 0xfe, 0x82, 0x6d, 0x70, 0x07, 0x06,
+ 0xe7, 0x36, 0xc0, 0x8d, 0x53, 0xe1, 0x96, 0x79, 0x3c, 0x2b, 0xad, 0x49, 0x02, 0x8f, 0x32, 0x70,
+ 0xc8, 0x55, 0x46, 0x66, 0x12, 0x13, 0xae, 0xb8, 0x88, 0x94, 0x7d, 0x68, 0xee, 0xb8, 0x68, 0x7a,
+ 0xc7, 0x15, 0x57, 0x06, 0x4a, 0x0b, 0xc0, 0x64, 0x8f, 0xf6, 0x66, 0xb7, 0x66, 0xc6, 0x0f, 0xe0,
+ 0xbe, 0xc4, 0x1b, 0x26, 0x51, 0xc5, 0x2c, 0xf6, 0xb8, 0x1c, 0xfc, 0xb0, 0xa0, 0x5d, 0x98, 0x7a,
+ 0x0b, 0x6d, 0x99, 0x3d, 0xab, 0xe9, 0xe3, 0xee, 0x3e, 0xe4, 0xa2, 0xa2, 0x0f, 0x85, 0x92, 0xbc,
+ 0x87, 0xa3, 0x94, 0x2e, 0x22, 0x85, 0xf9, 0xbf, 0x79, 0xd6, 0x84, 0x92, 0x29, 0xe8, 0x46, 0x3b,
+ 0xf8, 0x69, 0xc1, 0x71, 0xf9, 0x09, 0xc9, 0xa4, 0xea, 0xce, 0xd9, 0xc1, 0x2d, 0x2b, 0x6b, 0x16,
+ 0x3f, 0xd4, 0x2c, 0xba, 0x8d, 0x51, 0x35, 0x9f, 0xbf, 0x2d, 0xe8, 0xdd, 0xde, 0x06, 0x42, 0xab,
+ 0x8e, 0x5f, 0xde, 0x75, 0x4d, 0x8d, 0x51, 0xf3, 0x3e, 0xad, 0x79, 0xbf, 0xf8, 0x0f, 0x68, 0xb5,
+ 0x8a, 0xf1, 0x9b, 0xaf, 0xaf, 0x03, 0xae, 0x17, 0xab, 0x99, 0xe3, 0x8b, 0xa5, 0x9b, 0x01, 0xab,
+ 0xe3, 0xcb, 0xf5, 0x85, 0x44, 0xd7, 0x8b, 0x79, 0x69, 0x1e, 0xb2, 0x40, 0x30, 0x33, 0xc5, 0x66,
+ 0x87, 0xe6, 0xf3, 0xe2, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x16, 0x72, 0xfd, 0x38, 0x05,
+ 0x00, 0x00,
+}
diff --git a/core/api/v1/keytransparency.proto b/core/api/v1/keytransparency.proto
index 2b3005c68..08ed79be6 100644
--- a/core/api/v1/keytransparency.proto
+++ b/core/api/v1/keytransparency.proto
@@ -338,6 +338,15 @@ message MapRoot {
repeated bytes log_inclusion = 2;
}
+// LogRootRequest contains the information needed to requetst and verify LogRoot.
+message LogRootRequest {
+ // root_hash is the log root hash.
+ bytes root_hash = 1;
+ // tree_size is the tree_size of the last log root the client
+ // verified.
+ int64 tree_size = 2;
+}
+
// LogRoot contains the latest log root and its consistency proof.
message LogRoot {
// log_root is the latest globally consistent log root.
diff --git a/core/api/v1/keytransparency_go_proto/keytransparency.pb.go b/core/api/v1/keytransparency_go_proto/keytransparency.pb.go
index 6a40b3a7f..a47debaa7 100644
--- a/core/api/v1/keytransparency_go_proto/keytransparency.pb.go
+++ b/core/api/v1/keytransparency_go_proto/keytransparency.pb.go
@@ -1551,6 +1551,57 @@ func (m *MapRoot) GetLogInclusion() [][]byte {
return nil
}
+// LogRootRequest contains the information needed to requetst and verify LogRoot.
+type LogRootRequest struct {
+ // root_hash is the log root hash.
+ RootHash []byte `protobuf:"bytes,1,opt,name=root_hash,json=rootHash,proto3" json:"root_hash,omitempty"`
+ // tree_size is the tree_size of the last log root the client
+ // verified.
+ TreeSize int64 `protobuf:"varint,2,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *LogRootRequest) Reset() { *m = LogRootRequest{} }
+func (m *LogRootRequest) String() string { return proto.CompactTextString(m) }
+func (*LogRootRequest) ProtoMessage() {}
+func (*LogRootRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_9e925e13aa3e8f7d, []int{26}
+}
+
+func (m *LogRootRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_LogRootRequest.Unmarshal(m, b)
+}
+func (m *LogRootRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_LogRootRequest.Marshal(b, m, deterministic)
+}
+func (m *LogRootRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_LogRootRequest.Merge(m, src)
+}
+func (m *LogRootRequest) XXX_Size() int {
+ return xxx_messageInfo_LogRootRequest.Size(m)
+}
+func (m *LogRootRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_LogRootRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogRootRequest proto.InternalMessageInfo
+
+func (m *LogRootRequest) GetRootHash() []byte {
+ if m != nil {
+ return m.RootHash
+ }
+ return nil
+}
+
+func (m *LogRootRequest) GetTreeSize() int64 {
+ if m != nil {
+ return m.TreeSize
+ }
+ return 0
+}
+
// LogRoot contains the latest log root and its consistency proof.
type LogRoot struct {
// log_root is the latest globally consistent log root.
@@ -1567,7 +1618,7 @@ func (m *LogRoot) Reset() { *m = LogRoot{} }
func (m *LogRoot) String() string { return proto.CompactTextString(m) }
func (*LogRoot) ProtoMessage() {}
func (*LogRoot) Descriptor() ([]byte, []int) {
- return fileDescriptor_9e925e13aa3e8f7d, []int{26}
+ return fileDescriptor_9e925e13aa3e8f7d, []int{27}
}
func (m *LogRoot) XXX_Unmarshal(b []byte) error {
@@ -1621,7 +1672,7 @@ func (m *Revision) Reset() { *m = Revision{} }
func (m *Revision) String() string { return proto.CompactTextString(m) }
func (*Revision) ProtoMessage() {}
func (*Revision) Descriptor() ([]byte, []int) {
- return fileDescriptor_9e925e13aa3e8f7d, []int{27}
+ return fileDescriptor_9e925e13aa3e8f7d, []int{28}
}
func (m *Revision) XXX_Unmarshal(b []byte) error {
@@ -1685,7 +1736,7 @@ func (m *ListMutationsRequest) Reset() { *m = ListMutationsRequest{} }
func (m *ListMutationsRequest) String() string { return proto.CompactTextString(m) }
func (*ListMutationsRequest) ProtoMessage() {}
func (*ListMutationsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_9e925e13aa3e8f7d, []int{28}
+ return fileDescriptor_9e925e13aa3e8f7d, []int{29}
}
func (m *ListMutationsRequest) XXX_Unmarshal(b []byte) error {
@@ -1750,7 +1801,7 @@ func (m *ListMutationsResponse) Reset() { *m = ListMutationsResponse{} }
func (m *ListMutationsResponse) String() string { return proto.CompactTextString(m) }
func (*ListMutationsResponse) ProtoMessage() {}
func (*ListMutationsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_9e925e13aa3e8f7d, []int{29}
+ return fileDescriptor_9e925e13aa3e8f7d, []int{30}
}
func (m *ListMutationsResponse) XXX_Unmarshal(b []byte) error {
@@ -1815,6 +1866,7 @@ func init() {
proto.RegisterType((*GetRevisionRequest)(nil), "google.keytransparency.v1.GetRevisionRequest")
proto.RegisterType((*GetLatestRevisionRequest)(nil), "google.keytransparency.v1.GetLatestRevisionRequest")
proto.RegisterType((*MapRoot)(nil), "google.keytransparency.v1.MapRoot")
+ proto.RegisterType((*LogRootRequest)(nil), "google.keytransparency.v1.LogRootRequest")
proto.RegisterType((*LogRoot)(nil), "google.keytransparency.v1.LogRoot")
proto.RegisterType((*Revision)(nil), "google.keytransparency.v1.Revision")
proto.RegisterType((*ListMutationsRequest)(nil), "google.keytransparency.v1.ListMutationsRequest")
@@ -1824,128 +1876,130 @@ func init() {
func init() { proto.RegisterFile("v1/keytransparency.proto", fileDescriptor_9e925e13aa3e8f7d) }
var fileDescriptor_9e925e13aa3e8f7d = []byte{
- // 1928 bytes of a gzipped FileDescriptorProto
+ // 1959 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x8f, 0x1b, 0x49,
- 0x15, 0x57, 0xf9, 0xdb, 0xcf, 0xf3, 0xe1, 0xa9, 0xcc, 0x26, 0x8e, 0x43, 0xa2, 0x50, 0x0b, 0x21,
- 0x64, 0xb5, 0xee, 0xcc, 0x64, 0x93, 0x9d, 0x0c, 0x84, 0x2c, 0x33, 0x9b, 0xc9, 0xce, 0x64, 0x46,
- 0x64, 0x7b, 0xb2, 0xb0, 0xe2, 0xd2, 0xea, 0xb1, 0x6b, 0x3c, 0xad, 0xd8, 0xdd, 0x9d, 0xae, 0xb2,
+ 0x15, 0x57, 0xf9, 0xdb, 0xcf, 0xf3, 0xe1, 0xa9, 0xcc, 0x26, 0x8e, 0x87, 0x44, 0xa1, 0x17, 0x42,
+ 0xc8, 0x6a, 0xdd, 0x99, 0xc9, 0x26, 0x3b, 0x19, 0x08, 0x59, 0x66, 0x36, 0x93, 0xcc, 0x64, 0x46,
+ 0x64, 0x7b, 0xb2, 0xb0, 0xe2, 0xd2, 0xea, 0xb1, 0x6b, 0xec, 0x56, 0xec, 0xee, 0x9e, 0xae, 0xb2,
0x15, 0x27, 0xca, 0x65, 0x39, 0x20, 0x01, 0x42, 0x42, 0xcb, 0x01, 0x71, 0xe0, 0x80, 0x10, 0x17,
0x24, 0x04, 0xdc, 0x60, 0x25, 0x04, 0x42, 0x5c, 0xb8, 0x21, 0xae, 0x1c, 0xf9, 0x43, 0x50, 0x7d,
- 0x74, 0xbb, 0xfd, 0xd5, 0xb6, 0x67, 0x27, 0x12, 0x9c, 0xec, 0xaa, 0xae, 0x7a, 0xf5, 0x7b, 0xef,
- 0xfd, 0xde, 0x7b, 0xfd, 0xaa, 0xa1, 0xd2, 0x5d, 0x33, 0x9e, 0xd2, 0x1e, 0x0f, 0x6c, 0x97, 0xf9,
- 0x76, 0x40, 0xdd, 0x7a, 0xaf, 0xe6, 0x07, 0x1e, 0xf7, 0xf0, 0xc5, 0xa6, 0xe7, 0x35, 0x5b, 0xb4,
- 0x36, 0xfc, 0xb4, 0xbb, 0x56, 0xfd, 0x82, 0x7a, 0x64, 0xd8, 0xbe, 0x63, 0xd8, 0xae, 0xeb, 0x71,
- 0x9b, 0x3b, 0x9e, 0xcb, 0xd4, 0xc6, 0xea, 0x25, 0xfd, 0x54, 0x8e, 0x8e, 0x3a, 0xc7, 0x06, 0x6d,
- 0xfb, 0x5c, 0x4b, 0xad, 0x2e, 0xf1, 0xc0, 0x69, 0xb5, 0x1c, 0xdb, 0xd5, 0xe3, 0xf3, 0xe1, 0xd8,
- 0x6a, 0xdb, 0xbe, 0x65, 0xfb, 0x4e, 0xb8, 0xae, 0xbb, 0x66, 0xd8, 0x8d, 0xb6, 0xa3, 0xd7, 0x91,
- 0x35, 0x28, 0x6e, 0x7b, 0xed, 0xb6, 0xc3, 0x39, 0x6d, 0xe0, 0x32, 0xa4, 0x9f, 0xd2, 0x5e, 0x05,
- 0x5d, 0x45, 0xd7, 0x17, 0x4c, 0xf1, 0x17, 0x63, 0xc8, 0x34, 0x6c, 0x6e, 0x57, 0x52, 0x72, 0x4a,
- 0xfe, 0x27, 0xbf, 0x45, 0x50, 0x7a, 0xe0, 0xf2, 0xa0, 0xf7, 0x91, 0xdf, 0xb0, 0x39, 0xc5, 0x17,
- 0x20, 0xdf, 0x61, 0x34, 0xb0, 0x9c, 0x86, 0xdc, 0x59, 0x34, 0x73, 0x62, 0xb8, 0xdb, 0xc0, 0x5b,
- 0x50, 0x68, 0x77, 0x94, 0x0e, 0x52, 0x40, 0x69, 0xfd, 0x5a, 0x6d, 0xa2, 0xf2, 0xb5, 0x43, 0xa7,
- 0xe9, 0xd2, 0x86, 0x14, 0x6c, 0x46, 0xfb, 0xf0, 0x16, 0x14, 0xeb, 0x21, 0xbe, 0x4a, 0x5a, 0x0a,
- 0xf9, 0x52, 0x82, 0x90, 0x48, 0x17, 0xb3, 0xbf, 0x8d, 0xfc, 0x0a, 0x41, 0x56, 0xca, 0xc5, 0xab,
- 0x90, 0x75, 0xdc, 0x06, 0x7d, 0x2e, 0x25, 0x2d, 0x98, 0x6a, 0x80, 0xaf, 0x00, 0xa8, 0xc5, 0x6d,
- 0xea, 0xf2, 0x4a, 0x4e, 0x3e, 0x8a, 0xcd, 0xe0, 0xb7, 0x60, 0xc5, 0xee, 0xf0, 0x13, 0x2f, 0x70,
- 0x5e, 0xd0, 0x86, 0xf5, 0x94, 0xf6, 0x18, 0xe5, 0x95, 0xa2, 0x5c, 0x56, 0xee, 0x3f, 0x78, 0x24,
- 0xe7, 0x71, 0x15, 0x0a, 0x7e, 0x40, 0xbb, 0x8e, 0xd7, 0x61, 0x95, 0x82, 0x5c, 0x13, 0x8d, 0xf7,
- 0x32, 0x05, 0x54, 0x4e, 0xed, 0x65, 0x0a, 0xa9, 0x72, 0x7a, 0x2f, 0x53, 0xc8, 0x94, 0xb3, 0x7b,
- 0x99, 0x42, 0xb6, 0x9c, 0xdb, 0xcb, 0x14, 0xf2, 0xe5, 0x02, 0xd9, 0x86, 0x52, 0xcc, 0x06, 0x02,
- 0x2b, 0x15, 0x7f, 0xb4, 0x3b, 0xd4, 0x40, 0x60, 0x65, 0x4e, 0xd3, 0xb5, 0x79, 0x27, 0xa0, 0xac,
- 0x92, 0xba, 0x9a, 0x16, 0x58, 0xfb, 0x33, 0xe4, 0xc7, 0x08, 0x16, 0x0f, 0xb4, 0xf1, 0x1e, 0x07,
- 0x9e, 0x77, 0x3c, 0xe0, 0x05, 0x74, 0x4a, 0x2f, 0xdc, 0x05, 0x68, 0x51, 0xfb, 0xd8, 0xf2, 0x85,
- 0x44, 0xed, 0xcb, 0x6a, 0x2d, 0xa2, 0xdc, 0x81, 0xed, 0xef, 0x53, 0xfb, 0x78, 0xd7, 0xad, 0xb7,
- 0x3a, 0xcc, 0xf1, 0x5c, 0xb3, 0x28, 0x56, 0xcb, 0xe3, 0xc9, 0xb7, 0x60, 0xe9, 0xc0, 0xf6, 0x7d,
- 0x1a, 0x1c, 0x50, 0x6e, 0x0b, 0xfe, 0xe0, 0x7b, 0x70, 0xe9, 0xc4, 0x69, 0x9e, 0x50, 0xc6, 0xad,
- 0xe3, 0x4e, 0xab, 0xd5, 0xb3, 0xea, 0x5e, 0xdb, 0x6f, 0x51, 0x4e, 0x1b, 0x16, 0xa3, 0xcf, 0x24,
- 0xc6, 0xb4, 0x59, 0xd1, 0x4b, 0x76, 0xc4, 0x8a, 0xed, 0x70, 0xc1, 0x21, 0x7d, 0x46, 0xbe, 0x87,
- 0x60, 0xe9, 0x21, 0xe5, 0x1f, 0x31, 0x1a, 0x98, 0xf4, 0x59, 0x87, 0x32, 0x8e, 0xbf, 0x08, 0x0b,
- 0x0d, 0x27, 0xa0, 0x75, 0xee, 0x05, 0xbd, 0x3e, 0x0d, 0x4b, 0xd1, 0xdc, 0x6e, 0x23, 0x4e, 0xd2,
- 0xd4, 0x00, 0x49, 0x6f, 0xc3, 0x85, 0x96, 0xcd, 0xb8, 0xd5, 0xa5, 0x81, 0x73, 0xec, 0xd0, 0x86,
- 0xc5, 0x03, 0x4a, 0x2d, 0xe6, 0xbc, 0xa0, 0x92, 0x24, 0x69, 0x73, 0x55, 0x3c, 0xfe, 0xb6, 0x7e,
- 0xfa, 0x24, 0xa0, 0xf4, 0xd0, 0x79, 0x41, 0xc9, 0x6f, 0x10, 0xe4, 0xb5, 0xda, 0xf8, 0x12, 0x14,
- 0xbb, 0x41, 0x68, 0x1c, 0xe5, 0xad, 0x42, 0x37, 0x50, 0xfa, 0xe3, 0xfb, 0xb0, 0x28, 0x22, 0xd0,
- 0x09, 0x6d, 0x33, 0x83, 0xf5, 0x16, 0xda, 0xb6, 0x1f, 0x8d, 0xce, 0x24, 0x02, 0x7e, 0x80, 0x60,
- 0x39, 0xb2, 0x19, 0xf3, 0x3d, 0x97, 0x51, 0x7c, 0x1f, 0x0a, 0x82, 0x97, 0xac, 0xcf, 0x8b, 0x37,
- 0x13, 0xc4, 0x9a, 0x7a, 0xa9, 0x19, 0x6d, 0xc2, 0x77, 0x20, 0x23, 0xdc, 0xac, 0x15, 0x22, 0x09,
- 0x9b, 0xb5, 0x86, 0xa6, 0x5c, 0x2f, 0xc0, 0x9c, 0xdb, 0xb2, 0x79, 0xfd, 0x64, 0x7e, 0x2f, 0x5e,
- 0x84, 0x82, 0xf6, 0xa2, 0xe2, 0x7e, 0xd1, 0xcc, 0x2b, 0x37, 0xb2, 0xd3, 0xfa, 0xf1, 0x63, 0xa8,
- 0xc4, 0xb1, 0xec, 0x8a, 0x84, 0x70, 0x26, 0x80, 0xc8, 0xef, 0x10, 0x5c, 0x1c, 0x23, 0x5a, 0x5b,
- 0xff, 0x63, 0xc8, 0x49, 0xbe, 0xb0, 0x0a, 0xba, 0x9a, 0xbe, 0x5e, 0x5a, 0x7f, 0x2f, 0xc1, 0x7c,
- 0x13, 0xa5, 0xd4, 0x24, 0xc5, 0x98, 0x8a, 0x56, 0x2d, 0xaf, 0x7a, 0x17, 0x4a, 0xb1, 0xe9, 0x78,
- 0x4e, 0x2f, 0xaa, 0x9c, 0xbe, 0x0a, 0xd9, 0xae, 0xdd, 0xea, 0x50, 0x9d, 0xd4, 0xd5, 0x60, 0x33,
- 0xb5, 0x81, 0xc8, 0x67, 0x29, 0x58, 0x1d, 0xf4, 0xcc, 0x59, 0x71, 0xe5, 0x39, 0xbc, 0x21, 0xa2,
- 0xa0, 0x45, 0xed, 0x2e, 0x65, 0xd6, 0x51, 0xcf, 0xea, 0x07, 0xa3, 0xd0, 0x7e, 0x67, 0x46, 0xed,
- 0x23, 0xc5, 0x15, 0xa3, 0xba, 0x94, 0x6d, 0xf5, 0xa4, 0x55, 0x74, 0xc6, 0x5a, 0x69, 0x0f, 0xcf,
- 0x57, 0x4f, 0xe0, 0xfc, 0xf8, 0xc5, 0x63, 0x2c, 0xb3, 0x11, 0xb7, 0xcc, 0x6c, 0x94, 0x8e, 0x59,
- 0xef, 0xef, 0x08, 0x2e, 0xec, 0x3b, 0x8c, 0x4b, 0xe9, 0x1f, 0x38, 0x4c, 0x50, 0x64, 0x12, 0x95,
- 0x72, 0x89, 0x19, 0x6a, 0xb0, 0x8c, 0xae, 0x42, 0x96, 0x71, 0x3b, 0xe0, 0x12, 0x55, 0xda, 0x54,
- 0x03, 0x91, 0x74, 0x7c, 0xbb, 0x19, 0x63, 0x78, 0xd6, 0x2c, 0x88, 0x09, 0xc1, 0xea, 0xa4, 0x60,
- 0xc8, 0x4e, 0x0e, 0x06, 0x55, 0x93, 0xc8, 0x2b, 0xa8, 0x8c, 0xaa, 0xa1, 0x89, 0xb0, 0x05, 0x39,
- 0xa9, 0x70, 0x48, 0xdb, 0x1b, 0x09, 0x26, 0x1a, 0xf2, 0x99, 0xa9, 0x77, 0xe2, 0xcb, 0x00, 0x2e,
- 0x7d, 0xce, 0xad, 0xb8, 0x52, 0x45, 0x31, 0x73, 0x28, 0x26, 0xc8, 0xa7, 0x29, 0x75, 0xbe, 0xda,
- 0xab, 0xf8, 0xc3, 0xce, 0x22, 0xd3, 0x7f, 0x19, 0x96, 0xe4, 0x91, 0x56, 0x44, 0x65, 0x95, 0x18,
- 0x16, 0xe5, 0x6c, 0x78, 0x94, 0x38, 0x82, 0xba, 0x8d, 0xfe, 0xa2, 0x8c, 0x5c, 0x54, 0xa2, 0x6e,
- 0x23, 0x5a, 0x32, 0x60, 0xfb, 0xec, 0x90, 0xed, 0x2f, 0x03, 0xc8, 0x87, 0xdc, 0x7b, 0x4a, 0x5d,
- 0xed, 0x68, 0xb9, 0xfc, 0x89, 0x98, 0x48, 0x72, 0x4d, 0x3e, 0x21, 0x4f, 0xfd, 0x10, 0x41, 0xe9,
- 0xc0, 0xf6, 0x23, 0x08, 0xf7, 0xa0, 0x20, 0x02, 0x2a, 0xf0, 0x3c, 0xae, 0x23, 0x72, 0x0a, 0x5b,
- 0x4d, 0xcf, 0xe3, 0x66, 0xbe, 0xad, 0xfe, 0x84, 0xdb, 0xe7, 0xcc, 0xdf, 0x79, 0x15, 0x5e, 0xc7,
- 0xe4, 0xdf, 0x08, 0x2e, 0x8e, 0xf1, 0x91, 0x26, 0xc9, 0x1e, 0x2c, 0xb7, 0x6c, 0x2e, 0xea, 0x7b,
- 0xcb, 0x6b, 0xce, 0x0a, 0x71, 0xdf, 0x6b, 0x4a, 0x88, 0x8b, 0x6a, 0xab, 0x1e, 0xe2, 0x47, 0xaa,
- 0x7c, 0x86, 0xde, 0x60, 0x3a, 0x61, 0x5c, 0x9b, 0xa2, 0x6c, 0x98, 0x81, 0x44, 0x29, 0x8d, 0x00,
- 0xe2, 0x6b, 0xb0, 0x2c, 0x99, 0x17, 0xf3, 0x4f, 0x5a, 0xfa, 0x67, 0x51, 0x4c, 0x3f, 0x0e, 0x7d,
- 0x44, 0x7e, 0x9e, 0x82, 0xcb, 0x32, 0xed, 0x7c, 0x1e, 0x1e, 0x26, 0xd4, 0xaa, 0xff, 0x6b, 0x26,
- 0xfe, 0x3e, 0x05, 0x65, 0x69, 0x9c, 0x33, 0xa4, 0x23, 0x4f, 0x2e, 0x0f, 0x5b, 0xd3, 0xca, 0x43,
- 0x0c, 0xca, 0xff, 0x64, 0x69, 0xf8, 0x33, 0x82, 0x2b, 0x93, 0x08, 0xf5, 0x1a, 0x82, 0xe6, 0xf1,
- 0xf8, 0xa0, 0x79, 0x6b, 0x0e, 0x33, 0x0e, 0x46, 0x0e, 0xf9, 0x29, 0x02, 0xac, 0xda, 0x3d, 0x65,
- 0xcd, 0x09, 0x61, 0x90, 0x1d, 0x0d, 0x83, 0x5d, 0x41, 0x62, 0x1e, 0xf4, 0xac, 0x8e, 0xdc, 0x2e,
- 0x49, 0x9c, 0x1c, 0xbf, 0xb1, 0xde, 0x52, 0x90, 0x3d, 0x1a, 0x0c, 0xb5, 0x4f, 0xe9, 0x72, 0x86,
- 0x7c, 0x82, 0xe0, 0x92, 0x44, 0xfe, 0x61, 0x87, 0x76, 0xa8, 0x30, 0xac, 0xde, 0x37, 0x7b, 0x98,
- 0xbe, 0x07, 0x79, 0x85, 0x6c, 0x96, 0xd4, 0x12, 0x87, 0x16, 0x6e, 0x13, 0xef, 0xb3, 0xf8, 0x21,
- 0x8d, 0xc2, 0x76, 0x0e, 0xdb, 0x54, 0x87, 0x5e, 0xab, 0xd2, 0xb1, 0x37, 0xa6, 0x84, 0xe8, 0x4c,
- 0x25, 0x44, 0x27, 0x87, 0xca, 0x43, 0xca, 0xf7, 0x25, 0x1d, 0xa6, 0x21, 0x1a, 0x63, 0x8d, 0x53,
- 0x9e, 0x7a, 0x24, 0x9b, 0x21, 0xc9, 0xbd, 0xf5, 0x91, 0x4c, 0x70, 0xa1, 0xdf, 0xea, 0xa8, 0xee,
- 0x72, 0x24, 0xfc, 0xdf, 0x84, 0x45, 0x41, 0xfa, 0x78, 0x8f, 0x24, 0xfa, 0xda, 0x85, 0x96, 0xd7,
- 0x8c, 0xfa, 0x20, 0x72, 0x0c, 0xf9, 0x90, 0xdf, 0xeb, 0x50, 0x18, 0x0a, 0x92, 0x91, 0x33, 0xc2,
- 0xc8, 0xc8, 0xb7, 0xf4, 0x9e, 0xaf, 0xc0, 0xb2, 0xd8, 0x53, 0xf7, 0x5c, 0xe6, 0x30, 0x2e, 0x1c,
- 0xaa, 0x4f, 0x59, 0x6a, 0x79, 0xcd, 0xed, 0xfe, 0x2c, 0xf9, 0x07, 0x82, 0x42, 0x3c, 0x05, 0x4f,
- 0x33, 0x59, 0x3c, 0xf5, 0x65, 0xe7, 0x4f, 0x7d, 0x63, 0xe2, 0x3e, 0x77, 0xca, 0xb8, 0x8f, 0x87,
- 0x86, 0x7e, 0x97, 0xfb, 0x09, 0x82, 0x55, 0x91, 0x73, 0xc2, 0x2b, 0x01, 0x76, 0x46, 0xec, 0x1c,
- 0x2c, 0x2d, 0xe9, 0xe1, 0xd2, 0x32, 0x50, 0x96, 0x32, 0x83, 0x65, 0x89, 0x7c, 0x1f, 0xc1, 0x1b,
- 0x43, 0x98, 0x74, 0x0e, 0xdc, 0x81, 0x62, 0x78, 0xe5, 0xc0, 0x2a, 0x39, 0x19, 0x8d, 0xd7, 0x93,
- 0x6c, 0x19, 0xbf, 0xe7, 0x30, 0xfb, 0x5b, 0xc7, 0xd5, 0xf9, 0xfc, 0x98, 0x3a, 0xbf, 0xfe, 0xd7,
- 0x73, 0xb0, 0xfc, 0x88, 0xf6, 0x9e, 0xc4, 0xe4, 0xe2, 0x1f, 0x21, 0x58, 0x78, 0x48, 0xf9, 0xfb,
- 0xa1, 0x21, 0x70, 0x2d, 0xf9, 0x15, 0x37, 0x5a, 0xa8, 0x2d, 0x5b, 0x4d, 0x6a, 0xce, 0xa3, 0xc5,
- 0xe4, 0xda, 0x27, 0xff, 0xfa, 0xcf, 0xa7, 0xa9, 0xab, 0xf8, 0x8a, 0xd1, 0x5d, 0x33, 0x42, 0xab,
- 0x3b, 0x94, 0x19, 0x2f, 0xe3, 0x6e, 0x79, 0x85, 0x7f, 0x81, 0xa0, 0x14, 0x4b, 0x2e, 0xf8, 0xed,
- 0x64, 0x34, 0x43, 0x21, 0x5f, 0x9d, 0xa5, 0x4d, 0x23, 0x5f, 0x93, 0x58, 0x6e, 0xe3, 0x5b, 0xc9,
- 0x58, 0x8c, 0xa8, 0x9e, 0x18, 0x2f, 0xc3, 0xbf, 0xaf, 0xf0, 0xaf, 0x11, 0xac, 0x8c, 0x64, 0x1c,
- 0x7c, 0x2b, 0x19, 0xe6, 0xd8, 0xfc, 0x34, 0x1b, 0xd8, 0x77, 0x25, 0xd8, 0x35, 0x6c, 0xcc, 0x0a,
- 0x76, 0x53, 0xc5, 0x08, 0xfe, 0xa5, 0x02, 0x1a, 0x0a, 0x3a, 0xe4, 0x01, 0xb5, 0xdb, 0xaf, 0xc5,
- 0x9e, 0xf3, 0x43, 0x64, 0x12, 0xcc, 0x4d, 0x84, 0xff, 0x88, 0x60, 0x71, 0x20, 0x36, 0xb0, 0x91,
- 0x94, 0x06, 0xc6, 0x44, 0x76, 0xf5, 0xe6, 0xec, 0x1b, 0x54, 0xd8, 0x91, 0x07, 0x12, 0xef, 0x7d,
- 0x7c, 0xef, 0x14, 0xfe, 0x37, 0xfa, 0x51, 0xf7, 0x17, 0x04, 0xe7, 0x06, 0x0e, 0xd0, 0x26, 0x9e,
- 0x5b, 0x83, 0x99, 0x63, 0x9e, 0xec, 0x4b, 0xe4, 0x3b, 0xf8, 0xfd, 0xcf, 0x85, 0xbc, 0x6f, 0xfe,
- 0x9f, 0x21, 0xc8, 0xeb, 0xb6, 0x15, 0x7f, 0x75, 0x96, 0xd6, 0x56, 0x01, 0x9e, 0xa3, 0x0b, 0x26,
- 0x77, 0x24, 0xe4, 0x9b, 0xb8, 0x36, 0x05, 0xb2, 0x78, 0x03, 0x66, 0xc6, 0x4b, 0xfd, 0x22, 0x2c,
- 0xe3, 0x6c, 0x21, 0x7e, 0x15, 0x92, 0x98, 0x97, 0xc6, 0x5c, 0xaf, 0x55, 0x8d, 0x39, 0xef, 0x58,
- 0xc8, 0x6d, 0x89, 0xd4, 0xc0, 0x6f, 0xcf, 0x82, 0x74, 0xf3, 0x48, 0x8b, 0xc0, 0x7f, 0x42, 0xb0,
- 0x32, 0x72, 0x63, 0x95, 0x98, 0x10, 0x26, 0x5d, 0xc0, 0x55, 0xdf, 0x39, 0xcd, 0xa5, 0x18, 0xd9,
- 0x94, 0xb8, 0xdf, 0xc1, 0xeb, 0x73, 0xe1, 0x56, 0x30, 0x3f, 0x43, 0x50, 0x1e, 0xbe, 0xfc, 0xc0,
- 0xeb, 0x53, 0x08, 0x3c, 0xe6, 0xc2, 0xa7, 0x7a, 0x6b, 0xae, 0x3d, 0x1a, 0xf9, 0x37, 0x24, 0xf2,
- 0x0d, 0x7c, 0x67, 0x3e, 0x6e, 0x18, 0x27, 0x1a, 0xe8, 0xdf, 0x10, 0xac, 0x8c, 0x74, 0x18, 0x78,
- 0x1a, 0x94, 0x71, 0x0d, 0x6e, 0xa2, 0xe9, 0x27, 0x36, 0x31, 0x64, 0x5b, 0x2a, 0x70, 0x8f, 0x6c,
- 0xcc, 0xa9, 0x40, 0x3f, 0x13, 0xa2, 0x1b, 0xf8, 0x9f, 0x08, 0xce, 0x8f, 0x6f, 0x96, 0xf0, 0xc6,
- 0x34, 0x42, 0x4c, 0xd4, 0xe7, 0xee, 0x29, 0x76, 0x6a, 0xa5, 0xb6, 0xa4, 0x52, 0x5f, 0x27, 0xef,
- 0xce, 0xce, 0x27, 0x21, 0xcc, 0x8c, 0xeb, 0xf4, 0x07, 0x04, 0x65, 0xd9, 0xa3, 0xc4, 0x3f, 0x9c,
- 0x25, 0xd5, 0x9e, 0xd1, 0x66, 0xab, 0x7a, 0x3e, 0x5c, 0x1e, 0x7e, 0x00, 0xac, 0x3d, 0x68, 0xfb,
- 0xbc, 0x47, 0xbe, 0x23, 0xf1, 0x7d, 0x48, 0xbe, 0x39, 0x9b, 0xd1, 0xe3, 0xdd, 0x58, 0x2d, 0xf4,
- 0xc0, 0xe6, 0x33, 0x01, 0x6e, 0x73, 0xa0, 0x55, 0x13, 0x15, 0x73, 0x75, 0x5c, 0x77, 0x85, 0xef,
- 0x4c, 0x33, 0xe6, 0xf8, 0x76, 0x6c, 0xa2, 0x06, 0x3a, 0x62, 0xc9, 0x94, 0x82, 0xa9, 0x6c, 0xab,
- 0x64, 0x4b, 0xb9, 0x9b, 0xe8, 0xc6, 0xd6, 0x07, 0xdf, 0xdd, 0x69, 0x3a, 0xfc, 0xa4, 0x73, 0x54,
- 0xab, 0x7b, 0x6d, 0x43, 0x7f, 0x22, 0x1d, 0xc2, 0x65, 0xd4, 0xbd, 0x40, 0x7d, 0x55, 0x1d, 0xfd,
- 0x2a, 0x6b, 0x35, 0x3d, 0x4b, 0xc1, 0xc9, 0xc9, 0x9f, 0x5b, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff,
- 0x6e, 0x33, 0x4d, 0x3e, 0xbb, 0x1d, 0x00, 0x00,
+ 0x74, 0xbb, 0x6d, 0xb7, 0xdb, 0xf6, 0xec, 0xac, 0x04, 0x27, 0xbb, 0xaa, 0xeb, 0xbd, 0xfe, 0xbd,
+ 0xf7, 0x7e, 0xef, 0x55, 0xbd, 0x6a, 0xa8, 0xf4, 0xd6, 0xf5, 0xe7, 0xa4, 0xcf, 0x7c, 0xcb, 0xa1,
+ 0x9e, 0xe5, 0x13, 0xa7, 0xde, 0xaf, 0x79, 0xbe, 0xcb, 0x5c, 0x7c, 0xb9, 0xe9, 0xba, 0xcd, 0x36,
+ 0xa9, 0x8d, 0x3e, 0xed, 0xad, 0x57, 0xbf, 0x20, 0x1f, 0xe9, 0x96, 0x67, 0xeb, 0x96, 0xe3, 0xb8,
+ 0xcc, 0x62, 0xb6, 0xeb, 0x50, 0x29, 0x58, 0x5d, 0x53, 0x4f, 0xc5, 0xe8, 0xb8, 0x7b, 0xa2, 0x93,
+ 0x8e, 0xc7, 0x94, 0xd6, 0xea, 0x12, 0xf3, 0xed, 0x76, 0xdb, 0xb6, 0x1c, 0x35, 0xbe, 0x18, 0x8c,
+ 0xcd, 0x8e, 0xe5, 0x99, 0x96, 0x67, 0x07, 0xeb, 0x7a, 0xeb, 0xba, 0xd5, 0xe8, 0xd8, 0x6a, 0x9d,
+ 0xb6, 0x0e, 0xc5, 0x1d, 0xb7, 0xd3, 0xb1, 0x19, 0x23, 0x0d, 0x5c, 0x86, 0xf4, 0x73, 0xd2, 0xaf,
+ 0xa0, 0x6b, 0xe8, 0xc6, 0x82, 0xc1, 0xff, 0x62, 0x0c, 0x99, 0x86, 0xc5, 0xac, 0x4a, 0x4a, 0x4c,
+ 0x89, 0xff, 0xda, 0x6f, 0x11, 0x94, 0x1e, 0x3a, 0xcc, 0xef, 0x7f, 0xe8, 0x35, 0x2c, 0x46, 0xf0,
+ 0x25, 0xc8, 0x77, 0x29, 0xf1, 0x4d, 0xbb, 0x21, 0x24, 0x8b, 0x46, 0x8e, 0x0f, 0xf7, 0x1a, 0x78,
+ 0x1b, 0x0a, 0x9d, 0xae, 0xb4, 0x41, 0x28, 0x28, 0x6d, 0x5c, 0xaf, 0x4d, 0x34, 0xbe, 0x76, 0x64,
+ 0x37, 0x1d, 0xd2, 0x10, 0x8a, 0x8d, 0x50, 0x0e, 0x6f, 0x43, 0xb1, 0x1e, 0xe0, 0xab, 0xa4, 0x85,
+ 0x92, 0x2f, 0x25, 0x28, 0x09, 0x6d, 0x31, 0x06, 0x62, 0xda, 0xaf, 0x10, 0x64, 0x85, 0x5e, 0xbc,
+ 0x0a, 0x59, 0xdb, 0x69, 0x90, 0x17, 0x42, 0xd3, 0x82, 0x21, 0x07, 0xf8, 0x2a, 0x80, 0x5c, 0xdc,
+ 0x21, 0x0e, 0xab, 0xe4, 0xc4, 0xa3, 0xc8, 0x0c, 0x7e, 0x0b, 0x56, 0xac, 0x2e, 0x6b, 0xb9, 0xbe,
+ 0xfd, 0x92, 0x34, 0xcc, 0xe7, 0xa4, 0x4f, 0x09, 0xab, 0x14, 0xc5, 0xb2, 0xf2, 0xe0, 0xc1, 0x13,
+ 0x31, 0x8f, 0xab, 0x50, 0xf0, 0x7c, 0xd2, 0xb3, 0xdd, 0x2e, 0xad, 0x14, 0xc4, 0x9a, 0x70, 0xbc,
+ 0x9f, 0x29, 0xa0, 0x72, 0x6a, 0x3f, 0x53, 0x48, 0x95, 0xd3, 0xfb, 0x99, 0x42, 0xa6, 0x9c, 0xdd,
+ 0xcf, 0x14, 0xb2, 0xe5, 0xdc, 0x7e, 0xa6, 0x90, 0x2f, 0x17, 0xb4, 0x1d, 0x28, 0x45, 0x7c, 0xc0,
+ 0xb1, 0x12, 0xfe, 0x47, 0x85, 0x43, 0x0e, 0x38, 0x56, 0x6a, 0x37, 0x1d, 0x8b, 0x75, 0x7d, 0x42,
+ 0x2b, 0xa9, 0x6b, 0x69, 0x8e, 0x75, 0x30, 0xa3, 0xfd, 0x18, 0xc1, 0xe2, 0xa1, 0x72, 0xde, 0x53,
+ 0xdf, 0x75, 0x4f, 0x86, 0xa2, 0x80, 0xce, 0x18, 0x85, 0x7b, 0x00, 0x6d, 0x62, 0x9d, 0x98, 0x1e,
+ 0xd7, 0xa8, 0x62, 0x59, 0xad, 0x85, 0x94, 0x3b, 0xb4, 0xbc, 0x03, 0x62, 0x9d, 0xec, 0x39, 0xf5,
+ 0x76, 0x97, 0xda, 0xae, 0x63, 0x14, 0xf9, 0x6a, 0xf1, 0x7a, 0xed, 0x5b, 0xb0, 0x74, 0x68, 0x79,
+ 0x1e, 0xf1, 0x0f, 0x09, 0xb3, 0x38, 0x7f, 0xf0, 0x7d, 0x58, 0x6b, 0xd9, 0xcd, 0x16, 0xa1, 0xcc,
+ 0x3c, 0xe9, 0xb6, 0xdb, 0x7d, 0xb3, 0xee, 0x76, 0xbc, 0x36, 0x61, 0xa4, 0x61, 0x52, 0x72, 0x2a,
+ 0x30, 0xa6, 0x8d, 0x8a, 0x5a, 0xb2, 0xcb, 0x57, 0xec, 0x04, 0x0b, 0x8e, 0xc8, 0xa9, 0xf6, 0x3d,
+ 0x04, 0x4b, 0x8f, 0x08, 0xfb, 0x90, 0x12, 0xdf, 0x20, 0xa7, 0x5d, 0x42, 0x19, 0xfe, 0x22, 0x2c,
+ 0x34, 0x6c, 0x9f, 0xd4, 0x99, 0xeb, 0xf7, 0x07, 0x34, 0x2c, 0x85, 0x73, 0x7b, 0x8d, 0x28, 0x49,
+ 0x53, 0x43, 0x24, 0xbd, 0x03, 0x97, 0xda, 0x16, 0x65, 0x66, 0x8f, 0xf8, 0xf6, 0x89, 0x4d, 0x1a,
+ 0x26, 0xf3, 0x09, 0x31, 0xa9, 0xfd, 0x92, 0x08, 0x92, 0xa4, 0x8d, 0x55, 0xfe, 0xf8, 0xdb, 0xea,
+ 0xe9, 0x33, 0x9f, 0x90, 0x23, 0xfb, 0x25, 0xd1, 0x7e, 0x83, 0x20, 0xaf, 0xcc, 0xc6, 0x6b, 0x50,
+ 0xec, 0xf9, 0x81, 0x73, 0x64, 0xb4, 0x0a, 0x3d, 0x5f, 0xda, 0x8f, 0x1f, 0xc0, 0x22, 0xcf, 0x40,
+ 0x3b, 0xf0, 0xcd, 0x0c, 0xde, 0x5b, 0xe8, 0x58, 0x5e, 0x38, 0x3a, 0x97, 0x0c, 0xf8, 0x01, 0x82,
+ 0xe5, 0xd0, 0x67, 0xd4, 0x73, 0x1d, 0x4a, 0xf0, 0x03, 0x28, 0x70, 0x5e, 0xd2, 0x01, 0x2f, 0xde,
+ 0x4c, 0x50, 0x6b, 0xa8, 0xa5, 0x46, 0x28, 0x84, 0xef, 0x42, 0x86, 0x87, 0x59, 0x19, 0xa4, 0x25,
+ 0x08, 0x2b, 0x0b, 0x0d, 0xb1, 0x9e, 0x83, 0xb9, 0xb0, 0x6d, 0xb1, 0x7a, 0x6b, 0xfe, 0x28, 0x5e,
+ 0x86, 0x82, 0x8a, 0xa2, 0xe4, 0x7e, 0xd1, 0xc8, 0xcb, 0x30, 0xd2, 0xb3, 0xc6, 0xf1, 0x23, 0xa8,
+ 0x44, 0xb1, 0xec, 0xf1, 0x82, 0x70, 0x2e, 0x80, 0xb4, 0xdf, 0x21, 0xb8, 0x1c, 0xa3, 0x5a, 0x79,
+ 0xff, 0x23, 0xc8, 0x09, 0xbe, 0xd0, 0x0a, 0xba, 0x96, 0xbe, 0x51, 0xda, 0x78, 0x2f, 0xc1, 0x7d,
+ 0x13, 0xb5, 0xd4, 0x04, 0xc5, 0xa8, 0xcc, 0x56, 0xa5, 0xaf, 0x7a, 0x0f, 0x4a, 0x91, 0xe9, 0x68,
+ 0x4d, 0x2f, 0xca, 0x9a, 0xbe, 0x0a, 0xd9, 0x9e, 0xd5, 0xee, 0x12, 0x55, 0xd4, 0xe5, 0x60, 0x2b,
+ 0xb5, 0x89, 0xb4, 0x4f, 0x53, 0xb0, 0x3a, 0x1c, 0x99, 0xf3, 0xe2, 0xca, 0x0b, 0x78, 0x83, 0x67,
+ 0x41, 0x9b, 0x58, 0x3d, 0x42, 0xcd, 0xe3, 0xbe, 0x39, 0x48, 0x46, 0x6e, 0xfd, 0xee, 0x8c, 0xd6,
+ 0x87, 0x86, 0x4b, 0x46, 0xf5, 0x08, 0xdd, 0xee, 0x0b, 0xaf, 0xa8, 0x8a, 0xb5, 0xd2, 0x19, 0x9d,
+ 0xaf, 0xb6, 0xe0, 0x62, 0xfc, 0xe2, 0x18, 0xcf, 0x6c, 0x46, 0x3d, 0x33, 0x1b, 0xa5, 0x23, 0xde,
+ 0xfb, 0x3b, 0x82, 0x4b, 0x07, 0x36, 0x65, 0x42, 0xfb, 0x63, 0x9b, 0x72, 0x8a, 0x4c, 0xa2, 0x52,
+ 0x2e, 0xb1, 0x42, 0x0d, 0x6f, 0xa3, 0xab, 0x90, 0xa5, 0xcc, 0xf2, 0x99, 0x40, 0x95, 0x36, 0xe4,
+ 0x80, 0x17, 0x1d, 0xcf, 0x6a, 0x46, 0x18, 0x9e, 0x35, 0x0a, 0x7c, 0x82, 0xb3, 0x3a, 0x29, 0x19,
+ 0xb2, 0x93, 0x93, 0x41, 0xee, 0x49, 0xda, 0x6b, 0xa8, 0x8c, 0x9b, 0xa1, 0x88, 0xb0, 0x0d, 0x39,
+ 0x61, 0x70, 0x40, 0xdb, 0x9b, 0x09, 0x2e, 0x1a, 0x89, 0x99, 0xa1, 0x24, 0xf1, 0x15, 0x00, 0x87,
+ 0xbc, 0x60, 0x66, 0xd4, 0xa8, 0x22, 0x9f, 0x39, 0xe2, 0x13, 0xda, 0x27, 0x29, 0xf9, 0x7e, 0x29,
+ 0x2b, 0xf9, 0x43, 0xcf, 0xa3, 0xd2, 0x7f, 0x19, 0x96, 0xc4, 0x2b, 0xcd, 0x90, 0xca, 0xb2, 0x30,
+ 0x2c, 0x8a, 0xd9, 0xe0, 0x55, 0xfc, 0x15, 0xc4, 0x69, 0x0c, 0x16, 0x65, 0xc4, 0xa2, 0x12, 0x71,
+ 0x1a, 0xe1, 0x92, 0x21, 0xdf, 0x67, 0x47, 0x7c, 0x7f, 0x05, 0x40, 0x3c, 0x64, 0xee, 0x73, 0xe2,
+ 0xa8, 0x40, 0x8b, 0xe5, 0xcf, 0xf8, 0x44, 0x52, 0x68, 0xf2, 0x09, 0x75, 0xea, 0x87, 0x08, 0x4a,
+ 0x87, 0x96, 0x17, 0x42, 0xb8, 0x0f, 0x05, 0x9e, 0x50, 0xbe, 0xeb, 0x32, 0x95, 0x91, 0x53, 0xd8,
+ 0x6a, 0xb8, 0x2e, 0x33, 0xf2, 0x1d, 0xf9, 0x27, 0x10, 0x9f, 0xb3, 0x7e, 0xe7, 0x65, 0x7a, 0x9d,
+ 0x68, 0xff, 0x46, 0x70, 0x39, 0x26, 0x46, 0x8a, 0x24, 0xfb, 0xb0, 0xdc, 0xb6, 0x18, 0xdf, 0xdf,
+ 0xdb, 0x6e, 0x73, 0x56, 0x88, 0x07, 0x6e, 0x53, 0x40, 0x5c, 0x94, 0xa2, 0x6a, 0x88, 0x9f, 0xc8,
+ 0xed, 0x33, 0x88, 0x06, 0x55, 0x05, 0xe3, 0xfa, 0x14, 0x63, 0x83, 0x0a, 0xc4, 0xb7, 0xd2, 0x10,
+ 0x20, 0xbe, 0x0e, 0xcb, 0x82, 0x79, 0x91, 0xf8, 0xa4, 0x45, 0x7c, 0x16, 0xf9, 0xf4, 0xd3, 0x20,
+ 0x46, 0xda, 0xcf, 0x53, 0x70, 0x45, 0x94, 0x9d, 0xcf, 0xc2, 0xc3, 0x84, 0xbd, 0xea, 0xff, 0x9a,
+ 0x89, 0xbf, 0x4f, 0x41, 0x59, 0x38, 0xe7, 0x1c, 0xe9, 0xc8, 0x92, 0xb7, 0x87, 0xed, 0x69, 0xdb,
+ 0x43, 0x04, 0xca, 0xff, 0xe4, 0xd6, 0xf0, 0x67, 0x04, 0x57, 0x27, 0x11, 0xea, 0x73, 0x48, 0x9a,
+ 0xa7, 0xf1, 0x49, 0xf3, 0xd6, 0x1c, 0x6e, 0x1c, 0xce, 0x1c, 0xed, 0xa7, 0x08, 0xb0, 0x6c, 0xf7,
+ 0xa4, 0x37, 0x27, 0xa4, 0x41, 0x76, 0x3c, 0x0d, 0xf6, 0x38, 0x89, 0x99, 0xdf, 0x37, 0xbb, 0x42,
+ 0x5c, 0x90, 0x38, 0x39, 0x7f, 0x23, 0xbd, 0x25, 0x27, 0x7b, 0x38, 0x18, 0x69, 0x9f, 0xd2, 0xe5,
+ 0x8c, 0xf6, 0x31, 0x82, 0x35, 0x81, 0xfc, 0x83, 0x2e, 0xe9, 0x12, 0xee, 0x58, 0x25, 0x37, 0x7b,
+ 0x9a, 0xbe, 0x07, 0x79, 0x89, 0x6c, 0x96, 0xd2, 0x12, 0x85, 0x16, 0x88, 0xf1, 0xf3, 0x2c, 0x7e,
+ 0x44, 0xc2, 0xb4, 0x9d, 0xc3, 0x37, 0xd5, 0x91, 0x63, 0x55, 0x3a, 0x72, 0x62, 0x4a, 0xc8, 0xce,
+ 0x54, 0x42, 0x76, 0x32, 0xa8, 0x3c, 0x22, 0xec, 0x40, 0xd0, 0x61, 0x1a, 0xa2, 0x18, 0x6f, 0x9c,
+ 0xf1, 0xad, 0xc7, 0xa2, 0x19, 0x12, 0xdc, 0xdb, 0x18, 0xab, 0x04, 0x97, 0x06, 0xad, 0x8e, 0xec,
+ 0x2e, 0xc7, 0xd2, 0xff, 0x4d, 0x58, 0xe4, 0xa4, 0x8f, 0xf6, 0x48, 0xbc, 0xaf, 0x5d, 0x68, 0xbb,
+ 0xcd, 0xb0, 0x0f, 0xd2, 0xf6, 0x61, 0x29, 0xa0, 0xbb, 0xb2, 0x67, 0x0d, 0x8a, 0xfc, 0x35, 0x66,
+ 0xcb, 0xa2, 0xad, 0xa0, 0xef, 0xe2, 0x13, 0x8f, 0x2d, 0xda, 0xe2, 0x0f, 0x47, 0xb1, 0x17, 0x58,
+ 0x80, 0xf7, 0x04, 0xf2, 0x41, 0xae, 0x6c, 0x40, 0x61, 0x24, 0xe1, 0xc6, 0xf0, 0x06, 0xaf, 0xcd,
+ 0xb7, 0x95, 0xcc, 0x57, 0x60, 0x99, 0xcb, 0xd4, 0x5d, 0x87, 0xda, 0x94, 0x71, 0x72, 0x28, 0xc4,
+ 0x4b, 0x6d, 0xb7, 0xb9, 0x33, 0x98, 0xd5, 0xfe, 0x81, 0xa0, 0x10, 0x2d, 0xe7, 0xd3, 0xdc, 0x1f,
+ 0x2d, 0xa3, 0xd9, 0xf9, 0xcb, 0x68, 0x4c, 0x0d, 0xc9, 0x9d, 0xb1, 0x86, 0x44, 0xd3, 0x4c, 0x9d,
+ 0x0b, 0x7f, 0x82, 0x60, 0x95, 0xd7, 0xaf, 0xe0, 0x7a, 0x81, 0x9e, 0x13, 0xd3, 0x87, 0xb7, 0xa9,
+ 0xf4, 0xe8, 0x36, 0x35, 0xb4, 0xc5, 0x65, 0x86, 0xb7, 0x38, 0xed, 0xfb, 0x08, 0xde, 0x18, 0xc1,
+ 0xa4, 0xea, 0xe9, 0x2e, 0x14, 0x83, 0xeb, 0x0b, 0x5a, 0xc9, 0x89, 0xcc, 0xbe, 0x91, 0xe4, 0xcb,
+ 0xe8, 0x9d, 0x89, 0x31, 0x10, 0x8d, 0x3b, 0x33, 0xe4, 0x63, 0xce, 0x0c, 0x1b, 0x7f, 0xbd, 0x00,
+ 0xcb, 0x4f, 0x48, 0xff, 0x59, 0x44, 0x2f, 0xfe, 0x11, 0x82, 0x85, 0x47, 0x84, 0xbd, 0x1f, 0x38,
+ 0x02, 0xd7, 0x92, 0x8f, 0xcb, 0xe1, 0x42, 0xe5, 0xd9, 0x6a, 0x52, 0xa3, 0x1f, 0x2e, 0xd6, 0xae,
+ 0x7f, 0xfc, 0xaf, 0xff, 0x7c, 0x92, 0xba, 0x86, 0xaf, 0xea, 0xbd, 0x75, 0x3d, 0xf0, 0xba, 0x4d,
+ 0xa8, 0xfe, 0x2a, 0x1a, 0x96, 0xd7, 0xf8, 0x17, 0x08, 0x4a, 0x91, 0x42, 0x85, 0xdf, 0x4e, 0x46,
+ 0x33, 0x52, 0x3e, 0xaa, 0xb3, 0xb4, 0x7c, 0xda, 0xd7, 0x04, 0x96, 0x3b, 0xf8, 0x76, 0x32, 0x16,
+ 0x3d, 0xdc, 0x9b, 0xf4, 0x57, 0xc1, 0xdf, 0xd7, 0xf8, 0xd7, 0x08, 0x56, 0xc6, 0xaa, 0x17, 0xbe,
+ 0x9d, 0x0c, 0x33, 0xb6, 0xd6, 0xcd, 0x06, 0xf6, 0x5d, 0x01, 0x76, 0x1d, 0xeb, 0xb3, 0x82, 0xdd,
+ 0x92, 0x39, 0x82, 0x7f, 0x29, 0x81, 0x06, 0x8a, 0x8e, 0x98, 0x4f, 0xac, 0xce, 0xe7, 0xe2, 0xcf,
+ 0xf9, 0x21, 0x52, 0x01, 0xe6, 0x16, 0xc2, 0x7f, 0x44, 0xb0, 0x38, 0x94, 0x1b, 0x58, 0x4f, 0x2a,
+ 0x03, 0x31, 0x99, 0x5d, 0xbd, 0x35, 0xbb, 0x80, 0x4c, 0x3b, 0xed, 0xa1, 0xc0, 0xfb, 0x00, 0xdf,
+ 0x3f, 0x43, 0xfc, 0xf5, 0x41, 0xd6, 0xfd, 0x05, 0xc1, 0x85, 0xa1, 0x17, 0x28, 0x17, 0xcf, 0x6d,
+ 0xc1, 0xcc, 0x39, 0xaf, 0x1d, 0x08, 0xe4, 0xbb, 0xf8, 0xfd, 0xcf, 0x84, 0x7c, 0xe0, 0xfe, 0x9f,
+ 0x21, 0xc8, 0xab, 0x16, 0x18, 0x7f, 0x75, 0x96, 0x36, 0x59, 0x02, 0x9e, 0xa3, 0xa3, 0xd6, 0xee,
+ 0x0a, 0xc8, 0xb7, 0x70, 0x6d, 0x0a, 0x64, 0x7e, 0x9a, 0xa6, 0xfa, 0x2b, 0x75, 0xa8, 0x16, 0x79,
+ 0xb6, 0x10, 0xbd, 0x56, 0x49, 0xac, 0x4b, 0x31, 0x57, 0x75, 0x55, 0x7d, 0xce, 0xfb, 0x1a, 0xed,
+ 0x8e, 0x40, 0xaa, 0xe3, 0xb7, 0x67, 0x41, 0xba, 0x75, 0xac, 0x54, 0xe0, 0x3f, 0x21, 0x58, 0x19,
+ 0xbb, 0xfd, 0x4a, 0x2c, 0x08, 0x93, 0x2e, 0xf3, 0xaa, 0xef, 0x9c, 0xe5, 0x82, 0x4d, 0xdb, 0x12,
+ 0xb8, 0xdf, 0xc1, 0x1b, 0x73, 0xe1, 0x96, 0x30, 0x3f, 0x45, 0x50, 0x1e, 0xbd, 0x48, 0xc1, 0x1b,
+ 0x53, 0x08, 0x1c, 0x73, 0x79, 0x54, 0xbd, 0x3d, 0x97, 0x8c, 0x42, 0xfe, 0x0d, 0x81, 0x7c, 0x13,
+ 0xdf, 0x9d, 0x8f, 0x1b, 0x7a, 0x4b, 0x01, 0xfd, 0x1b, 0x82, 0x95, 0xb1, 0x6e, 0x05, 0x4f, 0x83,
+ 0x12, 0xd7, 0x2c, 0x27, 0xba, 0x7e, 0x62, 0x43, 0xa4, 0xed, 0x08, 0x03, 0xee, 0x6b, 0x9b, 0x73,
+ 0x1a, 0x30, 0xa8, 0x84, 0xe8, 0x26, 0xfe, 0x27, 0x82, 0x8b, 0xf1, 0x8d, 0x17, 0xde, 0x9c, 0x46,
+ 0x88, 0x89, 0xf6, 0xdc, 0x3b, 0x83, 0xa4, 0x32, 0x6a, 0x5b, 0x18, 0xf5, 0x75, 0xed, 0xdd, 0xd9,
+ 0xf9, 0xc4, 0x95, 0x19, 0x51, 0x9b, 0xfe, 0x80, 0xa0, 0x2c, 0xfa, 0x9d, 0xe8, 0x47, 0xb8, 0xa4,
+ 0xbd, 0x67, 0xbc, 0x71, 0xab, 0x5e, 0x0c, 0x96, 0x07, 0x1f, 0x13, 0x6b, 0x0f, 0x3b, 0x1e, 0xeb,
+ 0x6b, 0xdf, 0x11, 0xf8, 0x3e, 0xd0, 0xbe, 0x39, 0x9b, 0xd3, 0xa3, 0x9d, 0x5d, 0x2d, 0x88, 0xc0,
+ 0xd6, 0x29, 0x07, 0xb7, 0x35, 0xd4, 0xf6, 0xf1, 0x1d, 0x73, 0x35, 0xae, 0x53, 0xc3, 0x77, 0xa7,
+ 0x39, 0x33, 0xbe, 0xb5, 0x9b, 0x68, 0x81, 0xca, 0x58, 0x6d, 0xca, 0x86, 0x29, 0x7d, 0x2b, 0x75,
+ 0x0b, 0xbd, 0x5b, 0xe8, 0xe6, 0xf6, 0xe3, 0xef, 0xee, 0x36, 0x6d, 0xd6, 0xea, 0x1e, 0xd7, 0xea,
+ 0x6e, 0x47, 0x57, 0x9f, 0x5b, 0x47, 0x70, 0xe9, 0x75, 0xd7, 0x97, 0x5f, 0x68, 0xc7, 0xbf, 0xf0,
+ 0x9a, 0x4d, 0xd7, 0x94, 0x70, 0x72, 0xe2, 0xe7, 0xf6, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x68,
+ 0xf6, 0x8b, 0xc5, 0x07, 0x1e, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/core/client/batch_get_and_verify.go b/core/client/batch_get_and_verify.go
index 03d2d48c7..ec27bcf90 100644
--- a/core/client/batch_get_and_verify.go
+++ b/core/client/batch_get_and_verify.go
@@ -19,9 +19,10 @@ import (
"runtime"
"sync"
- pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
"github.com/google/trillian/monitoring"
"github.com/google/trillian/types"
+
+ pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
)
// BatchVerifyGetUserIndex fetches and verifies the indexes for a list of users.
@@ -102,15 +103,20 @@ func (c *Client) BatchVerifiedGetUser(ctx context.Context, userIDs []string) (
*types.MapRootV1, map[string]*pb.MapLeaf, error) {
c.trustedLock.Lock()
defer c.trustedLock.Unlock()
- resp, err := c.cli.BatchGetUser(ctx, &pb.BatchGetUserRequest{
+ req := &pb.BatchGetUserRequest{
DirectoryId: c.DirectoryID,
UserIds: userIDs,
LastVerifiedTreeSize: int64(c.trusted.TreeSize),
- })
+ }
+ resp, err := c.cli.BatchGetUser(ctx, req)
if err != nil {
return nil, nil, err
}
+ if err := c.VerifyBatchGetUser(c.trusted, req, resp); err != nil {
+ return nil, nil, err
+ }
+
slr, smr, err := c.VerifyRevision(resp.Revision, c.trusted)
if err != nil {
return nil, nil, err
@@ -119,9 +125,6 @@ func (c *Client) BatchVerifiedGetUser(ctx context.Context, userIDs []string) (
leavesByUserID := make(map[string]*pb.MapLeaf)
for userID, leaf := range resp.MapLeavesByUserId {
- if err := c.VerifyMapLeaf(c.DirectoryID, userID, leaf, smr); err != nil {
- return nil, nil, err
- }
leavesByUserID[userID] = leaf
}
return smr, leavesByUserID, nil
diff --git a/core/client/client.go b/core/client/client.go
index 687dd9d70..70c7c26c3 100644
--- a/core/client/client.go
+++ b/core/client/client.go
@@ -70,6 +70,8 @@ var (
// VerifierInterface is used to verify specific outputs from Key Transparency.
type VerifierInterface interface {
+ VerifyGetUser(trusted types.LogRootV1, req *pb.GetUserRequest, resp *pb.GetUserResponse) error
+ VerifyBatchGetUser(trusted types.LogRootV1, req *pb.BatchGetUserRequest, resp *pb.BatchGetUserResponse) error
// Index computes the index of a userID from a VRF proof, obtained from the server.
Index(vrfProof []byte, directoryID, userID string) ([]byte, error)
// VerifyMapLeaf verifies everything about a MapLeaf.
diff --git a/core/client/client_test.go b/core/client/client_test.go
index 14b20287d..40825f297 100644
--- a/core/client/client_test.go
+++ b/core/client/client_test.go
@@ -303,6 +303,12 @@ func (f *fakeKeyServer) BatchQueueUserUpdate(context.Context, *pb.BatchQueueUser
type fakeVerifier struct{}
+func (f *fakeVerifier) VerifyGetUser(trusted types.LogRootV1, req *pb.GetUserRequest, resp *pb.GetUserResponse) error {
+ return nil
+}
+func (f *fakeVerifier) VerifyBatchGetUser(trusted types.LogRootV1, req *pb.BatchGetUserRequest, resp *pb.BatchGetUserResponse) error {
+ return nil
+}
func (f *fakeVerifier) Index(vrfProof []byte, directoryID, userID string) ([]byte, error) {
return make([]byte, 32), nil
}
diff --git a/core/client/get_and_verify.go b/core/client/get_and_verify.go
index 44e9c9b9e..e65e52d9b 100644
--- a/core/client/get_and_verify.go
+++ b/core/client/get_and_verify.go
@@ -28,24 +28,26 @@ import (
func (c *Client) VerifiedGetUser(ctx context.Context, userID string) (*types.MapRootV1, *pb.MapLeaf, error) {
c.trustedLock.Lock()
defer c.trustedLock.Unlock()
- resp, err := c.cli.GetUser(ctx, &pb.GetUserRequest{
+ req := &pb.GetUserRequest{
DirectoryId: c.DirectoryID,
UserId: userID,
LastVerifiedTreeSize: int64(c.trusted.TreeSize),
- })
+ }
+ resp, err := c.cli.GetUser(ctx, req)
if err != nil {
return nil, nil, err
}
- slr, smr, err := c.VerifyRevision(resp.Revision, c.trusted)
- if err != nil {
+ if err := c.VerifyGetUser(c.trusted, req, resp); err != nil {
return nil, nil, err
}
- c.updateTrusted(slr)
- if err := c.VerifyMapLeaf(c.DirectoryID, userID, resp.Leaf, smr); err != nil {
+ // TODO(gbelvin): Refactor updating the SLR into a separate tracker package.
+ slr, smr, err := c.VerifyRevision(resp.Revision, c.trusted)
+ if err != nil {
return nil, nil, err
}
+ c.updateTrusted(slr)
return smr, resp.Leaf, nil
}
diff --git a/core/client/verifier/pairs.go b/core/client/verifier/pairs.go
new file mode 100644
index 000000000..2779b0008
--- /dev/null
+++ b/core/client/verifier/pairs.go
@@ -0,0 +1,46 @@
+// Copyright 2019 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package verifier
+
+import (
+ "github.com/google/trillian/types"
+
+ pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
+)
+
+func (v *Verifier) VerifyGetUser(trusted types.LogRootV1, req *pb.GetUserRequest, resp *pb.GetUserResponse) error {
+ _, smr, err := v.VerifyRevision(resp.GetRevision(), trusted)
+ if err != nil {
+ return err
+ }
+ if err := v.VerifyMapLeaf(req.GetDirectoryId(), req.GetUserId(), resp.GetLeaf(), smr); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (v *Verifier) VerifyBatchGetUser(trusted types.LogRootV1, req *pb.BatchGetUserRequest, resp *pb.BatchGetUserResponse) error {
+ _, smr, err := v.VerifyRevision(resp.Revision, trusted)
+ if err != nil {
+ return err
+ }
+ for userID, leaf := range resp.MapLeavesByUserId {
+ if err := v.VerifyMapLeaf(req.DirectoryId, userID, leaf, smr); err != nil {
+ return err
+ }
+ }
+ return nil
+
+}
diff --git a/core/client/verifier/verifier_test.go b/core/client/verifier/verifier_test.go
index 4c98d76fc..7db46a3fb 100644
--- a/core/client/verifier/verifier_test.go
+++ b/core/client/verifier/verifier_test.go
@@ -15,59 +15,57 @@
package verifier
import (
- "encoding/json"
- "io/ioutil"
- "os"
"testing"
- "github.com/golang/protobuf/jsonpb"
"github.com/google/keytransparency/core/testdata"
"github.com/google/trillian/types"
- pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
)
// Test vectors in core/testdata are generated by running
// go generate ./core/testdata
-func TestVerifyGetUserResponse(t *testing.T) {
- directoryFile := "../../testdata/directory_get_and_update.json"
- f, err := os.Open(directoryFile)
- if err != nil {
- t.Fatalf("ReadFile(%v): %v", directoryFile, err)
- }
- defer f.Close()
- var directoryPB pb.Directory
- if err := jsonpb.Unmarshal(f, &directoryPB); err != nil {
- t.Fatalf("jsonpb.Unmarshal(): %v", err)
- }
- v, err := NewFromDirectory(&directoryPB)
- if err != nil {
- t.Fatal(err)
+func TestTranscripts(t *testing.T) {
+ for _, name := range []string{
+ "TestEmptyGetAndUpdate",
+ "TestBatchGetUser",
+ } {
+ t.Run(name, func(t *testing.T) {
+ transcript, err := testdata.ReadTranscript(name)
+ if err != nil {
+ t.Fatal(err)
+ }
+ RunTranscriptTest(t, transcript)
+ })
}
+}
+
+func RunTranscriptTest(t *testing.T, transcript *tpb.Transcript) {
+ t.Helper()
- respFile := "../../testdata/get_and_update.json"
- b, err := ioutil.ReadFile(respFile)
+ v, err := NewFromDirectory(transcript.Directory)
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)
+ t.Fatal(err)
}
- trusted := &types.LogRootV1{}
- for _, tc := range getUserResponses {
- t.Run(tc.Desc, func(t *testing.T) {
- slr, smr, err := v.VerifyRevision(tc.GetUserResp.Revision, *trusted)
- if err != nil {
- t.Errorf("VerifyRevision(): %v", err)
- }
- if err == nil && tc.TrustNewLog {
- trusted = slr
+ for _, rpc := range transcript.Rpcs {
+ t.Run(rpc.Desc, func(t *testing.T) {
+ trusted := types.LogRootV1{
+ TreeSize: uint64(rpc.LastVerifiedLogRoot.GetTreeSize()),
+ RootHash: rpc.LastVerifiedLogRoot.GetRootHash(),
}
- if err := v.VerifyMapLeaf(directoryPB.DirectoryId, tc.UserID,
- tc.GetUserResp.Leaf, smr); err != nil {
- t.Errorf("VerifyMapLeaf(): %v)", err)
+ switch pair := rpc.ReqRespPair.(type) {
+ case *tpb.Unary_GetUser:
+ if err := v.VerifyGetUser(trusted, pair.GetUser.Request, pair.GetUser.Response); err != nil {
+ t.Errorf("VerifyGetUser(): %v)", err)
+ }
+ case *tpb.Unary_BatchGetUser:
+ if err := v.VerifyBatchGetUser(trusted, pair.BatchGetUser.Request, pair.BatchGetUser.Response); err != nil {
+ t.Errorf("VerifyGetUser(): %v)", err)
+ }
+
+ default:
+ t.Errorf("Unknown ReqRespPair: %T", pair)
}
})
}
diff --git a/core/crypto/vrf/p256/p256_test.go b/core/crypto/vrf/p256/p256_test.go
index 983dc44ef..96aef94b4 100644
--- a/core/crypto/vrf/p256/p256_test.go
+++ b/core/crypto/vrf/p256/p256_test.go
@@ -19,20 +19,16 @@ import (
"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"
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
_ "github.com/google/trillian/crypto/keys/der/proto"
)
@@ -187,35 +183,26 @@ func TestVRF(t *testing.T) {
// Test vectors in core/testdata are generated by running
// go generate ./core/testdata
func TestProofToHash(t *testing.T) {
- directoryFile := "../../../testdata/directory_get_and_update.json"
- f, err := os.Open(directoryFile)
+ transcript, err := testdata.ReadTranscript("TestEmptyGetAndUpdate")
if err != nil {
- t.Fatalf("ReadFile(%v): %v", directoryFile, err)
+ t.Fatal(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())
+
+ pk, err := NewVRFVerifierFromRawKey(transcript.GetDirectory().GetVrf().GetDer())
if err != nil {
t.Fatalf("NewVRFVerifier failure: %v", err)
}
- respFile := "../../../testdata/get_and_update.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.UserID), tc.GetUserResp.GetLeaf().GetVrfProof())
- if err != nil {
- t.Errorf("ProofToHash(%v): %v)", tc.Desc, err)
+ for _, rpc := range transcript.Rpcs {
+ t.Run(rpc.Desc, func(t *testing.T) {
+ switch pair := rpc.ReqRespPair.(type) {
+ case *tpb.Unary_GetUser:
+ userID := pair.GetUser.Request.UserId
+ vrfProof := pair.GetUser.Response.GetLeaf().GetVrfProof()
+ _, err := pk.ProofToHash([]byte(userID), vrfProof)
+ if err != nil {
+ t.Errorf("ProofToHash(%v): %v)", rpc.Desc, err)
+ }
}
})
}
diff --git a/core/integration/alltests.go b/core/integration/alltests.go
index 5d7a8a696..b9576e789 100644
--- a/core/integration/alltests.go
+++ b/core/integration/alltests.go
@@ -22,9 +22,9 @@ import (
"time"
"github.com/google/keytransparency/core/client"
- "github.com/google/keytransparency/core/testdata"
"google.golang.org/grpc"
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
spb "github.com/google/keytransparency/core/sequencer/sequencer_go_proto"
)
@@ -45,10 +45,8 @@ type CallOptions func(userID string) []grpc.CallOption
// NamedTestFn is a binding between a readable test name (used for a Go subtest)
// and a function that performs the test, given a test environment.
type NamedTestFn struct {
- Name string
- Fn func(context.Context, *Env, *testing.T) []testdata.ResponseVector
- DirectoryFilename string
- RespFilename string
+ Name string
+ Fn func(context.Context, *Env, *testing.T) []*tpb.Unary
}
// AllTests contains all the integration tests.
@@ -56,12 +54,12 @@ type NamedTestFn struct {
// This is done so that tests can be run in different environments in a portable way.
var AllTests = []NamedTestFn{
// Client Tests
- {Name: "TestEmptyGetAndUpdate", Fn: TestEmptyGetAndUpdate, DirectoryFilename: "directory_get_and_update.json", RespFilename: "get_and_update.json"},
- {Name: "TestBatchGetUser", Fn: TestBatchGetUser, DirectoryFilename: "directory_batch_get_user.json", RespFilename: "batch_get_user.json"},
+ {Name: "TestEmptyGetAndUpdate", Fn: TestEmptyGetAndUpdate},
+ {Name: "TestBatchGetUser", Fn: TestBatchGetUser},
{Name: "TestListHistory", Fn: TestListHistory},
{Name: "TestBatchUpdate", Fn: TestBatchUpdate},
{Name: "TestBatchCreate", Fn: TestBatchCreate},
- {Name: "TestBatchListUserRevisions", Fn: TestBatchListUserRevisions, DirectoryFilename: "directory_batch_list_user_revisions.json", RespFilename: "batch_list_user_revisions.json"},
+ {Name: "TestBatchListUserRevisions", Fn: TestBatchListUserRevisions},
// Monitor Tests
{Name: "TestMonitor", Fn: TestMonitor},
}
diff --git a/core/integration/client_tests.go b/core/integration/client_tests.go
index 75d3bee45..89c20eba3 100644
--- a/core/integration/client_tests.go
+++ b/core/integration/client_tests.go
@@ -25,7 +25,6 @@ import (
"github.com/google/keytransparency/core/client"
"github.com/google/keytransparency/core/sequencer"
- "github.com/google/keytransparency/core/testdata"
"github.com/google/keytransparency/core/testutil"
"github.com/google/trillian/types"
@@ -35,6 +34,7 @@ import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
spb "github.com/google/keytransparency/core/sequencer/sequencer_go_proto"
)
@@ -94,7 +94,7 @@ func genUserIDs(count int) []string {
}
// TestBatchCreate verifies that the batch functions are working correctly.
-func TestBatchCreate(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestBatchCreate(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
go runSequencer(ctx, t, env.Directory.DirectoryId, env)
signers1 := testutil.SignKeysetsFromPEMs(testPrivKey1)
authorizedKeys1 := testutil.VerifyKeysetFromPEMs(testPubKey1)
@@ -129,7 +129,7 @@ func TestBatchCreate(ctx context.Context, env *Env, t *testing.T) []testdata.Res
}
// TestBatchUpdate verifies that the batch functions are working correctly.
-func TestBatchUpdate(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestBatchUpdate(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
go runSequencer(ctx, t, env.Directory.DirectoryId, env)
signers1 := testutil.SignKeysetsFromPEMs(testPrivKey1)
authorizedKeys1 := testutil.VerifyKeysetFromPEMs(testPubKey1)
@@ -167,7 +167,7 @@ func TestBatchUpdate(ctx context.Context, env *Env, t *testing.T) []testdata.Res
}
// TestEmptyGetAndUpdate verifies set/get semantics.
-func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
go runSequencer(ctx, t, env.Directory.DirectoryId, env)
// Create lists of signers.
@@ -181,7 +181,7 @@ func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []testda
authorizedKeys3 := testutil.VerifyKeysetFromPEMs("", testPubKey2)
// Collect a list of valid GetUserResponses
- getUserResps := make([]testdata.ResponseVector, 0)
+ transcript := []*tpb.Unary{}
// Start with an empty trusted log root
slr := &types.LogRootV1{}
@@ -260,6 +260,7 @@ func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []testda
} {
t.Run(tc.desc, func(t *testing.T) {
// Check profile.
+ reqSLR := *slr
e, newslr, err := CheckProfile(ctx, env, tc.userID, tc.wantProfile, slr)
if err != nil {
t.Fatalf("%v", err)
@@ -271,11 +272,20 @@ func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []testda
if trust {
slr = newslr
}
- getUserResps = append(getUserResps, testdata.ResponseVector{
- Desc: tc.desc,
- UserID: tc.userID,
- GetUserResp: e,
- TrustNewLog: trust,
+ transcript = append(transcript, &tpb.Unary{
+ Desc: tc.desc,
+ LastVerifiedLogRoot: &pb.LogRootRequest{
+ TreeSize: int64(reqSLR.TreeSize),
+ RootHash: reqSLR.RootHash,
+ },
+ ReqRespPair: &tpb.Unary_GetUser{GetUser: &tpb.GetUser{
+ Request: &pb.GetUserRequest{
+ DirectoryId: env.Directory.DirectoryId,
+ UserId: tc.userID,
+ LastVerifiedTreeSize: int64(reqSLR.TreeSize),
+ },
+ Response: e,
+ }},
})
// Update profile.
@@ -294,7 +304,7 @@ func TestEmptyGetAndUpdate(ctx context.Context, env *Env, t *testing.T) []testda
}
})
}
- return getUserResps
+ return transcript
}
// CheckProfile verifies that the retrieved profile of userID is correct.
@@ -321,11 +331,11 @@ func CheckProfile(ctx context.Context, env *Env, userID string, wantProfile []by
}
// TestBatchGetUser tests fetching multiple users in a single request.
-func TestBatchGetUser(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestBatchGetUser(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
go runSequencer(ctx, t, env.Directory.DirectoryId, env)
signers1 := testutil.SignKeysetsFromPEMs(testPrivKey1)
authorizedKeys1 := testutil.VerifyKeysetFromPEMs(testPubKey1)
- batchResps := make([]testdata.ResponseVector, 0)
+ transcript := []*tpb.Unary{}
users := []*client.User{
{
@@ -397,7 +407,8 @@ func TestBatchGetUser(ctx context.Context, env *Env, t *testing.T) []testdata.Re
if err != nil {
t.Fatalf("BatchGetUser(): %v", err)
}
- _, smr, err := env.Client.VerifyRevision(resp.Revision, types.LogRootV1{})
+ slr := types.LogRootV1{}
+ _, smr, err := env.Client.VerifyRevision(resp.Revision, slr)
if err != nil {
t.Fatalf("VerifyRevision(): %v", nil)
}
@@ -409,18 +420,28 @@ func TestBatchGetUser(ctx context.Context, env *Env, t *testing.T) []testdata.Re
t.Fatalf("key mismatch for %s: %s, want %s", userID, got, want)
}
}
- batchResps = append(batchResps, testdata.ResponseVector{
- Desc: tc.desc,
- UserIDs: userIDs,
- BatchGetUserResp: resp,
+ transcript = append(transcript, &tpb.Unary{
+ Desc: tc.desc,
+ LastVerifiedLogRoot: &pb.LogRootRequest{
+ TreeSize: int64(slr.TreeSize),
+ RootHash: slr.RootHash,
+ },
+ ReqRespPair: &tpb.Unary_BatchGetUser{
+ BatchGetUser: &tpb.BatchGetUser{
+ Request: &pb.BatchGetUserRequest{
+ UserIds: userIDs,
+ },
+ Response: resp,
+ },
+ },
})
})
}
- return batchResps
+ return transcript
}
// TestListHistory verifies that repeated history values get collapsed properly.
-func TestListHistory(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestListHistory(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
userID := "bob"
opts := env.CallOpts(userID)
@@ -541,7 +562,7 @@ func sortHistory(history map[uint64][]byte) [][]byte {
}
// TestBatchListUserRevisions verifies that BatchListUserRevisions() in keyserver works properly.
-func TestBatchListUserRevisions(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestBatchListUserRevisions(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
// Create lists of signers and authorized keys
signers := testutil.SignKeysetsFromPEMs(testPrivKey1)
authorizedKeys := testutil.VerifyKeysetFromPEMs(testPubKey1)
@@ -553,7 +574,7 @@ func TestBatchListUserRevisions(ctx context.Context, env *Env, t *testing.T) []t
request := &pb.BatchListUserRevisionsRequest{
DirectoryId: env.Directory.DirectoryId,
}
- responseVec := make([]testdata.ResponseVector, 0)
+ transcript := []*tpb.Unary{}
for _, tc := range []struct {
desc string
start, end int64
@@ -580,10 +601,14 @@ func TestBatchListUserRevisions(ctx context.Context, env *Env, t *testing.T) []t
if err != nil {
return
}
- responseVec = append(responseVec, testdata.ResponseVector{
- Desc: tc.desc,
- UserIDs: tc.userIDs,
- BatchListUserRevisionsResp: response,
+ transcript = append(transcript, &tpb.Unary{
+ Desc: tc.desc,
+ ReqRespPair: &tpb.Unary_BatchListUserRevisions{
+ BatchListUserRevisions: &tpb.BatchListUserRevisions{
+ Request: request,
+ Response: response,
+ },
+ },
})
var got [][]byte
for _, rev := range response.MapRevisions {
@@ -596,7 +621,7 @@ func TestBatchListUserRevisions(ctx context.Context, env *Env, t *testing.T) []t
}
})
}
- return responseVec
+ return transcript
}
func (env *Env) setupHistoryMultipleUsers(ctx context.Context, directory *pb.Directory, signers []tink.Signer,
diff --git a/core/integration/monitor_tests.go b/core/integration/monitor_tests.go
index 89ea349ad..bdf8eea97 100644
--- a/core/integration/monitor_tests.go
+++ b/core/integration/monitor_tests.go
@@ -23,7 +23,6 @@ import (
"github.com/google/keytransparency/core/client"
"github.com/google/keytransparency/core/fake"
"github.com/google/keytransparency/core/monitor"
- "github.com/google/keytransparency/core/testdata"
"github.com/google/keytransparency/core/testutil"
"github.com/google/tink/go/tink"
"google.golang.org/grpc/codes"
@@ -33,6 +32,7 @@ import (
"github.com/google/trillian/crypto/keys/pem"
"github.com/google/trillian/types"
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
spb "github.com/google/keytransparency/core/sequencer/sequencer_go_proto"
)
@@ -45,7 +45,7 @@ amFdON6OhjYnBmJWe4fVnbxny0PfpkvXtg==
)
// TestMonitor verifies that the monitor correctly verifies transitions between revisions.
-func TestMonitor(ctx context.Context, env *Env, t *testing.T) []testdata.ResponseVector {
+func TestMonitor(ctx context.Context, env *Env, t *testing.T) []*tpb.Unary {
// setup monitor:
privKey, err := pem.UnmarshalPrivateKey(monitorPrivKey, "")
if err != nil {
diff --git a/core/testdata/TestBatchCreate.json b/core/testdata/TestBatchCreate.json
new file mode 100644
index 000000000..171bdfab4
--- /dev/null
+++ b/core/testdata/TestBatchCreate.json
@@ -0,0 +1,31 @@
+{
+ "description": "TestBatchCreate",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "4821318422028900880",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "5892011389996388160",
+ "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/core/testdata/TestBatchGetUser.json b/core/testdata/TestBatchGetUser.json
new file mode 100644
index 000000000..bc96da5c1
--- /dev/null
+++ b/core/testdata/TestBatchGetUser.json
@@ -0,0 +1,2363 @@
+{
+ "description": "TestBatchGetUser",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "1283056646755542265",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "2062628227332804898",
+ "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"
+ },
+ "rpcs": [
+ {
+ "desc": "single empty",
+ "lastVerifiedLogRoot": {
+
+ },
+ "batchGetUser": {
+ "request": {
+ "userIds": [
+ "alice"
+ ]
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgwlMPr4XLj7jtTRwk2JNcJIW+QEIA1+G7AXl/7a5kTR8Vr6jJLjuY0AAAAAAAAAABABISAhgBEgwQ+bG/w5KZ6tcVGAI=",
+ "signature": "MEUCIQD2YZgaEsWs6kyB5tsa6ZVAesfalXPdHUvKWCKRa+8mdgIgIrZ3ce1dJAHpUcWkgx7XYEeHbqd7fs7H4iCgZztQ4Z8="
+ },
+ "logInclusion": [
+ "Qp3RT4fw04wyqs9icst1tJ2NJ8Bj1tk2zjfG3VnvnRQ="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Ec5VOOiRZPk=",
+ "logRoot": "AAEAAAAAAAAAAiBqLcr2nVfnVVhl+RLEf6Ac/AEF2MCUmwjB7AE1nU0pQBWvqMk8iYnYAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIDTr3ykrPAD1w6YlZCp1LUiyCkAedhFYWdG3anmbnCWiAiEA1es887SsA1IU8TvYx0xfv8FsOBkRmoPpyiC4XbRWHdQ="
+ }
+ }
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "PKFlR5o7s++xQfxzGrz1fmfLS+TD4Cs3157kslE1aPoRIwUCDet4TN5NU8B3mT1TdDyiF9TB3CkIOISTAG0JLARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "vH6SqM1b2mz6CHCcQkm6/okqHkH6yR6tUzVixd0GVf4=",
+ "PGtA1G8D3pAEQ70/EpYWfjI7dr6GOX7YmjB3Y3CB2HM=",
+ ""
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "multi empty",
+ "lastVerifiedLogRoot": {
+
+ },
+ "batchGetUser": {
+ "request": {
+ "userIds": [
+ "zelda",
+ "alice"
+ ]
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgwlMPr4XLj7jtTRwk2JNcJIW+QEIA1+G7AXl/7a5kTR8Vr6jJLjuY0AAAAAAAAAABABISAhgBEgwQ+bG/w5KZ6tcVGAI=",
+ "signature": "MEUCIQD2YZgaEsWs6kyB5tsa6ZVAesfalXPdHUvKWCKRa+8mdgIgIrZ3ce1dJAHpUcWkgx7XYEeHbqd7fs7H4iCgZztQ4Z8="
+ },
+ "logInclusion": [
+ "Qp3RT4fw04wyqs9icst1tJ2NJ8Bj1tk2zjfG3VnvnRQ="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Ec5VOOiRZPk=",
+ "logRoot": "AAEAAAAAAAAAAiBqLcr2nVfnVVhl+RLEf6Ac/AEF2MCUmwjB7AE1nU0pQBWvqMk8iYnYAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIDTr3ykrPAD1w6YlZCp1LUiyCkAedhFYWdG3anmbnCWiAiEA1es887SsA1IU8TvYx0xfv8FsOBkRmoPpyiC4XbRWHdQ="
+ }
+ }
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "LLbvvN/w3Bo+ia/ydJ6JzPIhcX5rHNwsx90wVCtdov/SMpyGWgM43ybzW348bjG8M+UdkhpxOkRAK/q7dRiHFARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "vH6SqM1b2mz6CHCcQkm6/okqHkH6yR6tUzVixd0GVf4=",
+ "PGtA1G8D3pAEQ70/EpYWfjI7dr6GOX7YmjB3Y3CB2HM=",
+ ""
+ ]
+ }
+ },
+ "zelda": {
+ "vrfProof": "2VyqW4/RldQQWuN85hYZiSBT6QRgXFa4LQCbqKNN7GqtomxJZl0qJIGJzOKxUcgll9+tncB92KfSAhje15m5YwQtrUX0DufLX9SITX79ae9LqiYFNaU8XDMHSZ44UUb2kMU6/IycyPbQiVogsuIIrgNYXImVlFvuCSyjC6Kg03hK",
+ "mapInclusion": {
+ "leaf": {
+ "index": "L+Kt2w2EizRLIRMNTQu0J9o4c37Jhf2MT+xy8XZ/QVo="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "g6kWnF0rW7xxNLoMji6vxWx5yo3uc2Z+WnMFdeCQv+s=",
+ "",
+ "",
+ "PGtA1G8D3pAEQ70/EpYWfjI7dr6GOX7YmjB3Y3CB2HM=",
+ ""
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "single full",
+ "lastVerifiedLogRoot": {
+
+ },
+ "batchGetUser": {
+ "request": {
+ "userIds": [
+ "bob"
+ ]
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgwlMPr4XLj7jtTRwk2JNcJIW+QEIA1+G7AXl/7a5kTR8Vr6jJLjuY0AAAAAAAAAABABISAhgBEgwQ+bG/w5KZ6tcVGAI=",
+ "signature": "MEUCIQD2YZgaEsWs6kyB5tsa6ZVAesfalXPdHUvKWCKRa+8mdgIgIrZ3ce1dJAHpUcWkgx7XYEeHbqd7fs7H4iCgZztQ4Z8="
+ },
+ "logInclusion": [
+ "Qp3RT4fw04wyqs9icst1tJ2NJ8Bj1tk2zjfG3VnvnRQ="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Ec5VOOiRZPk=",
+ "logRoot": "AAEAAAAAAAAAAiBqLcr2nVfnVVhl+RLEf6Ac/AEF2MCUmwjB7AE1nU0pQBWvqMk8iYnYAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIDTr3ykrPAD1w6YlZCp1LUiyCkAedhFYWdG3anmbnCWiAiEA1es887SsA1IU8TvYx0xfv8FsOBkRmoPpyiC4XbRWHdQ="
+ }
+ }
+ },
+ "mapLeavesByUserId": {
+ "bob": {
+ "vrfProof": "+1c0mXZmSWIMSBBctDz5wTGcbVTowxRIoz095kI8KF0XLgOc0WEw6t8HCV1k3soTRVRfv3hvzHdPRhdKgpXhDQSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "FWe23DE9CnefBSVqywlR7eFff1hlO5WzKwz97y9c2LE=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg/xYaCmaSj8A4GrHJBR3uHzkOVHT+RzCzVrxmsVi+x4JCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAj4oouCEk6eye0x0gJ+OvCfyT4f8u3R2oR9xzb9I0CYoCIG93EO52yudSEEkUuLoKj77dHxTLO6tlen/Xq3X+JItC"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "AL1oZUt2p1JF5D/kMoi5QAeXDMfJAOKRVOYYm4xhkWI=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "U1sA4snyDBsTzjHt2HZPCw==",
+ "data": "Ym9iLWtleQ=="
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "multi full",
+ "lastVerifiedLogRoot": {
+
+ },
+ "batchGetUser": {
+ "request": {
+ "userIds": [
+ "bob",
+ "carol"
+ ]
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgwlMPr4XLj7jtTRwk2JNcJIW+QEIA1+G7AXl/7a5kTR8Vr6jJLjuY0AAAAAAAAAABABISAhgBEgwQ+bG/w5KZ6tcVGAI=",
+ "signature": "MEUCIQD2YZgaEsWs6kyB5tsa6ZVAesfalXPdHUvKWCKRa+8mdgIgIrZ3ce1dJAHpUcWkgx7XYEeHbqd7fs7H4iCgZztQ4Z8="
+ },
+ "logInclusion": [
+ "Qp3RT4fw04wyqs9icst1tJ2NJ8Bj1tk2zjfG3VnvnRQ="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Ec5VOOiRZPk=",
+ "logRoot": "AAEAAAAAAAAAAiBqLcr2nVfnVVhl+RLEf6Ac/AEF2MCUmwjB7AE1nU0pQBWvqMk8iYnYAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIDTr3ykrPAD1w6YlZCp1LUiyCkAedhFYWdG3anmbnCWiAiEA1es887SsA1IU8TvYx0xfv8FsOBkRmoPpyiC4XbRWHdQ="
+ }
+ }
+ },
+ "mapLeavesByUserId": {
+ "bob": {
+ "vrfProof": "PsksYijl0f+pxnBAWE5K+kF3+lVisg59JZ6lqf3O8/u6z6rBYvu4UPKS6nLFIrZrZO0OuqwyDWVteDYn9n4cRgSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "FWe23DE9CnefBSVqywlR7eFff1hlO5WzKwz97y9c2LE=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg/xYaCmaSj8A4GrHJBR3uHzkOVHT+RzCzVrxmsVi+x4JCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAj4oouCEk6eye0x0gJ+OvCfyT4f8u3R2oR9xzb9I0CYoCIG93EO52yudSEEkUuLoKj77dHxTLO6tlen/Xq3X+JItC"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "AL1oZUt2p1JF5D/kMoi5QAeXDMfJAOKRVOYYm4xhkWI=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "U1sA4snyDBsTzjHt2HZPCw==",
+ "data": "Ym9iLWtleQ=="
+ }
+ },
+ "carol": {
+ "vrfProof": "Hp706xZGIi05bigFM3BVMq72/LzKi7469qI77N6VtHLSzuRuZyGsXm9V4rvKyD2zfhHV5gRUFfQksXEB3q5PnwSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "index": "JYx5mwUZM4rLnxSas5/NC9GiuqMYVWThqNqJdDz6bvw=",
+ "leafHash": "WyNJSMn2BbouZok1taEO2PNi59PX/oETjLL28XEmc9A=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgnMpJwNoyyHHq9OHoS0GADqscQItnWwXwYHowTBE0wXBCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiBXtv7+VtINTE3bPeFBhlfITwoeXdoekz7VZBwQ5b0CxwIgLfxtsKnuTmKlg5HXlSr2pjvITTVMDNok02ylSOQTWFM="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "PGtA1G8D3pAEQ70/EpYWfjI7dr6GOX7YmjB3Y3CB2HM=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "5AnHrMDTAod5XXQgyDFYog==",
+ "data": "Y2Fyb2wta2V5"
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "multi mixed",
+ "lastVerifiedLogRoot": {
+
+ },
+ "batchGetUser": {
+ "request": {
+ "userIds": [
+ "alice",
+ "bob"
+ ]
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgwlMPr4XLj7jtTRwk2JNcJIW+QEIA1+G7AXl/7a5kTR8Vr6jJLjuY0AAAAAAAAAABABISAhgBEgwQ+bG/w5KZ6tcVGAI=",
+ "signature": "MEUCIQD2YZgaEsWs6kyB5tsa6ZVAesfalXPdHUvKWCKRa+8mdgIgIrZ3ce1dJAHpUcWkgx7XYEeHbqd7fs7H4iCgZztQ4Z8="
+ },
+ "logInclusion": [
+ "Qp3RT4fw04wyqs9icst1tJ2NJ8Bj1tk2zjfG3VnvnRQ="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Ec5VOOiRZPk=",
+ "logRoot": "AAEAAAAAAAAAAiBqLcr2nVfnVVhl+RLEf6Ac/AEF2MCUmwjB7AE1nU0pQBWvqMk8iYnYAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIDTr3ykrPAD1w6YlZCp1LUiyCkAedhFYWdG3anmbnCWiAiEA1es887SsA1IU8TvYx0xfv8FsOBkRmoPpyiC4XbRWHdQ="
+ }
+ }
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "EKsciMDdKXH4oMoiSmAlSTJyRmXcSGJgGO33E/w6eeoXj7zO1Gztc0HLl/ZfM8cc/DTSBqH5k7hshTXdnM7C0gRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "vH6SqM1b2mz6CHCcQkm6/okqHkH6yR6tUzVixd0GVf4=",
+ "PGtA1G8D3pAEQ70/EpYWfjI7dr6GOX7YmjB3Y3CB2HM=",
+ ""
+ ]
+ }
+ },
+ "bob": {
+ "vrfProof": "t59+Eh2ulY+VH765BAUoIDTVajUfUw1E4pdMB0ugNo5mUs5PyEz+xjAgsteTr3dP77AG93lcHP9yHqxkGNmw8gSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "FWe23DE9CnefBSVqywlR7eFff1hlO5WzKwz97y9c2LE=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg/xYaCmaSj8A4GrHJBR3uHzkOVHT+RzCzVrxmsVi+x4JCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAj4oouCEk6eye0x0gJ+OvCfyT4f8u3R2oR9xzb9I0CYoCIG93EO52yudSEEkUuLoKj77dHxTLO6tlen/Xq3X+JItC"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "AL1oZUt2p1JF5D/kMoi5QAeXDMfJAOKRVOYYm4xhkWI=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "U1sA4snyDBsTzjHt2HZPCw==",
+ "data": "Ym9iLWtleQ=="
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/core/testdata/TestBatchListUserRevisions.json b/core/testdata/TestBatchListUserRevisions.json
new file mode 100644
index 000000000..854ff578c
--- /dev/null
+++ b/core/testdata/TestBatchListUserRevisions.json
@@ -0,0 +1,5129 @@
+{
+ "description": "TestBatchListUserRevisions",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "7166363604494653072",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "2254048446176788384",
+ "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"
+ },
+ "rpcs": [
+ {
+ "desc": "single revision",
+ "batchListUserRevisions": {
+ "request": {
+ "directoryId": "integration",
+ "userIds": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "startRevision": "7",
+ "endRevision": "10"
+ },
+ "response": {
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Y3QJurExFpA=",
+ "logRoot": "AAEAAAAAAAAACyC5Z0R8Ej236U42mngvWb3+cdA0HhKEj6AkuMTfJMUmohWvqM2AoObQAAAAAAAAAAsAAA==",
+ "logRootSignature": "MEUCIQD8O+kDxjXHFNEtkLQkIRb24iEdto3Qe/rsrN81BboNFQIgQoZfo28S5xyWvMvmq2HuD5O7ZHP0oLBfITM1b2PoZHA="
+ }
+ },
+ "mapRevisions": [
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEg6S1M18dISZuZIUA06VRXkvmOkqa/NxyuW4Yn7mjo98UVr6jMgbUbAAAAAAAAAAADABwSFgjJ79GLxpnq1xUQqd2ghsiZ6tcVGAESAhgC",
+ "signature": "MEUCIQDZjvy0V2HaU5jBwlDsbXSD3dAQo+VU+F1RIOcTJ/NHYAIgWVEX6wxmERbNTPz5oPaiXlsF9udzNPYXRNGQWviZotQ="
+ },
+ "logInclusion": [
+ "NClgzw9WRJJhxyf5iy484GNjm8p8q9lxyDDOKAFElwU=",
+ "DqgDOhHODMl6J9h5b9N++8hXVKwzXIaTgwHwAYD9Sk8=",
+ "XrFTKTJlYDz8l4LSk8vhy5YINX22DUh7cgx6mXSswu4=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "JkihVjISxMrZbhb6HjFHicgemZK+/DZ6RT3Ic79i83kyQP5qU7ykKlwVCvRWCa3eHPqYH9HCNw4d0wodOruFrwRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "G1PGyQmKlIPsr0YZ226Q5xrelQtT5lwuC79uMDNBD1o=",
+ "leafValue": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIg8kU8KaZp0e4Pg5h3VUCobpgnwTgfXJNHYxGuGOkI3sRCINXSAcfWXdzCHoF/IARw1fm5RGFSJju6Pb9i9Z8HWhadSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBZxA3/hh19I5e73V246ZApX9yBysmmXG4nH7eDCLIijQIhAPSirnDwhfjYtlozH4VdCxTdjyxDD08dW2GVDoF+lclU"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "vjmfgpct2sPL7E4+8S9DJQ3SsJi6VRZuha3yFS5iVJc=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "8DAmlmzC0n/Kw8GXjvS4gw==",
+ "data": "YmFyMg=="
+ }
+ },
+ "bob": {
+ "vrfProof": "/ADfJIvnIQ5qgKcU0vk1AXEYUJl9q80GERLj3fo2I9E61dVggHd8zjTVX1lnHFll6BY9kvI83zUBhVS0gbe45gSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "xYHsZU6km7C8DluGzdT2SuTuAmMH04HU3dbBcx0n7po=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgl1QOoX0onWSefcbiX+l8Dz1PSj093Pwu9RH0dk8ch9JCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBK5x+GXyDm1CskzE/NtSA+Q7hcRpvLI5CFd4sBIbOtVgIhAP5aELr99/pYmMGQqFnH2rTe1fxEa9cg3brgP3IFDgZw"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "pvMjdSazuMOmaOt64vkG5F/vyveXXz9/ZJYcgeFJ59Q=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "bqu/a+Dx8zt9ZRS8yoHFyg==",
+ "data": "YmFyMTE="
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "desc": "multiple revisions test 1",
+ "batchListUserRevisions": {
+ "request": {
+ "directoryId": "integration",
+ "userIds": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "startRevision": "7",
+ "endRevision": "10"
+ },
+ "response": {
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Y3QJurExFpA=",
+ "logRoot": "AAEAAAAAAAAACyC5Z0R8Ej236U42mngvWb3+cdA0HhKEj6AkuMTfJMUmohWvqM2AoObQAAAAAAAAAAsAAA==",
+ "logRootSignature": "MEUCIQD8O+kDxjXHFNEtkLQkIRb24iEdto3Qe/rsrN81BboNFQIgQoZfo28S5xyWvMvmq2HuD5O7ZHP0oLBfITM1b2PoZHA="
+ }
+ },
+ "mapRevisions": [
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgvskiTSQCBJdpunasD8k5OdpNRyz2EWcYSqbwAmktw9MVr6jMotBLcAAAAAAAAAAEABwSFgip3aCGyJnq1xUQ+Yu9j8qZ6tcVGAESAhgC",
+ "signature": "MEUCIQDS8MHHn1OFefpASF7s7yKu5ebt4p8FnnUv4HoAGOCCawIgClMmA37N2ZGqIdRVrGPaHxl4H9Q16STpcplgWdwqhGM="
+ },
+ "logInclusion": [
+ "H3iHh8IwPkaLFR2LkEmCExEj/9ugnsk5D39KbkEXbzI=",
+ "KDGZlKoHioXxD8aCtoc/PBuCcuO2bqqcVh2m394SCNE=",
+ "fIM8vK7FdNCcIudgq87V4KsM+ZerLv8Xyq6nUvZysT8=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "carol": {
+ "vrfProof": "14j1vtSLzLiSHQNmPWAmtmeL75OvM7J8KzYcCIFxZD+YKOD4AHQgqbxaGYkS3kep0k8tlONSz0OWccpDupOO0QSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "M0G0YU8wkQ96x9ElI8HF/Fx0CbhSC2LkQO6cgXDOrlo=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgr66S9xllU7ql0I07gd19DGJv5GkTaG2eMKRC+RxitStCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAoTVKvWjdy7w9KtTIp2wDPpIjsQvtYGdM4CuS5hfPmbUCIAIZ5h2Ni3mHLD8aQqv/EglzHAJzDIKtDhWcmWMrnOeN"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "9jMJXxrdQIM2pnbOMYTYkadkIzW7QyAd6cYWbB4M/3w=",
+ "vjmfgpct2sPL7E4+8S9DJQ3SsJi6VRZuha3yFS5iVJc=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "G1jC1xOh2V3r6zJ2mlxm3A==",
+ "data": "YmFyMjE="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEg9aYr9fUbcD8kubIYIFucHfTkD4oo/2uJ4szeYR1SGO0Vr6jMwNp68AAAAAAAAAAFABwSFgj5i72Pypnq1xUQmdjM/8uZ6tcVGAESAhgC",
+ "signature": "MEQCIElqhfkvon0nl5h4/8bTnEJdEm/7EE/sUJP6C3vcDvDqAiB7nbo9JzryxMnofmfj04MWCKHSe9UlbRR+ONYWFs4aRg=="
+ },
+ "logInclusion": [
+ "S6fyZyFfZJOioSwrnb/xIqjDxqnRJHP+ocEB1VBT19E=",
+ "KDGZlKoHioXxD8aCtoc/PBuCcuO2bqqcVh2m394SCNE=",
+ "fIM8vK7FdNCcIudgq87V4KsM+ZerLv8Xyq6nUvZysT8=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "carol": {
+ "vrfProof": "CwITa8kVEYLJSwP9si2FqlrYU37l/TtFJIxvFav0y34iUvBCDbXKVLWqCGyCUgv0gAcneBXCfdpjvgEDnBecSASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "pyEQPyzO8mW9FQnNk1FYSG5UESZq/baj30s1h2uudC8=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgVHwy5kyjQAujnjBbfdBPoLgdY1ykHEI1f2WEXhLXIhlCIBrS/3b7EhhtnAQpk/tlHUnl6r5/Gafs6VwPUZiNsFCYSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBUsEEVZtFLQMEZ+TvbP5kmZVrZmffDGa2Cw96YSgmYSwIhANRHi9+P3Ee2Qp1CozWf87nd8h3u/X9nKLTDUfd8OzIK"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "9jMJXxrdQIM2pnbOMYTYkadkIzW7QyAd6cYWbB4M/3w=",
+ "vjmfgpct2sPL7E4+8S9DJQ3SsJi6VRZuha3yFS5iVJc=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w3ksr+CR6Uy6zMdyIdQ6tQ==",
+ "data": "YmFyMjI="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgnUGp6acNA92AiAEdgu1/Yljcbg4WSjYFO9r4+kAdmPkVr6jM36ewOAAAAAAAAAAGABwSFgiZ2Mz/y5nq1xUQmdmu9c2Z6tcVGAESAhgC",
+ "signature": "MEYCIQCFIt5UBTf/072/2G9E2A56ulE7hNx699Ot3LEoYPp9TwIhAJhvFjQoHPWIdCGnLEcM2j6kDk9fM27m0gQA+UiBG4li"
+ },
+ "logInclusion": [
+ "VIRPV53kTxgS+G7aMjzf8znodRxVOTZ5o8r1NX0y0jo=",
+ "AhZ35RRm9cneTGOfppdxCmj6tGyZ7Sl958R6RyB0rc0=",
+ "fIM8vK7FdNCcIudgq87V4KsM+ZerLv8Xyq6nUvZysT8=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "carol": {
+ "vrfProof": "I75hOKzf+ClocGbMFR58YHfLJbs4s1DfgS5waD/MN0MP2cJs4NBDzjlOiiwfjrGtpAd4IzgbvqomnXWAv+baFASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "pyEQPyzO8mW9FQnNk1FYSG5UESZq/baj30s1h2uudC8=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgVHwy5kyjQAujnjBbfdBPoLgdY1ykHEI1f2WEXhLXIhlCIBrS/3b7EhhtnAQpk/tlHUnl6r5/Gafs6VwPUZiNsFCYSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBUsEEVZtFLQMEZ+TvbP5kmZVrZmffDGa2Cw96YSgmYSwIhANRHi9+P3Ee2Qp1CozWf87nd8h3u/X9nKLTDUfd8OzIK"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "9jMJXxrdQIM2pnbOMYTYkadkIzW7QyAd6cYWbB4M/3w=",
+ "Ufb6dTrjubt4EQWE0C91a83Yh1ijgsvBhjvczGMEOg0=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w3ksr+CR6Uy6zMdyIdQ6tQ==",
+ "data": "YmFyMjI="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEg98DFdpFzqhRhdKmZvr5uP0MfzW8oF54QXPt2JoLWCREVr6jNAn7koAAAAAAAAAAHACYSFgiZ2a71zZnq1xUQmdmu9c2Z6tcVGAESDBCpwsyM0Jnq1xUYAg==",
+ "signature": "MEYCIQCqN0DCf7XWqk0U7gKrht/6jjcVFZH+BmPLsmLgjC7JRwIhAI8LZL2xd29IdN+FX/oEn72XWJh2dWdC2dgbgRITi1Hc"
+ },
+ "logInclusion": [
+ "269ZZbOtb6KDil4j5WG/XnmJxIRll3ITEj/xwvCCqi8=",
+ "AhZ35RRm9cneTGOfppdxCmj6tGyZ7Sl958R6RyB0rc0=",
+ "fIM8vK7FdNCcIudgq87V4KsM+ZerLv8Xyq6nUvZysT8=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "carol": {
+ "vrfProof": "J3pANTPJn0Mzqf0jsbpZLl1LzrJNOOrmc4oRsKG4+29cY0T2e77tM6CccGiVchpEswIJy9yTP3jCpzPlk/QS7wSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "pyEQPyzO8mW9FQnNk1FYSG5UESZq/baj30s1h2uudC8=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgVHwy5kyjQAujnjBbfdBPoLgdY1ykHEI1f2WEXhLXIhlCIBrS/3b7EhhtnAQpk/tlHUnl6r5/Gafs6VwPUZiNsFCYSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBUsEEVZtFLQMEZ+TvbP5kmZVrZmffDGa2Cw96YSgmYSwIhANRHi9+P3Ee2Qp1CozWf87nd8h3u/X9nKLTDUfd8OzIK"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "gw7oE4UyJJLThpC06/udree1BCaSUmGtxeyfCsOnjz8=",
+ "Ufb6dTrjubt4EQWE0C91a83Yh1ijgsvBhjvczGMEOg0=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w3ksr+CR6Uy6zMdyIdQ6tQ==",
+ "data": "YmFyMjI="
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "desc": "multiple revisions test 2",
+ "batchListUserRevisions": {
+ "request": {
+ "directoryId": "integration",
+ "userIds": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "startRevision": "7",
+ "endRevision": "10"
+ },
+ "response": {
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "Y3QJurExFpA=",
+ "logRoot": "AAEAAAAAAAAACyC5Z0R8Ej236U42mngvWb3+cdA0HhKEj6AkuMTfJMUmohWvqM2AoObQAAAAAAAAAAsAAA==",
+ "logRootSignature": "MEUCIQD8O+kDxjXHFNEtkLQkIRb24iEdto3Qe/rsrN81BboNFQIgQoZfo28S5xyWvMvmq2HuD5O7ZHP0oLBfITM1b2PoZHA="
+ }
+ },
+ "mapRevisions": [
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEg98DFdpFzqhRhdKmZvr5uP0MfzW8oF54QXPt2JoLWCREVr6jNAn7koAAAAAAAAAAHACYSFgiZ2a71zZnq1xUQmdmu9c2Z6tcVGAESDBCpwsyM0Jnq1xUYAg==",
+ "signature": "MEYCIQCqN0DCf7XWqk0U7gKrht/6jjcVFZH+BmPLsmLgjC7JRwIhAI8LZL2xd29IdN+FX/oEn72XWJh2dWdC2dgbgRITi1Hc"
+ },
+ "logInclusion": [
+ "269ZZbOtb6KDil4j5WG/XnmJxIRll3ITEj/xwvCCqi8=",
+ "AhZ35RRm9cneTGOfppdxCmj6tGyZ7Sl958R6RyB0rc0=",
+ "fIM8vK7FdNCcIudgq87V4KsM+ZerLv8Xyq6nUvZysT8=",
+ "19gCYUgFiHJeEOnGXuIeJ8sNnaEcAbX1ql+JWVQSoCo="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "jZZXQypyh3EbB1PQl8bJraSlh3OkgQMhO8KGs7xa/3qF4d9OJC7rlos18O749eDcpZbkLdu/tjB3WrzLyIuKXQRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "CWHh/WxWO7yC6JEEC4HIVJ3mypGXarZXeTaV86LV8Qs=",
+ "leafValue": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgLi12F5xJYnS+wc/SBRiqDOjmS5D3u5Mp1tAqOk/R8zZCICopC/kKCgKnjPJtoV/nWCHXAF0B2SLK9D5AOHMaeyZHSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAjenNPxqGo1GigqL3F+IfPU0w9N+RuybPF4lbzrp8BckCIC2ZlNBqI3bPTFnKaq5eiMWwuZNoM/0WLauXh3+lq4XR"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "18Pv3OBds0lrkg+DalxandkWa3mpd6/FXzgS1KXRfEE=",
+ "Ufb6dTrjubt4EQWE0C91a83Yh1ijgsvBhjvczGMEOg0=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "RXR2D20jyWa9Kd4bXH7NIw==",
+ "data": "YmFyMw=="
+ }
+ },
+ "bob": {
+ "vrfProof": "eRBFn6yu7SQkyDLVMWPqEIpLaOsJq8g8bxg17u/MCkm/7tMkM5SzdpY5li3kdeVFMMtNNKBM4BQR+df3kp3cUASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "GSTfhCqJahzBl/fQ/lJp93UJ098qE0CTeTZ2WsyOzcQ=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgPEtbLU7133vhn9M9m6ICFR57rLWb37cv8H13pIxTZ1ZCIP0T5Qw+/i6I69+BQoVqGci9o5E0lbYIVsTE45f8xOtmSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiBeS3dwCBvtWVW0T3ESRppVvi1Kf7HlItsj9BhYWK0ZugIgCe/LqI93IhajHlPKMXArvC1SmUSFl0+6wZLKws7E8Qg="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "K4Q4pIuVzPKVmRmHk1PhQKuNyDscBGrlhhRyTlkGQXk=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "mEh41k1KI+ejbIOW88C9CA==",
+ "data": "YmFyMTI="
+ }
+ },
+ "carol": {
+ "vrfProof": "Un2JJgv0txWap5EcjsO/zFYnM8rBOKwok9H4lXkRKOIBI39Yc3wgKWGlflSJ62gihcZLZp6zhydNdHyGgmLncgSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "pyEQPyzO8mW9FQnNk1FYSG5UESZq/baj30s1h2uudC8=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgVHwy5kyjQAujnjBbfdBPoLgdY1ykHEI1f2WEXhLXIhlCIBrS/3b7EhhtnAQpk/tlHUnl6r5/Gafs6VwPUZiNsFCYSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBUsEEVZtFLQMEZ+TvbP5kmZVrZmffDGa2Cw96YSgmYSwIhANRHi9+P3Ee2Qp1CozWf87nd8h3u/X9nKLTDUfd8OzIK"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "gw7oE4UyJJLThpC06/udree1BCaSUmGtxeyfCsOnjz8=",
+ "Ufb6dTrjubt4EQWE0C91a83Yh1ijgsvBhjvczGMEOg0=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w3ksr+CR6Uy6zMdyIdQ6tQ==",
+ "data": "YmFyMjI="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgyFY5xbYY2TSwxaKcb7k/t6sKdVA+jRPSDRhS3IeKmqAVr6jNDSn0+AAAAAAAAAAIADASFgiZ2a71zZnq1xUQydLM4dCZ6tcVGAESFgipwsyM0Jnq1xUQqcLMjNCZ6tcVGAI=",
+ "signature": "MEUCIQDvgWeIx1HvJ70Y8JrOth9/SH3PQsf7lL5AmOh+sRd9bwIgIe3NUALkfYb7QmaCYloC8aUEOsGxXlH++yMD35ebt28="
+ },
+ "logInclusion": [
+ "Nw5RAbCQnHz+gf+PFR6AbmSKXSS5/r5FVphOrk98sMs=",
+ "gmmYPuQz6Hsm7LaN2gnf6u8edMC8qNw74VfSQTUR7Qo=",
+ "fOTiHTs/fpwQCX/S0FV3FFBLGDcBbC8N2uFuQ5Rya0M="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "mKf7mjkP40wdJTY41RPH18pO9hQm4anL/2yiKznD5uirsETI9UoK1GC23FMwQdaPWpj8CrM7qfqCfigbBj8srgRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "CWHh/WxWO7yC6JEEC4HIVJ3mypGXarZXeTaV86LV8Qs=",
+ "leafValue": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgLi12F5xJYnS+wc/SBRiqDOjmS5D3u5Mp1tAqOk/R8zZCICopC/kKCgKnjPJtoV/nWCHXAF0B2SLK9D5AOHMaeyZHSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAjenNPxqGo1GigqL3F+IfPU0w9N+RuybPF4lbzrp8BckCIC2ZlNBqI3bPTFnKaq5eiMWwuZNoM/0WLauXh3+lq4XR"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "18Pv3OBds0lrkg+DalxandkWa3mpd6/FXzgS1KXRfEE=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "RXR2D20jyWa9Kd4bXH7NIw==",
+ "data": "YmFyMw=="
+ }
+ },
+ "bob": {
+ "vrfProof": "fBs+hMbHZTMe8cyKl4SXdkukwnVfGn8GmkMlhfH3H5w5U9yAQtm5204nk7MnRGvNjUSSvQOBW+DgsmOgdfTCywSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "LJB9n/vSrBEKJr2c22qFcMBtCkQvD+5rtpwnaIqVuj8=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgXMZ3mAC8SGBbxoTcuXfW0MgGoWOLeAR98Li1zgTG3nRCIBQAeB5CZzNAxpJWso36BgBj35CSAhbsqBOcEHeN2youSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEAoxL5Mg7lmyKKrVdp1KmzmzIDCyjvXyzSX/sKIF94qAECIQDLI6TQXnrRkVmdrngwJNvMqXy51BRMsF4eYVjzdNzDfA=="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "K4Q4pIuVzPKVmRmHk1PhQKuNyDscBGrlhhRyTlkGQXk=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "OTNXp7uDQsHx5fRLMHrs3g==",
+ "data": "YmFyMTM="
+ }
+ },
+ "carol": {
+ "vrfProof": "GfexYxLkem6k03aZQ1i/75f7VCCRveQzGsIJk3ACBEyLlv6TCLNebXl4WO0bcvXRxycX2JsixMUDFhKOE0dRvASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "pyEQPyzO8mW9FQnNk1FYSG5UESZq/baj30s1h2uudC8=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgVHwy5kyjQAujnjBbfdBPoLgdY1ykHEI1f2WEXhLXIhlCIBrS/3b7EhhtnAQpk/tlHUnl6r5/Gafs6VwPUZiNsFCYSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBUsEEVZtFLQMEZ+TvbP5kmZVrZmffDGa2Cw96YSgmYSwIhANRHi9+P3Ee2Qp1CozWf87nd8h3u/X9nKLTDUfd8OzIK"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "gw7oE4UyJJLThpC06/udree1BCaSUmGtxeyfCsOnjz8=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w3ksr+CR6Uy6zMdyIdQ6tQ==",
+ "data": "YmFyMjI="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgZEm4TE3wImqQqk7+IPOMK37yXtcN7m9FGhnWs7Nn4FcVr6jNLXf5+AAAAAAAAAAJADASFgjJ0szh0Jnq1xUQydLM4dCZ6tcVGAESFgipwsyM0Jnq1xUQwa6w5NKZ6tcVGAI=",
+ "signature": "MEUCIAyd7IedkRgbPDDDVYl5eNCfUiijpyFqAWbxvbW1PH7fAiEA/Z9ZUYuJTYEoB5VKKdIW/iLkNTC4DGc9ga61BJ+s8Iw="
+ },
+ "logInclusion": [
+ "N7gTBVGfUtzS6W+XcxDsQ7qKj7bttvZt6HwFpyQ+Wa4=",
+ "gmmYPuQz6Hsm7LaN2gnf6u8edMC8qNw74VfSQTUR7Qo=",
+ "fOTiHTs/fpwQCX/S0FV3FFBLGDcBbC8N2uFuQ5Rya0M="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "Xkqrw09++aCnjPjtcSb+bBE3xQcQ209EzyLkRi2DKAmW53M5gCtjqWd1qYo9PzvQ+ipDP2U3ckBGtC7WO1hapgRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "CWHh/WxWO7yC6JEEC4HIVJ3mypGXarZXeTaV86LV8Qs=",
+ "leafValue": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgLi12F5xJYnS+wc/SBRiqDOjmS5D3u5Mp1tAqOk/R8zZCICopC/kKCgKnjPJtoV/nWCHXAF0B2SLK9D5AOHMaeyZHSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAjenNPxqGo1GigqL3F+IfPU0w9N+RuybPF4lbzrp8BckCIC2ZlNBqI3bPTFnKaq5eiMWwuZNoM/0WLauXh3+lq4XR"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "aDcB5azUaaFrQIoGSmUAJ+SgRqSy5LJA/nR9igOjctw=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "RXR2D20jyWa9Kd4bXH7NIw==",
+ "data": "YmFyMw=="
+ }
+ },
+ "bob": {
+ "vrfProof": "AQZ0W5IcdyZoDLhzqNhvmFf1RDmA+vCdQmxu9Jzo5Yo7LupdEFL/shFTYaDMmyYMOEYffm5mtdws5g2swWxW6gSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "LJB9n/vSrBEKJr2c22qFcMBtCkQvD+5rtpwnaIqVuj8=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgXMZ3mAC8SGBbxoTcuXfW0MgGoWOLeAR98Li1zgTG3nRCIBQAeB5CZzNAxpJWso36BgBj35CSAhbsqBOcEHeN2youSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEAoxL5Mg7lmyKKrVdp1KmzmzIDCyjvXyzSX/sKIF94qAECIQDLI6TQXnrRkVmdrngwJNvMqXy51BRMsF4eYVjzdNzDfA=="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "43PuvVmZFzkcVEKfwZYRgMt+WuQxxsAfGzbRY5mq0c4=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "OTNXp7uDQsHx5fRLMHrs3g==",
+ "data": "YmFyMTM="
+ }
+ },
+ "carol": {
+ "vrfProof": "sC0+yhNP2iVujRf2qplPFwEOcUwVumNdqY3ZHpnALU/+SB6pRuO6AAJ4xJZpNpWPhJIDTVftp985RxoTYB9XyASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "Avshcj7ULBqV09Y7rCn2cUWlMN9OUgf0YCJyK6MTQdo=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgwkKS6ZSEG8ao8xUxsZH0sEWlP59kLFpU65oiCl5VBjRCIHU0X2mNzU2lC6piS5htUbEWC/aS+YrIKOBq9daTCrR3SpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAqNvSDBtHPlAc2naJ30Pe4K9PAXcnmgSHTi6Jj1uYP6kCIGOwqGWzyeo51M+BKXI6MI+zKo7u04UXpgveHpX20l0x"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "gw7oE4UyJJLThpC06/udree1BCaSUmGtxeyfCsOnjz8=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "w86CYu8sB5beeBzMd18NJA==",
+ "data": "YmFyMjM="
+ }
+ }
+ }
+ },
+ {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgMtkp85eJbF9BEZmZmo5ZYTAB+HvmA2htushv2knbC/sVr6jNak9ySAAAAAAAAAAKADASFgjJ0szh0Jnq1xUQ0c3AytaZ6tcVGAESFgjBrrDk0pnq1xUQwa6w5NKZ6tcVGAI=",
+ "signature": "MEQCIFeh6tXz6VHvW2qTppofcaS33wltV83yh54X1aQoDA2bAiBJbUfYjk3JbDioS21a52kfk/0F4vMa/1Pis3pwVKCLNw=="
+ },
+ "logInclusion": [
+ "CejQKE0jo8Q0iqgFxYUf2OgrDrFeETD2eFtz5JGVeYc=",
+ "fOTiHTs/fpwQCX/S0FV3FFBLGDcBbC8N2uFuQ5Rya0M="
+ ]
+ },
+ "mapLeavesByUserId": {
+ "alice": {
+ "vrfProof": "qQQqRIWFnLfH02Q2wxArbbdXo3/z7KR6anKu92DaHITY6b4709mzb34ayRlWxI2fNPsZ0QtYkAFCDCHN6dPH4ARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "CWHh/WxWO7yC6JEEC4HIVJ3mypGXarZXeTaV86LV8Qs=",
+ "leafValue": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgLi12F5xJYnS+wc/SBRiqDOjmS5D3u5Mp1tAqOk/R8zZCICopC/kKCgKnjPJtoV/nWCHXAF0B2SLK9D5AOHMaeyZHSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAjenNPxqGo1GigqL3F+IfPU0w9N+RuybPF4lbzrp8BckCIC2ZlNBqI3bPTFnKaq5eiMWwuZNoM/0WLauXh3+lq4XR"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "0abBMq20W4Eh8+SBRJWQeUOm0O3euiBwzijqUO+T+xM=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "RXR2D20jyWa9Kd4bXH7NIw==",
+ "data": "YmFyMw=="
+ }
+ },
+ "bob": {
+ "vrfProof": "vy4u6asClkDpaIawJF8k+zL314INe//Xpo6hHtck1oQ8H0A4wno5guIRqLJ9F5jXB+5/bHRtuSx0K2xc4ah/iASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "LJB9n/vSrBEKJr2c22qFcMBtCkQvD+5rtpwnaIqVuj8=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgXMZ3mAC8SGBbxoTcuXfW0MgGoWOLeAR98Li1zgTG3nRCIBQAeB5CZzNAxpJWso36BgBj35CSAhbsqBOcEHeN2youSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEAoxL5Mg7lmyKKrVdp1KmzmzIDCyjvXyzSX/sKIF94qAECIQDLI6TQXnrRkVmdrngwJNvMqXy51BRMsF4eYVjzdNzDfA=="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "o24rU07fnwVPWZs8fQO8BdO7/JjmEVpdEONjy3zhsmU=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "OTNXp7uDQsHx5fRLMHrs3g==",
+ "data": "YmFyMTM="
+ }
+ },
+ "carol": {
+ "vrfProof": "aD1EKovHq5wBjY/iXoYQkm+AWZGNTrocNDj/ooW0ZsFlG0oG1+oKRBOTfc1fJWEpnRZlrrKTFA3ncrQJSspx8wSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "leafHash": "0b4MEMUD7AkhW2Ulzz5NrRlKMpjAfOJERoxTOdrPnNc=",
+ "leafValue": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgJw5L2wdsBXLexmPAI2h65kT+dgErPxxjg4vRIjSQkdVCIEUkaJw9ooZkWxyGXUSWFDaPChHZsg0olwvAyhqMru2eSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEApH6/TU74c7Ms0IHmGc2SjXQPWV9NLRtJ5fMSgjMYeZwCIQCOOb7mhARS6igY+R6pnjP68h2nAtShZWC+GwyUvJjqtQ=="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "gw7oE4UyJJLThpC06/udree1BCaSUmGtxeyfCsOnjz8=",
+ "CQk/CayXNGE/Cxw6hNy3xWC1plmPcP1UDW3bUiN8x24=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "y50z37qM+fzuEMb4zugJtg==",
+ "data": "YmFyMjQ="
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/core/testdata/TestBatchUpdate.json b/core/testdata/TestBatchUpdate.json
new file mode 100644
index 000000000..36df95444
--- /dev/null
+++ b/core/testdata/TestBatchUpdate.json
@@ -0,0 +1,31 @@
+{
+ "description": "TestBatchUpdate",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "532508971529424315",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "2567834446019030304",
+ "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/core/testdata/TestEmptyGetAndUpdate.json b/core/testdata/TestEmptyGetAndUpdate.json
new file mode 100644
index 000000000..fa04b9dfa
--- /dev/null
+++ b/core/testdata/TestEmptyGetAndUpdate.json
@@ -0,0 +1,2180 @@
+{
+ "description": "TestEmptyGetAndUpdate",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "4652464534098148926",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "2982758428897235112",
+ "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"
+ },
+ "rpcs": [
+ {
+ "desc": "empty_alice",
+ "lastVerifiedLogRoot": {
+
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "alice"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgpFhAue92brGIkyHgozYWeTucuVGN8uy0eD5AobIyz1kVr6jH+Tip0AAAAAAAAAAAAAA=",
+ "signature": "MEQCIHlRXbOFygtknni3xHGFxU2XBKUfdt8jQctajwa6AfcpAiAj/gh0Xf69zvWDK7ocKNdwH13mrritbPGD4mJRbGmOng=="
+ }
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAAASABFOrjZKP3UIzO/LD+eiBCuaH479VOEbZ+4SLpUaQq5xWvqMgVKbloAAAAAAAAAAEAAA==",
+ "logRootSignature": "MEQCIBC9a+IIH7BbFIMRl3iQ//rIH7SqT9SkmUPl4MHRoZrpAiBdyzkJ4oHWpGrdJ8vizoKdDm6WpIBgkY3iqAfz8dZc+g=="
+ }
+ }
+ },
+ "leaf": {
+ "vrfProof": "ML5Vn7hFjfoiqoimOzUp3CAnuFLZGMbr6BXpKlyAcnMk3ij6Rf3PsGciEeWgoAUJppMuQboLlN40vdcmef1u0gRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
+ "mapInclusion": {
+ "leaf": {
+ "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "bob0_set",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "bob",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgxczHSh5YruwDiIXb7cqAtDRkBcyjvVY6phmxh9RIPv8Vr6jIN8yu0AAAAAAAAAABABISAhgBEgwQ6fWcpoOZ6tcVGAI=",
+ "signature": "MEUCIH/tcVzbUElVSmeyqMJeCxgjJvsbEeZEJyN94OVx7p70AiEArEDwsWoaPtNVrZ2scvlBZgRhtoZSu11eDZBBrwxgG6Y="
+ },
+ "logInclusion": [
+ "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAAAiBAD/qSNEHq7/VBI3yBJa5FhXaRGvYIjI7+HFkkkdLVIBWvqMhQ+iXgAAAAAAAAAAIAAA==",
+ "logRootSignature": "MEUCIQCSsindXTr8Xca24UOBnuFxuCOkVixn4BUr5xsfDMIVtAIgRTXrwx5Amko/lSsEFrW4QzPUK6vRo8LRQ60jOCf+nSk="
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "45MwM9G0ggkamqrfNHCn2O8nETpkpd5T7isONhKNx4nDFzL7Hb6x7W7AQrMzadLzk1LJPbN+YgIcw9Dq9237XQSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "mOn7l4rtjVZTD++VIttfbR65a3HAISvK5roSfqdHyD4=",
+ ""
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "set_carol",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "carol",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgJ4gGRn8cmJXILVp8NhL5x7xlPi7KJs47z5hgPhloLYQVr6jIXAiP0AAAAAAAAAACABwSAhgBEhYI6fWcpoOZ6tcVEPGk+biFmerXFRgC",
+ "signature": "MEQCIDoH2pkXEKB36GU1k6aDKC9XIhkhp1Chw/wmw36voJ9HAiA8aBkj9cM+Iat1AJBAq0HW2cVxDQ+HA8PdBd+ccJc0IA=="
+ },
+ "logInclusion": [
+ "QA/6kjRB6u/1QSN8gSWuRYV2kRr2CIyO/hxZJJHS1SA="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAAAyBv008DnWpxPOb5tS4Ih8IKkgjXIxPOzbpLlvoKD7cBBxWvqMhuz6UYAAAAAAAAAAMAAA==",
+ "logRootSignature": "MEUCIQDDDXOQ2b12T+X/oqGIStQ+57/B89cjRw98hEwcsc9wVAIgKdOIj4Vi4rBrKZ98EaL7HfUL75w16oVgY0RNbwoBOLM="
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4=",
+ "6eO/eSZDzRuPwXRN53MfPOdt/eJ9oHFfVc2vltWHkdg="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "xK8ZigdCRTXNVgJfOAT3e55h38JnOhGZDl1v4E81Y2oUx7DIlAe9vfjD6YE9LbxCK7YsmL6zENr9bVYRsLPNigSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
+ "mapInclusion": {
+ "leaf": {
+ "index": "JYx5mwUZM4rLnxSas5/NC9GiuqMYVWThqNqJdDz6bvw="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "NjmXG16cfVZTwt2DvgynfNuny7AUEQbfYkfAiqvgiWw=",
+ "K1QpNYKTVuNWwOO7rmAdkSgJEcoRkQbZbUFQpbvT9pE=",
+ ""
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "bob1_get",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "bob",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgo6GbVxP1NS/asAMSs6Q0Bpgtye6g09V/bL21VmnRa6IVr6jIeUPmMAAAAAAAAAADABwSAhgBEhYI8aT5uIWZ6tcVELnS3LSHmerXFRgC",
+ "signature": "MEUCIQCO/WuAKJn1d6IzphlOLSK/lGrtWOjCMYAiZ8U51F1eTgIgbBb3tHzOekpl18QmmDPvxuG9M8D1/X0YdUMlsZ19aS0="
+ },
+ "logInclusion": [
+ "6eO/eSZDzRuPwXRN53MfPOdt/eJ9oHFfVc2vltWHkdg=",
+ "QA/6kjRB6u/1QSN8gSWuRYV2kRr2CIyO/hxZJJHS1SA="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAABCCdRcIlnNkvQlTQuwOpWqJ5pU2+dc0Pd+zj4sygecdZwhWvqMiMpJewAAAAAAAAAAQAAA==",
+ "logRootSignature": "MEUCIBUyOJSLKw0MefrxkR223BRW81S6nt/LBksbFiyTZHKTAiEAqwGcJhTdwdCIUkvaCKlgpw6brwgezWVD6spjyauulv4="
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4=",
+ "5LiZAoPBkclCzQ0HPaEnabfe2xZve3edrkGr2V3Uz04="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "L5aELoKsUIeFS4blJWjT9HXM0A7xGMCs1F+KF119k6u4lqIZDRdmQlMqUGcUUaKFm/76J+ibTPJDYURNK3aO1wSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "ZCQtLhAEQn62WHfohOp5EMGWjiacszjp9G9wIqWqVQk=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgSuMJM/Ih9adaBBH4RG5h4dymNNqTnPsix3Ul2j7Gyj1CIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiADhfcVXRPdkOZjOgTRuE1/JfIR/Ts/+EP4M7EYozlgMAIhAKj1BOd+WJ0ChFC0iErPdgWZGwrP3ZaxKjmyIHhnYF2M"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "EnxDkfdf9WFuKcuCuo2wbfFVIYvFwU+OXZAiBkVJwWQ=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "yYH8eEabXNz8iV3if8uzRA==",
+ "data": "Ym9iLWtleTE="
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "bob1_set",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "bob",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgo6GbVxP1NS/asAMSs6Q0Bpgtye6g09V/bL21VmnRa6IVr6jIeUPmMAAAAAAAAAADABwSAhgBEhYI8aT5uIWZ6tcVELnS3LSHmerXFRgC",
+ "signature": "MEUCIQCO/WuAKJn1d6IzphlOLSK/lGrtWOjCMYAiZ8U51F1eTgIgbBb3tHzOekpl18QmmDPvxuG9M8D1/X0YdUMlsZ19aS0="
+ },
+ "logInclusion": [
+ "6eO/eSZDzRuPwXRN53MfPOdt/eJ9oHFfVc2vltWHkdg=",
+ "QA/6kjRB6u/1QSN8gSWuRYV2kRr2CIyO/hxZJJHS1SA="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAABCCdRcIlnNkvQlTQuwOpWqJ5pU2+dc0Pd+zj4sygecdZwhWvqMiMpJewAAAAAAAAAAQAAA==",
+ "logRootSignature": "MEUCIBUyOJSLKw0MefrxkR223BRW81S6nt/LBksbFiyTZHKTAiEAqwGcJhTdwdCIUkvaCKlgpw6brwgezWVD6spjyauulv4="
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4=",
+ "5LiZAoPBkclCzQ0HPaEnabfe2xZve3edrkGr2V3Uz04="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "xS0TpBr7cV8OmJRR1hHCVZNNoNfFFxLzBZh9bq/eP3ZJPCbGlTA9mOxGgGNDzbvScHHZRBiWm3Dgl5o4VhS4ywSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "ZCQtLhAEQn62WHfohOp5EMGWjiacszjp9G9wIqWqVQk=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgSuMJM/Ih9adaBBH4RG5h4dymNNqTnPsix3Ul2j7Gyj1CIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiADhfcVXRPdkOZjOgTRuE1/JfIR/Ts/+EP4M7EYozlgMAIhAKj1BOd+WJ0ChFC0iErPdgWZGwrP3ZaxKjmyIHhnYF2M"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "EnxDkfdf9WFuKcuCuo2wbfFVIYvFwU+OXZAiBkVJwWQ=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "yYH8eEabXNz8iV3if8uzRA==",
+ "data": "Ym9iLWtleTE="
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "bob2_setkeys",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "bob",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgdCW0p7/a6U+/5//nsOy8gYOhZCKdxA79YBvR08wrxwMVr6jIlwgrQAAAAAAAAAAEABwSAhgBEhYIudLctIeZ6tcVEOG6xqSJmerXFRgC",
+ "signature": "MEYCIQDj9qcDmwshndwO/R660h+J36C2yM5gO7+RPnwq1/LJ1AIhALo+qUHAV/lykNiLTRYlrVZPwkf736gUXFaHsZIHHYDG"
+ },
+ "logInclusion": [
+ "nUXCJZzZL0JU0LsDqVqieaVNvnXND3fs4+LMoHnHWcI="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAABSCCPk/Vxa8D3cECGzfGquzS58HeQlxfBAUe2S9tiIZAIhWvqMiqtNngAAAAAAAAAAUAAA==",
+ "logRootSignature": "MEQCIBEAqpTqDcTjDJmbEcPsZwxlJzsHtxvvrUBFfNIC8PhDAiAneb4m5NXEND/VCrTm+RA6XPM320OpBPml2c4Wr1T9nA=="
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4=",
+ "5LiZAoPBkclCzQ0HPaEnabfe2xZve3edrkGr2V3Uz04=",
+ "zBALLoZ1+2r1OOAHqeGbsytzDIzZx6PiPmiQQzBnIfs="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "xg+L/29/xt38q6B8Ykqp+RHRjW9C0NGsD/V5KJqvb7gXsUKD6yAw/8llRsuQwfNscoEJZ1oU/TJqJ34Quj3ctwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "pzHv0HWQ3scULCMltKCiJ0zv6tgH0ALuNoRUsekDkEE=",
+ "leafValue": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgAL7lS/GTrEe6KWrneuWnNCty3hXt45gXUEBAGS/yqmVCIHtvjEatNjvRbh27qsMh+fiVaOYVvrRU2UuKWHzV/MZUSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEA4Y8gSd/zVHLoUihSJLFhAoib/7n7+UePInes3xt0s+wCIHUHpXpe2WjpByWvhLEcSqrqoaTHw25X1ygN7jNsGrn6"
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "EnxDkfdf9WFuKcuCuo2wbfFVIYvFwU+OXZAiBkVJwWQ=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "/ROrkSXeAwnHaa+DGH9jow==",
+ "data": "Ym9iLWtleTI="
+ }
+ }
+ }
+ }
+ },
+ {
+ "desc": "bob3_setnewkeys",
+ "lastVerifiedLogRoot": {
+ "rootHash": "ARTq42Sj91CMzvyw/nogQrmh+O/VThG2fuEi6VGkKuc=",
+ "treeSize": "1"
+ },
+ "getUser": {
+ "request": {
+ "directoryId": "integration",
+ "userId": "bob",
+ "lastVerifiedTreeSize": "1"
+ },
+ "response": {
+ "revision": {
+ "mapRoot": {
+ "mapRoot": {
+ "mapRoot": "AAEgomeSxdMZnMwwKlzih4O7V+RkC/XNI6moMgjt3f1E7dwVr6jItLGJmAAAAAAAAAAFACYSDBDZrJSei5nq1xUYARIWCOG6xqSJmerXFRDhusakiZnq1xUYAg==",
+ "signature": "MEUCIQCBopiSW/qWbwyBCMJjF7MzzxDOuvgaZNi6L8nbQTlJfwIgXNL6yex5CRqJcEa3AcqPQBcURxvjsUmNNusdQ+Hf6zA="
+ },
+ "logInclusion": [
+ "zBALLoZ1+2r1OOAHqeGbsytzDIzZx6PiPmiQQzBnIfs=",
+ "nUXCJZzZL0JU0LsDqVqieaVNvnXND3fs4+LMoHnHWcI="
+ ]
+ },
+ "latestLogRoot": {
+ "logRoot": {
+ "keyHint": "QJDf2A0F/j4=",
+ "logRoot": "AAEAAAAAAAAABiDJ3/bPuiGyHPC9EsrrKlLo9eyFdVjBr5OxBEjnoEX+5hWvqMjIqjFwAAAAAAAAAAYAAA==",
+ "logRootSignature": "MEYCIQDNbK+zo00DLbGvE0EwgwGq9Z81UPXnOGyYn4thrJxCuQIhALZZ4EQSGbbzDCakep+MVvpeffdGCG/08fmKkkzyeT/J"
+ },
+ "logConsistency": [
+ "A4nHcLk60Ha3XznrfeBt8Zb7ZAEQWHqe1AZyS8GgTV4=",
+ "5LiZAoPBkclCzQ0HPaEnabfe2xZve3edrkGr2V3Uz04=",
+ "2aDi76Y5yEzTj5zC4fkjsccHH0eLbaezf/63/mSkVSg="
+ ]
+ }
+ },
+ "leaf": {
+ "vrfProof": "eRpbqKQIZNPA+ien9DGKw3OlpQtfRRL27K/lkT5Gd3tFXlqdvSCTtwEDXhKDo0VEN1UqK/pl3N34pPU+9+OzDwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
+ "mapInclusion": {
+ "leaf": {
+ "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
+ "leafHash": "uNC6wSdbdjkfYfK6PHJcm6+pIHghTo8G7FEwnyUn4IM=",
+ "leafValue": "CpEDGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgcVxxrP8c2gAv5rlQa252CVAb9FF1xHT9BtPc0FrHRzVCIPgsTtdGjuozfizdHmJszOy/d1blbKoBb7WhuYMZYZEfSqgCCAISkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhogJKDbR4uyhSMXW80x02NtYRUFlMQbLOA+tLe/MbwZ69QiIJF0bpHH3Z/21sLp3PtRWzIju8iNL73rWwQsDoV5H3WUGAMQARgCIAMSRzBFAiEAv4P99R4bLTwvJPQIA0ocl9ezSvDR/p9H4Nf/rZorMa0CIDoqFrBkSxmC3v2UFD9lauvbRXnFf0nu2/IJca/T1aogEkcwRQIgTntznFEvDeHK9G6vpDg4yp8b3OK0PSpF/qNL2l4yMLwCIQDkun7hmkT+fANBaYnA5i6tLw9fYjZkHVAuHTGi6FYSUQ=="
+ },
+ "inclusion": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "EnxDkfdf9WFuKcuCuo2wbfFVIYvFwU+OXZAiBkVJwWQ=",
+ ""
+ ]
+ },
+ "committed": {
+ "key": "57JLjK2z6uX3asxSPubfiA==",
+ "data": "Ym9iLWtleTM="
+ }
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/core/testdata/TestListHistory.json b/core/testdata/TestListHistory.json
new file mode 100644
index 000000000..67e5c8ff8
--- /dev/null
+++ b/core/testdata/TestListHistory.json
@@ -0,0 +1,31 @@
+{
+ "description": "TestListHistory",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "3580969859088593025",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "2300502853446332255",
+ "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/core/testdata/TestMonitor.json b/core/testdata/TestMonitor.json
new file mode 100644
index 000000000..12c551c6f
--- /dev/null
+++ b/core/testdata/TestMonitor.json
@@ -0,0 +1,31 @@
+{
+ "description": "TestMonitor",
+ "directory": {
+ "directoryId": "integration",
+ "log": {
+ "treeId": "5163005729436006755",
+ "treeType": "PREORDERED_LOG",
+ "hashStrategy": "RFC6962_SHA256",
+ "hashAlgorithm": "SHA256",
+ "signatureAlgorithm": "ECDSA",
+ "publicKey": {
+ "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
+ }
+ },
+ "map": {
+ "treeId": "6992631502357884499",
+ "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/core/testdata/batch_get_user.json b/core/testdata/batch_get_user.json
deleted file mode 100644
index 63f2fbe87..000000000
--- a/core/testdata/batch_get_user.json
+++ /dev/null
@@ -1,2317 +0,0 @@
-[
- {
- "Desc": "single empty",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "alice"
- ],
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg1mYgOw0fW/80sZbn3pmNnpOnCg95aJYXTipVliXR+bsVp4TLRiME9wAAAAAAAAABABISDBDo7qKKtJnh0xUYARICGAI=",
- "signature": "MEUCIFw04OO/kYmhZIrhpyRbNXXCpfby0EUmfdrqZy8CSjjBAiEAlZ25Szll5vXds8JVcQ7Q6qR9fRNWFykvzGnCOuigiT0="
- },
- "log_inclusion": [
- "Ny7n/tq+dcbTuhB4qaqtPzDbp9GbrogtA5C4lZyNcHA="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "SmMkQHsAW3E=",
- "log_root": "AAEAAAAAAAAAAiBMfakpQJqCprWQd0oYO7wLjOsomZ6F9pWhgth4ouq1yRWnhMtZe50jAAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIBFuSTPlMqF5A/pQHcaK/fgu3CFGLbI11fntW4o+MbpYAiBRVwxvDzeMmPavmnaA6FUekktESNB85HGKdj+wdAcuEw=="
- }
- }
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "vVAiT/ESFgipuO5EZuQ5NcMSaOR0l3OwV2gRA98R6AFpA8LhAoC15aCSnneZ3ev1ydHi7P7tB8mVQgo8t8Fk6ARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "SGq1NrAlVXTaBYluqcrC70DLlg8pVBlATXGVBvETJ/I=",
- "N9CNeyq1Hc1n9qCMRYgPS4k9nGETmh4ZrCWUZbuQsPo=",
- ""
- ]
- }
- }
- }
- }
- },
- {
- "Desc": "multi empty",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "alice",
- "zelda"
- ],
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg1mYgOw0fW/80sZbn3pmNnpOnCg95aJYXTipVliXR+bsVp4TLRiME9wAAAAAAAAABABISDBDo7qKKtJnh0xUYARICGAI=",
- "signature": "MEUCIFw04OO/kYmhZIrhpyRbNXXCpfby0EUmfdrqZy8CSjjBAiEAlZ25Szll5vXds8JVcQ7Q6qR9fRNWFykvzGnCOuigiT0="
- },
- "log_inclusion": [
- "Ny7n/tq+dcbTuhB4qaqtPzDbp9GbrogtA5C4lZyNcHA="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "SmMkQHsAW3E=",
- "log_root": "AAEAAAAAAAAAAiBMfakpQJqCprWQd0oYO7wLjOsomZ6F9pWhgth4ouq1yRWnhMtZe50jAAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIBFuSTPlMqF5A/pQHcaK/fgu3CFGLbI11fntW4o+MbpYAiBRVwxvDzeMmPavmnaA6FUekktESNB85HGKdj+wdAcuEw=="
- }
- }
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "ZHJMsyJlPfd1kyisG3NGTPDU8LskffXsaQXgVenUpEclq+T9iJe2uvPrf2QXGsLJ4ghAjlO+g42qehQB+Xu2dwRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "SGq1NrAlVXTaBYluqcrC70DLlg8pVBlATXGVBvETJ/I=",
- "N9CNeyq1Hc1n9qCMRYgPS4k9nGETmh4ZrCWUZbuQsPo=",
- ""
- ]
- }
- },
- "zelda": {
- "vrf_proof": "x77ZimPOW1xMkmHcNvUpH4++bs8814hgd7fSNG/1LIxxgXdQtd32Xx/eFsAF/8JsmNqUm8AbGmrQLm1r6y4IqwQtrUX0DufLX9SITX79ae9LqiYFNaU8XDMHSZ44UUb2kMU6/IycyPbQiVogsuIIrgNYXImVlFvuCSyjC6Kg03hK",
- "map_inclusion": {
- "leaf": {
- "index": "L+Kt2w2EizRLIRMNTQu0J9o4c37Jhf2MT+xy8XZ/QVo="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "3uBr7egI67ujpzsyyCc9bdMvbPjakjRHInmlIe6RN3s=",
- "",
- "",
- "N9CNeyq1Hc1n9qCMRYgPS4k9nGETmh4ZrCWUZbuQsPo=",
- ""
- ]
- }
- }
- }
- }
- },
- {
- "Desc": "single full",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "bob"
- ],
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg1mYgOw0fW/80sZbn3pmNnpOnCg95aJYXTipVliXR+bsVp4TLRiME9wAAAAAAAAABABISDBDo7qKKtJnh0xUYARICGAI=",
- "signature": "MEUCIFw04OO/kYmhZIrhpyRbNXXCpfby0EUmfdrqZy8CSjjBAiEAlZ25Szll5vXds8JVcQ7Q6qR9fRNWFykvzGnCOuigiT0="
- },
- "log_inclusion": [
- "Ny7n/tq+dcbTuhB4qaqtPzDbp9GbrogtA5C4lZyNcHA="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "SmMkQHsAW3E=",
- "log_root": "AAEAAAAAAAAAAiBMfakpQJqCprWQd0oYO7wLjOsomZ6F9pWhgth4ouq1yRWnhMtZe50jAAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIBFuSTPlMqF5A/pQHcaK/fgu3CFGLbI11fntW4o+MbpYAiBRVwxvDzeMmPavmnaA6FUekktESNB85HGKdj+wdAcuEw=="
- }
- }
- },
- "map_leaves_by_user_id": {
- "bob": {
- "vrf_proof": "vF84GVjlgE+w+0tuvElkicBWdd86Sk9uP2zGkbvt1JZaYwazDhpqD/QQhqz+XaXUmoYED9nmY33NS8lMrxxx4ASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "E/VlhcBnhsuvbL1wcSQZ95rx/uUcB2CNNnS5Wq6+jrU=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgIfC/zZl+3xeM4VwhQgEyIoPt5A5Np93rt8Ibjwonpx5CIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEA+yRJDxnot3jVk3RyS/P6IErs/MNgxfNJHjjjEbtYPekCIHZB2JtLnszAWrjGzROZRp4AG1jAQDyrSTQl66tvgQi3"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "q8MzmCp/dTL3aVqvvPOxU0WOzAWZixnaB5rEymXxogg=",
- ""
- ]
- },
- "committed": {
- "key": "MGu3ZuMXoxW0TmK+FN0ELg==",
- "data": "Ym9iLWtleQ=="
- }
- }
- }
- }
- },
- {
- "Desc": "multi full",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "bob",
- "carol"
- ],
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg1mYgOw0fW/80sZbn3pmNnpOnCg95aJYXTipVliXR+bsVp4TLRiME9wAAAAAAAAABABISDBDo7qKKtJnh0xUYARICGAI=",
- "signature": "MEUCIFw04OO/kYmhZIrhpyRbNXXCpfby0EUmfdrqZy8CSjjBAiEAlZ25Szll5vXds8JVcQ7Q6qR9fRNWFykvzGnCOuigiT0="
- },
- "log_inclusion": [
- "Ny7n/tq+dcbTuhB4qaqtPzDbp9GbrogtA5C4lZyNcHA="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "SmMkQHsAW3E=",
- "log_root": "AAEAAAAAAAAAAiBMfakpQJqCprWQd0oYO7wLjOsomZ6F9pWhgth4ouq1yRWnhMtZe50jAAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIBFuSTPlMqF5A/pQHcaK/fgu3CFGLbI11fntW4o+MbpYAiBRVwxvDzeMmPavmnaA6FUekktESNB85HGKdj+wdAcuEw=="
- }
- }
- },
- "map_leaves_by_user_id": {
- "bob": {
- "vrf_proof": "cjKo+LWmC3VpoaEwrQcgijvlXOraFN4dg4efPHfbPYJ3naBuGvOyhNpgxzA+irJDeZx9kRrG5rFgLcwvidYNJwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "E/VlhcBnhsuvbL1wcSQZ95rx/uUcB2CNNnS5Wq6+jrU=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgIfC/zZl+3xeM4VwhQgEyIoPt5A5Np93rt8Ibjwonpx5CIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEA+yRJDxnot3jVk3RyS/P6IErs/MNgxfNJHjjjEbtYPekCIHZB2JtLnszAWrjGzROZRp4AG1jAQDyrSTQl66tvgQi3"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "q8MzmCp/dTL3aVqvvPOxU0WOzAWZixnaB5rEymXxogg=",
- ""
- ]
- },
- "committed": {
- "key": "MGu3ZuMXoxW0TmK+FN0ELg==",
- "data": "Ym9iLWtleQ=="
- }
- },
- "carol": {
- "vrf_proof": "e1F/gWp1dnBRoD4tMaTd51diRzeBckzhzJKkS1JKJkJ/9bPC3zx50zkdsakArBzJ+kvg1wQTNNlhyk4FxVz6SQSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "index": "JYx5mwUZM4rLnxSas5/NC9GiuqMYVWThqNqJdDz6bvw=",
- "leaf_hash": "tSgAqqErkUDkbkbibS4VK/6FAuw3YtdXU/dV1qrevXk=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgn3pRjw8fTJFkRZASx5BsovRe+EgFk2aLm/HhwwWlS7lCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAmWcsLI0QXbeSaSo/AnuXvT/zL4AnhENksBtwCcm0Up8CIFDcoy3gpkkhoK7AdyDV27PZHhqQK2C1mY6xenhfi0jG"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "N9CNeyq1Hc1n9qCMRYgPS4k9nGETmh4ZrCWUZbuQsPo=",
- ""
- ]
- },
- "committed": {
- "key": "b6dd5hxoljaq7imIR2jFyw==",
- "data": "Y2Fyb2wta2V5"
- }
- }
- }
- }
- },
- {
- "Desc": "multi mixed",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "alice",
- "bob"
- ],
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg1mYgOw0fW/80sZbn3pmNnpOnCg95aJYXTipVliXR+bsVp4TLRiME9wAAAAAAAAABABISDBDo7qKKtJnh0xUYARICGAI=",
- "signature": "MEUCIFw04OO/kYmhZIrhpyRbNXXCpfby0EUmfdrqZy8CSjjBAiEAlZ25Szll5vXds8JVcQ7Q6qR9fRNWFykvzGnCOuigiT0="
- },
- "log_inclusion": [
- "Ny7n/tq+dcbTuhB4qaqtPzDbp9GbrogtA5C4lZyNcHA="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "SmMkQHsAW3E=",
- "log_root": "AAEAAAAAAAAAAiBMfakpQJqCprWQd0oYO7wLjOsomZ6F9pWhgth4ouq1yRWnhMtZe50jAAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIBFuSTPlMqF5A/pQHcaK/fgu3CFGLbI11fntW4o+MbpYAiBRVwxvDzeMmPavmnaA6FUekktESNB85HGKdj+wdAcuEw=="
- }
- }
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "60X4g4nnstSHomRbcc5LNJHOQTLiMpB/eM2uLkNx0z27igDP56lme+8zNWNrwmXr+MwaQT1hBPZTLcpH7Lg55wRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "SGq1NrAlVXTaBYluqcrC70DLlg8pVBlATXGVBvETJ/I=",
- "N9CNeyq1Hc1n9qCMRYgPS4k9nGETmh4ZrCWUZbuQsPo=",
- ""
- ]
- }
- },
- "bob": {
- "vrf_proof": "xoIDahPbAsQaVT1/381Dvqk8XDaoR5kGoLiKLEE1/5wuVpAU9hn2SEWuJI98osNwkbtB0DBMOlHqk/3JWO2NJwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "E/VlhcBnhsuvbL1wcSQZ95rx/uUcB2CNNnS5Wq6+jrU=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgIfC/zZl+3xeM4VwhQgEyIoPt5A5Np93rt8Ibjwonpx5CIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEA+yRJDxnot3jVk3RyS/P6IErs/MNgxfNJHjjjEbtYPekCIHZB2JtLnszAWrjGzROZRp4AG1jAQDyrSTQl66tvgQi3"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "q8MzmCp/dTL3aVqvvPOxU0WOzAWZixnaB5rEymXxogg=",
- ""
- ]
- },
- "committed": {
- "key": "MGu3ZuMXoxW0TmK+FN0ELg==",
- "data": "Ym9iLWtleQ=="
- }
- }
- }
- }
- }
-]
\ No newline at end of file
diff --git a/core/testdata/batch_list_user_revisions.json b/core/testdata/batch_list_user_revisions.json
deleted file mode 100644
index 6bf3fba1e..000000000
--- a/core/testdata/batch_list_user_revisions.json
+++ /dev/null
@@ -1,5086 +0,0 @@
-[
- {
- "Desc": "single revision",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "alice",
- "bob"
- ],
- "BatchListUserRevisionsResp": {
- "latest_log_root": {
- "log_root": {
- "key_hint": "Suo5OhL9dIk=",
- "log_root": "AAEAAAAAAAAACyD9iAKWPyPKkD39N3GHvY7B27WreRJK7GDo1fYYPj+0ExWnhNBdlGLyAAAAAAAAAAsAAA==",
- "log_root_signature": "MEUCIH4/FucXNQH/VQvnn+wZWZDfQm0MFB2mQ7oxPh/2CP2vAiEAtVqGzIkL37DrZpiz/p/tKdQnUjBaN0UXDoMMbjqQYg4="
- }
- },
- "map_revisions": [
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgdLIijOyx3OKkuyXgzdNrCqv3rkI+qy7HKN6tAW2M344Vp4TPbO+4SgAAAAAAAAADABwSAhgBEhYI1biqkPSZ4dMVENbX/9b2meHTFRgC",
- "signature": "MEUCIDl08m+7JmEAI8nfi0nLRsN25CmBBPYstuivf6MxOG6PAiEAoEri8VEXqaAAPtERiTppNmvi2SzPvgsI9y15MHTXtkg="
- },
- "log_inclusion": [
- "UZ58xq3+qBAuAeMiVtDYne/G9so0ivuKUCBDADCvBhE=",
- "xzuhwSnw8ujKmqgkWaFM4oDGq67Hc/xiM8aRAHYH0x0=",
- "sxb6MVxL/zRbO2KsPS/3xOOzFdVVa5a2TM+oFkf8OXI=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "12Zw49DQQ4m7Z/s2X+2AchoC8aCcpfqr6z2ZjvkV0AJeQFAmGYWRCD+cJEBx1DZsw6eG22KMz2kt6FXeao9wHQRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "BRqfIxzO53fHJArvedQujyCxY6NVZVYeVvQZpr/L9wQ=",
- "leaf_value": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgTNKrTzG2iBrT6Ughi8VEj6zuBeOr34HBjUsSGRZOEvpCIBorH1muJTaCTq+f6Nh2SFtPVtrT/6KST6FKoraQUaznSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEAqavlkVUEV8qJRx1EQjBGHA+mzOEjLlHeWfTMXTfIqqUCIQC296iD9Ep2Ar+RKYEbPKAB1y9qquxcIUQpX784io+wTQ=="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "e4cW/lyIIWce5wMjf1n8l0/alECmKg90gX5AjLwKM5s=",
- ""
- ]
- },
- "committed": {
- "key": "oTU71KbrZ3qtfuOd+u5hQA==",
- "data": "YmFyMg=="
- }
- },
- "bob": {
- "vrf_proof": "+nXLFTRmBOFzfdXBT6uOy6DQWcc+RQRnfh2IowMys6TAY+NBWV6lR5nmRMuh22Jh/nYNrdDdpreDwYkNqeto6QSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "rXnI1F43hZR7zQIzU1MngoiaYrc7Yb9DJF8oBAIX/zQ=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgR+xteBRVmETS7vB5fOYrbqhLcxVInbp9EvhJc8pvZBRCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiBAMONHNQ8c1XprZklDOfC542spvdEAc180Ls4dKD0EwwIhALf78NxYeXMMcZ9mToyKA8qhy/zG+pLHDfgPvu/DxRlg"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "lDpjrmsfYBuxa0+ds90kWSRemK/EzGX5+gnFocmgg3Q=",
- ""
- ]
- },
- "committed": {
- "key": "wGjLZH/xsm+hlA+4mRYxkw==",
- "data": "YmFyMTE="
- }
- }
- }
- }
- ]
- },
- "BatchGetUserResp": null
- },
- {
- "Desc": "multiple revisions test 1",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "carol"
- ],
- "BatchListUserRevisionsResp": {
- "latest_log_root": {
- "log_root": {
- "key_hint": "Suo5OhL9dIk=",
- "log_root": "AAEAAAAAAAAACyD9iAKWPyPKkD39N3GHvY7B27WreRJK7GDo1fYYPj+0ExWnhNBdlGLyAAAAAAAAAAsAAA==",
- "log_root_signature": "MEUCIH4/FucXNQH/VQvnn+wZWZDfQm0MFB2mQ7oxPh/2CP2vAiEAtVqGzIkL37DrZpiz/p/tKdQnUjBaN0UXDoMMbjqQYg4="
- }
- },
- "map_revisions": [
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEg+N1vHA1e8xBYCu3CQpabBXleFyNSUaczEqV1/MML80AVp4TPfsbZgQAAAAAAAAAEABwSAhgBEhYI1tf/1vaZ4dMVENTA+uP3meHTFRgC",
- "signature": "MEYCIQDOVhTt8B4x6DmB8LUbDQ6FDmSpI2O7LIdJiV3duGG35QIhANdx8Y4tPtT8J5qHZH7SFaWwgK+MlNgBFrgf3UM/CoST"
- },
- "log_inclusion": [
- "PRMGnzMutZT0tsBnJu1VTLo6d1rERk06XDg9b5cVL1w=",
- "BeW2lpoVjb0P6EB7/W1yCnOV/CyDNb+W0ig+i6jRKiw=",
- "ITYpUBZUyinF17A144BAUooR+VOMPtBLtTP6O1AHl3I=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "carol": {
- "vrf_proof": "NNkd8pH6NGNTed0YtC4v0v3UIpxpP+XSa8buao+ZygoiwtSxaRcOWOHTLTzL70f6Q6fgSKhml2cb2ZwYsV8awwSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R3j8xFB5po/TjsnURMEssD3A8E9qb+yumkm2GAfqr44=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIg3A2nOCpqQF5E+YnQ3qBzavnk4FmnY33BRWLc0Ol5P1JCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiAg7UteY1ULeVNl6DJgRC5ojaq+dBtb4KboKVeRH/u3pAIhAN2WK6LiKsgKIYlEOxRNMFXnUDKAQgjx0GUhJ8ykuVyn"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "PbpXyGZHtH7dT+Jit1diqhz7ST1/PKGd2MOlRkCo3EQ=",
- "e4cW/lyIIWce5wMjf1n8l0/alECmKg90gX5AjLwKM5s=",
- ""
- ]
- },
- "committed": {
- "key": "7B90WTAv9TSWw5XYtJyu0Q==",
- "data": "YmFyMjE="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEg30Ei4ES0Kkz7nrwNQtj4pPoFXykxTmuITW/xo5RgnnEVp4TPnkgDIQAAAAAAAAAFABwSAhgBEhYI1MD64/eZ4dMVEJiJ9OH5meHTFRgC",
- "signature": "MEQCIBhskbFWHVVKLhC+euvD4akfvF43YiBaw0TMiRfPOPUtAiAQfw2TZtvSZbM+bedXiMH0lm5SICeQ5zRFyQKlI8eeBg=="
- },
- "log_inclusion": [
- "wdLKjdYFG8CP8g30uGI/TN3A5AJrov30xGoJcweKfVI=",
- "BeW2lpoVjb0P6EB7/W1yCnOV/CyDNb+W0ig+i6jRKiw=",
- "ITYpUBZUyinF17A144BAUooR+VOMPtBLtTP6O1AHl3I=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "carol": {
- "vrf_proof": "0Ie+rzsB8uB86jnCgENX3c/O5H+I6vkby1C8yQzt4UVhOlH0O2P0ryqwo2yRIz0v7+qs6O/0ZEUq1uB2Q6jHpgSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R7UOhGlCesWl69/3ayJAd/PQBRF2y3XNItmLZ6SYk0s=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgedsbU+kmuUXbGMMvI+S4d0Kvk7F/E0x08fP+5NZdsW9CIK/YTacUavxw7OunFDQMrmVgJ9MNKl+sOWtHmA5QsnLBSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAWmktGknDg+NvuMX9zeSrmUPWQyug/j8+NBHQttNLlaAIgAbzC+JpsBPC0ndemzU0q9Dh/F54xQzAL308rcGouldM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "PbpXyGZHtH7dT+Jit1diqhz7ST1/PKGd2MOlRkCo3EQ=",
- "e4cW/lyIIWce5wMjf1n8l0/alECmKg90gX5AjLwKM5s=",
- ""
- ]
- },
- "committed": {
- "key": "1a+He1H4Su6GPymwHAY21A==",
- "data": "YmFyMjI="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgl6LWxRYCPC1Z1ft4cXWm5MW4rj7pp5ppHnsFL3RD2KMVp4TPslQZYQAAAAAAAAAGACYSDBDMs/aA+5nh0xUYARIWCJiJ9OH5meHTFRCYifTh+Znh0xUYAg==",
- "signature": "MEQCIGLBvN3Y/qRV6sI66gqapVg/1+9q0/xxLXWwMiuSwoM1AiAekO1D2KzWDsLQiBvgx9sY/JYwivfpte7D21YERM+K4A=="
- },
- "log_inclusion": [
- "RAtWuOv9wOo55eNznKDAPlbTD+0efnGu26q+5TFn+Uk=",
- "Woc969ok8y+l0SkXk06jzNcpkcwBrAQXIjrCk5q8jm0=",
- "ITYpUBZUyinF17A144BAUooR+VOMPtBLtTP6O1AHl3I=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "carol": {
- "vrf_proof": "KxoRF2VOTZ2t845u6/ioT/bjhaT3eXANufz1d4dxcHKSQNPuP6SV0aqwNTNaYshYLB7lyOwLUGpF2rmjkBd/lwSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R7UOhGlCesWl69/3ayJAd/PQBRF2y3XNItmLZ6SYk0s=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgedsbU+kmuUXbGMMvI+S4d0Kvk7F/E0x08fP+5NZdsW9CIK/YTacUavxw7OunFDQMrmVgJ9MNKl+sOWtHmA5QsnLBSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAWmktGknDg+NvuMX9zeSrmUPWQyug/j8+NBHQttNLlaAIgAbzC+JpsBPC0ndemzU0q9Dh/F54xQzAL308rcGouldM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "PbpXyGZHtH7dT+Jit1diqhz7ST1/PKGd2MOlRkCo3EQ=",
- "8CM+Sgv5cws8C9GPiPKLcxliHO0l0Pn7DEAT9I6jXEw=",
- ""
- ]
- },
- "committed": {
- "key": "1a+He1H4Su6GPymwHAY21A==",
- "data": "YmFyMjI="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgeLa5snMvlp5H/sQUt3eiVBRaS0uPACkB8wwHROS/pJIVp4TP+D50ngAAAAAAAAAHADASFgjMs/aA+5nh0xUQsL64r/+Z4dMVGAESFgiYifTh+Znh0xUQmIn04fmZ4dMVGAI=",
- "signature": "MEYCIQCJWBQcD308dJq3tWC4TvxLKSv4dFNnqYvPgz7IM4bMzwIhANwJuOb3QjlvxH1Cp17Bz9qIl+iBUzmITFV40qhNglui"
- },
- "log_inclusion": [
- "PJI2GrEoCKEhQsT3132uw30+CScxhM3NN8U34brnyuA=",
- "Woc969ok8y+l0SkXk06jzNcpkcwBrAQXIjrCk5q8jm0=",
- "ITYpUBZUyinF17A144BAUooR+VOMPtBLtTP6O1AHl3I=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "carol": {
- "vrf_proof": "Hkpgg37NHb3pGz2B3CgrGj4o7C6PLkF1XjpneBJ3ox88+NKMWML/jkHyyCcLxC3+l2CLIFwZdKc32ryOGKMctASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R7UOhGlCesWl69/3ayJAd/PQBRF2y3XNItmLZ6SYk0s=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgedsbU+kmuUXbGMMvI+S4d0Kvk7F/E0x08fP+5NZdsW9CIK/YTacUavxw7OunFDQMrmVgJ9MNKl+sOWtHmA5QsnLBSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAWmktGknDg+NvuMX9zeSrmUPWQyug/j8+NBHQttNLlaAIgAbzC+JpsBPC0ndemzU0q9Dh/F54xQzAL308rcGouldM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "1AVyfIu17OQJauKJm/atXyy88nixzluAzbs9cHwLUvY=",
- "8CM+Sgv5cws8C9GPiPKLcxliHO0l0Pn7DEAT9I6jXEw=",
- ""
- ]
- },
- "committed": {
- "key": "1a+He1H4Su6GPymwHAY21A==",
- "data": "YmFyMjI="
- }
- }
- }
- }
- ]
- },
- "BatchGetUserResp": null
- },
- {
- "Desc": "multiple revisions test 2",
- "UserID": "",
- "GetUserResp": null,
- "TrustNewLog": false,
- "UserIDs": [
- "alice",
- "bob",
- "carol"
- ],
- "BatchListUserRevisionsResp": {
- "latest_log_root": {
- "log_root": {
- "key_hint": "Suo5OhL9dIk=",
- "log_root": "AAEAAAAAAAAACyD9iAKWPyPKkD39N3GHvY7B27WreRJK7GDo1fYYPj+0ExWnhNBdlGLyAAAAAAAAAAsAAA==",
- "log_root_signature": "MEUCIH4/FucXNQH/VQvnn+wZWZDfQm0MFB2mQ7oxPh/2CP2vAiEAtVqGzIkL37DrZpiz/p/tKdQnUjBaN0UXDoMMbjqQYg4="
- }
- },
- "map_revisions": [
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgeLa5snMvlp5H/sQUt3eiVBRaS0uPACkB8wwHROS/pJIVp4TP+D50ngAAAAAAAAAHADASFgjMs/aA+5nh0xUQsL64r/+Z4dMVGAESFgiYifTh+Znh0xUQmIn04fmZ4dMVGAI=",
- "signature": "MEYCIQCJWBQcD308dJq3tWC4TvxLKSv4dFNnqYvPgz7IM4bMzwIhANwJuOb3QjlvxH1Cp17Bz9qIl+iBUzmITFV40qhNglui"
- },
- "log_inclusion": [
- "PJI2GrEoCKEhQsT3132uw30+CScxhM3NN8U34brnyuA=",
- "Woc969ok8y+l0SkXk06jzNcpkcwBrAQXIjrCk5q8jm0=",
- "ITYpUBZUyinF17A144BAUooR+VOMPtBLtTP6O1AHl3I=",
- "SIsBCCOnPWjp7FIky6ygBPd14KXWmUo1wUwb+k7gKeo="
- ]
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "da324ZC7bG8D4wSrRzhRDdwAqkISur5Rlf98htFUKekkSX0u2E119UucHEOvfUm+DMn5piv9MOTrA37Srg/etwRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "YdBSH4AlLojl1mdIgC1Zl/FqYe6FhpcVYzR4NgMxkSE=",
- "leaf_value": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgu2TjByWoti/CrkPZiuNHc/V6u3V1uZruflz+0xoEiKxCIDmqpK8yVseaE7PKrVIHNoKJAGX57rJbaG24+17wlQmaSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiB9XBBnSRoSvluZxqwxo5H6bA9MVyhMbmu4CRlfB9w+zgIgHNvqFGNDmC52NpsLs6NcBOfvrd2lJj5pOvEQ6qlT+KU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "gfwnp9aT0ZcPoN/b6sLoWPD6JnIvjzFBL/2weffes64=",
- "8CM+Sgv5cws8C9GPiPKLcxliHO0l0Pn7DEAT9I6jXEw=",
- ""
- ]
- },
- "committed": {
- "key": "4oAMhbt6GnIOs3p7OWjiHQ==",
- "data": "YmFyMw=="
- }
- },
- "bob": {
- "vrf_proof": "ZXWcWUJqPHyIFWzAJcJaWUrOrFmObzCz5IzCN62LQH3bPv+Ish9nu2qqsjteMsZCD42ow79gchVVxhk5hCr2uASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "7pxTw1b+msoxiClgD5d3/UyzVswL0rTctwZzDETd+lY=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgEriTC0yI1SeD/IBpQ3INgjdOlhWLyVU+Gbvc/KVlO/5CIBHaq9s09OzIpzCXQhGpKiOYeP7PxXjhmkOH+fMh1vthSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAD/5c2JznRxepA9mqKq88KhEMMPnAVpBncd+zHNpa/GgIgFuD1ywHNlooBQ5cL6Gkl2VIuWfnJAmiAw60zscWjcmE="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "4ozyvsltW+rUYOb0kGgyPUTaXOpb3uFwDozcJa/wQRM=",
- ""
- ]
- },
- "committed": {
- "key": "oPXvOCUKjh2ZAkbTEp/hig==",
- "data": "YmFyMTI="
- }
- },
- "carol": {
- "vrf_proof": "IUqiovXavde8DRfSZpDZRzv1fynym3EplDxzSbD5R+MZpxDfpnwwpy9L2zoSwi0z1FzNM6EFufTQD5tln6EVnASmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R7UOhGlCesWl69/3ayJAd/PQBRF2y3XNItmLZ6SYk0s=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgedsbU+kmuUXbGMMvI+S4d0Kvk7F/E0x08fP+5NZdsW9CIK/YTacUavxw7OunFDQMrmVgJ9MNKl+sOWtHmA5QsnLBSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAWmktGknDg+NvuMX9zeSrmUPWQyug/j8+NBHQttNLlaAIgAbzC+JpsBPC0ndemzU0q9Dh/F54xQzAL308rcGouldM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "1AVyfIu17OQJauKJm/atXyy88nixzluAzbs9cHwLUvY=",
- "8CM+Sgv5cws8C9GPiPKLcxliHO0l0Pn7DEAT9I6jXEw=",
- ""
- ]
- },
- "committed": {
- "key": "1a+He1H4Su6GPymwHAY21A==",
- "data": "YmFyMjI="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgMhGdvLznoiWrDXyGQS95PGKffSMphwKvxG3xIN/qwLgVp4TQG6JDTgAAAAAAAAAIADASFgiwvriv/5nh0xUQkaK0y4Ga4dMVGAESFgiYifTh+Znh0xUQmIn04fmZ4dMVGAI=",
- "signature": "MEUCIQD++Jy9yzj4gyXiikuqwaLqi1JcTNBw/Owc/FciBiE3egIgRHjxR+l1NSfrTdzjR63wX9I/zAzzo117JKwp+rvREE0="
- },
- "log_inclusion": [
- "fXRF42rwxtTt/Cppn/C/l1NGAJnrKEPCMXcda8phuyE=",
- "/KL8DT04Qx2UvrJGzv6oK5Eldw+bl3AIrsCpw6Po5lw=",
- "MaQ22XutGaJ1UDrUvgBGyPO7PVlsEW+XxKLtm12B2SY="
- ]
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "EBBH/tN5JTArvVT0iNfC9upweOghuLVKRRqSjbhCN+T/f3Egwx6NkQxVecCtlv7/n43P7wQUP0e4yNzsg1XDbwRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "YdBSH4AlLojl1mdIgC1Zl/FqYe6FhpcVYzR4NgMxkSE=",
- "leaf_value": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgu2TjByWoti/CrkPZiuNHc/V6u3V1uZruflz+0xoEiKxCIDmqpK8yVseaE7PKrVIHNoKJAGX57rJbaG24+17wlQmaSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiB9XBBnSRoSvluZxqwxo5H6bA9MVyhMbmu4CRlfB9w+zgIgHNvqFGNDmC52NpsLs6NcBOfvrd2lJj5pOvEQ6qlT+KU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "gfwnp9aT0ZcPoN/b6sLoWPD6JnIvjzFBL/2weffes64=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "4oAMhbt6GnIOs3p7OWjiHQ==",
- "data": "YmFyMw=="
- }
- },
- "bob": {
- "vrf_proof": "95l5vd+8iQnWoFg08X0aSlubJib+NiN9Ei7u4WJ2QnzhD3SZ3Qpbt5x53+/3P8vd6Im0se9m5Xqo8AA0Ttg3/wSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "qHK5YTFYKihYunWtFBtiwlhxAPcTPXvYrXgKuNwB4Ts=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgnnqe0Nsw9PbObiS6WOQy+rVV13J1wXgYgTuC6kQhKndCIAA9/ojuXNHS0U/fKC4NoPNqrtuxDn0Q260fDq9NuvPlSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiBKKK7GMTlSJXRBlGoNZTQdT7YGCbIilJUGpnGhYOcnhAIgVgjvws1UdekZ2gGu+PavZgC6J5gLyvgO9hRTSWqyXoU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "4ozyvsltW+rUYOb0kGgyPUTaXOpb3uFwDozcJa/wQRM=",
- ""
- ]
- },
- "committed": {
- "key": "v0GJN4QPlkJaP3ZJUJPsDw==",
- "data": "YmFyMTM="
- }
- },
- "carol": {
- "vrf_proof": "udebcnv0LZsHeP9AWJANWj6vBfsN0wtt1SIRUaZ0Pnw0qdO44k6hOenwx33BS4eWCIUuikIe0k2jPTy61w5z4wSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "R7UOhGlCesWl69/3ayJAd/PQBRF2y3XNItmLZ6SYk0s=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgedsbU+kmuUXbGMMvI+S4d0Kvk7F/E0x08fP+5NZdsW9CIK/YTacUavxw7OunFDQMrmVgJ9MNKl+sOWtHmA5QsnLBSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiAWmktGknDg+NvuMX9zeSrmUPWQyug/j8+NBHQttNLlaAIgAbzC+JpsBPC0ndemzU0q9Dh/F54xQzAL308rcGouldM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "1AVyfIu17OQJauKJm/atXyy88nixzluAzbs9cHwLUvY=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "1a+He1H4Su6GPymwHAY21A==",
- "data": "YmFyMjI="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgq+DaoAsYh73Y6HUWU1J1nMCqiUw57E34CX7j6zckzTIVp4TQLtD/yQAAAAAAAAAJADASFgiRorTLgZrh0xUQkaK0y4Ga4dMVGAESFgiYifTh+Znh0xUQqo694IKa4dMVGAI=",
- "signature": "MEUCIQDf1LvuZInSf2RbX0d8hTBHUFNz7Pd6EszedTMQNbPZbwIgNvJ9spE9A/1i2GIPunKLRq2Xo1YwjxZeHz5gWu68QJs="
- },
- "log_inclusion": [
- "docVnlvGe8wxVZ8pTI0ROaIbeG2M4vP2Mp/RX2+jklo=",
- "/KL8DT04Qx2UvrJGzv6oK5Eldw+bl3AIrsCpw6Po5lw=",
- "MaQ22XutGaJ1UDrUvgBGyPO7PVlsEW+XxKLtm12B2SY="
- ]
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "T5URgllwkOsR8vAfwGTl7kmA3hDR7LM/BSK5+8Hw0y5eM3JPVWNq4wFFe4PYtpjCitqNUbBqNMPPoYdemBn1tQRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "YdBSH4AlLojl1mdIgC1Zl/FqYe6FhpcVYzR4NgMxkSE=",
- "leaf_value": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgu2TjByWoti/CrkPZiuNHc/V6u3V1uZruflz+0xoEiKxCIDmqpK8yVseaE7PKrVIHNoKJAGX57rJbaG24+17wlQmaSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiB9XBBnSRoSvluZxqwxo5H6bA9MVyhMbmu4CRlfB9w+zgIgHNvqFGNDmC52NpsLs6NcBOfvrd2lJj5pOvEQ6qlT+KU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "oA0DLo+/n9vjHTIuRf16tPnbpecQa/c8K9nTaSJfMd8=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "4oAMhbt6GnIOs3p7OWjiHQ==",
- "data": "YmFyMw=="
- }
- },
- "bob": {
- "vrf_proof": "DHi4c4SA5UtKRMHRb//B3uGfqs+rMaTkmwWKW+D3jkXtBJF/e4TyR52zl+f89D6zzIWVQhgGMSWOs2sZcdEXbASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "qHK5YTFYKihYunWtFBtiwlhxAPcTPXvYrXgKuNwB4Ts=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgnnqe0Nsw9PbObiS6WOQy+rVV13J1wXgYgTuC6kQhKndCIAA9/ojuXNHS0U/fKC4NoPNqrtuxDn0Q260fDq9NuvPlSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiBKKK7GMTlSJXRBlGoNZTQdT7YGCbIilJUGpnGhYOcnhAIgVgjvws1UdekZ2gGu+PavZgC6J5gLyvgO9hRTSWqyXoU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "v9BY0tkY3YammCmNypGU6pJUEDtLATG76DwktRIHSKg=",
- ""
- ]
- },
- "committed": {
- "key": "v0GJN4QPlkJaP3ZJUJPsDw==",
- "data": "YmFyMTM="
- }
- },
- "carol": {
- "vrf_proof": "zpb35w0BeTq72NinFgzBvZbPJ47NyNn80BNSIa1Ie+cYPSNRnIt2THOePd4EXeUdZxEM9l67aBiqxLamyJnOVQSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "diFWX0eGZA77s2tPfJPCR3gUK0vHLYNX24LteIXRFHg=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIguGkgiXGxOp3KegL1cG3VQqu4zUQPeIs14cy1iDhDvddCIIAseY6sVMGPgjqX85+cfqnxPY/n8wMkn3ZSh3qAfSz7SpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEA3xRMLGd9rlDqDl1WrciS510RjFIkxL1jxctL6U5CXZQCIQDOwjpSie2YztBR+cUzmV43WzUUPP0KxxETCFbdQgp9wQ=="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "1AVyfIu17OQJauKJm/atXyy88nixzluAzbs9cHwLUvY=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "p0tRXWzFkrOwDKN3TFFR2g==",
- "data": "YmFyMjM="
- }
- }
- }
- },
- {
- "map_root": {
- "map_root": {
- "map_root": "AAEgLsqw51HAk7kU3p1Dd2k6JeKW2ApMSEDx1eoIiD5+0UMVp4TQUc19eAAAAAAAAAAKADASFgiRorTLgZrh0xUQkaK0y4Ga4dMVGAESFgiqjr3ggprh0xUQw7LZ+oSa4dMVGAI=",
- "signature": "MEUCIDuuZwdeByKY1oCm+T3SOtobDemRm2SWGSFj7OT2fsoqAiEAz/G7Qo1c3waC+KdhSeZ8parwODVzQNeP44eAJU1qQLE="
- },
- "log_inclusion": [
- "606+qhGp857xt5ZJm2Yrq42a96D6x2F03pzbQrsO8s0=",
- "MaQ22XutGaJ1UDrUvgBGyPO7PVlsEW+XxKLtm12B2SY="
- ]
- },
- "map_leaves_by_user_id": {
- "alice": {
- "vrf_proof": "jFHlrk3LeTcjewPiG6CIQQPHigoYONhvpM+yATNes2GfUK2VCPgDAz++RXNv1sGOTX6inVTdwrd7V1sbheq2kwRTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "YdBSH4AlLojl1mdIgC1Zl/FqYe6FhpcVYzR4NgMxkSE=",
- "leaf_value": "Cv4BGiAD38H8cXQM/qlqnkJKnz8mjTkWGgZYQJ+xMCdGVV3O8zIgu2TjByWoti/CrkPZiuNHc/V6u3V1uZruflz+0xoEiKxCIDmqpK8yVseaE7PKrVIHNoKJAGX57rJbaG24+17wlQmaSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiB9XBBnSRoSvluZxqwxo5H6bA9MVyhMbmu4CRlfB9w+zgIgHNvqFGNDmC52NpsLs6NcBOfvrd2lJj5pOvEQ6qlT+KU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "dEwuj455e6OBnmS49eXvM/Pnre1SYhtXj5In4ctUQ/M=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "4oAMhbt6GnIOs3p7OWjiHQ==",
- "data": "YmFyMw=="
- }
- },
- "bob": {
- "vrf_proof": "eBA8y7zvhQot94XrWk5guWzMTjNfnLtE6jDpCfC3fuiPfSJeL8oTreVQVSKbq+GcSLlbY6lfG8ru8rNoTwaUdgSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "qHK5YTFYKihYunWtFBtiwlhxAPcTPXvYrXgKuNwB4Ts=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIgnnqe0Nsw9PbObiS6WOQy+rVV13J1wXgYgTuC6kQhKndCIAA9/ojuXNHS0U/fKC4NoPNqrtuxDn0Q260fDq9NuvPlSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRjBEAiBKKK7GMTlSJXRBlGoNZTQdT7YGCbIilJUGpnGhYOcnhAIgVgjvws1UdekZ2gGu+PavZgC6J5gLyvgO9hRTSWqyXoU="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "irXKAo1ZvYuNnHBccYnUpzkWmuxC+qanuTQylm4jnA0=",
- ""
- ]
- },
- "committed": {
- "key": "v0GJN4QPlkJaP3ZJUJPsDw==",
- "data": "YmFyMTM="
- }
- },
- "carol": {
- "vrf_proof": "bAEC+9XygHi19gEK6M4kQ8UAjpn0pRjC3cHioSkKr6J2JCtf6sHZGLczFMMUYUcawjf2QybGrJLURGaqK5PF1QSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "leaf_hash": "Rg7RijLCAajGKwt4+rXptRxOYTVW4Hwf8gJJDuOBWPI=",
- "leaf_value": "Cv4BGiAljHmbBRkzisufFJqzn80L0aK6oxhVZOGo2ol0PPpu/DIgwmGlkZMJsGVjSDfmOELDe7yeLreYrsB7W+SZDql2h51CIM5QMTrKfeWDqO38dFIV0FeJYkNiM+/aPJ0FedkJNzqXSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEAydSIXdFphq0tmg2jR4nbahUg2WIVAz2G7ZllSO7XVMECIQC/yKtv29cRBwA8XSperI1cNVuamnrWiIySnC3RO5cJRg=="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "1AVyfIu17OQJauKJm/atXyy88nixzluAzbs9cHwLUvY=",
- "9XXD6Ivorps2K6YdEqyUXUlHqRJxkpaab6/h0IcS+g4=",
- ""
- ]
- },
- "committed": {
- "key": "POwfSp38LOvs1JgU8Dyekg==",
- "data": "YmFyMjQ="
- }
- }
- }
- }
- ]
- },
- "BatchGetUserResp": null
- }
-]
\ No newline at end of file
diff --git a/core/testdata/directory_batch_get_user.json b/core/testdata/directory_batch_get_user.json
deleted file mode 100644
index 724c94fac..000000000
--- a/core/testdata/directory_batch_get_user.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "directoryId": "integration",
- "log": {
- "treeId": "5360167840861150065",
- "treeType": "PREORDERED_LOG",
- "hashStrategy": "RFC6962_SHA256",
- "hashAlgorithm": "SHA256",
- "signatureAlgorithm": "ECDSA",
- "publicKey": {
- "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
- }
- },
- "map": {
- "treeId": "8167195044445726954",
- "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/core/testdata/directory_batch_list_user_revisions.json b/core/testdata/directory_batch_list_user_revisions.json
deleted file mode 100644
index f8825b513..000000000
--- a/core/testdata/directory_batch_list_user_revisions.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "directoryId": "integration",
- "log": {
- "treeId": "5398190024946447497",
- "treeType": "PREORDERED_LOG",
- "hashStrategy": "RFC6962_SHA256",
- "hashAlgorithm": "SHA256",
- "signatureAlgorithm": "ECDSA",
- "publicKey": {
- "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
- }
- },
- "map": {
- "treeId": "1674190657110097801",
- "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/core/testdata/directory_get_and_update.json b/core/testdata/directory_get_and_update.json
deleted file mode 100644
index 87a8175af..000000000
--- a/core/testdata/directory_get_and_update.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "directoryId": "integration",
- "log": {
- "treeId": "1596332138688820793",
- "treeType": "PREORDERED_LOG",
- "hashStrategy": "RFC6962_SHA256",
- "hashAlgorithm": "SHA256",
- "signatureAlgorithm": "ECDSA",
- "publicKey": {
- "der": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGXPnhMIclRmYHSmAnCMmfDUJ9iNBMmFxR/wHJdL12AuVUkgcuhbEp2hy5ETs7bfFc2P95IYFlmbiuHMq3UY/A=="
- }
- },
- "map": {
- "treeId": "7332718643287639250",
- "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/core/testdata/get_and_update.json b/core/testdata/get_and_update.json
deleted file mode 100644
index 17c2944ed..000000000
--- a/core/testdata/get_and_update.json
+++ /dev/null
@@ -1,2109 +0,0 @@
-[
- {
- "Desc": "empty_alice",
- "UserID": "alice",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg6KFJFW4H8XU86QDreVsq4BxK4wXbLZ6T466E+Wn3lZsVp4TKEWilyAAAAAAAAAAAAAA=",
- "signature": "MEUCIBGpATAMuCZW4iunBeQPorLM0SBTX2Vzwf1+utr/XBCyAiEAtl7nz5aKDFgO4F3TWYkEZld8k/XfpNxqt+Qpza9YRJ0="
- }
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAAASBQKBrFuBwZoMJinwDc9HtTsOlzoenVEtigYV+7ybaD8hWnhMolxuk0AAAAAAAAAAEAAA==",
- "log_root_signature": "MEUCIQCPK2FfQ8QeFyJHT5SWZiv0sIHDvX1fVe4VtzHDgbHfHwIgcKnOzyG2+KTWF1R2+is7Z5TNTOgOMRpFkpgSibjBiA4="
- }
- }
- },
- "leaf": {
- "vrf_proof": "4KMxEFtY6epJzPQ3K7Ix62dG+CSevVEbd+xYsNUZ/sZmQQy0ragiZs7LtWWPg63m6PxavpDMbkVh5BDN+55lsARTJUYW21qW/fCBqGRPufN2+S2CHVyVSP1EWLTIn1M0zJgw+OQcAgHUdSP1DkqoE5X9Le+VWO+nuJtc4eJODJCo",
- "map_inclusion": {
- "leaf": {
- "index": "A9/B/HF0DP6pap5CSp8/Jo05FhoGWECfsTAnRlVdzvM="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ]
- }
- }
- },
- "TrustNewLog": true,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "bob0_set",
- "UserID": "bob",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEgtgXKUPD6DAvMex7SKChLGd5E3qpbocNCsUGRQkDLOc4Vp4TKPI2SMwAAAAAAAAABABISAhgBEgwQld6Bo6OZ4dMVGAI=",
- "signature": "MEUCIQDjEOEFcgBwQ/zq1kyLP52ODyFY4zShI9xTCNN9exVzqwIgHI42YQsotL5WT1ZhOJrcM8smWdikYROFdna8vCBVt8w="
- },
- "log_inclusion": [
- "UCgaxbgcGaDCYp8A3PR7U7Dpc6Hp1RLYoGFfu8m2g/I="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAAAiDXsJQMeqvzvdFLfOAYx/fyyVKIK9p6v86owmg+GfjW4hWnhMpDasn8AAAAAAAAAAIAAA==",
- "log_root_signature": "MEQCIG9RBWXUyl4A3V4XFzpLyWHYu7vARRP9vyA2zwPjykEhAiBGCfkZF3WWG9sEUuFo61LifRxbCf2ck0kKXkvaj2NGQQ=="
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "Pr4bUF8suP9XTXXq1ArL+EOD+H4mkqlkBplhOXjTNv7Exj3xYbtDfAMQFriExhl/pCWaqbL1rNvn98ypkQr8tASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "8e+Y2pdNsPnFkXwabQs5RXHrkk54znnGlE37lxS+KXM=",
- ""
- ]
- }
- }
- },
- "TrustNewLog": false,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "set_carol",
- "UserID": "carol",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEgkCFKbh1MJaewqGsxLlhJVSVb4BVEBkLSVp5sHLwlEZ8Vp4TKVAwMaAAAAAAAAAACACYSDBDkhNLupJnh0xUYARIWCJXegaOjmeHTFRCV3oGjo5nh0xUYAg==",
- "signature": "MEYCIQCuefeSdBBIlwhdtBZMs16DQPf7OyVlPHB0q2IrN+LxkAIhAOAGO4FAHzynUg1/yiWEtuH7EH91dPUMijAsRFx2o84m"
- },
- "log_inclusion": [
- "17CUDHqr873RS3zgGMf38slSiCvaer/OqMJoPhn41uI="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAAAyCQ4QL/ECYfA4swzKZDIA/+sEDYG+mpXQ838tOUetzT1BWnhMphLT7ZAAAAAAAAAAMAAA==",
- "log_root_signature": "MEUCIC2iyVWeq6HoWoUazJ/ADl8oVYb8sCLtGs8XIAapc+seAiEA00fiUwcLK6ZCn4LqrGW5tKyeDSsBdTB4hDGq9cm9KXs="
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8=",
- "x1DayzaOsSOZZyDA9AegC7kuSHjoK3wNgvga6JPSPfI="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "kM5Ls4Orf9GJ9hx48d74pi8OzG5SEiVV7an0CunYvC+nQ/5c6jV7Y6LxyF/ZUarkv/8DTGt4W2XxmUik3PLpYgSmXjmxq3oAt/q89fwRZiF4eoAGepK4YcyzKtBD4mfS6gB7/AQ7PNRUocMVfUQnZCienTNXyrdtaOTCtzwaDIjc",
- "map_inclusion": {
- "leaf": {
- "index": "JYx5mwUZM4rLnxSas5/NC9GiuqMYVWThqNqJdDz6bvw="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "/3I61XQQ8fQoBnw99Uq5nFRA5oVMsEzONa9glcNj6fA=",
- "m298LGdOOdE7VFw5cx3TSGjV4Iuzxrp2nHMVCryGdAA=",
- ""
- ]
- }
- }
- },
- "TrustNewLog": false,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "bob1_get",
- "UserID": "bob",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg+yaON0pl4pvs+3j+VvOsHqqOqVj14oKNdVlyikkMVpIVp4TKcQf8CAAAAAAAAAADADASFgjkhNLupJnh0xUQ5ITS7qSZ4dMVGAESFgiV3oGjo5nh0xUQ6MSH8aaZ4dMVGAI=",
- "signature": "MEUCICYrOEiAUuV5wAGmH+ncTIx/IuK2jaUgbzkL++aEkPheAiEAnS1qpWb5zqywHOZcCda1URXjTl8zwtvHeiu3DDqJnLw="
- },
- "log_inclusion": [
- "x1DayzaOsSOZZyDA9AegC7kuSHjoK3wNgvga6JPSPfI=",
- "17CUDHqr873RS3zgGMf38slSiCvaer/OqMJoPhn41uI="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAABCAmhXTHHE3BAERDFw/3bQb6d+hBT9dS5aH0/ryvPmpsSBWnhMp+/LduAAAAAAAAAAQAAA==",
- "log_root_signature": "MEYCIQCD3OI5vl6Jb6cmQjaSL8qt/m2vZRL/CB4hifQWlwJZUQIhAJ1QTeF8akU5QoAfDHybB0o1x7mDdNMRuB5I6Lp/ckCe"
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8=",
- "3uVnL7i4Te9MDe9yQ4X16iCcfIeuE/zCrbaweYvOeDA="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "EtJrc+g5cU+K9CXniQ6UGZtGmjJch4ngimFbhGm7B9hXH86L0SsPBj1bDRECORsF8m6k2MSOgf+7bSScFApJBASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "9olqj4HFD6M9uivPe5mDrxvHxq3YMYOgJhwIU70XsZI=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg4u4GLEpQ/rbFUSv4MUjsvnJ4GSWGDG4kl9Yd90TzUUVCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAsg8LXFUM7Mltn7AUfc8/gwZbvEcY1u7NbhV/uGG5BLgCIADXi/RrAuH2UN3BFuTqIfVocClUSLbFZ5Inixk7IDXN"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "om83aaRS0KV8jz14knMqe09WmE8ApWINpk6MxSu0LR4=",
- ""
- ]
- },
- "committed": {
- "key": "7beYQpVT94a26OdwUaj19Q==",
- "data": "Ym9iLWtleTE="
- }
- }
- },
- "TrustNewLog": false,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "bob1_set",
- "UserID": "bob",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEg+yaON0pl4pvs+3j+VvOsHqqOqVj14oKNdVlyikkMVpIVp4TKcQf8CAAAAAAAAAADADASFgjkhNLupJnh0xUQ5ITS7qSZ4dMVGAESFgiV3oGjo5nh0xUQ6MSH8aaZ4dMVGAI=",
- "signature": "MEUCICYrOEiAUuV5wAGmH+ncTIx/IuK2jaUgbzkL++aEkPheAiEAnS1qpWb5zqywHOZcCda1URXjTl8zwtvHeiu3DDqJnLw="
- },
- "log_inclusion": [
- "x1DayzaOsSOZZyDA9AegC7kuSHjoK3wNgvga6JPSPfI=",
- "17CUDHqr873RS3zgGMf38slSiCvaer/OqMJoPhn41uI="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAABCAmhXTHHE3BAERDFw/3bQb6d+hBT9dS5aH0/ryvPmpsSBWnhMp+/LduAAAAAAAAAAQAAA==",
- "log_root_signature": "MEYCIQCD3OI5vl6Jb6cmQjaSL8qt/m2vZRL/CB4hifQWlwJZUQIhAJ1QTeF8akU5QoAfDHybB0o1x7mDdNMRuB5I6Lp/ckCe"
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8=",
- "3uVnL7i4Te9MDe9yQ4X16iCcfIeuE/zCrbaweYvOeDA="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "T8gaQ5lfHRp+EbirRNKIymvYY5PMEeGvgA4x7BFqnIvl7xALMwILf+rmz795Opj1mr1BfIx6K1CqBL2fOH5y0ASHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "9olqj4HFD6M9uivPe5mDrxvHxq3YMYOgJhwIU70XsZI=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg4u4GLEpQ/rbFUSv4MUjsvnJ4GSWGDG4kl9Yd90TzUUVCIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVSpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSRzBFAiEAsg8LXFUM7Mltn7AUfc8/gwZbvEcY1u7NbhV/uGG5BLgCIADXi/RrAuH2UN3BFuTqIfVocClUSLbFZ5Inixk7IDXN"
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "om83aaRS0KV8jz14knMqe09WmE8ApWINpk6MxSu0LR4=",
- ""
- ]
- },
- "committed": {
- "key": "7beYQpVT94a26OdwUaj19Q==",
- "data": "Ym9iLWtleTE="
- }
- }
- },
- "TrustNewLog": false,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "bob2_setkeys",
- "UserID": "bob",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEgmEpkLa+Wtl5h72fdWNT4JRO3D1yOX4VBs0DXkqT9t+QVp4TKjtCNjgAAAAAAAAAEADASFgjkhNLupJnh0xUQtuL/3aiZ4dMVGAESFgjoxIfxppnh0xUQ6MSH8aaZ4dMVGAI=",
- "signature": "MEQCICDkNF6SaqFMG5O2AKv9cTPQstWhb0t//GSJVlTpWZXuAiAcGlztMqCpm6udqurbvGum8I1CLW5ayAW1crXiUMJAbA=="
- },
- "log_inclusion": [
- "JoV0xxxNwQBEQxcP920G+nfoQU/XUuWh9P68rz5qbEg="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAABSAwvLhPS6FLU+8iIicGD7lTHreYSsOxxAJhBLL5dy8lPRWnhMqcyIKZAAAAAAAAAAUAAA==",
- "log_root_signature": "MEUCIQCB0Eva4Gy0ZTYsRA3l6918+Ciwja7sVJpLSVmT/mhBBAIgRpTjOvuMBVg7WIgIv5qwV0vPxhSaQ2ytDKqq4smbTac="
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8=",
- "3uVnL7i4Te9MDe9yQ4X16iCcfIeuE/zCrbaweYvOeDA=",
- "18iODhqD84v4LKAfa6CLAjooImnfIfpCYAww5qVsK3E="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "yHxmWRnFIuyLjrmKjKHUgshsU4/GBBTNUa//TRgnTleXJdwvc60FPHPbT4XG2TqEGnQbkTMJjRK0D+MLaaIgFwSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "RUhZiJOmFbwufqvtX9zV9WYUcO6ClXIuuxXjL+aoQco=",
- "leaf_value": "Cv4BGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg7ZdHCRfU38uBWUOI4EpOMj2chuVVJwcEpiXwm0vPq4hCIFGjpvlKeBgC4Q37UwRn6ljfmOrMv66PZEeLAXYsS+oASpUBCAESkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSSDBGAiEA+nbPyww4V391WlvAD20zFhZMceXvhYCCpxSMzhDgrIsCIQCDvFWfBEmCyQamYcrxOLyqxzZFZCf0FNyNd7xtwx0XZQ=="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "om83aaRS0KV8jz14knMqe09WmE8ApWINpk6MxSu0LR4=",
- ""
- ]
- },
- "committed": {
- "key": "mY9geUOPh/5UUJCYHcfTtQ==",
- "data": "Ym9iLWtleTI="
- }
- }
- },
- "TrustNewLog": false,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- },
- {
- "Desc": "bob3_setnewkeys",
- "UserID": "bob",
- "GetUserResp": {
- "revision": {
- "map_root": {
- "map_root": {
- "map_root": "AAEgJGzXq8qjByksmcdssXEW5FtiMq9C5ba93KUZ4dag+/wVp4TKrY6tOAAAAAAAAAAFADASFgi24v/dqJnh0xUQ59WYt6qZ4dMVGAESFgjoxIfxppnh0xUQ6MSH8aaZ4dMVGAI=",
- "signature": "MEQCIBQpebTjNpdhs/+E3quLkXZesrd2MfdUgZ4W24iprj4lAiAzlUarMzoyrG10MVodN5enR6AxzZmCjwMQfjD8lanuDA=="
- },
- "log_inclusion": [
- "18iODhqD84v4LKAfa6CLAjooImnfIfpCYAww5qVsK3E=",
- "JoV0xxxNwQBEQxcP920G+nfoQU/XUuWh9P68rz5qbEg="
- ]
- },
- "latest_log_root": {
- "log_root": {
- "key_hint": "FidPn1YWNjk=",
- "log_root": "AAEAAAAAAAAABiB/UJll6BwMgUwKxo+8JdVXog/PeL5vFG7Rw/sVRKtJzxWnhMq6nNiJAAAAAAAAAAYAAA==",
- "log_root_signature": "MEYCIQCkU6MGMjbBQfV9Dx9mbARTUC+5xnsdikqR1OkLCL5l+wIhANQqGxf3hfBZ3Ui4x4XIBV3BQU1nrGtFiAFcIg4lQIwC"
- },
- "log_consistency": [
- "rHwPEjE/DGc/jvUwqI0Zwb/VTOWMcTFJ4iGVWm1uaT8=",
- "3uVnL7i4Te9MDe9yQ4X16iCcfIeuE/zCrbaweYvOeDA=",
- "EQmXvNT+P1JenQ0dyiuSumJ3k3N1Bwau2JnKswprYBY="
- ]
- }
- },
- "leaf": {
- "vrf_proof": "u5kUE6TpFmgmn4cQq6qBzXwa2mU8N3fxme4g468Ajr//pwE/1VW35RMelEoZPE00XLSKuDuTeP+ZRlS3+E9K4wSHy1HLhWFLT+nQFEzzYq4x2psj6PyUNlaPWfnwVizyOB31qTBMPiNmlf7Qgp/yArNoYDSuvrjR9Jmlku+iA5MU",
- "map_inclusion": {
- "leaf": {
- "index": "Umn2fclcSdomcb9UlHcDY1SLm1A/wILzh8NdoYffbcQ=",
- "leaf_hash": "VJJ2Zde3iGxmioyNm3ZhtqE9Vwk9SiS2PtOsnuebXKo=",
- "leaf_value": "CpEDGiBSafZ9yVxJ2iZxv1SUdwNjVIubUD/AgvOHw12hh99txDIg8EY1bbMN47NaEVyA6ZUR7UjqlPcvrhMm6U6h7mI/Sl9CIIS3W2Yr5xKAuJqf8YhJaaO/yRNNTJLsmCc1UDD4Tof3SqgCCAISkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhog+xVOdphkfpEtl7OF8oCyvWw31dV4hnGbXDPbdFlL1nkiIJrKGerIR9F1c2WkFPZT2FdxLGWIojWsesAkUPHedy20GAMQARgBIAMSkAEKhwEKNXR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmNyeXB0by50aW5rLkVjZHNhUHVibGljS2V5EkwSBggDEAIYAhogJKDbR4uyhSMXW80x02NtYRUFlMQbLOA+tLe/MbwZ69QiIJF0bpHH3Z/21sLp3PtRWzIju8iNL73rWwQsDoV5H3WUGAMQARgCIAMSSDBGAiEAp/2EuxfrC7OdUlWW5jCErHbP3m2kKgubYThWWtn+sDACIQDnZsoc5X4GD7hmUX6uYAh8dEcQY4SEudnPKRUldSKoxxJHMEUCIQDue7Fk/HwIlOruiofgFN8FBoZZZsLlC75RWL07q8929AIgL69+jlCVNKlzOThWg2Z5AfiuHJRq05MrxWayKIGWVIo="
- },
- "inclusion": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "om83aaRS0KV8jz14knMqe09WmE8ApWINpk6MxSu0LR4=",
- ""
- ]
- },
- "committed": {
- "key": "+Rlz1xvEgb4LaW3nC7czzA==",
- "data": "Ym9iLWtleTM="
- }
- }
- },
- "TrustNewLog": true,
- "UserIDs": null,
- "BatchListUserRevisionsResp": null,
- "BatchGetUserResp": null
- }
-]
\ No newline at end of file
diff --git a/core/testdata/io.go b/core/testdata/io.go
new file mode 100644
index 000000000..0ff0a01e5
--- /dev/null
+++ b/core/testdata/io.go
@@ -0,0 +1,84 @@
+// Copyright 2018 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package testdata
+
+import (
+ "fmt"
+ "go/build"
+ "os"
+ "path"
+ "path/filepath"
+
+ "github.com/golang/protobuf/jsonpb"
+
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
+)
+
+// packagePath returns the on-disk path of *this* package.
+func packagePath() (string, error) {
+ basePkg := "github.com/google/keytransparency/core/testdata"
+ p, err := build.Default.Import(basePkg, "", build.FindOnly)
+ if err != nil {
+ return "", err
+ }
+ return p.Dir, nil
+}
+
+// ReadTranscript returns the test vectors for the requested test name.
+func ReadTranscript(testName string) (*tpb.Transcript, error) {
+ selfPath, err := packagePath()
+ if err != nil {
+ return nil, err
+ }
+ relPath := path.Join(selfPath, fmt.Sprintf("%v.json", testName))
+ absPath, err := filepath.Abs(relPath)
+ if err != nil {
+ return nil, err
+ }
+ transcriptFile := absPath
+
+ f, err := os.Open(transcriptFile)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ var transcript tpb.Transcript
+ if err := jsonpb.Unmarshal(f, &transcript); err != nil {
+ return nil, fmt.Errorf("jsonpb.Unmarshal(): %v", err)
+ }
+ return &transcript, nil
+}
+
+// WriteTranscript saves the transcript to the files in this package.
+func WriteTranscript(testName string, t *tpb.Transcript) error {
+ marshaler := &jsonpb.Marshaler{Indent: "\t"}
+
+ selfPath, err := packagePath()
+ if err != nil {
+ return err
+ }
+ // Output all key material needed to verify the test vectors.
+ testFile := path.Join(selfPath, fmt.Sprintf("%v.json", testName))
+ f, err := os.Create(testFile)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ if err := marshaler.Marshal(f, t); err != nil {
+ return fmt.Errorf("jsonpb.Marshal(): %v", err)
+ }
+ return nil
+}
diff --git a/core/testdata/types.go b/core/testdata/types.go
deleted file mode 100644
index 499c6792a..000000000
--- a/core/testdata/types.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2018 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Package testdata contains data and data types for interoperability testing.
-package testdata
-
-import (
- pb "github.com/google/keytransparency/core/api/v1/keytransparency_go_proto"
-)
-
-// ResponseVector is a captured response that should verify without errors.
-type ResponseVector struct {
- Desc string
- UserID string
- GetUserResp *pb.GetUserResponse
- TrustNewLog bool
- UserIDs []string
- BatchListUserRevisionsResp *pb.BatchListUserRevisionsResponse
- BatchGetUserResp *pb.BatchGetUserResponse
-}
diff --git a/docs/api.md b/docs/api.md
index e3ce85035..8e13ac313 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -29,6 +29,7 @@
- [ListUserRevisionsRequest](#google.keytransparency.v1.ListUserRevisionsRequest)
- [ListUserRevisionsResponse](#google.keytransparency.v1.ListUserRevisionsResponse)
- [LogRoot](#google.keytransparency.v1.LogRoot)
+ - [LogRootRequest](#google.keytransparency.v1.LogRootRequest)
- [MapLeaf](#google.keytransparency.v1.MapLeaf)
- [MapRevision](#google.keytransparency.v1.MapRevision)
- [MapRoot](#google.keytransparency.v1.MapRoot)
@@ -509,6 +510,22 @@ LogRoot contains the latest log root and its consistency proof.
+
+
+### LogRootRequest
+LogRootRequest contains the information needed to requetst and verify LogRoot.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| root_hash | [bytes](#bytes) | | root_hash is the log root hash. |
+| tree_size | [int64](#int64) | | tree_size is the tree_size of the last log root the client verified. |
+
+
+
+
+
+
### MapLeaf
diff --git a/impl/integration/main_test.go b/impl/integration/main_test.go
index d70372dac..b62347c73 100644
--- a/impl/integration/main_test.go
+++ b/impl/integration/main_test.go
@@ -16,24 +16,18 @@ package integration
import (
"context"
- "encoding/json"
"flag"
- "fmt"
- "io/ioutil"
- "os"
"testing"
- "github.com/golang/protobuf/jsonpb"
"github.com/google/keytransparency/core/integration"
"github.com/google/keytransparency/core/testdata"
"github.com/google/trillian/storage/testdb"
-)
-var (
- generate = flag.Bool("generate", false, "Defines if test vectors should be generated")
- testdataDir = flag.String("testdata", "../../core/testdata", "The directory in which to place the generated test data")
+ tpb "github.com/google/keytransparency/core/api/transcript_go_proto"
)
+var generate = flag.Bool("generate", false, "Defines if test vectors should be generated")
+
// TestIntegration runs all KeyTransparency integration tests.
func TestIntegration(t *testing.T) {
// We can only run the integration tests if there is a MySQL instance available.
@@ -48,48 +42,22 @@ func TestIntegration(t *testing.T) {
}
defer env.Close()
- func() {
- // Cancel the test function context (and thus
- // exit any background sequencer loops)
- // *before* shutting down the server and
- // canceling the master context.
- ctx, cancel := context.WithCancel(ctx)
- defer cancel()
- resps := test.Fn(ctx, env.Env, t)
- if *generate && resps != nil {
- if err = SaveTestVectors(*testdataDir, test.DirectoryFilename, test.RespFilename, env.Env, resps); err != nil {
- t.Fatalf("saveTestVectors() failed: %v", err)
- }
+ ctx, cancel = context.WithCancel(ctx)
+ resps := test.Fn(ctx, env.Env, t)
+ // Cancel the test function context (and thus exit any
+ // background sequencer loops) *before* shutting down
+ // the server and canceling the master context.
+ cancel()
+
+ if *generate {
+ if testdata.WriteTranscript(test.Name, &tpb.Transcript{
+ Description: test.Name,
+ Directory: env.Env.Directory,
+ Rpcs: resps,
+ }); err != nil {
+ t.Fatalf("WriteTranscript() failed: %v", err)
}
- }()
+ }
})
}
}
-
-// SaveTestVectors generates test vectors for interoprability testing.
-func SaveTestVectors(dir, directoryFilename, responseFilename string, env *integration.Env, resps []testdata.ResponseVector) error {
- marshaler := &jsonpb.Marshaler{
- Indent: "\t",
- }
- // Output all key material needed to verify the test vectors.
- directoryFile := dir + "/" + directoryFilename
- f, err := os.Create(directoryFile)
- if err != nil {
- return err
- }
- defer f.Close()
- if err := marshaler.Marshal(f, env.Directory); err != nil {
- return fmt.Errorf("jsonpb.Marshal(): %v", err)
- }
-
- // Save list of responses
- respFile := dir + "/" + responseFilename
- out, err := json.MarshalIndent(resps, "", "\t")
- if err != nil {
- return fmt.Errorf("json.Marshal(): %v", err)
- }
- if err := ioutil.WriteFile(respFile, out, 0666); err != nil {
- return fmt.Errorf("writeFile(%v): %v", respFile, err)
- }
- return nil
-}