Added a multiply function that get an additional parameter, a random
value.
There are cases when the random value is used after the function, for
example, in sigma protocol. 
In these cases the random value should be known to the user. We decided
not to have function that return it to the user since this can cause
problems when more than one value is being multiplied. 
Instead, we decided to have an additional function that gets the
random value from the user.
Deleted the encryptWithGivenRandom function since an additional encrypt
(that gets a random value) function has been added.
Changed the encryptWithGivenRandom to the additional encrypt function. 
Changed the implementation of the regular encrypt function to sample a
random value and call the other encrypt function.
Added an additional reRandomize function that gets the random value to
use.
1. Implement the encrypt function that gets only the plaintext - sample
random r and call the other encrypt function.
2. Deleted the chooseRandomR function, since it is done in the added
encrypt function.
Changed the encrypt function to get an additional parameter - a random
value r. In the implementation, check the given value instead of call a
function that samples it.
Added the additional encrypt function that gets a random value to use. 
All our RSA implementations are done via other libraries. The other
libraries do not provide a way to determine which random value to use.
Therefore, there is no way we can implement it. Throw Exception.