Skip to content

Commit

Permalink
perf(poseidon2/koala-baby): change diag constants
Browse files Browse the repository at this point in the history
  • Loading branch information
yelhousni committed Feb 12, 2025
1 parent 31b68d8 commit 365fe69
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 96 deletions.
81 changes: 40 additions & 41 deletions field/babybear/poseidon2/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
// NewMerkleDamgardHasher returns a Poseidon2 hasher using the Merkle-Damgard
// construction with the default parameters.
func NewMerkleDamgardHasher() gnarkHash.StateStorer {
// TODO @Tabaie @ThomasPiellard Generify once Poseidon2 parameters are known for all curves
return gnarkHash.NewMerkleDamgardHasher(
&Permutation{params: NewDefaultParameters()}, make([]byte, fr.Bytes))
}
Expand Down Expand Up @@ -41,46 +40,46 @@ func init() {
})

// diagonal of internal matrix when Width=16
diag16[0].SetString("1526245758")
diag16[1].SetString("1181039355")
diag16[2].SetString("294525134")
diag16[3].SetString("1187117748")
diag16[4].SetString("1982584076")
diag16[5].SetString("1805711612")
diag16[6].SetString("1185627262")
diag16[7].SetString("856598545")
diag16[8].SetString("1032717003")
diag16[9].SetString("1019193515")
diag16[10].SetString("1622854951")
diag16[11].SetString("1458848858")
diag16[12].SetString("145265389")
diag16[13].SetString("1220122282")
diag16[14].SetString("1647429377")
diag16[15].SetString("462996148")
diag16[0].SetString("2130706431")
diag16[1].SetString("1")
diag16[2].SetString("2")
diag16[3].SetString("1065353217")
diag16[4].SetString("3")
diag16[5].SetString("4")
diag16[6].SetString("1065353216")
diag16[7].SetString("2130706430")
diag16[8].SetString("2130706429")
diag16[9].SetString("2122383361")
diag16[10].SetString("1598029825")
diag16[11].SetString("1864368129")
diag16[12].SetString("1864368113")
diag16[13].SetString("8323072")
diag16[14].SetString("133169152")
diag16[15].SetString("266338320")

// diagonal of internal matrix when Width=24
diag24[0].SetString("1151545613")
diag24[1].SetString("1378328160")
diag24[2].SetString("304145285")
diag24[3].SetString("1170753223")
diag24[4].SetString("1173904120")
diag24[5].SetString("382806505")
diag24[6].SetString("1018843483")
diag24[7].SetString("326347087")
diag24[8].SetString("1688249811")
diag24[9].SetString("92343735")
diag24[10].SetString("1989067774")
diag24[11].SetString("426627352")
diag24[12].SetString("1043427554")
diag24[13].SetString("1350803455")
diag24[14].SetString("685360948")
diag24[15].SetString("992522095")
diag24[16].SetString("461201261")
diag24[17].SetString("546901022")
diag24[18].SetString("1924506406")
diag24[19].SetString("1858498981")
diag24[20].SetString("227302405")
diag24[21].SetString("642805551")
diag24[22].SetString("522204904")
diag24[23].SetString("1738963060")
diag24[0].SetString("2130706431")
diag24[1].SetString("1")
diag24[2].SetString("2")
diag24[3].SetString("1065353217")
diag24[4].SetString("3")
diag24[5].SetString("4")
diag24[6].SetString("1065353216")
diag24[7].SetString("2130706430")
diag24[8].SetString("2130706429")
diag24[9].SetString("2122383361")
diag24[10].SetString("1598029825")
diag24[11].SetString("1864368129")
diag24[12].SetString("1997537281")
diag24[13].SetString("2114060289")
diag24[14].SetString("2126544897")
diag24[15].SetString("1864368113")
diag24[16].SetString("8323072")
diag24[17].SetString("532676608")
diag24[18].SetString("266338304")
diag24[19].SetString("133169152")
diag24[20].SetString("66584576")
diag24[21].SetString("33292288")
diag24[22].SetString("16646144")
diag24[23].SetString("266338320")
}
10 changes: 3 additions & 7 deletions field/babybear/poseidon2/poseidon2.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,7 @@ func (h *Permutation) matMulExternalInPlace(input []fr.Element) {
func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
switch h.params.Width {
case 16:
// TODO: use optimized diagonal as in plonky3
// https://github.com/Plonky3/Plonky3/blob/95f9774c435a629a7331d4fbabdb3f5a2b300de0/baby-bear/src/poseidon2.rs
//
// TODO: optimize multiplication by diag16
// [-2, 1, 2, 1/2, 3, 4, -1/2, -3, -4, 1/2^8, 1/4, 1/8, 1/2^27, -1/2^8, -1/16, -1/2^27]
var sum fr.Element
sum.Set(&input[0])
Expand All @@ -223,9 +221,7 @@ func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
Add(&input[i], &sum)
}
case 24:
// TODO: use optimized diagonal as in plonky3
// https://github.com/Plonky3/Plonky3/blob/95f9774c435a629a7331d4fbabdb3f5a2b300de0/baby-bear/src/poseidon2.rs
//
// TODO: optimize multiplication by diag24
// [-2, 1, 2, 1/2, 3, 4, -1/2, -3, -4, 1/2^8, 1/4, 1/8, 1/16, 1/2^7, 1/2^9, 1/2^27, -1/2^8, -1/4, -1/8, -1/16, -1/32, -1/64, -1/2^7, -1/2^27]
var sum fr.Element
sum.Set(&input[0])
Expand All @@ -237,7 +233,7 @@ func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
Add(&input[i], &sum)
}
default:
panic("only t=16,24 are supported")
panic("only Width=16,24 are supported")
}
}

