package keccak import ( "encoding/hex" "testing" ) func TestKeccak256KnownAnswers(t *testing.T) { cases := []struct { name string in string want string }{ {"empty", "", "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}, { "abc", "abc", "4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45", }, { "longer", "The quick brown fox jumps over the lazy dog", "4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15", }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { sum := Hash256([]byte(tc.in)) got := hex.EncodeToString(sum[:]) if got != tc.want { t.Fatalf("Hash256(%q) = %s, want %s", tc.in, got, tc.want) } }) } } func TestStreamingMatchesOneShot(t *testing.T) { data := make([]byte, 0, 500) for i := 0; i < 500; i++ { data = append(data, byte(i)) } oneShot := Hash256(data) h := New() for i := 0; i < len(data); i += 7 { end := i + 7 if end > len(data) { end = len(data) } h.Write(data[i:end]) } if got := h.Sum256(); got != oneShot { t.Fatalf("streaming digest differs from one-shot") } } // TestSum256DoesNotDisturbState ensures Sum256 clones the state (hash.Hash // semantics) so repeated calls are stable. func TestSum256DoesNotDisturbState(t *testing.T) { h := New() h.Write([]byte("abc")) first := h.Sum256() second := h.Sum256() if first != second { t.Fatalf("Sum256 mutated state") } if first != Hash256([]byte("abc")) { t.Fatalf("Sum256 mismatch with Hash256") } }