diff --git a/zokrates_stdlib/stdlib/utils/casts/field_to_u16.zok b/zokrates_stdlib/stdlib/utils/casts/field_to_u16.zok index 810208d6..8febe4b2 100644 --- a/zokrates_stdlib/stdlib/utils/casts/field_to_u16.zok +++ b/zokrates_stdlib/stdlib/utils/casts/field_to_u16.zok @@ -1,9 +1,7 @@ -from "EMBED" import unpack, u16_from_bits +from "field" import FIELD_SIZE_IN_BITS +import "utils/pack/bool/unpack" +import "utils/casts/u16_from_bits" -const field U16_MAX = 65535 - -// Condition: field value is asserted to be in range [0, U16_MAX] def main(field input) -> u16: - assert(input <= U16_MAX) - bool[16] bits = unpack(input) - return u16_from_bits(bits) \ No newline at end of file + bool[FIELD_SIZE_IN_BITS] bits = unpack(input) + return u16_from_bits(bits[FIELD_SIZE_IN_BITS-16..]) \ No newline at end of file diff --git a/zokrates_stdlib/stdlib/utils/casts/field_to_u32.zok b/zokrates_stdlib/stdlib/utils/casts/field_to_u32.zok index fc5c6a56..28577d79 100644 --- a/zokrates_stdlib/stdlib/utils/casts/field_to_u32.zok +++ b/zokrates_stdlib/stdlib/utils/casts/field_to_u32.zok @@ -1,9 +1,7 @@ -from "EMBED" import unpack, u32_from_bits +from "field" import FIELD_SIZE_IN_BITS +import "utils/pack/bool/unpack" +import "utils/casts/u32_from_bits" -const field U32_MAX = 4294967295 - -// Condition: field value is asserted to be in range [0, U32_MAX] def main(field input) -> u32: - assert(input <= U32_MAX) - bool[32] bits = unpack(input) - return u32_from_bits(bits) \ No newline at end of file + bool[FIELD_SIZE_IN_BITS] bits = unpack(input) + return u32_from_bits(bits[FIELD_SIZE_IN_BITS-32..]) \ No newline at end of file diff --git a/zokrates_stdlib/stdlib/utils/casts/field_to_u64.zok b/zokrates_stdlib/stdlib/utils/casts/field_to_u64.zok index 1b99ee74..d614ebcf 100644 --- a/zokrates_stdlib/stdlib/utils/casts/field_to_u64.zok +++ b/zokrates_stdlib/stdlib/utils/casts/field_to_u64.zok @@ -1,9 +1,7 @@ -from "EMBED" import unpack, u64_from_bits +from "field" import FIELD_SIZE_IN_BITS +import "utils/pack/bool/unpack" +import "utils/casts/u64_from_bits" -const field U64_MAX = 18446744073709551615 - -// Condition: field value is asserted to be in range [0, U64_MAX] def main(field input) -> u64: - assert(input <= U64_MAX) - bool[64] bits = unpack(input) - return u64_from_bits(bits) \ No newline at end of file + bool[FIELD_SIZE_IN_BITS] bits = unpack(input) + return u64_from_bits(bits[FIELD_SIZE_IN_BITS-64..]) \ No newline at end of file diff --git a/zokrates_stdlib/stdlib/utils/casts/field_to_u8.zok b/zokrates_stdlib/stdlib/utils/casts/field_to_u8.zok index bda7f6e2..99c795fd 100644 --- a/zokrates_stdlib/stdlib/utils/casts/field_to_u8.zok +++ b/zokrates_stdlib/stdlib/utils/casts/field_to_u8.zok @@ -1,9 +1,7 @@ -from "EMBED" import unpack, u8_from_bits +from "field" import FIELD_SIZE_IN_BITS +import "utils/pack/bool/unpack" +import "utils/casts/u8_from_bits" -const field U8_MAX = 255 - -// Condition: field value is asserted to be in range [0, U8_MAX] def main(field input) -> u8: - assert(input <= U8_MAX) - bool[8] bits = unpack(input) - return u8_from_bits(bits) \ No newline at end of file + bool[FIELD_SIZE_IN_BITS] bits = unpack(input) + return u8_from_bits(bits[FIELD_SIZE_IN_BITS-8..]) \ No newline at end of file diff --git a/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.json b/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.json index 1c988f73..0e617ee3 100644 --- a/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.json +++ b/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.json @@ -4,11 +4,11 @@ "tests": [ { "input": { - "values": ["0", "1", "18446744073709551615", "42", "0", "1", "4294967295", "42", "0", "1", "65535", "42", "0", "1", "255", "42"] + "values": ["0", "1", "18446744073709551615", "18446744073709551616", "18446744073709551658", "0", "1", "4294967295", "4294967296", "4294967338", "0", "1", "65535", "65536", "65578", "0", "1", "255", "256", "298"] }, "output": { "Ok": { - "values": ["0", "1", "18446744073709551615", "42", "0", "1", "4294967295", "42", "0", "1", "65535", "42", "0", "1", "255", "42"] + "values": ["0", "1", "18446744073709551615", "0", "42", "0", "1", "4294967295", "0", "42", "0", "1", "65535", "0", "42", "0", "1", "255", "0", "42"] } } } diff --git a/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.zok b/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.zok index b8a3de76..4d5be3bb 100644 --- a/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.zok +++ b/zokrates_stdlib/tests/tests/utils/casts/field_to_uint.zok @@ -3,13 +3,13 @@ import "utils/casts/field_to_u32" import "utils/casts/field_to_u16" import "utils/casts/field_to_u8" -def main(field[4] a, field[4] b, field[4] c, field[4] d) -> (u64[4], u32[4], u16[4], u8[4]): - u64[4] e = [0; 4] - u32[4] f = [0; 4] - u16[4] g = [0; 4] - u8[4] h = [0; 4] +def main(field[5] a, field[5] b, field[5] c, field[5] d) -> (u64[5], u32[5], u16[5], u8[5]): + u64[5] e = [0; 5] + u32[5] f = [0; 5] + u16[5] g = [0; 5] + u8[5] h = [0; 5] - for u32 i in 0..4 do + for u32 i in 0..5 do e[i] = field_to_u64(a[i]) f[i] = field_to_u32(b[i]) g[i] = field_to_u16(c[i])