示例#1
0
        /// <summary>
        /// Serializes a signature to its Protobuf representation
        /// </summary>
        /// <returns></returns>
        public Format.Schema.Signature Serialize()
        {
            Format.Schema.Signature sig = new Format.Schema.Signature()
            {
                Z = ByteString.CopyFrom(this.Z.ToByteArray())
            };

            foreach (RistrettoElement element in this.Parameters)
            {
                sig.Parameters.Add(ByteString.CopyFrom(element.Compress().ToByteArray()));
            }

            return(sig);
        }
示例#2
0
        /// <summary>
        /// Deserializes a signature from its Protobuf representation
        /// </summary>
        /// <param name="sig"></param>
        /// <returns></returns>
        static public Either <Error, TokenSignature> Deserialize(Format.Schema.Signature sig)
        {
            try
            {
                List <RistrettoElement> parameters = new List <RistrettoElement>();
                foreach (ByteString parameter in sig.Parameters)
                {
                    parameters.Add((new CompressedRistretto(parameter.ToByteArray())).Decompress());
                }

                Scalar z = Scalar.FromBytesModOrder(sig.Z.ToByteArray());

                return(new Right(new TokenSignature(parameters, z)));
            }
            catch (InvalidEncodingException)
            {
                return(new InvalidFormat());
            }
            catch (ArgumentException e)
            {
                return(new DeserializationError(e.ToString()));
            }
        }