/// <summary>
        ///		Converte a Base32 string to byte array.
        /// </summary>
        /// <param name="base32">
        ///		Base32 formated string.
        /// </param>
        /// <param name="format">
        ///		Specify the Base32 encoding format.
        /// </param>
        /// <returns>
        ///		byte array with value of Base32 encoding.
        /// </returns>
        public static byte[] Decode(string base32, Base32Format format = Base32Format.RFC4648)
        {
            if (base32.Length == 0)
            {
                return(new byte[0]);
            }
            var mapping = Base32Mapping.GetMapping(format);

            base32 = RemovePadding(base32, mapping.PaddingChar);

            byte[] result   = new byte[base32.Length * 5 / 8];
            int    buffer   = 0;
            int    next     = 0;
            int    bitsLeft = 0;

            foreach (var c in base32.ToCharArray())
            {
                if (!mapping.CharValues.ContainsKey(c))
                {
                    throw new Base32DecodingException($"Character was illigal: {c}");
                }
                buffer  <<= 5;
                buffer   |= mapping.CharValues[c] & 31;
                bitsLeft += 5;
                if (bitsLeft >= 8)
                {
                    result[next++] = (byte)(buffer >> (bitsLeft - 8));
                    bitsLeft      -= 8;
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static byte[] Decode(this Base32Mapping mapping, string data)
        {
            IMapping map         = mappings[mapping];
            int      dataIndex   = 0;
            int      bufferIndex = 0;
            int      buffer      = 0;
            int      mask        = 0b11111111;

            if (map.Padding != null)
            {
                data = data.Replace(map.Padding, "");
            }
            MemoryStream result = new MemoryStream();

            while (dataIndex < data.Length)
            {
                for (int i = 0; i < 5 && dataIndex < data.Length; i++)
                {
                    buffer       = buffer << 5;
                    buffer      += map[data.Substring(dataIndex++, 1)];
                    bufferIndex += 5;
                }

                while (bufferIndex >= 8)
                {
                    int offset = bufferIndex - 8;
                    result.WriteByte((byte)((buffer & (mask << offset)) >> offset));
                    buffer       = buffer & (~(mask << offset));
                    bufferIndex -= 8;
                }
            }
            return(result.ToArray());
        }
Ejemplo n.º 3
0
        public static string Encode(this Base32Mapping mapping, byte[] data)
        {
            IMapping map         = mappings[mapping];
            int      dataIndex   = 0;
            int      bufferIndex = 0;
            int      buffer      = 0;
            int      mask        = 0b11111;
            string   result      = "";

            while (dataIndex < data.Length)
            {
                for (int i = 0; i < 3 && dataIndex < data.Length; i++)
                {
                    buffer       = buffer << 8;
                    buffer      += data[dataIndex++];
                    bufferIndex += 8;
                }

                while (bufferIndex >= 5)
                {
                    int offset = bufferIndex - 5;
                    result      += map[(buffer & (mask << offset)) >> offset];
                    buffer       = buffer & (~(mask << offset));
                    bufferIndex -= 5;
                }
            }
            if (bufferIndex != 0)
            {
                int d = 5 - bufferIndex;
                result += map[(buffer << d) & mask];
            }
            if (map.Padding != null)
            {
                while (result.Length % map.Quantum != 0)
                {
                    result += map.Padding;
                }
            }
            return(result);
        }
Ejemplo n.º 4
0
 public static byte[] Base32Decode(this string data, Base32Mapping mapping = Base32Mapping.NS6316)
 {
     return(mapping.Decode(data));
 }
Ejemplo n.º 5
0
 public static string Base32Encode(this byte[] data, Base32Mapping mapping = Base32Mapping.NS6316)
 {
     return(mapping.Encode(data));
 }