package hash import ( "bytes" "os" "testing" "git.tcp.direct/kayos/common/entropy" "git.tcp.direct/kayos/common/squish" ) const ( kayosBlake2b = "Kr+6ONDx+cq/WvhHpQE/4LVuJYi9QHz1TztHNTWwa9KJWqHxfTNLKF3YxrcLptA3wO0KHm83Lq7gpBWgCQzPag==" kayosMD5 = "aoNjwileNitB208vOwpIow==" kayosSHA1 = "M23ElC0sQYAK+MaMZVmza2L8mss=" kayosSHA256 = "BagY0TmoGR3O7t80BGm4K6UHPlqEg6HJirwQmhrPK4U=" kayosSHA512 = "xiuo2na76acrWXCTTR++O1pPZabOhyj8nbfb5Go3e1pEq9VJYIsOioTXalf2GCuERmFecWkmaL5QI8mIXXWpNA==" ) func TestBlake2bsum(t *testing.T) { og := squish.B64d(kayosBlake2b) newc := Blake2bSum([]byte("kayos\n")) if !bytes.Equal(newc, og) { t.Fatalf("wanted: %v, got %v", kayosBlake2b, squish.B64e(newc)) } if !BlakeEqual([]byte("kayos\n"), []byte{107, 97, 121, 111, 115, 10}) { t.Fatalf("BlakeEqual should have been true. %s should == %s", []byte("kayos\n"), []byte{107, 97, 121, 111, 115, 92, 110}) } t.Logf("[blake2bSum] success: %s", kayosBlake2b) } func TestBlakeFileChecksum(t *testing.T) { path := t.TempDir() + "/blake2b.dat" err := os.WriteFile(path, []byte{107, 97, 121, 111, 115, 10}, os.ModePerm) if err != nil { t.Errorf("[FAIL] failed to write test fle for TestBlakeFileChecksum: %s", err.Error()) } filecheck, err2 := BlakeFileChecksum(path) if err2 != nil { t.Errorf("[FAIL] failed to read test fle for TestBlakeFileChecksum: %s", err2.Error()) } if len(filecheck) == 0 { t.Errorf("[FAIL] got nil output from BlakeFileChecksum") } if !bytes.Equal(filecheck, squish.B64d(kayosBlake2b)) { t.Fatalf("[FAIL] wanted: %v, got %v", kayosBlake2b, squish.B64e(filecheck)) } badfile, err3 := BlakeFileChecksum(t.TempDir() + "/" + entropy.RandStr(50)) if err3 == nil { t.Errorf("[FAIL] shouldn't have been able to read phony file") } if len(badfile) != 0 { t.Errorf("[FAIL] got non-nil output from bogus file: %v", badfile) } if !bytes.Equal(filecheck, squish.B64d(kayosBlake2b)) { t.Fatalf("[FAIL] wanted: %v, got %v", kayosBlake2b, squish.B64e(filecheck)) } err = os.WriteFile(path+".empty", []byte{}, os.ModePerm) if err != nil { t.Errorf("[FAIL] failed to write test fle for TestBlakeFileChecksum: %s", err.Error()) } _, err4 := BlakeFileChecksum(path + ".empty") if err4 == nil { t.Fatalf("[FAIL] should have failed to read empty file") } } func TestSum(t *testing.T) { if Sum(TypeNull, []byte("yeet")) != nil { t.Fatal("Sum(TypeNull, []byte(\"yeet\")) should have returned nil") } var ( ogsha1 = squish.B64d(kayosSHA1) ogsha256 = squish.B64d(kayosSHA256) ogsha512 = squish.B64d(kayosSHA512) ogmd5 = squish.B64d(kayosMD5) newsha1 = Sum(TypeSHA1, []byte("kayos\n")) newsha256 = Sum(TypeSHA256, []byte("kayos\n")) newsha512 = Sum(TypeSHA512, []byte("kayos\n")) newmd5 = Sum(TypeMD5, []byte("kayos\n")) ) if !bytes.Equal(newsha1, ogsha1) { t.Fatalf("[sha1] wanted: %v, got %v", kayosSHA1, squish.B64e(newsha1)) } t.Logf("[sha1] success: %s", kayosSHA1) if !bytes.Equal(newsha256, ogsha256) { t.Fatalf("[sha256] wanted: %v, got %v", kayosSHA256, squish.B64e(newsha256)) } t.Logf("[sha256] success: %s", kayosSHA256) if !bytes.Equal(newsha512, ogsha512) { t.Fatalf("[sha512] wanted: %v, got %v", kayosSHA512, squish.B64e(newsha512)) } t.Logf("[sha512] success: %s", kayosSHA512) if !bytes.Equal(newmd5, ogmd5) { t.Fatalf("[md5] wanted: %v, got %v", kayosMD5, squish.B64e(newmd5)) } t.Logf("[md5] success: %s", kayosMD5) }