Back to Sui

Module `sui::bls12381`

crates/sui-framework/docs/sui/bls12381.md

latest58.2 KB
Original Source

Group operations of BLS12-381.

<pre><code><b>use</b> <a href="../std/ascii.md#std_ascii">std::ascii</a>; <b>use</b> <a href="../std/bcs.md#std_bcs">std::bcs</a>; <b>use</b> <a href="../std/option.md#std_option">std::option</a>; <b>use</b> <a href="../std/string.md#std_string">std::string</a>; <b>use</b> <a href="../std/vector.md#std_vector">std::vector</a>; <b>use</b> <a href="../sui/address.md#sui_address">sui::address</a>; <b>use</b> <a href="../sui/bcs.md#sui_bcs">sui::bcs</a>; <b>use</b> <a href="../sui/group_ops.md#sui_group_ops">sui::group_ops</a>; <b>use</b> <a href="../sui/hex.md#sui_hex">sui::hex</a>; </code></pre>

<a name="sui_bls12381_Scalar"></a>

Struct Scalar

<pre><code><b>public</b> <b>struct</b> <a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a> </code></pre> <details> <summary>Fields</summary> <dl> </dl> </details>

<a name="sui_bls12381_G1"></a>

Struct G1

<pre><code><b>public</b> <b>struct</b> <a href="../sui/bls12381.md#sui_bls12381_G1">G1</a> </code></pre> <details> <summary>Fields</summary> <dl> </dl> </details>

<a name="sui_bls12381_G2"></a>

Struct G2

<pre><code><b>public</b> <b>struct</b> <a href="../sui/bls12381.md#sui_bls12381_G2">G2</a> </code></pre> <details> <summary>Fields</summary> <dl> </dl> </details>

<a name="sui_bls12381_GT"></a>

Struct GT

<pre><code><b>public</b> <b>struct</b> <a href="../sui/bls12381.md#sui_bls12381_GT">GT</a> </code></pre> <details> <summary>Fields</summary> <dl> </dl> </details>

<a name="sui_bls12381_UncompressedG1"></a>

Struct UncompressedG1

<pre><code><b>public</b> <b>struct</b> <a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">UncompressedG1</a> </code></pre> <details> <summary>Fields</summary> <dl> </dl> </details>

<a name="@Constants_0"></a>

Constants