Expand Down
81 changes: 40 additions & 41 deletions field/koalabear/poseidon2/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
// NewMerkleDamgardHasher returns a Poseidon2 hasher using the Merkle-Damgard
// construction with the default parameters.
func NewMerkleDamgardHasher() gnarkHash.StateStorer {
// TODO @Tabaie @ThomasPiellard Generify once Poseidon2 parameters are known for all curves
return gnarkHash.NewMerkleDamgardHasher(
&Permutation{params: NewDefaultParameters()}, make([]byte, fr.Bytes))
}
Expand Down Expand Up @@ -40,46 +39,46 @@ func init() {
})

// diagonal of internal matrix when Width=16
diag16[0].SetString("2046570709")
diag16[1].SetString("758836515")
diag16[2].SetString("1294135")
diag16[3].SetString("1937509553")
diag16[4].SetString("2128865551")
diag16[5].SetString("1697674041")
diag16[6].SetString("1520666926")
diag16[7].SetString("1558715341")
diag16[8].SetString("1137246046")
diag16[9].SetString("1320163102")
diag16[10].SetString("1968225990")
diag16[11].SetString("234409115")
diag16[12].SetString("946626146")
diag16[13].SetString("566947014")
diag16[14].SetString("2115407367")
diag16[15].SetString("1174021429")
diag16[0].SetString("2130706431")
diag16[1].SetString("1")
diag16[2].SetString("2")
diag16[3].SetString("1065353217")
diag16[4].SetString("3")
diag16[5].SetString("4")
diag16[6].SetString("1065353216")
diag16[7].SetString("2130706430")
diag16[8].SetString("2130706429")
diag16[9].SetString("2122383361")
diag16[10].SetString("1864368129")
diag16[11].SetString("2130706306")
diag16[12].SetString("8323072")
diag16[13].SetString("266338304")
diag16[14].SetString("133169152")
diag16[15].SetString("127")

// diagonal of internal matrix when Width=24
diag24[0].SetString("1308809838")
diag24[1].SetString("928239151")
diag24[2].SetString("495882907")
diag24[3].SetString("593757554")
diag24[4].SetString("593757554")
diag24[5].SetString("567559762")
diag24[6].SetString("1572388064")
diag24[7].SetString("1076816199")
diag24[8].SetString("652906069")
diag24[9].SetString("1871203714")
diag24[10].SetString("358820701")
diag24[11].SetString("1696335905")
diag24[12].SetString("1771481038")
diag24[13].SetString("67413782")
diag24[14].SetString("1765474848")
diag24[15].SetString("235952237")
diag24[16].SetString("111716804")
diag24[17].SetString("213766759")
diag24[18].SetString("656473656")
diag24[19].SetString("1879962596")
diag24[20].SetString("1762516106")
diag24[21].SetString("197180297")
diag24[22].SetString("2061316832")
diag24[23].SetString("1833346861")
diag24[0].SetString("2130706431")
diag24[1].SetString("1")
diag24[2].SetString("2")
diag24[3].SetString("1065353217")
diag24[4].SetString("3")
diag24[5].SetString("4")
diag24[6].SetString("1065353216")
diag24[7].SetString("2130706430")
diag24[8].SetString("2130706429")
diag24[9].SetString("2122383361")
diag24[10].SetString("1598029825")
diag24[11].SetString("1864368129")
diag24[12].SetString("1997537281")
diag24[13].SetString("2064121857")
diag24[14].SetString("2097414145")
diag24[15].SetString("2130706306")
diag24[16].SetString("8323072")
diag24[17].SetString("266338304")
diag24[18].SetString("133169152")
diag24[19].SetString("66584576")
diag24[20].SetString("33292288")
diag24[21].SetString("16646144")
diag24[22].SetString("4161536")
diag24[23].SetString("127")
}
10 changes: 3 additions & 7 deletions field/koalabear/poseidon2/poseidon2.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,7 @@ func (h *Permutation) matMulExternalInPlace(input []fr.Element) {
func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
switch h.params.Width {
case 16:
// TODO: use optimized diagonal as in plonky3
// https://github.com/Plonky3/Plonky3/blob/95f9774c435a629a7331d4fbabdb3f5a2b300de0/koala-bear/src/poseidon2.rs
//
// TODO: optimize multiplication by diag16
// [-2, 1, 2, 1/2, 3, 4, -1/2, -3, -4, 1/2^8, 1/8, 1/2^24, -1/2^8, -1/8, -1/16, -1/2^24]
var sum fr.Element
sum.Set(&input[0])
Expand All @@ -223,9 +221,7 @@ func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
Add(&input[i], &sum)
}
case 24:
// TODO: use optimized diagonal as in plonky3
// https://github.com/Plonky3/Plonky3/blob/95f9774c435a629a7331d4fbabdb3f5a2b300de0/koala-bear/src/poseidon2.rs
//
// TODO: optimize multiplication by diag24
// [-2, 1, 2, 1/2, 3, 4, -1/2, -3, -4, 1/2^8, 1/4, 1/8, 1/16, 1/32, 1/64, 1/2^24, -1/2^8, -1/8, -1/16, -1/32, -1/64, -1/2^7, -1/2^9, -1/2^24]
var sum fr.Element
sum.Set(&input[0])
Expand All @@ -237,7 +233,7 @@ func (h *Permutation) matMulInternalInPlace(input []fr.Element) {
Add(&input[i], &sum)
}
default:
panic("only t=16,24 are supported")
panic("only Width=16,24 are supported")
}
}

Expand Down

0 comments on commit 365fe69

Please sign in to comment.