public static byte[] multiplyElGamalCiphers(byte[] cipher1, byte[] cipher2)
	{
		if(cipher1.length != ElGamal.getSizeOfElgamalCipher() || cipher2.length != ElGamal.getSizeOfElgamalCipher()) {
			throw new IllegalArgumentException();
		}
		
		// Separates the two parts of the cipher arrays.
		byte[] cipherGamma1 = Arrays.copyOfRange(cipher1, 0, cipher1.length/2);
		byte[] cipherPhi1 = Arrays.copyOfRange(cipher1, cipher1.length/2, cipher1.length);
		byte[] cipherGamma2 = Arrays.copyOfRange(cipher2, 0, cipher2.length/2);
		byte[] cipherPhi2 = Arrays.copyOfRange(cipher2, cipher2.length/2, cipher2.length);	
		
		BigInteger gammaInt1 = new BigInteger(1, cipherGamma1);
		BigInteger phiInt1 = new BigInteger(1, cipherPhi1);
		BigInteger gammaInt2 = new BigInteger(1, cipherGamma2);
		BigInteger phiInt2 = new BigInteger(1, cipherPhi2);
		
		BigInteger gammaProduct = gammaInt1.multiply(gammaInt2).mod(group.getModulo());
		BigInteger phiProduct = phiInt1.multiply(phiInt2).mod(group.getModulo());
		
		byte[] gammaProductByte = gammaProduct.toByteArray();
		byte[] phiProductByte = phiProduct.toByteArray();
		
        byte[]  result = new byte[ElGamal.getSizeOfElgamalCipher()];

        if (gammaProductByte.length > result.length / 2) {
            System.arraycopy(gammaProductByte, 1, result, result.length / 2 - (gammaProductByte.length - 1), gammaProductByte.length - 1);
        } else {
            System.arraycopy(gammaProductByte, 0, result, result.length / 2 - gammaProductByte.length, gammaProductByte.length);
        }

        if (phiProductByte.length > result.length / 2) {
            System.arraycopy(phiProductByte, 1, result, result.length - (phiProductByte.length - 1), phiProductByte.length - 1);
        } else {
            System.arraycopy(phiProductByte, 0, result, result.length - phiProductByte.length, phiProductByte.length);
        }
		
		return result;
	}