Ejemplo n.º 1
0
        public static TryResult <String> TryToBase32String(Value128 data, Base32Encoding base32Encoding)
        {
            if (base32Encoding == null)
            {
                return(encodeFailResult);
            }

            Char[] result;

            // Get padding symbol
            var paddingSymbol = base32Encoding.PaddingSymbol;

            if (paddingSymbol.HasValue)
            {
                result = new Char[32];

                // Set padding
                result[26] = result[27] = result[28] = result[29] = result[30] = result[31] = paddingSymbol.Value;
            }
            else
            {
                result = new Char[26];
            }

            var higherHalf = data.HigherHalf;

            var lowerHalf = data.LowerHalf;

            // Get alphabet
            var alphabet = base32Encoding.Alphabet;

            for (Int32 indexH = 0, indexL = 13, shiftH = 59, shiftL = 58; indexH < 12; indexH++, indexL++, shiftH -= 5, shiftL -= 5)
            {
                result[indexH] = alphabet[(Int32)(higherHalf >> shiftH) & 0x1F];

                result[indexL] = alphabet[(Int32)(lowerHalf >> shiftL) & 0x1F];
            }

            result[12] = alphabet[(Int32)(((higherHalf << 1) & 0x1E) | ((lowerHalf >> 63) & 0x01))];

            result[25] = alphabet[(Int32)((lowerHalf << 2) & 0x1C)];

            return(TryResult <String> .CreateSuccess(new String(result)));
        }
Ejemplo n.º 2
0
        public void TestCtor()
        {
            try             // null alphabet
            {
                var x = new Base32Encoding(null);

                Assert.Fail(typeof(ArgumentNullException).ToString());
            }
            catch (ArgumentNullException)
            {
            }

            try             // bad length alphabet
            {
                var x = new Base32Encoding("1245645");

                Assert.Fail(typeof(ArgumentException).ToString());
            }
            catch (ArgumentException)
            {
            }

            try             // look-up table null
            {
                var x = new Base32Encoding(Base32Encoding.Hex.Alphabet, (Byte[])null);

                Assert.Fail(typeof(ArgumentNullException).ToString());
            }
            catch (ArgumentNullException)
            {
            }

            try             // look-up table bad length
            {
                var x = new Base32Encoding(Base32Encoding.Hex.Alphabet, new Byte[20]);

                Assert.Fail(typeof(ArgumentNullException).ToString());
            }
            catch (ArgumentException)
            {
            }
        }
Ejemplo n.º 3
0
        static Base32Encoding()
        {
            Crockford = new Base32Encoding(crockfordAlphabet, crockfordLookupTable);

            Hex = new Base32Encoding(hexAlphabet);
        }
Ejemplo n.º 4
0
        public static TryResult <Value128> TryFromBase32String(String data, Int32 offset, Base32Encoding base32Encoding)
        {
            // Check input values
            if ((data == null) || (offset > data.Length - base32EncodedSymbolsCount) || (base32Encoding == null))
            {
                return(convertFailResult);
            }

            // Get look-up table
            var lookupTable = base32Encoding.LookupTable;

            var lastIndex = offset + 12;

            var symbol12 = (UInt64)lookupTable[data[lastIndex] & 0x7F];

            var symbol25 = (UInt64)lookupTable[data[offset + 25] & 0x7F];

            // Check symbol
            if ((symbol12 | symbol25) == 0xFF)
            {
                return(convertFailResult);
            }

            // Calculate higher half
            var higherHalf = symbol12 >> 1;

            // Calculate lower half
            var lowerHalf = symbol12 << 63 | symbol25 >> 2;

            // Decode symbols
            for (Int32 indexH = offset, indexL = offset + 13, shiftH = 59, shiftL = 58; indexH < lastIndex; indexH++, indexL++, shiftH -= 5, shiftL -= 5)
            {
                // Get symbols
                var symbolH = data[indexH] & 0x7F;

                var symbolL = data[indexL] & 0x7F;

                // Get symbols values
                var symbolHValue = (UInt64)lookupTable[symbolH];

                var symbolLValue = (UInt64)lookupTable[symbolL];

                // Check symbol
                if ((symbolHValue | symbolLValue) == 0xFF)
                {
                    return(convertFailResult);
                }

                higherHalf |= symbolHValue << shiftH;

                lowerHalf |= symbolLValue << shiftL;
            }

            // Initialize a new instance
            var result = new Value128(higherHalf, lowerHalf);

            return(TryResult <Value128> .CreateSuccess(result));
        }