<a name="sui_bls12381_SCALAR_ZERO_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_SCALAR_ZERO_BYTES">SCALAR_ZERO_BYTES</a>: vector&lt;u8&gt; = vector[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; </code></pre>

<a name="sui_bls12381_SCALAR_ONE_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_SCALAR_ONE_BYTES">SCALAR_ONE_BYTES</a>: vector&lt;u8&gt; = vector[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]; </code></pre>

<a name="sui_bls12381_G1_IDENTITY_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G1_IDENTITY_BYTES">G1_IDENTITY_BYTES</a>: vector&lt;u8&gt; = vector[192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; </code></pre>

<a name="sui_bls12381_G1_GENERATOR_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G1_GENERATOR_BYTES">G1_GENERATOR_BYTES</a>: vector&lt;u8&gt; = vector[151, 241, 211, 167, 49, 151, 215, 148, 38, 149, 99, 140, 79, 169, 172, 15, 195, 104, 140, 79, 151, 116, 185, 5, 161, 78, 58, 63, 23, 27, 172, 88, 108, 85, 232, 63, 249, 122, 26, 239, 251, 58, 240, 10, 219, 34, 198, 187]; </code></pre>

<a name="sui_bls12381_G2_IDENTITY_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G2_IDENTITY_BYTES">G2_IDENTITY_BYTES</a>: vector&lt;u8&gt; = vector[192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; </code></pre>

<a name="sui_bls12381_G2_GENERATOR_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G2_GENERATOR_BYTES">G2_GENERATOR_BYTES</a>: vector&lt;u8&gt; = vector[147, 224, 43, 96, 82, 113, 159, 96, 125, 172, 211, 160, 136, 39, 79, 101, 89, 107, 208, 208, 153, 32, 182, 26, 181, 218, 97, 187, 220, 127, 80, 73, 51, 76, 241, 18, 19, 148, 93, 87, 229, 172, 125, 5, 93, 4, 43, 126, 2, 74, 162, 178, 240, 143, 10, 145, 38, 8, 5, 39, 45, 197, 16, 81, 198, 228, 122, 212, 250, 64, 59, 2, 180, 81, 11, 100, 122, 227, 209, 119, 11, 172, 3, 38, 168, 5, 187, 239, 212, 128, 86, 200, 193, 33, 189, 184]; </code></pre>

<a name="sui_bls12381_GT_IDENTITY_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_GT_IDENTITY_BYTES">GT_IDENTITY_BYTES</a>: vector&lt;u8&gt; = vector[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; </code></pre>

<a name="sui_bls12381_GT_GENERATOR_BYTES"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_GT_GENERATOR_BYTES">GT_GENERATOR_BYTES</a>: vector&lt;u8&gt; = vector[18, 80, 235, 216, 113, 252, 10, 146, 167, 178, 216, 49, 104, 208, 215, 39, 39, 45, 68, 27, 239, 161, 92, 80, 61, 216, 233, 12, 233, 141, 179, 231, 182, 209, 148, 246, 8, 57, 197, 8, 168, 67, 5, 170, 202, 23, 137, 182, 8, 154, 28, 91, 70, 229, 17, 11, 134, 117, 14, 198, 165, 50, 52, 136, 104, 168, 64, 69, 72, 60, 146, 183, 175, 90, 246, 137, 69, 46, 175, 171, 241, 168, 148, 62, 80, 67, 159, 29, 89, 136, 42, 152, 234, 160, 23, 15, 25, 242, 99, 55, 210, 5, 251, 70, 156, 214, 189, 21, 195, 213, 160, 77, 200, 135, 132, 251, 179, 208, 178, 219, 222, 165, 77, 67, 178, 183, 63, 44, 187, 18, 213, 131, 134, 168, 112, 62, 15, 148, 130, 38, 228, 126, 232, 157, 6, 251, 162, 62, 183, 197, 175, 13, 159, 128, 148, 12, 167, 113, 182, 255, 213, 133, 123, 170, 242, 34, 235, 149, 167, 210, 128, 157, 97, 191, 224, 46, 27, 253, 27, 104, 255, 2, 240, 184, 16, 42, 225, 194, 213, 213, 171, 26, 19, 104, 187, 68, 92, 124, 45, 32, 151, 3, 242, 57, 104, 156, 227, 76, 3, 120, 166, 142, 114, 166, 179, 178, 22, 218, 14, 34, 165, 3, 27, 84, 221, 255, 87, 48, 147, 150, 179, 140, 136, 28, 76, 132, 158, 194, 62, 135, 25, 53, 2, 184, 110, 219, 136, 87, 194, 115, 250, 7, 90, 80, 81, 41, 55, 224, 121, 78, 30, 101, 167, 97, 124, 144, 216, 189, 102, 6, 91, 31, 255, 229, 29, 122, 87, 153, 115, 177, 49, 80, 33, 236, 60, 25, 147, 79, 17, 184, 180, 36, 205, 72, 191, 56, 252, 239, 104, 8, 59, 11, 14, 197, 200, 26, 147, 179, 48, 238, 26, 103, 125, 13, 21, 255, 123, 152, 78, 137, 120, 239, 72, 136, 30, 50, 250, 201, 27, 147, 180, 115, 51, 226, 186, 87, 3, 53, 15, 85, 167, 174, 252, 211, 195, 27, 79, 203, 108, 229, 119, 28, 198, 160, 233, 120, 106, 181, 151, 51, 32, 200, 6, 173, 54, 8, 41, 16, 123, 168, 16, 197, 160, 159, 253, 217, 190, 34, 145, 160, 194, 90, 153, 162, 1, 178, 245, 34, 71, 61, 23, 19, 145, 18, 91, 168, 77, 196, 0, 124, 251, 242, 248, 218, 117, 47, 124, 116, 24, 82, 3, 252, 202, 88, 154, 199, 25, 195, 77, 255, 187, 170, 216, 67, 29, 173, 28, 31, 181, 151, 170, 165, 1, 129, 7, 21, 79, 37, 167, 100, 189, 60, 121, 147, 122, 69, 184, 69, 70, 218, 99, 75, 143, 107, 225, 74, 128, 97, 229, 92, 206, 186, 71, 139, 35, 247, 218, 202, 163, 92, 140, 167, 139, 234, 233, 98, 64, 69, 180, 182, 4, 197, 129, 35, 77, 8, 106, 153, 2, 36, 155, 100, 114, 143, 253, 33, 161, 137, 232, 121, 53, 169, 84, 5, 28, 124, 219, 167, 179, 135, 38, 41, 164, 250, 252, 5, 6, 98, 69, 203, 145, 8, 240, 36, 45, 15, 227, 239, 15, 65, 229, 134, 99, 191, 8, 207, 6, 134, 114, 203, 208, 26, 126, 199, 59, 172, 164, 215, 44, 169, 53, 68, 222, 255, 104, 107, 253, 109, 245, 67, 212, 142, 170, 36, 175, 228, 126, 30, 253, 228, 73, 56, 59, 103, 102, 49]; </code></pre>

<a name="sui_bls12381_SCALAR_TYPE"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>: u8 = 0; </code></pre>

<a name="sui_bls12381_G1_TYPE"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>: u8 = 1; </code></pre>

<a name="sui_bls12381_G2_TYPE"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>: u8 = 2; </code></pre>

<a name="sui_bls12381_GT_TYPE"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>: u8 = 3; </code></pre>

<a name="sui_bls12381_UNCOMPRESSED_G1_TYPE"></a>

<pre><code><b>const</b> <a href="../sui/bls12381.md#sui_bls12381_UNCOMPRESSED_G1_TYPE">UNCOMPRESSED_G1_TYPE</a>: u8 = 4; </code></pre>

<a name="sui_bls12381_bls12381_min_sig_verify"></a>

Function bls12381_min_sig_verify

@param signature: A 48-bytes signature that is a point on the G1 subgroup. @param public_key: A 96-bytes public key that is a point on the G2 subgroup. @param msg: The message that we test the signature against.

If the signature is a valid signature of the message and public key according to BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_, return true. Otherwise, return false.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_bls12381_min_sig_verify">bls12381_min_sig_verify</a>(signature: &vector&lt;u8&gt;, public_key: &vector&lt;u8&gt;, msg: &vector&lt;u8&gt;): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>native</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_bls12381_min_sig_verify">bls12381_min_sig_verify</a>( signature: &vector&lt;u8&gt;, public_key: &vector&lt;u8&gt;, msg: &vector&lt;u8&gt;, ): bool; </code></pre> </details>

<a name="sui_bls12381_bls12381_min_pk_verify"></a>

Function bls12381_min_pk_verify

@param signature: A 96-bytes signature that is a point on the G2 subgroup. @param public_key: A 48-bytes public key that is a point on the G1 subgroup. @param msg: The message that we test the signature against.

If the signature is a valid signature of the message and public key according to BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_, return true. Otherwise, return false.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_bls12381_min_pk_verify">bls12381_min_pk_verify</a>(signature: &vector&lt;u8&gt;, public_key: &vector&lt;u8&gt;, msg: &vector&lt;u8&gt;): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>native</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_bls12381_min_pk_verify">bls12381_min_pk_verify</a>( signature: &vector&lt;u8&gt;, public_key: &vector&lt;u8&gt;, msg: &vector&lt;u8&gt;, ): bool; </code></pre> </details>

<a name="sui_bls12381_scalar_from_bytes"></a>

Function scalar_from_bytes

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_from_bytes">scalar_from_bytes</a>(bytes: &vector&lt;u8&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_from_bytes">scalar_from_bytes</a>(bytes: &vector&lt;u8&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, *bytes, <b>false</b>) } </code></pre> </details>

<a name="sui_bls12381_scalar_from_u64"></a>

Function scalar_from_u64

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_from_u64">scalar_from_u64</a>(x: u64): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_from_u64">scalar_from_u64</a>(x: u64): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <b>let</b> <b>mut</b> bytes = <a href="../sui/bls12381.md#sui_bls12381_SCALAR_ZERO_BYTES">SCALAR_ZERO_BYTES</a>; <a href="../sui/group_ops.md#sui_group_ops_set_as_prefix">group_ops::set_as_prefix</a>(x, <b>true</b>, &<b>mut</b> bytes); <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, bytes, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_scalar_zero"></a>

Function scalar_zero

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_zero">scalar_zero</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_zero">scalar_zero</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_SCALAR_ZERO_BYTES">SCALAR_ZERO_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_scalar_one"></a>

Function scalar_one

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_one">scalar_one</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_one">scalar_one</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_SCALAR_ONE_BYTES">SCALAR_ONE_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_scalar_add"></a>

Function scalar_add

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_add">scalar_add</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_add">scalar_add</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_add">group_ops::add</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_scalar_sub"></a>

Function scalar_sub

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_sub">scalar_sub</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_sub">scalar_sub</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_sub">group_ops::sub</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_scalar_mul"></a>

Function scalar_mul

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_mul">scalar_mul</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_mul">scalar_mul</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_mul">group_ops::mul</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_scalar_div"></a>

Function scalar_div

Returns e2/e1, fails if a is zero.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_div">scalar_div</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_div">scalar_div</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_div">group_ops::div</a>(<a href="../sui/bls12381.md#sui_bls12381_SCALAR_TYPE">SCALAR_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_scalar_neg"></a>

Function scalar_neg

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_neg">scalar_neg</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_neg">scalar_neg</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/bls12381.md#sui_bls12381_scalar_sub">scalar_sub</a>(&<a href="../sui/bls12381.md#sui_bls12381_scalar_zero">scalar_zero</a>(), e) } </code></pre> </details>

<a name="sui_bls12381_scalar_inv"></a>

Function scalar_inv

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_inv">scalar_inv</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_scalar_inv">scalar_inv</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt; { <a href="../sui/bls12381.md#sui_bls12381_scalar_div">scalar_div</a>(e, &<a href="../sui/bls12381.md#sui_bls12381_scalar_one">scalar_one</a>()) } </code></pre> </details>

<a name="sui_bls12381_g1_from_bytes"></a>

Function g1_from_bytes

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_from_bytes">g1_from_bytes</a>(bytes: &vector&lt;u8&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_from_bytes">g1_from_bytes</a>(bytes: &vector&lt;u8&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, *bytes, <b>false</b>) } </code></pre> </details>

<a name="sui_bls12381_g1_identity"></a>

Function g1_identity

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_identity">g1_identity</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_identity">g1_identity</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_G1_IDENTITY_BYTES">G1_IDENTITY_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_g1_generator"></a>

Function g1_generator

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_generator">g1_generator</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_generator">g1_generator</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_G1_GENERATOR_BYTES">G1_GENERATOR_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_g1_add"></a>

Function g1_add

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_add">g1_add</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_add">g1_add</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_add">group_ops::add</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g1_sub"></a>

Function g1_sub

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_sub">g1_sub</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_sub">g1_sub</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_sub">group_ops::sub</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g1_mul"></a>

Function g1_mul

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_mul">g1_mul</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_mul">g1_mul</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_mul">group_ops::mul</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g1_div"></a>

Function g1_div

Returns e2 / e1, fails if scalar is zero.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_div">g1_div</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_div">g1_div</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_div">group_ops::div</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g1_neg"></a>

Function g1_neg

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_neg">g1_neg</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_neg">g1_neg</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/bls12381.md#sui_bls12381_g1_sub">g1_sub</a>(&<a href="../sui/bls12381.md#sui_bls12381_g1_identity">g1_identity</a>(), e) } </code></pre> </details>

<a name="sui_bls12381_hash_to_g1"></a>

Function hash_to_g1

Hash using DST = BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_hash_to_g1">hash_to_g1</a>(m: &vector&lt;u8&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_hash_to_g1">hash_to_g1</a>(m: &vector&lt;u8&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_hash_to">group_ops::hash_to</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, m) } </code></pre> </details>

<a name="sui_bls12381_g1_multi_scalar_multiplication"></a>

Function g1_multi_scalar_multiplication

Let 'scalars' be the vector [s1, s2, ..., sn] and 'elements' be the vector [e1, e2, ..., en]. Returns s1e1 + s2e2 + ... + sn*en. Aborts with <code>EInputTooLong</code> if the vectors are larger than 32 (may increase in the future).

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_multi_scalar_multiplication">g1_multi_scalar_multiplication</a>(scalars: &vector&lt;<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;&gt;, elements: &vector&lt;<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_multi_scalar_multiplication">g1_multi_scalar_multiplication</a>( scalars: &vector&lt;Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;&gt;, elements: &vector&lt;Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;&gt;, ): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_multi_scalar_multiplication">group_ops::multi_scalar_multiplication</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, scalars, elements) } </code></pre> </details>

<a name="sui_bls12381_g1_to_uncompressed_g1"></a>

Function g1_to_uncompressed_g1

Convert an <code>Element<<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>></code> to uncompressed form.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_to_uncompressed_g1">g1_to_uncompressed_g1</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">sui::bls12381::UncompressedG1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g1_to_uncompressed_g1">g1_to_uncompressed_g1</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">UncompressedG1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_convert">group_ops::convert</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_UNCOMPRESSED_G1_TYPE">UNCOMPRESSED_G1_TYPE</a>, e) } </code></pre> </details>

<a name="sui_bls12381_g2_from_bytes"></a>

Function g2_from_bytes

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_from_bytes">g2_from_bytes</a>(bytes: &vector&lt;u8&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_from_bytes">g2_from_bytes</a>(bytes: &vector&lt;u8&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, *bytes, <b>false</b>) } </code></pre> </details>

