/**
         * Returns an amcl.BN256.ECP2 on input of an ECP2 protobuf object.
         *
         * @param w a protobuf object representing an ECP2
         * @return a ECP2 created from the protobuf object
         */
        public static ECP2 ToECP2(this Protos.Idemix.ECP2 w)
        {
            byte[] valuexa = w.Xa.ToByteArray();
            byte[] valuexb = w.Xb.ToByteArray();
            byte[] valueya = w.Ya.ToByteArray();
            byte[] valueyb = w.Yb.ToByteArray();
            FP2    valuex  = new FP2(BIG.FromBytes(valuexa), BIG.FromBytes(valuexb));
            FP2    valuey  = new FP2(BIG.FromBytes(valueya), BIG.FromBytes(valueyb));

            return(new ECP2(valuex, valuey));
        }
        /**
         * Converts an amcl.BN256.ECP2 into an ECP2 protobuf object.
         *
         * @param w an ECP2 to be transformed into a protobuf object
         * @return a protobuf representation of the ECP2
         */
        public static Protos.Idemix.ECP2 ToProto(this ECP2 w)
        {
            byte[] valueXA = new byte[FIELD_BYTES];
            byte[] valueXB = new byte[FIELD_BYTES];
            byte[] valueYA = new byte[FIELD_BYTES];
            byte[] valueYB = new byte[FIELD_BYTES];

            w.X.A.ToBytes(valueXA);
            w.X.B.ToBytes(valueXB);
            w.Y.A.ToBytes(valueYA);
            w.Y.B.ToBytes(valueYB);
            Protos.Idemix.ECP2 ecp2 = new Protos.Idemix.ECP2();
            ecp2.Xa = ByteString.CopyFrom(valueXA);
            ecp2.Xb = ByteString.CopyFrom(valueXB);
            ecp2.Ya = ByteString.CopyFrom(valueYA);
            ecp2.Yb = ByteString.CopyFrom(valueYB);
            return(ecp2);
        }