Add zb32_index function.
authorWerner Koch <wk@gnupg.org>
Fri, 23 May 2014 17:19:11 +0000 (19:19 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 23 May 2014 17:19:11 +0000 (19:19 +0200)
* src/util.c (zb32_index): New.
(zb32_encode): Factor table out to
(zb32asc): .. static global.

src/util.c
src/util.h

index a516031..1bc1358 100644 (file)
@@ -348,6 +348,32 @@ keyvalue_get_int (keyvalue_t list, const char *key)
   return atoi (s);
 }
 
+\f
+/* Mapping table for zb32.  */
+static char const zb32asc[32] = {'y','b','n','d','r','f','g','8',
+                                 'e','j','k','m','c','p','q','x',
+                                 'o','t','1','u','w','i','s','z',
+                                 'a','3','4','5','h','7','6','9' };
+
+/* If C is a valid ZB32 character return its index (0..31).  If it is
+   not valid return -1.  */
+int
+zb32_index (int c)
+{
+  const char *p;
+
+  p = memchr (zb32asc, c, 32);
+  if (p)
+    return p - zb32asc;
+  if (c >= 'A' && c <= 'Z')
+    {
+      p = memchr (zb32asc, c - 'A' + 'a', 32);
+      if (p)
+        return p - zb32asc;
+    }
+  return -1;
+}
+
 
 /* Zooko's base32 variant. See RFC-6189 and
    http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
@@ -357,10 +383,6 @@ keyvalue_get_int (keyvalue_t list, const char *key)
 char *
 zb32_encode (const void *data, unsigned int databits)
 {
-  static char const zb32asc[32] = {'y','b','n','d','r','f','g','8',
-                                   'e','j','k','m','c','p','q','x',
-                                   'o','t','1','u','w','i','s','z',
-                                   'a','3','4','5','h','7','6','9' };
   const unsigned char *s;
   char *output, *d;
   size_t datalen;
index fd9104e..175d07b 100644 (file)
@@ -126,6 +126,7 @@ const char *keyvalue_get (keyvalue_t list, const char *key);
 const char *keyvalue_get_string (keyvalue_t list, const char *key);
 int         keyvalue_get_int (keyvalue_t list, const char *key);
 
+int zb32_index (int c);
 char *zb32_encode (const void *data, unsigned int databits);