using System.Text; namespace StellaOps.Graph.Indexer.Schema; /// /// Base32 encoder using the Crockford alphabet (0-9A-HJKMNPQRSTVWXYZ). /// internal static class Base32Crockford { private const string Alphabet = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; public static string Encode(ReadOnlySpan data) { if (data.IsEmpty) { return string.Empty; } var output = new StringBuilder((data.Length * 8 + 4) / 5); var buffer = 0; var bitsLeft = 0; foreach (var b in data) { buffer = (buffer << 8) | b; bitsLeft += 8; while (bitsLeft >= 5) { bitsLeft -= 5; var index = (buffer >> bitsLeft) & 0x1F; output.Append(Alphabet[index]); } } if (bitsLeft > 0) { var index = (buffer << (5 - bitsLeft)) & 0x1F; output.Append(Alphabet[index]); } return output.ToString(); } }