diff options
Diffstat (limited to 'cmd/sigsum-debug/leaf/hash')
| -rw-r--r-- | cmd/sigsum-debug/leaf/hash/hash.go | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/cmd/sigsum-debug/leaf/hash/hash.go b/cmd/sigsum-debug/leaf/hash/hash.go new file mode 100644 index 0000000..9bc845e --- /dev/null +++ b/cmd/sigsum-debug/leaf/hash/hash.go @@ -0,0 +1,42 @@ +package hash + +import ( +	"fmt" +	"strings" + +	"git.sigsum.org/sigsum-go/internal/fmtio" +	"git.sigsum.org/sigsum-go/pkg/hex" +	"git.sigsum.org/sigsum-go/pkg/types" +) + +func Main(args []string, optKeyHash, optSignature string, optShardHint uint64) error { +	if len(args) != 0 { +		return fmt.Errorf("trailing arguments: %s", strings.Join(args, ", ")) +	} +	data, err := fmtio.BytesFromStdin() +	if err != nil { +		return fmt.Errorf("read stdin: %w", err) +	} +	keyHash, err := fmtio.KeyHashFromHex(optKeyHash) +	if err != nil { +		return fmt.Errorf("parse key hash: %w", err) +	} +	sig, err := fmtio.SignatureFromHex(optSignature) +	if err != nil { +		return fmt.Errorf("parse signature: %w", err) +	} + +	preimage := types.HashFn(data) +	leaf := types.Leaf{ +		Statement: types.Statement{ +			ShardHint: optShardHint, +			Checksum:  *types.HashFn(preimage[:]), +		}, +		Signature: sig, +		KeyHash:   keyHash, +	} +	leafHash := types.LeafHash(leaf.ToBinary()) + +	fmt.Printf("%s\n", hex.Serialize(leafHash[:])) +	return nil +} | 