<a name="sui_bls12381_g2_identity"></a>

Function g2_identity

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_identity">g2_identity</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_identity">g2_identity</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_G2_IDENTITY_BYTES">G2_IDENTITY_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_g2_generator"></a>

Function g2_generator

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_generator">g2_generator</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_generator">g2_generator</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_G2_GENERATOR_BYTES">G2_GENERATOR_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_g2_add"></a>

Function g2_add

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_add">g2_add</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_add">g2_add</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_add">group_ops::add</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g2_sub"></a>

Function g2_sub

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_sub">g2_sub</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_sub">g2_sub</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_sub">group_ops::sub</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g2_mul"></a>

Function g2_mul

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_mul">g2_mul</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_mul">g2_mul</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_mul">group_ops::mul</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g2_div"></a>

Function g2_div

Returns e2 / e1, fails if scalar is zero.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_div">g2_div</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_div">g2_div</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_div">group_ops::div</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_g2_neg"></a>

Function g2_neg

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_neg">g2_neg</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_neg">g2_neg</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/bls12381.md#sui_bls12381_g2_sub">g2_sub</a>(&<a href="../sui/bls12381.md#sui_bls12381_g2_identity">g2_identity</a>(), e) } </code></pre> </details>

<a name="sui_bls12381_hash_to_g2"></a>

