py_ecc/bls/utils.py
def decompress_G1(z: G1Compressed) -> G1Uncompressed:
    """
    Recovers x and y coordinates from the compressed point.
    """
    # b_flag == 1 indicates the infinity point
    b_flag = (z % POW_2_383) // POW_2_382
    if b_flag == 1:
        return Z1
    x = z % POW_2_381

    # Try solving y coordinate from the equation Y^2 = X^3 + b
    # using quadratic residue
    y = pow((x**3 + b.n) % q, (q + 1) // 4, q)

    if pow(y, 2, q) != (x**3 + b.n) % q:
        raise ValueError(
            "The given point is not on G1: y**2 = x**3 + b"
        )
    # Choose the y whose leftmost bit is equal to the a_flag
    a_flag = (z % POW_2_382) // POW_2_381
    if (y * 2) // q != a_flag:
        y = q - y
    return (FQ(x), FQ(y), FQ(1))
def decompress_G1(z: G1Compressed) -> G1Uncompressed:
    # b_flag == 1 indicates the infinity point
    b_flag = (z % POW_2_383) // POW_2_382
    if b_flag == 1:
        return Z1
    x = z % POW_2_381

    # Try solving y coordinate from the equation Y^2 = X^3 + b
    # using quadratic residue
    y = pow((x**3 + b.n) % q, (q + 1) // 4, q)

    if pow(y, 2, q) != (x**3 + b.n) % q:
        raise ValueError(
            "The given point is not on G1: y**2 = x**3 + b"
        )
    # Choose the y whose leftmost bit is equal to the a_flag
    a_flag = (z % POW_2_382) // POW_2_381
    if (y * 2) // q != a_flag:
        y = q - y
    return (FQ(x), FQ(y), FQ(1))
def decompress_G1 ( z : G1Compressed ) -> G1Uncompressed : # b_flag == 1 indicates the infinity point b_flag = ( z % POW_2_383 ) // POW_2_382 if b_flag == 1 : return Z1 x = z % POW_2_381 # Try solving y coordinate from the equation Y^2 = X^3 + b # using quadratic residue y = pow ( ( x ** 3 + b . n ) % q , ( q + 1 ) // 4 , q ) if pow ( y , 2 , q ) != ( x ** 3 + b . n ) % q : raise ValueError ( "The given point is not on G1: y**2 = x**3 + b" ) # Choose the y whose leftmost bit is equal to the a_flag a_flag = ( z % POW_2_382 ) // POW_2_381 if ( y * 2 ) // q != a_flag : y = q - y return ( FQ ( x ) , FQ ( y ) , FQ ( 1 ) )
Recovers x and y coordinates from the compressed point.
Recovers x and y coordinates from the compressed point .