// generate an elgamal key pair func ElgamalGenerate(priv *elgamal.PrivateKey, rand io.Reader) (err error) { priv.P = elgp priv.G = elgg xBytes := make([]byte, priv.P.BitLen()/8) _, err = io.ReadFull(rand, xBytes) if err == nil { // set private key priv.X = new(big.Int).SetBytes(xBytes) // compute public key priv.Y = new(big.Int).Exp(priv.G, priv.X, priv.P) } return }