chiark / gitweb /
base/keysz.[ch]: Add a flag to say that arguments are 16 bits wide.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 10 May 2017 20:46:39 +0000 (21:46 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 14 May 2017 13:58:41 +0000 (14:58 +0100)
This breaks programs which thing they can parse arbitrary key-size
descriptors.  The obvious such thing is the Python interface, so note
that we need a later version.

base/keysz.c
base/keysz.h
debian/control

index 8291928180dcc41475de82f152003bdb6359f01a..48c965e3c7f848b19bfd7e1f967dfd7140193f07 100644 (file)
 
 size_t keysz(size_t sz, const octet *ksz)
 {
+  unsigned op = ksz[0]&KSZ_OPMASK;
+  unsigned wd = (ksz[0]&KSZ_16BIT) ? 2 : 1;
+  unsigned t, u, v;
+
+  ksz++;
+#define ARG(i) (wd == 1 ? ksz[i] : LOAD16(2*i))
   if (sz == 0)
-    return (ksz[1]);
-  else switch (ksz[0]) {
-    case KSZ_ANY:
-      return (sz);
+    return (ARG(0));
+  else switch (op) {
+    case KSZ_ANY: return (sz);
     case KSZ_RANGE:
-      if (ksz[4])
-       sz -= sz % ksz[4];
-      if (sz < ksz[2])
-       return (0);
-      if (ksz[3] && sz > ksz[3])
-       return (ksz[3]);
+      t = ARG(1); u = ARG(2); v = ARG(3);
+      if (v) sz -= sz%v;
+      if (sz < t) return (0);
+      if (u && sz > u) return (u);
       return (sz);
-    case KSZ_SET: {
-      unsigned q = 0;
-      for (ksz++; *ksz; ksz++) {
-       if (sz >= *ksz && q < *ksz)
-         q = *ksz;
+    case KSZ_SET:
+      u = 0;
+      for (;;) {
+       t = ARG(0); ksz += wd; if (!t) break;
+       if (sz >= t && u < t) u = t;
       }
-      return (q);
-    }
+      return (u);
   }
+#undef ARG
 
   assert(((void)"bad key size table", 0));
   return (0);
index 97ed144eec12d2950489381791c0e36b34550372..b83203b9eb5fbec7b8562d39ba538e557f5dba64 100644 (file)
  *   * @KSZ_SET@ requires that %$k \in {\,a_i\,}$%.
  */
 
+#define KSZ_OPMASK 0x1f                        /* Kinds of keysize specs */
 enum {
   KSZ_ANY,                             /* Allows any key at all */
   KSZ_RANGE,                           /* Allows keys within a range */
-  KSZ_SET                              /* Allows specific sizes of keys */
+  KSZ_SET,                             /* Allows specific sizes of keys */
 };
 
+#define KSZ_16BIT 0x20                 /* Arguments are 16 bits long */
+
 /*----- Key sizes for symmetric algorithms --------------------------------*/
 
 /* --- @keysz@ --- *
index 38c9b048c8d37405c0f49a1d601ea5d7763cbc32..65cb6bdc4cda0433c5b703a2ecfa4c7b009ee2f7 100644 (file)
@@ -9,6 +9,7 @@ Package: catacomb2
 Architecture: any
 Depends: ${shlibs:Depends}
 Recommends: catacomb-bin
+Breaks: python-catacomb (<< 1.1.2)
 Description: A cryptographic library
  Catacomb is a cryptographic library.  It implements a large number of
  encryption algorithms, hash functions, message authentication codes