public void DeserializationG2Test() { var x = Fr.GetRandom(); var a = G2.Generator * x; var enc = a.ToBytes(); var b = G2.FromBytes(enc); Assert.True(a.Equals(b)); }
public void SerializationRoundTrip() { var x = G2.Generator * Fr.GetRandom(); Assert.IsTrue(x.IsValid()); var serialized = x.ToBytes(); Assert.AreEqual(96, serialized.Length); var restored = G2.FromBytes(serialized); Assert.AreEqual(x, restored); }
internal static dynamic DeserializeType(ReadOnlyMemory <byte> bytes, Type type) { if (type == typeof(Fr)) { return(Fr.FromBytes(bytes.ToArray())); } if (type == typeof(G1)) { return(G1.FromBytes(bytes.ToArray())); } if (type == typeof(G2)) { return(G2.FromBytes(bytes.ToArray())); } switch (Type.GetTypeCode(type)) { case TypeCode.Boolean: return(bytes.Span[0] != 0); case TypeCode.SByte: return((sbyte)bytes.Span[0]); case TypeCode.Byte: return(bytes.Span[0]); case TypeCode.UInt16: return(bytes.Span.ToUInt16()); case TypeCode.Int16: return(bytes.Span.ToInt16()); case TypeCode.UInt32: return(bytes.Span.ToUInt32()); case TypeCode.Int32: return(bytes.Span.ToInt32()); case TypeCode.UInt64: return(bytes.Span.ToUInt64()); case TypeCode.Int64: return(bytes.Span.ToInt64()); case TypeCode.Object: return(( type.GetMethod("FromBytes") ?? throw new InvalidOperationException($"Cannot deserialize type {type} without FromBytes method") ).Invoke(null, new object[] { bytes })); case TypeCode.Single: case TypeCode.String: case TypeCode.Char: case TypeCode.DateTime: case TypeCode.DBNull: case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Empty: throw new ArgumentOutOfRangeException(); default: throw new ArgumentOutOfRangeException(); } }
public static Signature FromBytes(ReadOnlyMemory <byte> bytes) { return(new Signature(G2.FromBytes(bytes.ToArray()))); }