public void ArrayInArrayTest()
        {
            var val = new GTXValue();

            val.Choice = GTXValueChoice.Array;
            val.Array  = new System.Collections.Generic.List <GTXValue>();

            var innerVal = new GTXValue();

            innerVal.Choice = GTXValueChoice.Array;
            innerVal.Array  = new System.Collections.Generic.List <GTXValue>();

            var innerInnerVal = new GTXValue();

            innerInnerVal.Choice  = GTXValueChoice.Integer;
            innerInnerVal.Integer = Int64.MinValue;
            innerVal.Array.Add(innerInnerVal);

            val.Array.Add(innerVal);

            if (PRINT_CONTENT)
            {
                var str = PostchainUtil.ByteArrayToString(val.Encode());
                System.Console.WriteLine("ArrayInArrayTest: " + str.ToUpper());
            }

            var decoded = GTXValue.Decode(new AsnReader(val.Encode()));

            Assert.Equal(val.Choice, decoded.Choice);
            Assert.Equal(val.Array, decoded.Array);
            Assert.Equal(val, decoded);
        }
        public static DictPair Decode(ASN1.AsnReader sequence)
        {
            var dict         = new DictPair();
            var dictSequence = sequence.ReadSequence();

            dict.Name  = dictSequence.ReadUTF8String();
            dict.Value = GTXValue.Decode(dictSequence);

            return(dict);
        }
Exemple #3
0
        private byte[] CalculateHashOfValueInternal(GTXValue gtxValue)
        {
            var buf = new List <byte>()
            {
                (byte)HashPrefix.Leaf
            };

            buf.AddRange(gtxValue.Encode());

            return(HashingFun(buf.ToArray()));
        }
        public DictPair(string name = "", GTXValue value = null)
        {
            this.Name = name;

            if (value == null)
            {
                this.Value = new GTXValue();
            }
            else
            {
                this.Value = value;
            }
        }
        public void FullArrayTest()
        {
            var val = new GTXValue();

            val.Choice = GTXValueChoice.Array;
            val.Array  = new System.Collections.Generic.List <GTXValue>();

            var innerVal1 = new GTXValue();

            innerVal1.Choice = GTXValueChoice.String;
            innerVal1.String = "test";
            val.Array.Add(innerVal1);

            var innerVal2 = new GTXValue();

            innerVal2.Choice = GTXValueChoice.Null;
            val.Array.Add(innerVal2);

            var innerVal3 = new GTXValue();

            innerVal3.Choice  = GTXValueChoice.Integer;
            innerVal3.Integer = Int64.MaxValue;
            val.Array.Add(innerVal3);

            var innerVal4 = new GTXValue();

            innerVal4.Choice    = GTXValueChoice.ByteArray;
            innerVal4.ByteArray = new byte[] { 0xde, 0xad, 0xbe, 0xef };
            val.Array.Add(innerVal4);

            var innerVal5 = new GTXValue();

            innerVal5.Choice = GTXValueChoice.Array;
            innerVal5.Array  = new System.Collections.Generic.List <GTXValue>();
            val.Array.Add(innerVal5);

            if (PRINT_CONTENT)
            {
                var str = PostchainUtil.ByteArrayToString(val.Encode());
                System.Console.WriteLine("FullArrayTest: " + str.ToUpper());
            }

            var decoded = GTXValue.Decode(new AsnReader(val.Encode()));

            Assert.Equal(val.Choice, decoded.Choice);
            Assert.Equal(val.Array, decoded.Array);
            Assert.Equal(val, decoded);
        }
Exemple #6
0
        public void SimpleNullTest()
        {
            var val = new GTXValue();

            val.Choice = GTXValueChoice.Null;

            if (PRINT_CONTENT)
            {
                var str = PostchainUtil.ByteArrayToString(val.Encode());
                System.Console.WriteLine("SimpleNullTest: " + str.ToUpper());
            }

            var decoded = GTXValue.Decode(new AsnReader(val.Encode()));

            Assert.Equal(val.Choice, decoded.Choice);
            Assert.Equal(val, decoded);
        }
Exemple #7
0
        public void MinIntegerTest()
        {
            var val = new GTXValue();

            val.Choice  = GTXValueChoice.Integer;
            val.Integer = Int64.MinValue;

            if (PRINT_CONTENT)
            {
                var str = PostchainUtil.ByteArrayToString(val.Encode());
                System.Console.WriteLine("MinIntegerTest: " + str.ToUpper());
            }

            var decoded = GTXValue.Decode(new AsnReader(val.Encode()));

            Assert.Equal(val.Choice, decoded.Choice);
            Assert.Equal(val.Integer, decoded.Integer);
            Assert.Equal(val, decoded);
        }
Exemple #8
0
        public void LongStringTest()
        {
            var val = new GTXValue();

            val.Choice = GTXValueChoice.String;
            val.String = new string('x', 2048);

            if (PRINT_CONTENT)
            {
                var str = PostchainUtil.ByteArrayToString(val.Encode());
                System.Console.WriteLine("LongStringTest: " + str.ToUpper());
            }

            var decoded = GTXValue.Decode(new AsnReader(val.Encode()));

            Assert.Equal(val.Choice, decoded.Choice);
            Assert.Equal(val.String, decoded.String);
            Assert.Equal(val, decoded);
        }
