Skip to content

Commit 1666657

Browse files
authored
inplace optimizations (#12)
1 parent 676c433 commit 1666657

File tree

6 files changed

+211
-181
lines changed

6 files changed

+211
-181
lines changed

.github/workflows/test.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Tests
2+
3+
on:
4+
pull_request: {}
5+
push:
6+
branches:
7+
- main
8+
9+
jobs:
10+
unit:
11+
name: Unit tests
12+
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
go-version: ['1.22.x', '1.23.x']
16+
steps:
17+
- uses: actions/checkout@v4
18+
with:
19+
ref: ${{ github.event.pull_request.head.sha }}
20+
21+
- name: Setup Go ${{ matrix.go-version }}
22+
uses: actions/setup-go@v5
23+
with:
24+
go-version: ${{ matrix.go-version }}
25+
26+
- name: Install dependencies
27+
run: |
28+
go get ./...
29+
30+
- name: Run tests
31+
run: go test ./...

field/goldilocks/goldilocks.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ type Element = g.Element
1212

1313
const Bytes = 8
1414

15+
func NewElement(value uint64) Element {
16+
return g.NewElement(value)
17+
}
18+
1519
func reverseBytes(b []byte) []byte {
1620
res := make([]byte, len(b))
1721
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {

go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ module github.com/elliottech/poseidon_crypto
22

33
go 1.22
44

5-
toolchain go1.22.7
6-
75
require (
86
github.com/consensys/gnark-crypto v0.12.2-0.20240215234832-d72fcb379d3e
97
github.com/stretchr/testify v1.9.0
Lines changed: 135 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package poseidon2
22

3+
import g "github.com/elliottech/poseidon_crypto/field/goldilocks"
4+
35
const (
46
WIDTH = 12
57
RATE = 8
@@ -13,160 +15,160 @@ const (
1315

1416
var (
1517
// Generated randomly for ROUNDS_F
16-
EXTERNAL_CONSTANTS = [ROUNDS_F][WIDTH]uint64{
18+
EXTERNAL_CONSTANTS = [ROUNDS_F][WIDTH]g.Element{
1719
{
18-
15492826721047263190,
19-
11728330187201910315,
20-
8836021247773420868,
21-
16777404051263952451,
22-
5510875212538051896,
23-
6173089941271892285,
24-
2927757366422211339,
25-
10340958981325008808,
26-
8541987352684552425,
27-
9739599543776434497,
28-
15073950188101532019,
29-
12084856431752384512,
20+
g.NewElement(15492826721047263190),
21+
g.NewElement(11728330187201910315),
22+
g.NewElement(8836021247773420868),
23+
g.NewElement(16777404051263952451),
24+
g.NewElement(5510875212538051896),
25+
g.NewElement(6173089941271892285),
26+
g.NewElement(2927757366422211339),
27+
g.NewElement(10340958981325008808),
28+
g.NewElement(8541987352684552425),
29+
g.NewElement(9739599543776434497),
30+
g.NewElement(15073950188101532019),
31+
g.NewElement(12084856431752384512),
3032
},
3133
{
32-
4584713381960671270,
33-
8807052963476652830,
34-
54136601502601741,
35-
4872702333905478703,
36-
5551030319979516287,
37-
12889366755535460989,
38-
16329242193178844328,
39-
412018088475211848,
40-
10505784623379650541,
41-
9758812378619434837,
42-
7421979329386275117,
43-
375240370024755551,
34+
g.NewElement(4584713381960671270),
35+
g.NewElement(8807052963476652830),
36+
g.NewElement(54136601502601741),
37+
g.NewElement(4872702333905478703),
38+
g.NewElement(5551030319979516287),
39+
g.NewElement(12889366755535460989),
40+
g.NewElement(16329242193178844328),
41+
g.NewElement(412018088475211848),
42+
g.NewElement(10505784623379650541),
43+
g.NewElement(9758812378619434837),
44+
g.NewElement(7421979329386275117),
45+
g.NewElement(375240370024755551),
4446
},
4547
{
46-
3331431125640721931,
47-
15684937309956309981,
48-
578521833432107983,
49-
14379242000670861838,
50-
17922409828154900976,
51-
8153494278429192257,
52-
15904673920630731971,
53-
11217863998460634216,
54-
3301540195510742136,
55-
9937973023749922003,
56-
3059102938155026419,
57-
1895288289490976132,
48+
g.NewElement(3331431125640721931),
49+
g.NewElement(15684937309956309981),
50+
g.NewElement(578521833432107983),
51+
g.NewElement(14379242000670861838),
52+
g.NewElement(17922409828154900976),
53+
g.NewElement(8153494278429192257),
54+
g.NewElement(15904673920630731971),
55+
g.NewElement(11217863998460634216),
56+
g.NewElement(3301540195510742136),
57+
g.NewElement(9937973023749922003),
58+
g.NewElement(3059102938155026419),
59+
g.NewElement(1895288289490976132),
5860
},
5961
{
60-
5580912693628927540,
61-
10064804080494788323,
62-
9582481583369602410,
63-
10186259561546797986,
64-
247426333829703916,
65-
13193193905461376067,
66-
6386232593701758044,
67-
17954717245501896472,
68-
1531720443376282699,
69-
2455761864255501970,
70-
11234429217864304495,
71-
4746959618548874102,
62+
g.NewElement(5580912693628927540),
63+
g.NewElement(10064804080494788323),
64+
g.NewElement(9582481583369602410),
65+
g.NewElement(10186259561546797986),
66+
g.NewElement(247426333829703916),
67+
g.NewElement(13193193905461376067),
68+
g.NewElement(6386232593701758044),
69+
g.NewElement(17954717245501896472),
70+
g.NewElement(1531720443376282699),
71+
g.NewElement(2455761864255501970),
72+
g.NewElement(11234429217864304495),
73+
g.NewElement(4746959618548874102),
7274
},
7375
{
74-
13571697342473846203,
75-
17477857865056504753,
76-
15963032953523553760,
77-
16033593225279635898,
78-
14252634232868282405,
79-
8219748254835277737,
80-
7459165569491914711,
81-
15855939513193752003,
82-
16788866461340278896,
83-
7102224659693946577,
84-
3024718005636976471,
85-
13695468978618890430,
76+
g.NewElement(13571697342473846203),
77+
g.NewElement(17477857865056504753),
78+
g.NewElement(15963032953523553760),
79+
g.NewElement(16033593225279635898),
80+
g.NewElement(14252634232868282405),
81+
g.NewElement(8219748254835277737),
82+
g.NewElement(7459165569491914711),
83+
g.NewElement(15855939513193752003),
84+
g.NewElement(16788866461340278896),
85+
g.NewElement(7102224659693946577),
86+
g.NewElement(3024718005636976471),
87+
g.NewElement(13695468978618890430),
8688
},
8789
{
88-
8214202050877825436,
89-
2670727992739346204,
90-
16259532062589659211,
91-
11869922396257088411,
92-
3179482916972760137,
93-
13525476046633427808,
94-
3217337278042947412,
95-
14494689598654046340,
96-
15837379330312175383,
97-
8029037639801151344,
98-
2153456285263517937,
99-
8301106462311849241,
90+
g.NewElement(8214202050877825436),
91+
g.NewElement(2670727992739346204),
92+
g.NewElement(16259532062589659211),
93+
g.NewElement(11869922396257088411),
94+
g.NewElement(3179482916972760137),
95+
g.NewElement(13525476046633427808),
96+
g.NewElement(3217337278042947412),
97+
g.NewElement(14494689598654046340),
98+
g.NewElement(15837379330312175383),
99+
g.NewElement(8029037639801151344),
100+
g.NewElement(2153456285263517937),
101+
g.NewElement(8301106462311849241),
100102
},
101103
{
102-
13294194396455217955,
103-
17394768489610594315,
104-
12847609130464867455,
105-
14015739446356528640,
106-
5879251655839607853,
107-
9747000124977436185,
108-
8950393546890284269,
109-
10765765936405694368,
110-
14695323910334139959,
111-
16366254691123000864,
112-
15292774414889043182,
113-
10910394433429313384,
104+
g.NewElement(13294194396455217955),
105+
g.NewElement(17394768489610594315),
106+
g.NewElement(12847609130464867455),
107+
g.NewElement(14015739446356528640),
108+
g.NewElement(5879251655839607853),
109+
g.NewElement(9747000124977436185),
110+
g.NewElement(8950393546890284269),
111+
g.NewElement(10765765936405694368),
112+
g.NewElement(14695323910334139959),
113+
g.NewElement(16366254691123000864),
114+
g.NewElement(15292774414889043182),
115+
g.NewElement(10910394433429313384),
114116
},
115117
{
116-
17253424460214596184,
117-
3442854447664030446,
118-
3005570425335613727,
119-
10859158614900201063,
120-
9763230642109343539,
121-
6647722546511515039,
122-
909012944955815706,
123-
18101204076790399111,
124-
11588128829349125809,
125-
15863878496612806566,
126-
5201119062417750399,
127-
176665553780565743,
118+
g.NewElement(17253424460214596184),
119+
g.NewElement(3442854447664030446),
120+
g.NewElement(3005570425335613727),
121+
g.NewElement(10859158614900201063),
122+
g.NewElement(9763230642109343539),
123+
g.NewElement(6647722546511515039),
124+
g.NewElement(909012944955815706),
125+
g.NewElement(18101204076790399111),
126+
g.NewElement(11588128829349125809),
127+
g.NewElement(15863878496612806566),
128+
g.NewElement(5201119062417750399),
129+
g.NewElement(176665553780565743),
128130
},
129131
}
130132

131133
// Generated randomly for ROUNDS_P
132-
INTERNAL_CONSTANTS = [ROUNDS_P]uint64{
133-
11921381764981422944,
134-
10318423381711320787,
135-
8291411502347000766,
136-
229948027109387563,
137-
9152521390190983261,
138-
7129306032690285515,
139-
15395989607365232011,
140-
8641397269074305925,
141-
17256848792241043600,
142-
6046475228902245682,
143-
12041608676381094092,
144-
12785542378683951657,
145-
14546032085337914034,
146-
3304199118235116851,
147-
16499627707072547655,
148-
10386478025625759321,
149-
13475579315436919170,
150-
16042710511297532028,
151-
1411266850385657080,
152-
9024840976168649958,
153-
14047056970978379368,
154-
838728605080212101,
134+
INTERNAL_CONSTANTS = [ROUNDS_P]g.Element{
135+
g.NewElement(11921381764981422944),
136+
g.NewElement(10318423381711320787),
137+
g.NewElement(8291411502347000766),
138+
g.NewElement(229948027109387563),
139+
g.NewElement(9152521390190983261),
140+
g.NewElement(7129306032690285515),
141+
g.NewElement(15395989607365232011),
142+
g.NewElement(8641397269074305925),
143+
g.NewElement(17256848792241043600),
144+
g.NewElement(6046475228902245682),
145+
g.NewElement(12041608676381094092),
146+
g.NewElement(12785542378683951657),
147+
g.NewElement(14546032085337914034),
148+
g.NewElement(3304199118235116851),
149+
g.NewElement(16499627707072547655),
150+
g.NewElement(10386478025625759321),
151+
g.NewElement(13475579315436919170),
152+
g.NewElement(16042710511297532028),
153+
g.NewElement(1411266850385657080),
154+
g.NewElement(9024840976168649958),
155+
g.NewElement(14047056970978379368),
156+
g.NewElement(838728605080212101),
155157
}
156158

157159
// Taken from Plonk3 Poseidon2 implementation. https://github.com/Plonky3/Plonky3/blob/eeb4e37b20127c4daa871b2bad0df30a7c7380db/goldilocks/src/poseidon2.rs#L28
158-
MATRIX_DIAG_12_U64 = [WIDTH]uint64{
159-
0xc3b6c08e23ba9300,
160-
0xd84b5de94a324fb6,
161-
0x0d0c371c5b35b84f,
162-
0x7964f570e7188037,
163-
0x5daf18bbd996604b,
164-
0x6743bc47b9595257,
165-
0x5528b9362c59bb70,
166-
0xac45e25b7127b68b,
167-
0xa2077d7dfbb606b5,
168-
0xf3faac6faee378ae,
169-
0x0c6388b51545e883,
170-
0xd27dbb6944917b60,
160+
MATRIX_DIAG_12_U64 = [WIDTH]g.Element{
161+
g.NewElement(0xc3b6c08e23ba9300),
162+
g.NewElement(0xd84b5de94a324fb6),
163+
g.NewElement(0x0d0c371c5b35b84f),
164+
g.NewElement(0x7964f570e7188037),
165+
g.NewElement(0x5daf18bbd996604b),
166+
g.NewElement(0x6743bc47b9595257),
167+
g.NewElement(0x5528b9362c59bb70),
168+
g.NewElement(0xac45e25b7127b68b),
169+
g.NewElement(0xa2077d7dfbb606b5),
170+
g.NewElement(0xf3faac6faee378ae),
171+
g.NewElement(0x0c6388b51545e883),
172+
g.NewElement(0xd27dbb6944917b60),
171173
}
172174
)

0 commit comments

Comments
 (0)