namespace Riddle { public class SolutionEnvelope { public string identifier { get; set; } public uint8[] signed_data { get; set; } public uint8[] signed_reply_key { get; set; } public SolutionEnvelope.from_message(Message message) { identifier = message.arguments[0]; signed_data = Base64.decode (message.items[0]); signed_reply_key = Base64.decode (message.items[1]); } public bool verify(uint8[] verification_key) { var d1 = Sodium.Asymmetric.Signing.verify(signed_data, verification_key); var d2 = Sodium.Asymmetric.Signing.verify(signed_reply_key, verification_key); return d1 != null && d2 != null; } public Message to_message() { return new Message(MessageType.RIDDLE, new string[] { identifier }, new string[] { identifier, Base64.encode(signed_data), Base64.encode(signed_reply_key) } ); } } }