symm/* (aead): Implement the `szok' methods.
[catacomb] / symm / ccm-def.h
index 7002aba..7c6bd2e 100644 (file)
@@ -715,13 +715,23 @@ static gaead_key *gckey(const void *k, size_t ksz)                        \
   return (&key->k);                                                    \
 }                                                                      \
                                                                        \
+static int gcszok(size_t nsz, size_t hsz, size_t msz, size_t tsz)      \
+{                                                                      \
+  ccm_params p;                                                                \
+                                                                       \
+  if (!gaead_szokcommon(&pre##_ccm, nsz, hsz, msz, tsz)) return (0);   \
+  p.hsz = hsz; p.msz = msz; p.bsz = PRE##_BLKSZ; p.nsz = nsz; p.tsz = tsz; \
+  if (!ccm_check(&p)) return (0);                                      \
+  return (1);                                                          \
+}                                                                      \
+                                                                       \
 const gcaead pre##_ccm = {                                             \
   name "-ccm",                                                         \
   pre##_keysz, pre##_ccmnoncesz, pre##_ccmtagsz,                       \
   PRE##_BLKSZ, 0, 0,                                                   \
   AEADF_PCHSZ | AEADF_PCMSZ | AEADF_PCTSZ |                            \
   AEADF_AADNDEP | AEADF_AADFIRST,                                      \
-  gckey                                                                        \
+  gckey, gcszok                                                                \
 };                                                                     \
                                                                        \
 CCM_TESTX(PRE, pre, name, fname)