Skip to content

Commit 1b515e8

Browse files
authored
Merge pull request #243 from zksecurity/fix/check-prime-bit
fix potential uint overflow
2 parents e0e9e55 + eb046e6 commit 1b515e8

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/stdlib/native/int/lib.no

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ struct Uint8 {
1414
fn Uint8.new(val: Field) -> Uint8 {
1515
let bit_len = 8;
1616

17-
bits::check_field_size(bit_len);
17+
// has to ensure multiply won't overflow prime field
18+
bits::check_field_size(bit_len * 2);
1819

1920
// range check
2021
let ignore_ = bits::to_bits(bit_len, val);
@@ -33,7 +34,8 @@ struct Uint16 {
3334
fn Uint16.new(val: Field) -> Uint16 {
3435
let bit_len = 16;
3536

36-
bits::check_field_size(bit_len);
37+
// has to ensure multiply won't overflow prime field
38+
bits::check_field_size(bit_len * 2);
3739

3840
// range check
3941
let ignore_ = bits::to_bits(bit_len, val);
@@ -52,7 +54,8 @@ struct Uint32 {
5254
fn Uint32.new(val: Field) -> Uint32 {
5355
let bit_len = 32;
5456

55-
bits::check_field_size(bit_len);
57+
// has to ensure multiply won't overflow prime field
58+
bits::check_field_size(bit_len * 2);
5659

5760
// range check
5861
let ignore_ = bits::to_bits(bit_len, val);
@@ -71,7 +74,8 @@ struct Uint64 {
7174
fn Uint64.new(val: Field) -> Uint64 {
7275
let bit_len = 64;
7376

74-
bits::check_field_size(bit_len);
77+
// has to ensure multiply won't overflow prime field
78+
bits::check_field_size(bit_len * 2);
7579

7680
// range check
7781
let ignore_ = bits::to_bits(bit_len, val);

0 commit comments

Comments
 (0)