1414 */
1515public class Multibase {
1616
17- public static final Multibase BASE_2 = new Multibase ('0' , 2 ,
17+ public static final Multibase BASE_2 = new Multibase ("base2" , '0' , 2 ,
1818 Base2 ::decode ,
1919 Base2 ::encode );
2020
21- public static final Multibase BASE_16 = new Multibase ('f' , 16 ,
21+ public static final Multibase BASE_16 = new Multibase ("base16" , 'f' , 16 ,
2222 Base16 ::decode ,
2323 d -> Base16 .encode (d , Base16 .ALPHABET_LOWER ));
2424
25- public static final Multibase BASE_16_UPPER = new Multibase ('F' , 16 ,
25+ public static final Multibase BASE_16_UPPER = new Multibase ("base16upper" , 'F' , 16 ,
2626 Base16 ::decode ,
2727 d -> Base16 .encode (d , Base16 .ALPHABET_UPPER ));
2828
29- public static final Multibase BASE_32_HEX = new Multibase ('v' , 32 ,
29+ public static final Multibase BASE_32_HEX = new Multibase ("base32hex" , 'v' , 32 ,
3030 e -> Base32 .decode (e , Base32 ::charToCodeHex , false ),
3131 d -> Base32 .encode (d , Base32 .ALPHABET_HEX_LOWER , false ));
3232
33- public static final Multibase BASE_32_HEX_UPPER = new Multibase ('V' , 32 ,
33+ public static final Multibase BASE_32_HEX_UPPER = new Multibase ("base32hexupper" , 'V' , 32 ,
3434 e -> Base32 .decode (e , Base32 ::charToCodeHex , false ),
3535 d -> Base32 .encode (d , Base32 .ALPHABET_HEX_UPPER , false ));
3636
37- public static final Multibase BASE_32_HEX_PAD = new Multibase ('t' , 32 ,
37+ public static final Multibase BASE_32_HEX_PAD = new Multibase ("base32hexpad" , 't' , 32 ,
3838 e -> Base32 .decode (e , Base32 ::charToCodeHex , true ),
3939 d -> Base32 .encode (d , Base32 .ALPHABET_LOWER , true ));
4040
41- public static final Multibase BASE_32_HEX_PAD_UPPER = new Multibase ('T' , 32 ,
41+ public static final Multibase BASE_32_HEX_PAD_UPPER = new Multibase ("base32hexpadupper" , 'T' , 32 ,
4242 e -> Base32 .decode (e , Base32 ::charToCodeHex , true ),
4343 d -> Base32 .encode (d , Base32 .ALPHABET_UPPER , true ));
4444
45- public static final Multibase BASE_32 = new Multibase ('b' , 32 ,
45+ public static final Multibase BASE_32 = new Multibase ("base32" , 'b' , 32 ,
4646 e -> Base32 .decode (e , Base32 ::charToCode , false ),
4747 d -> Base32 .encode (d , Base32 .ALPHABET_LOWER , false ));
4848
49- public static final Multibase BASE_32_UPPER = new Multibase ('B' , 32 ,
49+ public static final Multibase BASE_32_UPPER = new Multibase ("base32upper" , 'B' , 32 ,
5050 e -> Base32 .decode (e , Base32 ::charToCode , false ),
5151 d -> Base32 .encode (d , Base32 .ALPHABET_UPPER , false ));
5252
53- public static final Multibase BASE_32_PAD = new Multibase ('c' , 32 ,
53+ public static final Multibase BASE_32_PAD = new Multibase ("base32pad" , 'c' , 32 ,
5454 e -> Base32 .decode (e , Base32 ::charToCode , true ),
5555 d -> Base32 .encode (d , Base32 .ALPHABET_LOWER , true ));
5656
57- public static final Multibase BASE_32_PAD_UPPER = new Multibase ('C' , 32 ,
57+ public static final Multibase BASE_32_PAD_UPPER = new Multibase ("base32padupper" , 'C' , 32 ,
5858 e -> Base32 .decode (e , Base32 ::charToCode , true ),
5959 d -> Base32 .encode (d , Base32 .ALPHABET_UPPER , true ));
6060
61- public static final Multibase BASE_64 = new Multibase ('m' , 64 ,
61+ public static final Multibase BASE_64 = new Multibase ("base64" , 'm' , 64 ,
6262 Base64 .getDecoder ()::decode ,
6363 Base64 .getEncoder ().withoutPadding ()::encodeToString );
6464
65- public static final Multibase BASE_64_PAD = new Multibase ('M' , 64 ,
65+ public static final Multibase BASE_64_PAD = new Multibase ("base32pad" , 'M' , 64 ,
6666 Base64 .getMimeDecoder ()::decode ,
6767 Base64 .getMimeEncoder ()::encodeToString );
6868
69- public static final Multibase BASE_64_URL = new Multibase ('u' , 64 ,
69+ public static final Multibase BASE_64_URL = new Multibase ("base32url" , 'u' , 64 ,
7070 Base64 .getUrlDecoder ()::decode ,
7171 Base64 .getUrlEncoder ().withoutPadding ()::encodeToString );
7272
73- public static final Multibase BASE_64_URL_PAD = new Multibase ('U' , 64 ,
73+ public static final Multibase BASE_64_URL_PAD = new Multibase ("base32urlpad" , 'U' , 64 ,
7474 Base64 .getUrlDecoder ()::decode ,
7575 Base64 .getUrlEncoder ()::encodeToString );
7676
77- public static final Multibase BASE_58_BTC = new Multibase ('z' , 58 ,
77+ public static final Multibase BASE_58_BTC = new Multibase ("base58btc" , 'z' , 58 ,
7878 Base58 ::decode ,
7979 Base58 ::encode );
8080
81+ protected final String name ;
82+
8183 protected final char prefix ;
8284 protected final int length ;
8385
8486 protected final Function <String , byte []> decode ;
8587 protected final Function <byte [], String > encode ;
8688
8789 public Multibase (
90+ String name ,
8891 char prefix ,
8992 int length ,
9093 Function <String , byte []> decode ,
@@ -93,8 +96,29 @@ public Multibase(
9396 this .length = length ;
9497 this .decode = decode ;
9598 this .encode = encode ;
99+ this .name = name ;
96100 }
97101
102+ public Multibase (
103+ char prefix ,
104+ int length ,
105+ Function <String , byte []> decode ,
106+ Function <byte [], String > encode ) {
107+ this .prefix = prefix ;
108+ this .length = length ;
109+ this .decode = decode ;
110+ this .encode = encode ;
111+ this .name = "" + prefix ;
112+ }
113+
114+ /**
115+ * A unique codec name, all lower case, only <code>ALPHA+ALPHANUM*</code>
116+ * @return
117+ */
118+ public String name () {
119+ return name ;
120+ }
121+
98122 /**
99123 * A unique prefix identifying base encoding in encoded value.
100124 *
0 commit comments