Function hash_to_g2

Hash using DST = BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_hash_to_g2">hash_to_g2</a>(m: &vector&lt;u8&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_hash_to_g2">hash_to_g2</a>(m: &vector&lt;u8&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_hash_to">group_ops::hash_to</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, m) } </code></pre> </details>

<a name="sui_bls12381_g2_multi_scalar_multiplication"></a>

Function g2_multi_scalar_multiplication

Let 'scalars' be the vector [s1, s2, ..., sn] and 'elements' be the vector [e1, e2, ..., en]. Returns s1e1 + s2e2 + ... + sn*en. Aborts with <code>EInputTooLong</code> if the vectors are larger than 32 (may increase in the future).

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_multi_scalar_multiplication">g2_multi_scalar_multiplication</a>(scalars: &vector&lt;<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;&gt;, elements: &vector&lt;<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_g2_multi_scalar_multiplication">g2_multi_scalar_multiplication</a>( scalars: &vector&lt;Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;&gt;, elements: &vector&lt;Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;&gt;, ): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_multi_scalar_multiplication">group_ops::multi_scalar_multiplication</a>(<a href="../sui/bls12381.md#sui_bls12381_G2_TYPE">G2_TYPE</a>, scalars, elements) } </code></pre> </details>

<a name="sui_bls12381_gt_identity"></a>

Function gt_identity

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_identity">gt_identity</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_identity">gt_identity</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_GT_IDENTITY_BYTES">GT_IDENTITY_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_gt_generator"></a>

Function gt_generator

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_generator">gt_generator</a>(): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_generator">gt_generator</a>(): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_from_bytes">group_ops::from_bytes</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_GT_GENERATOR_BYTES">GT_GENERATOR_BYTES</a>, <b>true</b>) } </code></pre> </details>

