# py_ecc.optimized_bls12_381 package

## Submodules

## py_ecc.optimized_bls12_381.constants module

## py_ecc.optimized_bls12_381.optimized_clear_cofactor module

py_ecc.optimized_bls12_381.optimized_clear_cofactor.multiply_clear_cofactor_G1(p: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_clear_cofactor.multiply_clear_cofactor_G2(p: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

## py_ecc.optimized_bls12_381.optimized_curve module

py_ecc.optimized_bls12_381.optimized_curve.add(p1: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], p2: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_curve.double(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_curve.eq(p1: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], p2: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → bool

py_ecc.optimized_bls12_381.optimized_curve.is_inf(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → bool

py_ecc.optimized_bls12_381.optimized_curve.is_on_curve(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], b: Optimized_Field) → bool

py_ecc.optimized_bls12_381.optimized_curve.multiply(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], n: int) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_curve.neg(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_curve.normalize(pt: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_curve.twist(pt: Tuple[optimized_bls12_381_FQP, optimized_bls12_381_FQP, optimized_bls12_381_FQP]) → Tuple[optimized_bls12_381_FQ12, optimized_bls12_381_FQ12, optimized_bls12_381_FQ12]

## py_ecc.optimized_bls12_381.optimized_pairing module

py_ecc.optimized_bls12_381.optimized_pairing.cast_point_to_fq12(pt: Tuple[optimized_bls12_381_FQ, optimized_bls12_381_FQ, optimized_bls12_381_FQ]) → Tuple[optimized_bls12_381_FQ12, optimized_bls12_381_FQ12, optimized_bls12_381_FQ12]

py_ecc.optimized_bls12_381.optimized_pairing.exp_by_p(x: optimized_bls12_381_FQ12) → optimized_bls12_381_FQ12

py_ecc.optimized_bls12_381.optimized_pairing.final_exponentiate(p: optimized_bls12_381_FQ12) → optimized_bls12_381_FQ12

py_ecc.optimized_bls12_381.optimized_pairing.linefunc(P1: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], P2: Tuple[Optimized_Field, Optimized_Field, Optimized_Field], T: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_pairing.miller_loop(Q: Tuple[optimized_bls12_381_FQ2, optimized_bls12_381_FQ2, optimized_bls12_381_FQ2], P: Tuple[optimized_bls12_381_FQ, optimized_bls12_381_FQ, optimized_bls12_381_FQ], final_exponentiate: bool = True) → optimized_bls12_381_FQ12

py_ecc.optimized_bls12_381.optimized_pairing.normalize1(p: Tuple[Optimized_Field, Optimized_Field, Optimized_Field]) → Tuple[Optimized_Field, Optimized_Field, Optimized_Field]

py_ecc.optimized_bls12_381.optimized_pairing.pairing(Q: Tuple[optimized_bls12_381_FQ2, optimized_bls12_381_FQ2, optimized_bls12_381_FQ2], P: Tuple[optimized_bls12_381_FQ, optimized_bls12_381_FQ, optimized_bls12_381_FQ], final_exponentiate: bool = True) → optimized_bls12_381_FQ12

## py_ecc.optimized_bls12_381.optimized_swu module

py_ecc.optimized_bls12_381.optimized_swu.iso_map_G1(x: optimized_bls12_381_FQ, y: optimized_bls12_381_FQ, z: optimized_bls12_381_FQ) → Tuple[optimized_bls12_381_FQ, optimized_bls12_381_FQ, optimized_bls12_381_FQ]

py_ecc.optimized_bls12_381.optimized_swu.iso_map_G2(x: optimized_bls12_381_FQ2, y: optimized_bls12_381_FQ2, z: optimized_bls12_381_FQ2) → Tuple[optimized_bls12_381_FQ2, optimized_bls12_381_FQ2, optimized_bls12_381_FQ2]

py_ecc.optimized_bls12_381.optimized_swu.optimized_swu_G1(t: optimized_bls12_381_FQ) → Tuple[optimized_bls12_381_FQ, optimized_bls12_381_FQ, optimized_bls12_381_FQ]

py_ecc.optimized_bls12_381.optimized_swu.optimized_swu_G2(t: optimized_bls12_381_FQ2) → Tuple[optimized_bls12_381_FQ2, optimized_bls12_381_FQ2, optimized_bls12_381_FQ2]

py_ecc.optimized_bls12_381.optimized_swu.sqrt_division_FQ(u: optimized_bls12_381_FQ, v: optimized_bls12_381_FQ) → Tuple[bool, optimized_bls12_381_FQ]

py_ecc.optimized_bls12_381.optimized_swu.sqrt_division_FQ2(u: optimized_bls12_381_FQ2, v: optimized_bls12_381_FQ2) → Tuple[bool, optimized_bls12_381_FQ2]

## Module contents