|
purify
C++ Purify implementation with native circuit and BPP support
|
Go to the source code of this file.
Variables | |
| static const uint64_t | kPurifyPrimeP [4] |
| static const uint64_t | kPurifyOrderN1 [4] |
| static const uint64_t | kPurifyOrderN2 [4] |
| static const uint64_t | kPurifyHalfN1 [4] |
| static const uint64_t | kPurifyHalfN2 [4] |
| static const uint64_t | kPurifyFieldDi [4] |
| static const char | kPurifyHashToCurveTag [] = "Purify/HashToCurve" |
| void purify_curve_add | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | lhs, | ||
| const purify_jacobian_point * | rhs | ||
| ) |
Definition at line 619 of file curve.c.
References purify_jacobian_point::infinity, purify_affine_point::infinity, purify_curve_add_mixed(), purify_curve_double(), purify_curve_jacobian_infinity(), purify_fe_eq(), purify_fe_is_one(), purify_fe_is_zero(), purify_fe_mul(), purify_fe_set_u64(), purify_fe_sub(), purify_jacobian_point::x, purify_affine_point::x, purify_jacobian_point::y, purify_affine_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::add(), and purify_curve_mul().
| void purify_curve_add_mixed | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | lhs, | ||
| const purify_affine_point * | rhs | ||
| ) |
Definition at line 566 of file curve.c.
References purify_jacobian_point::infinity, purify_affine_point::infinity, purify_curve_double(), purify_curve_jacobian_infinity(), purify_fe_eq(), purify_fe_is_zero(), purify_fe_mul(), purify_fe_set_u64(), purify_fe_sub(), purify_jacobian_point::x, purify_affine_point::x, purify_jacobian_point::y, purify_affine_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::add_mixed(), and purify_curve_add().
| void purify_curve_affine | ( | purify_affine_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | point | ||
| ) |
Definition at line 450 of file curve.c.
References purify_jacobian_point::infinity, purify_affine_point::infinity, purify_fe_inverse_var(), purify_fe_is_zero(), purify_fe_mul(), purify_fe_set_zero(), purify_jacobian_point::x, purify_affine_point::x, purify_jacobian_point::y, purify_affine_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::affine(), and purify_curve_secret_input_point().
Definition at line 904 of file curve.c.
References purify_curve_field_a(), purify_curve_field_b(), purify_curve_field_di(), purify_fe_add(), purify_fe_inverse(), purify_fe_mul(), purify_fe_set_u64(), and purify_fe_sub().
Referenced by purify::combine().
|
static |
Definition at line 275 of file curve.c.
References purify_curve::a, purify_curve::b, purify_fe_add(), purify_fe_mul(), purify_fe_sub(), purify_complete_projective_point::x, purify_complete_projective_point::y, and purify_complete_projective_point::z.
Referenced by purify_curve_mul_secret_ladder_core().
|
static |
Definition at line 258 of file curve.c.
References purify_fe_cmov(), purify_complete_projective_point::x, purify_complete_projective_point::y, and purify_complete_projective_point::z.
Referenced by purify_curve_complete_swap().
|
static |
Definition at line 340 of file curve.c.
References purify_curve::a, purify_curve::b, purify_fe_add(), purify_fe_mul(), purify_fe_sub(), purify_complete_projective_point::x, purify_complete_projective_point::y, and purify_complete_projective_point::z.
Referenced by purify_curve_mul_secret_ladder_core().
|
static |
Definition at line 228 of file curve.c.
References purify_fe_set_u64(), purify_fe_set_zero(), purify_complete_projective_point::x, purify_complete_projective_point::y, and purify_complete_projective_point::z.
Referenced by purify_curve_mul_secret_ladder_core(), and purify_curve_secret_input_point().
|
static |
Definition at line 266 of file curve.c.
References purify_curve_complete_assign().
Referenced by purify_curve_mul_secret_ladder_core().
|
static |
Definition at line 79 of file curve.c.
Referenced by purify_curve_half_n1(), purify_curve_half_n2(), purify_curve_key_to_bits(), purify_curve_order_n1(), purify_curve_order_n2(), and purify_curve_prime_p().
| void purify_curve_double | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | point | ||
| ) |
Definition at line 517 of file curve.c.
References purify_curve::a, purify_jacobian_point::infinity, purify_curve_jacobian_infinity(), purify_fe_add(), purify_fe_is_zero(), purify_fe_mul(), purify_fe_set_u64(), purify_fe_sub(), purify_jacobian_point::x, purify_jacobian_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::double_point(), purify_curve_add(), purify_curve_add_mixed(), and purify_curve_mul().
| void purify_curve_field_a | ( | purify_fe * | out | ) |
Definition at line 425 of file curve.c.
References purify_fe_set_u64().
Referenced by purify::field_a(), and purify_curve_combine().
| void purify_curve_field_b | ( | purify_fe * | out | ) |
Definition at line 429 of file curve.c.
References purify_fe_set_u64().
Referenced by purify::field_b(), and purify_curve_combine().
| void purify_curve_field_d | ( | purify_fe * | out | ) |
Definition at line 433 of file curve.c.
References purify_fe_set_u64().
Referenced by purify::field_d().
| void purify_curve_field_di | ( | purify_fe * | out | ) |
Definition at line 437 of file curve.c.
References kPurifyFieldDi, and purify_fe_set_u256().
Referenced by purify::field_di(), and purify_curve_combine().
| void purify_curve_half_n1 | ( | uint64_t | out[4] | ) |
Definition at line 404 of file curve.c.
References kPurifyHalfN1, and purify_curve_copy_u256().
Referenced by purify::half_n1().
| void purify_curve_half_n2 | ( | uint64_t | out[4] | ) |
Definition at line 408 of file curve.c.
References kPurifyHalfN2, and purify_curve_copy_u256().
Referenced by purify::half_n2().
| int purify_curve_hash_to_curve | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const unsigned char * | data, | ||
| size_t | data_len | ||
| ) |
Definition at line 778 of file curve.c.
References purify_curve_hash_to_int_tagged_u320(), purify_curve_is_x_coord(), purify_curve_jacobian_infinity(), purify_curve_lift_x(), purify_curve_negate(), purify_curve_two_p(), purify_fe_set_u256(), and purify_u256_try_narrow_u320().
Referenced by purify::hash_to_curve().
|
static |
Definition at line 111 of file curve.c.
References purify_curve_tag_hash(), purify_curve_u64_to_be(), and purify_sha256_many().
Referenced by purify_curve_hash_to_curve().
| int purify_curve_is_valid_public_key | ( | const uint64_t | value[8] | ) |
Definition at line 837 of file curve.c.
References purify_curve_packed_public_key_space_size().
Referenced by purify::is_valid_public_key(), and purify_curve_unpack_public().
| int purify_curve_is_valid_secret_key | ( | const uint64_t | value[8] | ) |
Definition at line 831 of file curve.c.
References purify_curve_packed_secret_key_space_size().
Referenced by purify::is_valid_secret_key(), and purify_curve_unpack_secret().
| int purify_curve_is_x_coord | ( | const purify_curve * | curve, |
| const purify_fe * | x | ||
| ) |
Definition at line 482 of file curve.c.
References purify_curve::a, purify_curve::b, purify_fe_add(), purify_fe_legendre_symbol(), and purify_fe_mul().
Referenced by purify::EllipticCurve::is_x_coord(), and purify_curve_hash_to_curve().
| void purify_curve_jacobian_infinity | ( | purify_jacobian_point * | out | ) |
Definition at line 443 of file curve.c.
References purify_jacobian_point::infinity, purify_fe_set_u64(), purify_fe_set_zero(), purify_jacobian_point::x, purify_jacobian_point::y, and purify_jacobian_point::z.
Referenced by purify::JacobianPoint::infinity_point(), purify_curve_add(), purify_curve_add_mixed(), purify_curve_double(), purify_curve_hash_to_curve(), and purify_curve_mul().
| int purify_curve_key_to_bits | ( | int * | out_bits, |
| size_t | out_len, | ||
| const uint64_t | value[4], | ||
| const uint64_t | max_value[4] | ||
| ) |
Definition at line 937 of file curve.c.
References purify_curve_copy_u256().
Referenced by purify::key_to_bits().
| int purify_curve_lift_x | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const purify_fe * | x | ||
| ) |
Definition at line 496 of file curve.c.
References purify_curve::a, purify_curve::b, purify_jacobian_point::infinity, purify_fe_add(), purify_fe_mul(), purify_fe_set_u64(), purify_fe_sqrt(), purify_jacobian_point::x, purify_jacobian_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::lift_x(), and purify_curve_hash_to_curve().
| void purify_curve_mul | ( | purify_jacobian_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | point, | ||
| const uint64_t | scalar[4] | ||
| ) |
Definition at line 697 of file curve.c.
References purify_curve_add(), purify_curve_double(), purify_curve_jacobian_infinity(), and scalar.
Referenced by purify::EllipticCurve::mul().
| int purify_curve_mul_secret_affine | ( | purify_affine_point * | out, |
| const purify_curve * | curve, | ||
| const purify_jacobian_point * | point, | ||
| const uint64_t | scalar[4] | ||
| ) |
Definition at line 759 of file curve.c.
References purify_affine_point::infinity, purify_curve_mul_secret_ladder_core(), purify_fe_inverse(), purify_fe_is_zero(), purify_fe_mul(), scalar, purify_affine_point::x, purify_complete_projective_point::x, purify_affine_point::y, purify_complete_projective_point::y, and purify_complete_projective_point::z.
Referenced by purify::EllipticCurve::mul_secret_affine().
|
static |
Definition at line 716 of file curve.c.
References bit(), purify_curve::n, purify_curve_complete_add(), purify_curve_complete_double(), purify_curve_complete_identity(), purify_curve_complete_swap(), purify_curve_secret_input_point(), and scalar.
Referenced by purify_curve_mul_secret_affine().
| void purify_curve_negate | ( | purify_jacobian_point * | out, |
| const purify_jacobian_point * | point | ||
| ) |
Definition at line 471 of file curve.c.
References purify_jacobian_point::infinity, purify_fe_negate(), purify_jacobian_point::x, purify_jacobian_point::y, and purify_jacobian_point::z.
Referenced by purify::EllipticCurve::negate(), and purify_curve_hash_to_curve().
| void purify_curve_order_n1 | ( | uint64_t | out[4] | ) |
Definition at line 396 of file curve.c.
References kPurifyOrderN1, and purify_curve_copy_u256().
Referenced by purify::order_n1().
| void purify_curve_order_n2 | ( | uint64_t | out[4] | ) |
Definition at line 400 of file curve.c.
References kPurifyOrderN2, and purify_curve_copy_u256().
Referenced by purify::order_n2().
| void purify_curve_pack_public | ( | uint64_t | out[8], |
| const uint64_t | x1[4], | ||
| const uint64_t | x2[4] | ||
| ) |
Definition at line 897 of file curve.c.
References kPurifyPrimeP, purify_u512_multiply_u256(), and purify_u512_widen_u256().
Referenced by purify::pack_public().
| void purify_curve_packed_public_key_space_size | ( | uint64_t | out[8] | ) |
Definition at line 416 of file curve.c.
References kPurifyPrimeP, and purify_u512_multiply_u256().
Referenced by purify::packed_public_key_space_size(), and purify_curve_is_valid_public_key().
| void purify_curve_packed_secret_key_space_size | ( | uint64_t | out[8] | ) |
Definition at line 412 of file curve.c.
References kPurifyHalfN1, kPurifyHalfN2, and purify_u512_multiply_u256().
Referenced by purify::packed_secret_key_space_size(), and purify_curve_is_valid_secret_key().
| void purify_curve_prime_p | ( | uint64_t | out[4] | ) |
Definition at line 392 of file curve.c.
References kPurifyPrimeP, and purify_curve_copy_u256().
Referenced by purify::prime_p().
|
static |
Definition at line 237 of file curve.c.
References purify_jacobian_point::infinity, purify_curve_affine(), purify_curve_complete_identity(), purify_fe_is_one(), purify_fe_is_zero(), purify_fe_set_u64(), purify_jacobian_point::x, purify_affine_point::x, purify_complete_projective_point::x, purify_jacobian_point::y, purify_affine_point::y, purify_complete_projective_point::y, purify_jacobian_point::z, and purify_complete_projective_point::z.
Referenced by purify_curve_mul_secret_ladder_core().
|
static |
Definition at line 107 of file curve.c.
References kPurifyHashToCurveTag, and purify_sha256().
Referenced by purify_curve_hash_to_int_tagged_u320().
| void purify_curve_two_p | ( | uint64_t | out[5] | ) |
Definition at line 420 of file curve.c.
References kPurifyPrimeP, and purify_u320_widen_u256().
Referenced by purify_curve_hash_to_curve(), and purify::two_p().
|
static |
Definition at line 87 of file curve.c.
Referenced by purify_curve_unpack_secret_from_valid().
|
static |
Definition at line 83 of file curve.c.
Referenced by purify_curve_unpack_secret_from_valid().
|
static |
Definition at line 99 of file curve.c.
Referenced by purify_curve_hash_to_int_tagged_u320().
| int purify_curve_unpack_public | ( | uint64_t | first[4], |
| uint64_t | second[4], | ||
| const uint64_t | value[8] | ||
| ) |
Definition at line 878 of file curve.c.
References kPurifyPrimeP, purify_curve_is_valid_public_key(), purify_u256_try_narrow_u512(), purify_u512_try_divmod_same(), and purify_u512_widen_u256().
Referenced by purify::unpack_public().
| int purify_curve_unpack_secret | ( | uint64_t | first[4], |
| uint64_t | second[4], | ||
| const uint64_t | value[8] | ||
| ) |
Definition at line 863 of file curve.c.
References purify_curve_is_valid_secret_key(), and purify_curve_unpack_secret_from_valid().
Referenced by purify::unpack_secret().
|
static |
Definition at line 843 of file curve.c.
References kPurifyHalfN1, purify_curve_u256_add_one_unchecked(), purify_curve_u256_narrow_u512_unchecked(), purify_u512_try_divmod_same_consttime(), and purify_u512_widen_u256().
Referenced by purify_curve_unpack_secret().
|
static |
Definition at line 66 of file curve.c.
Referenced by purify_curve_field_di().
|
static |
Definition at line 44 of file curve.c.
Referenced by purify_curve_half_n1(), purify_curve_packed_secret_key_space_size(), and purify_curve_unpack_secret_from_valid().
|
static |
Definition at line 55 of file curve.c.
Referenced by purify_curve_half_n2(), and purify_curve_packed_secret_key_space_size().
|
static |
Definition at line 77 of file curve.c.
Referenced by purify_curve_tag_hash().
|
static |
Definition at line 22 of file curve.c.
Referenced by purify_curve_order_n1().
|
static |
Definition at line 33 of file curve.c.
Referenced by purify_curve_order_n2().
|
static |
Definition at line 10 of file curve.c.
Referenced by purify_curve_pack_public(), purify_curve_packed_public_key_space_size(), purify_curve_prime_p(), purify_curve_two_p(), and purify_curve_unpack_public().