<a name="sui_bls12381_gt_add"></a>

Function gt_add

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_add">gt_add</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_add">gt_add</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_add">group_ops::add</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_gt_sub"></a>

Function gt_sub

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_sub">gt_sub</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_sub">gt_sub</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_sub">group_ops::sub</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_gt_mul"></a>

Function gt_mul

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_mul">gt_mul</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_mul">gt_mul</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_mul">group_ops::mul</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_gt_div"></a>

Function gt_div

Returns e2 / e1, fails if scalar is zero.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_div">gt_div</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">sui::bls12381::Scalar</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_div">gt_div</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_Scalar">Scalar</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_div">group_ops::div</a>(<a href="../sui/bls12381.md#sui_bls12381_GT_TYPE">GT_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_gt_neg"></a>

Function gt_neg

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_neg">gt_neg</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_gt_neg">gt_neg</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/bls12381.md#sui_bls12381_gt_sub">gt_sub</a>(&<a href="../sui/bls12381.md#sui_bls12381_gt_identity">gt_identity</a>(), e) } </code></pre> </details>

<a name="sui_bls12381_pairing"></a>

Function pairing

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_pairing">pairing</a>(e1: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt;, e2: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">sui::bls12381::G2</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">sui::bls12381::GT</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_pairing">pairing</a>(e1: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt;, e2: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G2">G2</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_GT">GT</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_pairing">group_ops::pairing</a>(<a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e1, e2) } </code></pre> </details>

<a name="sui_bls12381_uncompressed_g1_to_g1"></a>

Function uncompressed_g1_to_g1

UncompressedG1 group operations /// Create a <code>Element<<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>></code> from its uncompressed form.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_uncompressed_g1_to_g1">uncompressed_g1_to_g1</a>(e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">sui::bls12381::UncompressedG1</a>&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">sui::bls12381::G1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_uncompressed_g1_to_g1">uncompressed_g1_to_g1</a>(e: &Element&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">UncompressedG1</a>&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_G1">G1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_convert">group_ops::convert</a>(<a href="../sui/bls12381.md#sui_bls12381_UNCOMPRESSED_G1_TYPE">UNCOMPRESSED_G1_TYPE</a>, <a href="../sui/bls12381.md#sui_bls12381_G1_TYPE">G1_TYPE</a>, e) } </code></pre> </details>

<a name="sui_bls12381_uncompressed_g1_sum"></a>

Function uncompressed_g1_sum

Compute the sum of a list of uncompressed elements. This is significantly faster and cheaper than summing the elements.

<pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_uncompressed_g1_sum">uncompressed_g1_sum</a>(terms: &vector&lt;<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">sui::bls12381::UncompressedG1</a>&gt;&gt;): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a>&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">sui::bls12381::UncompressedG1</a>&gt; </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bls12381.md#sui_bls12381_uncompressed_g1_sum">uncompressed_g1_sum</a>(terms: &vector&lt;Element&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">UncompressedG1</a>&gt;&gt;): Element&lt;<a href="../sui/bls12381.md#sui_bls12381_UncompressedG1">UncompressedG1</a>&gt; { <a href="../sui/group_ops.md#sui_group_ops_sum">group_ops::sum</a>(<a href="../sui/bls12381.md#sui_bls12381_UNCOMPRESSED_G1_TYPE">UNCOMPRESSED_G1_TYPE</a>, terms) } </code></pre> </details>