/// <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); }
/// <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())); } }