taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

CrockfordBase32.java (1134B)


      1 package net.taler.donauverificator.network;
      2 
      3 /**
      4  * Minimal encoder for the Crockford Base32 alphabet as specified for Donau.
      5  * Padding is omitted because the Donau specification does not require it.
      6  */
      7 public final class CrockfordBase32 {
      8 
      9     private static final char[] ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
     10 
     11     private CrockfordBase32() {
     12     }
     13 
     14     public static String encode(byte[] data) {
     15         if (data == null || data.length == 0) {
     16             return "";
     17         }
     18         StringBuilder encoded = new StringBuilder((data.length * 8 + 4) / 5);
     19         int buffer = 0;
     20         int bitsLeft = 0;
     21         for (byte value : data) {
     22             buffer = (buffer << 8) | (value & 0xFF);
     23             bitsLeft += 8;
     24             while (bitsLeft >= 5) {
     25                 int index = (buffer >> (bitsLeft - 5)) & 0x1F;
     26                 bitsLeft -= 5;
     27                 encoded.append(ALPHABET[index]);
     28             }
     29         }
     30         if (bitsLeft > 0) {
     31             int index = (buffer << (5 - bitsLeft)) & 0x1F;
     32             encoded.append(ALPHABET[index]);
     33         }
     34         return encoded.toString();
     35     }
     36 }