Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
 public static Signature FromBytes(ReadOnlyMemory <byte> bytes)
 {
     return(new Signature(G2.FromBytes(bytes.ToArray())));
 }