Exemple #9
0
        public static GTXValue ArgToGTXValue(object arg)
        {
            var gtxValue = new GTXValue();

            if (arg is null)
            {
                gtxValue.Choice = GTXValueChoice.Null;
            }
            else if (arg.IsNumericType())
            {
                try
                {
                    gtxValue.Choice  = GTXValueChoice.Integer;
                    gtxValue.Integer = Convert.ToInt64(arg);
                }
                catch
                {
                    throw new System.Exception("Chromia.PostchainClient.GTX Gtx.ArgToGTXValue() Integer overflow.");
                }
            }
            else if (arg is byte[])
            {
                gtxValue.Choice    = GTXValueChoice.ByteArray;
                gtxValue.ByteArray = (byte[])arg;
            }
            else if (arg is string)
            {
                gtxValue.Choice = GTXValueChoice.String;
                gtxValue.String = (string)arg;
            }
            else if (arg is object[])
            {
                var array = (object[])arg;
                gtxValue.Choice = GTXValueChoice.Array;

                gtxValue.Array = new List <GTXValue>();
                foreach (var subArg in array)
                {
                    gtxValue.Array.Add(ArgToGTXValue(subArg));
                }
            }
            else if (arg is Dictionary <string, object> )
            {
                gtxValue.Choice = GTXValueChoice.Dict;

                var dict = (Dictionary <string, object>)arg;

                gtxValue.Dict = new List <DictPair>();
                foreach (var dictPair in dict)
                {
                    gtxValue.Dict.Add(new DictPair(dictPair.Key, ArgToGTXValue(dictPair.Value)));
                }
            }
            else
            {
                throw new System.Exception("Chromia.PostchainClient.GTX Gtx.ArgToGTXValue() Can't create GTXValue out of type " + arg.GetType());
            }


            return(gtxValue);
        }
Exemple #10
0
        public static GTXValue Deserialize(byte[] encodedMessage)
        {
            if (encodedMessage[0] >> 4 != 0xa)
            {
                return(new GTXValue());
            }

            var messageLength      = GetLength(encodedMessage);
            int messageOctetLength = GetOctetLength(encodedMessage);
            var newObject          = new GTXValue();

            switch (encodedMessage[0] & 0xF)
            {
            case (0x1):
            {
                // ByteArray
                if (encodedMessage[1 + messageOctetLength] != 0x04)
                {
                    throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() ByteArray case. Not octet string.");
                }

                int length = encodedMessage[3];

                newObject.Choice    = GTXValueChoice.ByteArray;
                newObject.ByteArray = encodedMessage.Skip(4).Take(length).ToArray();

                break;
            }

            case (0x2):
            {
                // String
                if (encodedMessage[1 + messageOctetLength] != 0x0c)
                {
                    throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() String case. Not UTF8String.");
                }

                int length = encodedMessage[1 + messageOctetLength + 1];

                newObject.Choice = GTXValueChoice.String;
                newObject.String = System.Text.Encoding.UTF8.GetString(encodedMessage.Skip(4).Take(length).ToArray());
                break;
            }

            case (0x3):
            {
                // Integer
                if (encodedMessage[1 + messageOctetLength] != 0x02)
                {
                    throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() Integer case. Not primitive integer type.");
                }

                int length     = encodedMessage[3];
                int newInteger = 0;
                for (int i = 4; i < length + 4; i++)
                {
                    newInteger = (newInteger << 8) | encodedMessage[i];
                }

                newObject.Choice  = GTXValueChoice.Integer;
                newObject.Integer = newInteger;

                break;
            }

            case (0x4):
            {
                // DictPair
                throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() Dict case. Not implemented yet.");
                // newObject.Choice = GTXValueChoice.Dict;
                // break;
            }

            case (0x5):
            {
                // Array
                if (encodedMessage[1 + messageOctetLength] != 0x30)
                {
                    throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() Array case. Not sequence of.");
                }

                byte[] sequence            = encodedMessage.Skip(1 + messageOctetLength).ToArray();
                int    sequenceLength      = GetLength(sequence);
                int    sequenceOctetLength = GetOctetLength(sequence);

                int startIndex = 2 + messageOctetLength + sequenceOctetLength;

                newObject.Choice = GTXValueChoice.Array;
                newObject.Array  = new List <GTXValue>();
                while (startIndex < sequenceLength)
                {
                    byte[] newElement    = encodedMessage.Skip(startIndex).ToArray();
                    int    elementLength = GetLength(newElement) + GetOctetLength(newElement) + 1;
                    newElement = newElement.Take(elementLength).ToArray();

                    newObject.Array.Add(Deserialize(newElement));
                    startIndex += elementLength;
                }

                break;
            }

            default:
            {
                throw new System.Exception("Chromia.Postchain.Client.GTX Gtx.Deserialize() Default case. Unknown tag " + (encodedMessage[0] & 0xF).ToString("X1"));
            }
            }

            return(newObject);
        }