diff --git a/claim.go b/claim.go index 55bf37e..b2f7e05 100644 --- a/claim.go +++ b/claim.go @@ -150,6 +150,22 @@ type Claim struct { value [4]ElemBytes } +// NewClaimFromBigInts creates new Claim from bigInts. +func NewClaimFromBigInts(raw [8]*big.Int) (*Claim, error) { + var c Claim + for i := 0; i < 4; i++ { + err := c.index[i].SetInt(raw[i]) + if err != nil { + return nil, err + } + err = c.value[i].SetInt(raw[i+4]) + if err != nil { + return nil, err + } + } + return &c, nil +} + // subjectFlag for the time being describes the location of ID (in index or value // slots or nowhere at all). // diff --git a/claim_test.go b/claim_test.go index a01c75f..bd33b27 100644 --- a/claim_test.go +++ b/claim_test.go @@ -672,3 +672,28 @@ func TestClaim_SetMerklizedRoot(t *testing.T) { _, err = claim3.GetMerklizedRoot() require.Error(t, ErrNoMerklizedRoot, err) } + +func TestNewClaimFromBigInts(t *testing.T) { + toBigInt := func(s string) *big.Int { + i, ok := new(big.Int).SetString(s, 10) + require.True(t, ok, s) + return i + } + + c := [8]*big.Int{ + toBigInt("3537648966163034177119037898189471968122"), + toBigInt("25999649578069426716666405683037372395789852830344252783677755850030715394"), + toBigInt("657065114158124047812701241180089030040156354062"), + toBigInt("1995762661"), + toBigInt("58718019808110235945021734914"), + toBigInt("0"), + toBigInt("0"), + toBigInt("0"), + } + + claim, err := NewClaimFromBigInts(c) + require.NoError(t, err) + userID, err := claim.GetID() + require.NoError(t, err) + require.Equal(t, "2qNkLwz97jdzZBkdJYwVdXyGARGfVSGLJxELVC9ceH", userID.String()) +}