Skip to content

Commit

Permalink
chore: separate salt generation from calculating the commitmentId, so…
Browse files Browse the repository at this point in the history
… we can unittest commitmentId generation against GET /v2/debug/names/commitment-id
  • Loading branch information
randomshinichi committed Apr 5, 2019
1 parent 6d460af commit 4881ad9
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 4 deletions.
14 changes: 10 additions & 4 deletions aeternity/hashing.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,16 +110,22 @@ func uuidV4() (u string) {
return fmt.Sprint(uuid.NewV4())
}

// naming
func computeCommitmentID(name string) (ch string, salt []byte, err error) {
// since the salt is a uint256, which Erlang handles well, but Go has nothing similar to it,
// it is imperative that the salt be kept as a bytearray unless you really have to convert it
// into an integer. Which you usually don't, because it's a salt.
func generateCommitmentID(name string) (ch string, salt []byte, err error) {
salt, err = randomBytes(32)
if err != nil {
return
}
// TODO: this is done using the api (concatenating )

ch, err = computeCommitmentID(name, salt)
return ch, salt, err
}

func computeCommitmentID(name string, salt []byte) (ch string, err error) {
nh := append(Namehash(name), salt...)
nh, _ = hash(nh)
// nh := namehash(name)
ch = Encode(PrefixCommitment, nh)
return
}
Expand Down
55 changes: 55 additions & 0 deletions aeternity/hashing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,3 +186,58 @@ func TestGenerate(t *testing.T) {
})
}
}

func Test_computeCommitmentID(t *testing.T) {
type args struct {
name string
salt []byte
}
tests := []struct {
name string
args args
wantCh string
wantErr bool
}{
{
name: "fdsa.test, 0",
args: args{
name: "fdsa.test",
salt: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
},
wantCh: "cm_2jJov6dn121oKkHo6TuWaAAL4ZEMonnCjpo8jatkCixrLG8Uc4",
wantErr: false,
},
{
name: "fdsa.test, 255",
args: args{
name: "fdsa.test",
salt: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255},
},
wantCh: "cm_sa8UUjorPzCTLfYp6YftR4jwF4kPaZVsoP5bKVAqRw9zm43EE",
wantErr: false,
},
{
// erlang Eshell: rp(<<9795159241593061970:256>>).
name: "fdsa.test, 9795159241593061970 (do not use Golang to convert salt integers)",
args: args{
name: "fdsa.test",
salt: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 239, 101, 110, 233, 138, 2, 82},
},
wantCh: "cm_QhtcYow8krP3xQSTsAhFihfBstTjQMiApaPCgZuciDHZmMNtZ",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// fmt.Println(saltBytes)
gotCh, err := computeCommitmentID(tt.args.name, tt.args.salt)
if (err != nil) != tt.wantErr {
t.Errorf("computeCommitmentID() error = %v, wantErr %v", err, tt.wantErr)
return
}
if gotCh != tt.wantCh {
t.Errorf("computeCommitmentID() = %v, want %v", gotCh, tt.wantCh)
}
})
}
}

0 comments on commit 4881ad9

Please sign in to comment.