From 58dab7862d6ffa0222a7eb341d0271501e0f5399 Mon Sep 17 00:00:00 2001 From: yzp0n Date: Thu, 26 Dec 2019 14:53:29 +0900 Subject: [PATCH] keyusage.Equals --- keyusage/keyusage.go | 22 ++++++++++++++++++++++ keyusage/keyusage_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 keyusage/keyusage_test.go diff --git a/keyusage/keyusage.go b/keyusage/keyusage.go index fe3e272..a1642f8 100644 --- a/keyusage/keyusage.go +++ b/keyusage/keyusage.go @@ -4,6 +4,7 @@ import ( "crypto/x509" "errors" "fmt" + "sort" "github.com/IPA-CyberLab/kmgm/pb" ) @@ -160,3 +161,24 @@ func (p *KeyUsage) UnmarshalFlag(s string) error { *p = ku return nil } + +func (a KeyUsage) Equals(b KeyUsage) bool { + if a.KeyUsage != b.KeyUsage { + return false + } + if len(a.ExtKeyUsages) != len(b.ExtKeyUsages) { + return false + } + + ekua := append([]x509.ExtKeyUsage{}, a.ExtKeyUsages...) + ekub := append([]x509.ExtKeyUsage{}, b.ExtKeyUsages...) + sort.Slice(ekua, func(i, j int) bool { return ekua[i] < ekua[j] }) + sort.Slice(ekub, func(i, j int) bool { return ekub[i] < ekub[j] }) + for i := range ekua { + if ekua[i] != ekub[i] { + return false + } + } + + return true +} diff --git a/keyusage/keyusage_test.go b/keyusage/keyusage_test.go new file mode 100644 index 0000000..47620d4 --- /dev/null +++ b/keyusage/keyusage_test.go @@ -0,0 +1,25 @@ +package keyusage_test + +import ( + "testing" + + "github.com/IPA-CyberLab/kmgm/keyusage" +) + +func TestKeyUsage_Equals(t *testing.T) { + if keyusage.KeyUsageCA.Equals(keyusage.KeyUsageTLSServer) { + t.Errorf("Unexpected: CA == TlsServer") + } + if keyusage.KeyUsageTLSClientServer.Equals(keyusage.KeyUsageTLSServer) { + t.Errorf("Unexpected: cs == s") + } + if keyusage.KeyUsageTLSClient.Equals(keyusage.KeyUsageTLSServer) { + t.Errorf("Unexpected: c == s") + } + if !keyusage.KeyUsageCA.Equals(keyusage.KeyUsageCA) { + t.Errorf("Unexpected: CA != CA") + } + if !keyusage.KeyUsageTLSClientServer.Equals(keyusage.KeyUsageTLSClientServer) { + t.Errorf("Unexpected: cs != cs") + } +}