halo2/rustdoc/latest/halo2_gadgets/ecc/trait.EccInstructions.html

77 lines
53 KiB
HTML
Raw Normal View History

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The set of circuit instructions required to use the ECC gadgets."><meta name="keywords" content="rust, rustlang, rust-lang, EccInstructions"><title>EccInstructions in halo2_gadgets::ecc - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.css" integrity="sha384-9eLZqc9ds8eNjO3TmqPeYcDj8n+Qfa4nuSiGYa6DjLNcv9BtN69ZIulL9+8CqC9Y" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/katex.min.js" integrity="sha384-K3vbOmF2BtaVai+Qk37uypf7VrgBubhQreNQe9aGsz9lB63dIFiQVlJbr92dw2Lx" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/katex@0.10.0/dist/contrib/auto-render.min.js" integrity="sha384-kmZOZB5ObwgQnS/DuDg6TScgOiWWBiVt0plIRkZCmE6rDZGrEOQeHM5PcHi+nyqe" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "\\(", right: "\\)", display: false},
{left: "$", right: "$", display: false},
{left: "\\[", right: "\\]", display: true}
]
});
});
</script>
</head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../../halo2_gadgets/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../halo2_gadgets/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">EccInstructions</a></h2><div class="sidebar-elems"><section><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.FixedPoints">FixedPoints</a></li><li><a href="#associatedtype.NonIdentityPoint">NonIdentityPoint</a></li><li><a href="#associatedtype.Point">Point</a></li><li><a href="#associatedtype.ScalarFixed">ScalarFixed</a></li><li><a href="#associatedtype.ScalarFixedShort">ScalarFixedShort</a></li><li><a href="#associatedtype.ScalarVar">ScalarVar</a></li><li><a href="#associatedtype.X">X</a></li></ul><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.add">add</a></li><li><a href="#tymethod.add_incomplete">add_incomplete</a></li><li><a href="#tymethod.constrain_equal">constrain_equal</a></li><li><a href="#tymethod.extract_p">extract_p</a></li><li><a href="#tymethod.mul">mul</a></li><li><a href="#tymethod.mul_fixed">mul_fixed</a></li><li><a href="#tymethod.mul_fixed_base_field_elem">mul_fixed_base_field_elem</a></li><li><a href="#tymethod.mul_fixed_short">mul_fixed_short</a></li><li><a href="#tymethod.scalar_fixed_from_signed_short">scalar_fixed_from_signed_short</a></li><li><a href="#tymethod.witness_point">witness_point</a></li><li><a href="#tymethod.witness_point_non_id">witness_point_non_id</a></li><li><a href="#tymethod.witness_scalar_fixed">witness_scalar_fixed</a></li><li><a href="#tymethod.witness_scalar_var">witness_scalar_var</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><h2 class="location"><a href="index.html">In halo2_gadgets::ecc</a></h2></div></nav><main><div class="width-limiter"><div class="sub-container"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Trait <a href="../index.html">halo2_gadgets</a>::<wbr><a href="index.html">ecc</a>::<wbr><a class="trait" href="#">EccInstructions</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/halo2_gadgets/ecc.rs.html#16-148">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust trait"><code>pub trait EccInstructions&lt;C:&nbsp;CurveAffine&gt;: Chip&lt;C::Base&gt; + <a class="trait" href="../utilities/trait.UtilitiesInstructions.html" title="trait halo2_gadgets::utilities::UtilitiesInstructions">UtilitiesInstructions</a>&lt;C::Base&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> + <a class="trait" href="htt
type <a href="#associatedtype.ScalarVar" class="associatedtype">ScalarVar</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.ScalarFixed" class="associatedtype">ScalarFixed</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.ScalarFixedShort" class="associatedtype">ScalarFixedShort</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.Point" class="associatedtype">Point</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.NonIdentityPoint" class="associatedtype">NonIdentityPoint</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.X" class="associatedtype">X</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>;
type <a href="#associatedtype.FixedPoints" class="associatedtype">FixedPoints</a>: <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;;
<details class="rustdoc-toggle type-contents-toggle"><summary class="hideme"><span>Show 13 methods</span></summary> fn <a href="#tymethod.constrain_equal" class="fnname">constrain_equal</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.witness_point" class="fnname">witness_point</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.witness_point_non_id" class="fnname">witness_point_non_id</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.witness_scalar_var" class="fnname">witness_scalar_var</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C::Scalar&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.witness_scalar_fixed" class="fnname">witness_scalar_fixed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C::Scalar&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.scalar_fixed_from_signed_short" class="fnname">scalar_fixed_from_signed_short</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;magnitude_sign: (Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>, Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.extract_p" class="fnname">extract_p</a>&lt;Point:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>&gt;(point: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>Point) -&gt; Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.X" title="type halo2_gadgets::ecc::EccInstructions::X">X</a>;
<span class="item-spacer"></span> fn <a href="#tymethod.add_incomplete" class="fnname">add_incomplete</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.add" class="fnname">add</a>&lt;A:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>, B:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>&gt;(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>B<br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.mul" class="fnname">mul</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>), Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.mul_fixed" class="fnname">mul_fixed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.FullScalar" title="type halo2_gadgets::ecc::FixedPoints::FullScalar">FullScalar</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>), Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.mul_fixed_short" class="fnname">mul_fixed_short</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.ShortScalar" title="type halo2_gadgets::ecc::FixedPoints::ShortScalar">ShortScalar</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>), Error&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.mul_fixed_base_field_elem" class="fnname">mul_fixed_base_field_elem</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base_field_elem: Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.Base" title="type halo2_gadgets::ecc::FixedPoints::Base">Base</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;;
</details>}</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The set of circuit instructions required to use the ECC gadgets.</p>
</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.ScalarVar" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#24">source</a><h4 class="code-header">type <a href="#associatedtype.ScalarVar" class="associatedtype">ScalarVar</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing a scalar used in variable-base scalar mul.</p>
<p>This type is treated as a full-width scalar. However, if <code>Self</code> implements
<a href="trait.BaseFitsInScalarInstructions.html" title="BaseFitsInScalarInstructions"><code>BaseFitsInScalarInstructions</code></a> then this may also be constructed from an element
of the base field.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.ScalarFixed" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#27">source</a><h4 class="code-header">type <a href="#associatedtype.ScalarFixed" class="associatedtype">ScalarFixed</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing a full-width element of the elliptic curves
scalar field, to be used for fixed-base scalar mul.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.ScalarFixedShort" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#32">source</a><h4 class="code-header">type <a href="#associatedtype.ScalarFixedShort" class="associatedtype">ScalarFixedShort</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing a signed short element of the elliptic curves
scalar field, to be used for fixed-base scalar mul.</p>
<p>A <code>ScalarFixedShort</code> must be in the range [-(2^64 - 1), 2^64 - 1].</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.Point" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#34">source</a><h4 class="code-header">type <a href="#associatedtype.Point" class="associatedtype">Point</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing an elliptic curve point.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.NonIdentityPoint" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#36">source</a><h4 class="code-header">type <a href="#associatedtype.NonIdentityPoint" class="associatedtype">NonIdentityPoint</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing a non-identity elliptic curve point.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.X" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#39">source</a><h4 class="code-header">type <a href="#associatedtype.X" class="associatedtype">X</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a></h4></section></summary><div class="docblock"><p>Variable representing the affine short Weierstrass x-coordinate of an
elliptic curve point.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.FixedPoints" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#44">source</a><h4 class="code-header">type <a href="#associatedtype.FixedPoints" class="associatedtype">FixedPoints</a>: <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;</h4></section></summary><div class="docblock"><p>Enumeration of the set of fixed bases to be used in scalar mul.
TODO: When associated consts can be used as const generics, introduce
<code>Self::NUM_WINDOWS</code>, <code>Self::NUM_WINDOWS_BASE_FIELD</code>, <code>Self::NUM_WINDOWS_SHORT</code>
and use them to differentiate <code>FixedPoints</code> types.</p>
</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.constrain_equal" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#47-52">source</a><h4 class="code-header">fn <a href="#tymethod.constrain_equal" class="fnname">constrain_equal</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;a: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;b: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Constrains point <code>a</code> to be equal in value to point <code>b</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.witness_point" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#57-61">source</a><h4 class="code-header">fn <a href="#tymethod.witness_point" class="fnname">witness_point</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Witnesses the given point as a private input to the circuit.
This allows the point to be the identity, mapped to (0, 0) in
affine coordinates.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.witness_point_non_id" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#65-69">source</a><h4 class="code-header">fn <a href="#tymethod.witness_point_non_id" class="fnname">witness_point_non_id</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Witnesses the given point as a private input to the circuit.
This returns an error if the point is the identity.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.witness_scalar_var" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#72-76">source</a><h4 class="code-header">fn <a href="#tymethod.witness_scalar_var" class="fnname">witness_scalar_var</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C::Scalar&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Witnesses a full-width scalar to be used in variable-base multiplication.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.witness_scalar_fixed" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#79-83">source</a><h4 class="code-header">fn <a href="#tymethod.witness_scalar_fixed" class="fnname">witness_scalar_fixed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;value: Value&lt;C::Scalar&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Witnesses a full-width scalar to be used in fixed-base multiplication.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.scalar_fixed_from_signed_short" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#87-91">source</a><h4 class="code-header">fn <a href="#tymethod.scalar_fixed_from_signed_short" class="fnname">scalar_fixed_from_signed_short</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;magnitude_sign: (Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>, Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>)<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Converts a magnitude and sign that exists as variables in the circuit into a
signed short scalar to be used in fixed-base scalar multiplication.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.extract_p" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#94">source</a><h4 class="code-header">fn <a href="#tymethod.extract_p" class="fnname">extract_p</a>&lt;Point:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>&gt;(point: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>Point) -&gt; Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.X" title="type halo2_gadgets::ecc::EccInstructions::X">X</a></h4></section></summary><div class="docblock"><p>Extracts the x-coordinate of a point.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.add_incomplete" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#99-104">source</a><h4 class="code-header">fn <a href="#tymethod.add_incomplete" class="fnname">add_incomplete</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;a: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;b: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Performs incomplete point addition, returning <code>a + b</code>.</p>
<p>This returns an error in exceptional cases.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.add" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#107-112">source</a><h4 class="code-header">fn <a href="#tymethod.add" class="fnname">add</a>&lt;A:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>, B:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>&gt;(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;a: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A,<br>&nbsp;&nbsp;&nbsp;&nbsp;b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>B<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Performs complete point addition, returning <code>a + b</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.mul" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#115-120">source</a><h4 class="code-header">fn <a href="#tymethod.mul" class="fnname">mul</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.NonIdentityPoint" title="type halo2_gadgets::ecc::EccInstructions::NonIdentityPoint">NonIdentityPoint</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarVar" title="type halo2_gadgets::ecc::EccInstructions::ScalarVar">ScalarVar</a>), Error&gt;</h4></section></summary><div class="docblock"><p>Performs variable-base scalar multiplication, returning <code>[scalar] base</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.mul_fixed" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#123-128">source</a><h4 class="code-header">fn <a href="#tymethod.mul_fixed" class="fnname">mul_fixed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.FullScalar" title="type halo2_gadgets::ecc::FixedPoints::FullScalar">FullScalar</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixed" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixed">ScalarFixed</a>), Error&gt;</h4></section></summary><div class="docblock"><p>Performs fixed-base scalar multiplication using a full-width scalar, returning <code>[scalar] base</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.mul_fixed_short" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#132-137">source</a><h4 class="code-header">fn <a href="#tymethod.mul_fixed_short" class="fnname">mul_fixed_short</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;scalar: &amp;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.ShortScalar" title="type halo2_gadgets::ecc::FixedPoints::ShortScalar">ShortScalar</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.ScalarFixedShort" title="type halo2_gadgets::ecc::EccInstructions::ScalarFixedShort">ScalarFixedShort</a>), Error&gt;</h4></section></summary><div class="docblock"><p>Performs fixed-base scalar multiplication using a short signed scalar, returning
<code>[scalar] base</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.mul_fixed_base_field_elem" class="method has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc.rs.html#142-147">source</a><h4 class="code-header">fn <a href="#tymethod.mul_fixed_base_field_elem" class="fnname">mul_fixed_base_field_elem</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;layouter: &amp;mut impl Layouter&lt;C::Base&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;base_field_elem: Self::<a class="associatedtype" href="../utilities/trait.UtilitiesInstructions.html#associatedtype.Var" title="type halo2_gadgets::utilities::UtilitiesInstructions::Var">Var</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;base: &amp;&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.FixedPoints" title="type halo2_gadgets::ecc::EccInstructions::FixedPoints">FixedPoints</a> as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;C&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.Base" title="type halo2_gadgets::ecc::FixedPoints::Base">Base</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.EccInstructions.html#associatedtype.Point" title="type halo2_gadgets::ecc::EccInstructions::Point">Point</a>, Error&gt;</h4></section></summary><div class="docblock"><p>Performs fixed-base scalar multiplication using a base field element as the scalar.
In the current implementation, this base field element must be output from another
instruction.</p>
</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div id="implementors-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-EccInstructions%3CEpAffine%3E-for-EccChip%3CFixed%3E" class="impl has-srclink"><a class="srclink rightside" href="../../src/halo2_gadgets/ecc/chip.rs.html#410-595">source</a><a href="#impl-EccInstructions%3CEpAffine%3E-for-EccChip%3CFixed%3E" class="anchor"></a><h3 class="code-header">impl&lt;Fixed:&nbsp;<a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;Affine&gt;&gt; <a class="trait" href="trait.EccInstructions.html" title="trait halo2_gadgets::ecc::EccInstructions">EccInstructions</a>&lt;EpAffine&gt; for <a class="struct" href="chip/struct.EccChip.html" title="struct halo2_gadgets::ecc::chip::EccChip">EccChip</a>&lt;Fixed&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fixed as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;Affine&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.Base" title="type halo2_gadgets::ecc::FixedPoints::Base">Base</a>: <a class="trait" href="chip/trait.FixedPoint.html" title="trait halo2_gadgets::ecc::chip::FixedPoint">FixedPoint</a>&lt;Affine, FixedScalarKind = <a class="enum" href="chip/enum.BaseFieldElem.html" title="enum halo2_gadgets::ecc::chip::BaseFieldElem">BaseFieldElem</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fixed as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;Affine&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.FullScalar" title="type halo2_gadgets::ecc::FixedPoints::FullScalar">FullScalar</a>: <a class="trait" href="chip/trait.FixedPoint.html" title="trait halo2_gadgets::ecc::chip::FixedPoint">FixedPoint</a>&lt;Affine, FixedScalarKind = <a class="enum" href="chip/enum.FullScalar.html" title="enum halo2_gadgets::ecc::chip::FullScalar">FullScalar</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fixed as <a class="trait" href="trait.FixedPoints.html" title="trait halo2_gadgets::ecc::FixedPoints">FixedPoints</a>&lt;Affine&gt;&gt;::<a class="associatedtype" href="trait.FixedPoints.html#associatedtype.ShortScalar" title="type halo2_gadgets::ecc::FixedPoints::ShortScalar">ShortScalar</a>: <a class="trait" href="chip/trait.FixedPoint.html" title="trait halo2_gadgets::ecc::chip::FixedPoint">FixedPoint</a>&lt;Affine, FixedScalarKind = <a class="enum" href="chip/enum.ShortScalar.html" title="enum halo2_gadgets::ecc::chip::ShortScalar">ShortScalar</a>&gt;,</span></h3></section></summary><div class="impl-items"><section id="associatedtype.ScalarFixed-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.ScalarFixed-1" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.ScalarFixed" class="associatedtype">ScalarFixed</a> = <a class="struct" href="chip/struct.EccScalarFixed.html" title="struct halo2_gadgets::ecc::chip::EccScalarFixed">EccScalarFixed</a></h4></section><section id="associatedtype.ScalarFixedShort-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.ScalarFixedShort-1" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.ScalarFixedShort" class="associatedtype">ScalarFixedShort</a> = <a class="struct" href="chip/struct.EccScalarFixedShort.html" title="struct halo2_gadgets::ecc::chip::EccScalarFixedShort">EccScalarFixedShort</a></h4></section><section id="associatedtype.ScalarVar-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.ScalarVar-1" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.ScalarVar" class="associatedtype">ScalarVar</a> = <a class="enum" href="chip/enum.ScalarVar.html" title="enum halo2_gadgets::ecc::chip::ScalarVar">ScalarVar</a></h4></section><section id="associatedtype.Point-1" class="associatedtype trait-impl has-srclink"><a href="