diff --git a/comid/integregisters.go b/comid/integregisters.go index be013e3a..f77314ac 100644 --- a/comid/integregisters.go +++ b/comid/integregisters.go @@ -9,7 +9,7 @@ import ( "github.com/veraison/swid" ) -// IRegisterIndex is the interface that must be implemented by a;; RegisterValues. +// IRegisterIndex is the interface to hold register index type IRegisterIndex interface{} type IntegReg struct { @@ -23,12 +23,12 @@ func NewIntegRegister() (*IntegReg, error) { func (i *IntegReg) AddDigest(index IRegisterIndex, digest swid.HashEntry) error { switch t := index.(type) { - case string, uint, int, uint64: + case string, uint, uint64: digests := append(i.Register[t], digest) i.Register[t] = digests default: - return fmt.Errorf("unexpected type for int: %T", t) + return fmt.Errorf("unexpected type for index: %T", t) } return nil } @@ -47,36 +47,54 @@ func (o *IntegReg) UnMarshalCBOR(data []byte) error { } func (o IntegReg) ToJSON() ([]byte, error) { - // First Check if it is VALID or not ? - jdata := make(map[string]json.RawMessage) + + jmap := make(map[string]json.RawMessage) for key, val := range o.Register { + var v tnv switch t := key.(type) { - case uint, int, uint64: + case uint, uint64: b, err := json.Marshal(key) - v := tnv{Type: "uint", Value: b} - if err != nil { - return nil, err - } - newk, err := json.Marshal(v) + v = tnv{Type: "uint", Value: b} if err != nil { return nil, err } - newkey := string(newk) - newval, err := json.Marshal(val) + case string: + b, err := json.Marshal(key) + v = tnv{Type: "text", Value: b} if err != nil { return nil, err } - jdata[newkey] = newval - case string: - default: return nil, fmt.Errorf("unknown type %T for index-type-choice", t) - } + newk, err := json.Marshal(v) + if err != nil { + return nil, err + } + newkey := string(newk) + newval, err := json.Marshal(val) + if err != nil { + return nil, err + } + jmap[newkey] = newval } - return json.Marshal(jdata) + return json.Marshal(jmap) } +/* + + newk, err := json.Marshal(v) + if err != nil { + return nil, err + } + newkey := string(newk) + newval, err := json.Marshal(val) + if err != nil { + return nil, err + } + jdata[newkey] = newval + +*/ /* var ( v tnv diff --git a/comid/integregisters_test.go b/comid/integregisters_test.go index 65530af7..15991dcb 100644 --- a/comid/integregisters_test.go +++ b/comid/integregisters_test.go @@ -11,7 +11,8 @@ import ( "github.com/veraison/swid" ) -func TestIntegRegister_MarshalCBOR_OK(t *testing.T) { +func TestIntegRegisterUInt_MarshalCBOR_OK(t *testing.T) { + var index uint bank, err := NewIntegRegister() require.NoError(t, err) @@ -20,17 +21,20 @@ func TestIntegRegister_MarshalCBOR_OK(t *testing.T) { hash := []byte("124354658697908012435465869790801243546586979080") err = entry.Set(swid.Sha384, hash) require.NoError(t, err) - err = bank.AddDigest(0, *entry) + err = bank.AddDigest(index, *entry) require.NoError(t, err) - err = bank.AddDigest(1, *entry) + index++ + err = bank.AddDigest(index, *entry) require.NoError(t, err) - err = bank.AddDigest(2, *entry) + index++ + err = bank.AddDigest(index, *entry) require.NoError(t, err) hash1 := []byte("124354658697908012435465869790801243546586979090") err = entry.Set(swid.Sha384, hash1) require.NoError(t, err) - err = bank.AddDigest(0, *entry) + index = 0 + err = bank.AddDigest(index, *entry) require.NoError(t, err) bytes, err := bank.MarshalCBOR() require.NoError(t, err) @@ -38,7 +42,7 @@ func TestIntegRegister_MarshalCBOR_OK(t *testing.T) { } -func TestINtegRegister_UnMarshalCBOR_OK(t *testing.T) { +func TestIntegRegisterUint_UnMarshalCBOR_OK(t *testing.T) { bstr := MustHexDecode(nil, `a302818207583031323433353436353836393739303830313234333534363538363937393038303132343335343635383639373930383000828207583031323433353436353836393739303830313234333534363538363937393038303132343335343635383639373930383082075830313234333534363538363937393038303132343335343635383639373930383031323433353436353836393739303930018182075830313234333534363538363937393038303132343335343635383639373930383031323433353436353836393739303830`) bank, err := NewIntegRegister() require.NoError(t, err) @@ -47,7 +51,8 @@ func TestINtegRegister_UnMarshalCBOR_OK(t *testing.T) { } -func TestIntegRegister_MarshalToJSON_OK(t *testing.T) { +func TestIntegRegister_ToJSON_OK(t *testing.T) { + var index uint bank, err := NewIntegRegister() require.NoError(t, err) @@ -56,20 +61,92 @@ func TestIntegRegister_MarshalToJSON_OK(t *testing.T) { hash := []byte("124354658697908012435465869790801243546586979080") err = entry.Set(swid.Sha384, hash) require.NoError(t, err) - err = bank.AddDigest(0, *entry) + err = bank.AddDigest(index, *entry) require.NoError(t, err) - err = bank.AddDigest(1, *entry) + index++ + err = bank.AddDigest(index, *entry) require.NoError(t, err) - err = bank.AddDigest(2, *entry) + index++ + err = bank.AddDigest(index, *entry) require.NoError(t, err) hash1 := []byte("124354658697908012435465869790801243546586979090") err = entry.Set(swid.Sha384, hash1) require.NoError(t, err) - err = bank.AddDigest(0, *entry) + index = 0 + err = bank.AddDigest(index, *entry) require.NoError(t, err) bytes, err := bank.ToJSON() require.NoError(t, err) - fmt.Printf("JSPN Payload = %s", bytes) + fmt.Printf("JSON Payload = %s", bytes) } + +func TestIntegRegisterStr_MarshalCBOR_OK(t *testing.T) { + var index string + + bank, err := NewIntegRegister() + require.NoError(t, err) + + entry := &swid.HashEntry{} + + hash := []byte("124354658697908012435465869790801243546586979080") + err = entry.Set(swid.Sha384, hash) + require.NoError(t, err) + index = "1" + err = bank.AddDigest(index, *entry) + + require.NoError(t, err) + index = "2" + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + index = "3" + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + hash1 := []byte("124354658697908012435465869790801243546586979090") + err = entry.Set(swid.Sha384, hash1) + require.NoError(t, err) + bytes, err := bank.MarshalCBOR() + require.NoError(t, err) + fmt.Printf("CBOR Payload = %x", bytes) + +} + +func TestIntegRegisterText_UnMarshalCBOR_OK(t *testing.T) { + bstr := MustHexDecode(nil, `a3613281820758303132343335343635383639373930383031323433353436353836393739303830313234333534363538363937393038306133818207583031323433353436353836393739303830313234333534363538363937393038303132343335343635383639373930383061318182075830313234333534363538363937393038303132343335343635383639373930383031323433353436353836393739303830`) + bank, err := NewIntegRegister() + require.NoError(t, err) + err = bank.UnMarshalCBOR(bstr) + require.NoError(t, err) +} + +func TestIntegRegisterText_ToJSON_OK(t *testing.T) { + var index string + bank, err := NewIntegRegister() + require.NoError(t, err) + + entry := &swid.HashEntry{} + + hash := []byte("124354658697908012435465869790801243546586979080") + err = entry.Set(swid.Sha384, hash) + require.NoError(t, err) + index = "a" + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + index = "b" + + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + index = "c" + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + hash1 := []byte("124354658697908012435465869790801243546586979090") + err = entry.Set(swid.Sha384, hash1) + require.NoError(t, err) + index = "d" + err = bank.AddDigest(index, *entry) + require.NoError(t, err) + bytes, err := bank.ToJSON() + require.NoError(t, err) + fmt.Printf("JSON Payload = %s", bytes) +}