From 02503dfcce215579afb83e04661d0217cc804315 Mon Sep 17 00:00:00 2001
From: Federica <fedemoletta@hotmail.com>
Date: Wed, 26 Apr 2023 14:12:54 -0300
Subject: [PATCH 1/6] Add alternative hint string for nondet_bigint_3

---
 .../builtin_hint_processor_definition.rs                     | 2 +-
 src/hint_processor/builtin_hint_processor/hint_code.rs       | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs b/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs
index 000a125433..597b9f9742 100644
--- a/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs
+++ b/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs
@@ -297,7 +297,7 @@ impl HintProcessor for BuiltinHintProcessor {
                 &hint_data.ids_data,
                 &hint_data.ap_tracking,
             ),
-            hint_code::NONDET_BIGINT3 => {
+            hint_code::NONDET_BIGINT3_V1 | hint_code::NONDET_BIGINT3_V2 => {
                 nondet_bigint3(vm, exec_scopes, &hint_data.ids_data, &hint_data.ap_tracking)
             }
             hint_code::REDUCE => {
diff --git a/src/hint_processor/builtin_hint_processor/hint_code.rs b/src/hint_processor/builtin_hint_processor/hint_code.rs
index 666282aee7..4e926caa3d 100644
--- a/src/hint_processor/builtin_hint_processor/hint_code.rs
+++ b/src/hint_processor/builtin_hint_processor/hint_code.rs
@@ -471,10 +471,13 @@ new_state = blake2s_compress(
 
 segments.write_arg(ids.output, new_state)"#;
 
-pub const NONDET_BIGINT3: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split
+pub const NONDET_BIGINT3_V1: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split
 
 segments.write_arg(ids.res.address_, split(value))"#;
 
+pub const NONDET_BIGINT3_V2: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split
+segments.write_arg(ids.res.address_, split(value))"#;
+
 pub const VERIFY_ZERO_V1: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack
 
 q, r = divmod(pack(ids.val, PRIME), SECP_P)

From df97bb666169ae4e40fce9817db93b80ac872a1d Mon Sep 17 00:00:00 2001
From: Federica <fedemoletta@hotmail.com>
Date: Wed, 26 Apr 2023 14:21:16 -0300
Subject: [PATCH 2/6] Add integration test

---
 cairo_programs/nondet_bigint_3_v2.cairo | 46 +++++++++++++++++++++++++
 src/tests/cairo_run_test.rs             |  7 ++++
 2 files changed, 53 insertions(+)
 create mode 100644 cairo_programs/nondet_bigint_3_v2.cairo

diff --git a/cairo_programs/nondet_bigint_3_v2.cairo b/cairo_programs/nondet_bigint_3_v2.cairo
new file mode 100644
index 0000000000..7407b525f4
--- /dev/null
+++ b/cairo_programs/nondet_bigint_3_v2.cairo
@@ -0,0 +1,46 @@
+%builtins range_check
+
+from starkware.cairo.common.cairo_secp.bigint import BigInt3, BASE
+
+// Hint arguments: value.
+func nondet_bigint3{range_check_ptr}() -> (res: BigInt3) {
+    // The result should be at the end of the stack after the function returns.
+    let res: BigInt3 = [cast(ap + 5, BigInt3*)];
+    %{
+        from starkware.cairo.common.cairo_secp.secp_utils import split
+
+        segments.write_arg(ids.res.address_, split(value))
+    %}
+    // The maximal possible sum of the limbs, assuming each of them is in the range [0, BASE).
+    const MAX_SUM = 3 * (BASE - 1);
+    assert [range_check_ptr] = MAX_SUM - (res.d0 + res.d1 + res.d2);
+
+    // Prepare the result at the end of the stack.
+    tempvar range_check_ptr = range_check_ptr + 4;
+    [range_check_ptr - 3] = res.d0, ap++;
+    [range_check_ptr - 2] = res.d1, ap++;
+    [range_check_ptr - 1] = res.d2, ap++;
+    static_assert &res + BigInt3.SIZE == ap;
+    return (res=res);
+}
+
+func main{range_check_ptr}() {
+    alloc_locals;
+    // Take these hints from div_mod_n just to have a value in scope
+    local a: BigInt3 = BigInt3(1,2,3);
+    local b: BigInt3 = BigInt3(4,5,6);
+    %{
+        from starkware.cairo.common.cairo_secp.secp_utils import N, pack
+        from starkware.python.math_utils import div_mod, safe_div
+
+        a = pack(ids.a, PRIME)
+        b = pack(ids.b, PRIME)
+        value = res = div_mod(a, b, N)
+    %}
+    let (r) = nondet_bigint3();
+    assert r.d0 = 46511138620617205537268188;
+    assert r.d1 = 26286155657000021849694253;
+    assert r.d2 = 3102515549921694024741409;
+    return();
+}
+
diff --git a/src/tests/cairo_run_test.rs b/src/tests/cairo_run_test.rs
index 3b4b1a2701..254f948c31 100644
--- a/src/tests/cairo_run_test.rs
+++ b/src/tests/cairo_run_test.rs
@@ -890,3 +890,10 @@ fn ec_double_assign_new_x_v3() {
     let program_data = include_bytes!("../../cairo_programs/ec_double_assign_new_x_v3.json");
     run_program_simple(program_data.as_slice());
 }
+
+#[test]
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
+fn nondet_bigint3_v2() {
+    let program_data = include_bytes!("../../cairo_programs/nondet_bigint3_v2.json");
+    run_program_simple(program_data.as_slice());
+}

From 3e6a032c78f7f94e4d2eccac5072c1a96b6501f9 Mon Sep 17 00:00:00 2001
From: Federica <fedemoletta@hotmail.com>
Date: Wed, 26 Apr 2023 14:24:43 -0300
Subject: [PATCH 3/6] Rename test file

---
 .../{nondet_bigint_3_v2.cairo => nondet_bigint3_v2.cairo}         | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename cairo_programs/{nondet_bigint_3_v2.cairo => nondet_bigint3_v2.cairo} (100%)

diff --git a/cairo_programs/nondet_bigint_3_v2.cairo b/cairo_programs/nondet_bigint3_v2.cairo
similarity index 100%
rename from cairo_programs/nondet_bigint_3_v2.cairo
rename to cairo_programs/nondet_bigint3_v2.cairo

From e04b7c761ba131c3111f094383d1337ccced98f2 Mon Sep 17 00:00:00 2001
From: Federica <fedemoletta@hotmail.com>
Date: Wed, 26 Apr 2023 14:31:55 -0300
Subject: [PATCH 4/6] Add changelog entry

---
 CHANGELOG.md | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab458d240a..1330430335 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,19 @@
 
 #### Upcoming Changes
 
-Add missing hint on vrf.json lib [#1053](https://github.com/lambdaclass/cairo-rs/pull/1053):
+* Add alternative hint code for nondet_bigint3 hint [#1071](https://github.com/lambdaclass/cairo-rs/pull/1071)
+
+    `BuiltinHintProcessor` now supports the following hint:
+
+     ```python
+    %{
+        from starkware.cairo.common.cairo_secp.secp_utils import split
+
+        segments.write_arg(ids.res.address_, split(value))
+    %}
+    ```
+
+* Add missing hint on vrf.json lib [#1053](https://github.com/lambdaclass/cairo-rs/pull/1053):
 
      `BuiltinHintProcessor` now supports the following hint:
 

From 1cd9d89f53c52fdabf6de3e63b8c9f65111d8d41 Mon Sep 17 00:00:00 2001
From: Federica <fedemoletta@hotmail.com>
Date: Wed, 26 Apr 2023 14:33:24 -0300
Subject: [PATCH 5/6] Fix hint

---
 CHANGELOG.md                           | 1 -
 cairo_programs/nondet_bigint3_v2.cairo | 1 -
 2 files changed, 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1330430335..c08cbf4046 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,6 @@
      ```python
     %{
         from starkware.cairo.common.cairo_secp.secp_utils import split
-
         segments.write_arg(ids.res.address_, split(value))
     %}
     ```
diff --git a/cairo_programs/nondet_bigint3_v2.cairo b/cairo_programs/nondet_bigint3_v2.cairo
index 7407b525f4..45bbb2a9c0 100644
--- a/cairo_programs/nondet_bigint3_v2.cairo
+++ b/cairo_programs/nondet_bigint3_v2.cairo
@@ -8,7 +8,6 @@ func nondet_bigint3{range_check_ptr}() -> (res: BigInt3) {
     let res: BigInt3 = [cast(ap + 5, BigInt3*)];
     %{
         from starkware.cairo.common.cairo_secp.secp_utils import split
-
         segments.write_arg(ids.res.address_, split(value))
     %}
     // The maximal possible sum of the limbs, assuming each of them is in the range [0, BASE).

From 23accf843254119ace673512c5c6c7ec3cac53b2 Mon Sep 17 00:00:00 2001
From: Mario Rugiero <mario.rugiero@lambdaclass.com>
Date: Wed, 26 Apr 2023 20:17:09 -0300
Subject: [PATCH 6/6] Update CHANGELOG.md
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Tomás <47506558+MegaRedHand@users.noreply.github.com>
---
 CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 35ca382193..1cbb839310 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,7 @@
 
     `BuiltinHintProcessor` now supports the following hint:
 
-     ```python
+    ```python
     %{
         from starkware.cairo.common.cairo_secp.secp_utils import split
         segments.write_arg(ids.res.address_, split(value))