Exemplo n.º 1
0
 private static void checkSequenceError(byte[] bytes, string start, string expected)
 {
     if (BinaryAscii.hexFromBinary(bytes).Substring(0, start.Length) != start)
     {
         throw new ArgumentException(
                   "wanted sequence " +
                   expected.Substring(0, 2) +
                   ", got " +
                   extractFirstInt(bytes).ToString("X")
                   );
     }
 }
Exemplo n.º 2
0
        public static Tuple <BigInteger, byte[]> removeInteger(byte[] bytes)
        {
            checkSequenceError(bytes, hexB, "02");

            Tuple <int, int> readLengthResult = readLength(Bytes.sliceByteArray(bytes, 1));
            int length    = readLengthResult.Item1;
            int lengthLen = readLengthResult.Item2;

            byte[] numberBytes = Bytes.sliceByteArray(bytes, 1 + lengthLen, length);
            byte[] rest        = Bytes.sliceByteArray(bytes, 1 + lengthLen + length);
            int    nBytes      = numberBytes[0];

            if (nBytes >= hex128)
            {
                throw new ArgumentException("first byte of integer must be < 128");
            }

            return(new Tuple <BigInteger, byte[]> (
                       BinaryAscii.numberFromHex(BinaryAscii.hexFromBinary(numberBytes)),
                       rest
                       ));
        }
Exemplo n.º 3
0
        private static Tuple <int, int> readLength(byte[] bytes)
        {
            int num = extractFirstInt(bytes);

            if ((num & hex128) == 0)
            {
                return(new Tuple <int, int>(num & hex127, 1));
            }

            int lengthLen = num & hex127;

            if (lengthLen > bytes.Length - 1)
            {
                throw new ArgumentException("ran out of length bytes");
            }

            return(new Tuple <int, int>(
                       int.Parse(
                           BinaryAscii.hexFromBinary(Bytes.sliceByteArray(bytes, 1, lengthLen)),
                           System.Globalization.NumberStyles.HexNumber
                           ),
                       1 + lengthLen
                       ));
        }