diff options
Diffstat (limited to 'testdata')
| -rw-r--r-- | testdata/data.go | 287 | 
1 files changed, 287 insertions, 0 deletions
| diff --git a/testdata/data.go b/testdata/data.go new file mode 100644 index 0000000..ac958e5 --- /dev/null +++ b/testdata/data.go @@ -0,0 +1,287 @@ +package testdata + +import ( +	"bytes" +	"testing" +	"time" + +	"crypto/ed25519" + +	"github.com/google/trillian" +	ttypes "github.com/google/trillian/types" +	"github.com/system-transparency/stfe/types" +	"google.golang.org/grpc/codes" +	"google.golang.org/grpc/status" +) + +var ( +	Ed25519VkLog  = [32]byte{} +	Ed25519VkLog2 = [32]byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} +	Ed25519VkLog3 = [32]byte{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2} +	//Ed25519VkWitness   = [32]byte{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3} +	//	Ed25519VkWitness2  = [32]byte{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4} +	Ed25519VkWitness3 = [32]byte{5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5} +	//Ed25519VkSubmitter = [32]byte{6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6} + +	TreeId   = int64(0) +	Prefix   = "test" +	MaxRange = int64(3) +	Interval = time.Second * 10 +	Deadline = time.Second * 5 + +	Timestamp  = uint64(0) +	TreeSize   = uint64(0) +	Extension  = make([]byte, 0) +	NodeHash   = make([]byte, 32) +	Signature  = make([]byte, 64) +	Identifier = []byte("foobar-1.2.3") +	Checksum   = make([]byte, 32) +	Index      = int64(0) +	HashPath   = [][]byte{ +		NodeHash, +	} +	NodePath = []types.NodeHash{ +		types.NodeHash{NodeHash}, +	} +	LeafHash = [32]byte{} + +	// TODO: make these unique and load more pretty maybe +	Ed25519SkWitness = [64]byte{230, 122, 195, 152, 194, 195, 147, 153, 80, 120, 153, 79, 102, 27, 52, 187, 136, 218, 150, 234, 107, 9, 167, 4, 92, 21, 11, 113, 42, 29, 129, 69, 75, 60, 249, 150, 229, 93, 75, 32, 103, 126, 244, 37, 53, 182, 68, 82, 249, 109, 49, 94, 10, 19, 146, 244, 58, 191, 169, 107, 78, 37, 45, 210} +	Ed25519VkWitness = [32]byte{75, 60, 249, 150, 229, 93, 75, 32, 103, 126, 244, 37, 53, 182, 68, 82, 249, 109, 49, 94, 10, 19, 146, 244, 58, 191, 169, 107, 78, 37, 45, 210} + +	Ed25519SkWitness2 = [64]byte{98, 65, 92, 117, 33, 167, 138, 36, 252, 147, 87, 173, 44, 62, 17, 66, 126, 70, 218, 87, 91, 148, 64, 194, 241, 248, 62, 90, 140, 122, 234, 76, 144, 6, 250, 185, 37, 217, 77, 201, 180, 42, 81, 37, 165, 27, 22, 32, 25, 8, 156, 228, 78, 207, 208, 18, 91, 77, 189, 51, 112, 31, 237, 6} +	Ed25519VkWitness2 = [32]byte{144, 6, 250, 185, 37, 217, 77, 201, 180, 42, 81, 37, 165, 27, 22, 32, 25, 8, 156, 228, 78, 207, 208, 18, 91, 77, 189, 51, 112, 31, 237, 6} + +	Ed25519SkSubmitter  = [64]byte{230, 122, 195, 152, 194, 195, 147, 153, 80, 120, 153, 79, 102, 27, 52, 187, 136, 218, 150, 234, 107, 9, 167, 4, 92, 21, 11, 113, 42, 29, 129, 69, 75, 60, 249, 150, 229, 93, 75, 32, 103, 126, 244, 37, 53, 182, 68, 82, 249, 109, 49, 94, 10, 19, 146, 244, 58, 191, 169, 107, 78, 37, 45, 210} +	Ed25519VkSubmitter  = [32]byte{75, 60, 249, 150, 229, 93, 75, 32, 103, 126, 244, 37, 53, 182, 68, 82, 249, 109, 49, 94, 10, 19, 146, 244, 58, 191, 169, 107, 78, 37, 45, 210} +	Ed25519SkSubmitter2 = [64]byte{98, 65, 92, 117, 33, 167, 138, 36, 252, 147, 87, 173, 44, 62, 17, 66, 126, 70, 218, 87, 91, 148, 64, 194, 241, 248, 62, 90, 140, 122, 234, 76, 144, 6, 250, 185, 37, 217, 77, 201, 180, 42, 81, 37, 165, 27, 22, 32, 25, 8, 156, 228, 78, 207, 208, 18, 91, 77, 189, 51, 112, 31, 237, 6} +	Ed25519VkSubmitter2 = [32]byte{144, 6, 250, 185, 37, 217, 77, 201, 180, 42, 81, 37, 165, 27, 22, 32, 25, 8, 156, 228, 78, 207, 208, 18, 91, 77, 189, 51, 112, 31, 237, 6} +) + +// TODO: reorder and docdoc where need be +// +// Helpers that must create default values for different STFE types +// + +func DefaultCosth(t *testing.T, logVk [32]byte, witVk [][32]byte) *types.StItem { +	t.Helper() +	cosigs := make([]types.SignatureV1, 0) +	for _, vk := range witVk { +		cosigs = append(cosigs, types.SignatureV1{*NewNamespace(t, vk), Signature}) +	} +	return types.NewCosignedTreeHeadV1(DefaultSth(t, logVk).SignedTreeHeadV1, cosigs) +} + +func DefaultSth(t *testing.T, vk [32]byte) *types.StItem { +	t.Helper() +	return types.NewSignedTreeHeadV1(DefaultTh(t), DefaultSig(t, vk)) +} + +func DefaultSignedChecksum(t *testing.T, vk [32]byte) *types.StItem { +	t.Helper() +	return types.NewSignedChecksumV1(DefaultChecksum(t), DefaultSig(t, vk)) +} + +func DefaultTh(t *testing.T) *types.TreeHeadV1 { +	t.Helper() +	return types.NewTreeHeadV1(Timestamp, TreeSize, NodeHash, Extension) +} + +func DefaultSig(t *testing.T, vk [32]byte) *types.SignatureV1 { +	t.Helper() +	return &types.SignatureV1{*NewNamespace(t, vk), Signature} +} + +func DefaultChecksum(t *testing.T) *types.ChecksumV1 { +	t.Helper() +	return &types.ChecksumV1{Identifier, Checksum} +} + +func AddCosignatureBuffer(t *testing.T, sth *types.StItem, sk *[64]byte, vk *[32]byte) *bytes.Buffer { +	t.Helper() +	var cosigs []types.SignatureV1 +	if vk != nil { +		cosigs = []types.SignatureV1{ +			types.SignatureV1{ +				Namespace: *NewNamespace(t, *vk), +				Signature: ed25519.Sign(ed25519.PrivateKey((*sk)[:]), marshal(t, *sth.SignedTreeHeadV1)), +			}, +		} +	} +	return bytes.NewBuffer(marshal(t, *types.NewCosignedTreeHeadV1(sth.SignedTreeHeadV1, cosigs))) +} + +func AddSignedChecksumBuffer(t *testing.T, sk [64]byte, vk [32]byte) *bytes.Buffer { +	t.Helper() +	data := DefaultChecksum(t) +	return bytes.NewBuffer(marshal(t, *types.NewSignedChecksumV1( +		data, +		&types.SignatureV1{ +			Namespace: *NewNamespace(t, vk), +			Signature: ed25519.Sign(ed25519.PrivateKey(sk[:]), marshal(t, *data)), +		}, +	))) +} + +func NewNamespacePool(t *testing.T, namespaces []*types.Namespace) *types.NamespacePool { +	pool, err := types.NewNamespacePool(namespaces) +	if err != nil { +		t.Fatalf("must make namespace pool: %v", err) +	} +	return pool +} + +func NewNamespace(t *testing.T, vk [32]byte) *types.Namespace { +	namespace, err := types.NewNamespaceEd25519V1(vk[:]) +	if err != nil { +		t.Fatalf("must make Ed25519V1 namespace: %v", err) +	} +	return namespace +} + +// +// Helpers that must create default values for different Trillian types +// + +// DefaultTLr creates a default Trillian log root +func DefaultTLr(t *testing.T) *ttypes.LogRootV1 { +	t.Helper() +	return Tlr(t, TreeSize, Timestamp, NodeHash) +} + +// Tlr creates a Trillian log root +func Tlr(t *testing.T, size, timestamp uint64, hash []byte) *ttypes.LogRootV1 { +	t.Helper() +	return &ttypes.LogRootV1{ +		TreeSize:       size, +		RootHash:       hash, +		TimestampNanos: timestamp, +		Revision:       0,   // not used by stfe +		Metadata:       nil, // not used by stfe +	} +} + +// DefaultTSlr creates a default Trillian signed log root +func DefaultTSlr(t *testing.T) *trillian.GetLatestSignedLogRootResponse { +	t.Helper() +	return Tslr(t, DefaultTLr(t)) +} + +// Tslr creates a Trillian signed log root +func Tslr(t *testing.T, lr *ttypes.LogRootV1) *trillian.GetLatestSignedLogRootResponse { +	t.Helper() +	b, err := lr.MarshalBinary() +	if err != nil { +		t.Fatalf("must marshal Trillian log root: %v", err) +	} +	return &trillian.GetLatestSignedLogRootResponse{ +		SignedLogRoot: &trillian.SignedLogRoot{ +			KeyHint:          nil, // not used by stfe +			LogRoot:          b, +			LogRootSignature: nil, // not used by stfe +		}, +		Proof: nil, // not used by stfe +	} +} + +// DefaultTQlr creates a default Trillian queue leaf response +func DefaultTQlr(t *testing.T, withDupCode bool) *trillian.QueueLeafResponse { +	t.Helper() +	s := status.New(codes.OK, "ok").Proto() +	if withDupCode { +		s = status.New(codes.AlreadyExists, "duplicate").Proto() +	} +	return &trillian.QueueLeafResponse{ +		QueuedLeaf: &trillian.QueuedLogLeaf{ +			Leaf: &trillian.LogLeaf{ +				MerkleLeafHash:   nil, // not used by stfe +				LeafValue:        marshal(t, *DefaultSignedChecksum(t, Ed25519VkSubmitter)), +				ExtraData:        nil, // not used by stfe +				LeafIndex:        0,   // not applicable (log is not pre-ordered) +				LeafIdentityHash: nil, // not used by stfe +			}, +			Status: s, +		}, +	} +} + +// DefaultTglbrr creates a default Trillian get leaves by range response +func DefaultTGlbrr(t *testing.T, start, end int64) *trillian.GetLeavesByRangeResponse { +	t.Helper() +	leaves := make([]*trillian.LogLeaf, 0, end-start+1) +	for i, n := start, end+1; i < n; i++ { +		leaves = append(leaves, &trillian.LogLeaf{ +			MerkleLeafHash:   nil, // not usedb y stfe +			LeafValue:        marshal(t, *DefaultSignedChecksum(t, Ed25519VkSubmitter)), +			ExtraData:        nil, // not used by stfe +			LeafIndex:        i, +			LeafIdentityHash: nil, // not used by stfe +		}) +	} +	return &trillian.GetLeavesByRangeResponse{ +		Leaves:        leaves, +		SignedLogRoot: Tslr(t, Tlr(t, uint64(end)+1, Timestamp, NodeHash)).SignedLogRoot, +	} +} + +func DefaultStItemList(t *testing.T, start, end uint64) *types.StItemList { +	items := make([]types.StItem, 0, end-start+1) +	for i, n := start, end+1; i < n; i++ { +		items = append(items, *DefaultSignedChecksum(t, Ed25519VkSubmitter)) +	} +	return &types.StItemList{items} +} + +// DefaultTGipbhr creates a default Trillian get inclusion proof by hash response +func DefaultTGipbhr(t *testing.T) *trillian.GetInclusionProofByHashResponse { +	t.Helper() +	return &trillian.GetInclusionProofByHashResponse{ +		Proof: []*trillian.Proof{ +			&trillian.Proof{ +				LeafIndex: Index, +				Hashes:    HashPath, +			}, +		}, +		SignedLogRoot: nil, // not used by stfe +	} +} + +func DefaultInclusionProof(t *testing.T, size uint64) *types.StItem { +	return types.NewInclusionProofV1(NewNamespace(t, Ed25519VkLog), size, uint64(Index), NodePath) +} + +// DefaultTGcpr creates a default Trillian get consistency proof response +func DefaultTGcpr(t *testing.T) *trillian.GetConsistencyProofResponse { +	t.Helper() +	return &trillian.GetConsistencyProofResponse{ +		Proof: &trillian.Proof{ +			LeafIndex: 0, // not applicable for consistency proofs +			Hashes:    HashPath, +		}, +		SignedLogRoot: nil, // not used by stfe +	} +} + +func DefaultConsistencyProof(t *testing.T, first, second uint64) *types.StItem { +	return types.NewConsistencyProofV1(NewNamespace(t, Ed25519VkLog), first, second, NodePath) +} + +// +// Other helpers +// + +func Fingerprint(t *testing.T, namespace *types.Namespace) [types.NamespaceFingerprintSize]byte { +	fpr, err := namespace.Fingerprint() +	if err != nil { +		t.Fatalf("must have namespace fingerprint: %v", err) +	} +	return *fpr +} + +func marshal(t *testing.T, i interface{}) []byte { +	b, err := types.Marshal(i) +	if err != nil { +		t.Fatalf("must marshal interface: %v", err) +	} +	return b +} | 
