package paillier import ( "crypto/rand" "io" "math/big" ) var ZERO = big.NewInt(0) var ONE = big.NewInt(1) var TWO = big.NewInt(2) var FOUR = big.NewInt(4) // Generate a random element in the group of all the elements in Z/nZ that // has a multiplicative inverse. func GetRandomNumberInMultiplicativeGroup(n *big.Int, random io.Reader) (*big.Int, error) { r, err := rand.Int(random, n) if err != nil { return nil, err } zero := big.NewInt(0) one := big.NewInt(1) if zero.Cmp(r) == 0 || one.Cmp(new(big.Int).GCD(nil, nil, n, r)) != 0 { return GetRandomNumberInMultiplicativeGroup(n, random) } return r, nil }