fn mul(self, mut rhs: U256) -> Self::Output {
        let mut res = Point::AT_INFINITY;

        for _ in 0..256 {
            res = res + res;
            if rhs & U256([0, 0, 0, 1 << 63]) != U256::zero() {
                res += self;
            }
            rhs = rhs.wrapping_shl(1);
        }

        res
    }
// Double and add algorithm - that means **NOT CONSTANT TIME!!!**
Double and add algorithm - that means **NOT CONSTANT TIME
Double and add algorithm - that means ** NOT CONSTANT TIME
fn mul(self, mut rhs: U256) -> Self::Output {
        let mut res = Point::AT_INFINITY;
        for _ in 0..256 {
            res = res + res;
            if rhs & U256([0, 0, 0, 1 << 63]) != U256::zero() {
                res += self;
            }
            rhs = rhs.wrapping_shl(1);
        }
        res
    }
fn mul ( self , mut rhs : U256 ) -> Self :: Output { let mut res = Point :: AT_INFINITY ; for _ in 0 .. 256 { res = res + res ; if rhs & U256 ( [ 0 , 0 , 0 , 1 << 63 ] ) != U256 :: zero ( ) { res += self ; } rhs = rhs . wrapping_shl ( 1 ) ; } res }
Double and add algorithm - that means **NOT CONSTANT TIME!!
Double and add algorithm - that means ** NOT CONSTANT TIME!!
self
rhs
U256