diff --git a/ChangeLog b/ChangeLog
index 64d7a732efd8e4d9971e7ac7ef6db865ae8e3e52..64781e5de71647b11344139ef725c1ea26958f6f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2014-04-30  Niels Möller  <nisse@lysator.liu.se>
+
+	* ccm.c (CCM_IV_MAX_SIZE, CCM_IV_MIN_SIZE): Deleted, replaced by
+	public constants CCM_MIN_NONCE_SIZE and CCM_MAX_NONCE_SIZE.
+	(ccm_build_iv): Updated for above rename.
+	(CCM_L_MAX_SIZE): Deleted, no longer used.
+
+	* ccm.h (CCM_MIN_NONCE_SIZE, CCM_MAX_NONCE_SIZE): New constants.
+	(CCM_MAX_MSG_SIZE): New macro.
+
 2014-04-27  Niels Möller  <nisse@lysator.liu.se>
 
 	* nettle.texinfo (Cipher modes): Subsection on AEAD constructions.
diff --git a/ccm.c b/ccm.c
index 00f3f26e4ad51c38305382eff4e5257acbd06380..5ca6e054570bf0085197b217a2f96fc99ff43bfe 100644
--- a/ccm.c
+++ b/ccm.c
@@ -68,9 +68,6 @@
 #define CCM_OFFSET_FLAGS    0
 #define CCM_OFFSET_NONCE    1
 #define CCM_L_SIZE(_nlen_)  (CCM_BLOCK_SIZE - CCM_OFFSET_NONCE - (_nlen_))
-#define CCM_L_MAX_SIZE      (CCM_FLAG_L+1)
-#define CCM_IV_MAX_SIZE     (CCM_BLOCK_SIZE - CCM_OFFSET_NONCE - 1)
-#define CCM_IV_MIN_SIZE     (CCM_BLOCK_SIZE - CCM_OFFSET_NONCE - CCM_L_MAX_SIZE)
 
 /*
  * The data input to the CBC-MAC: L(a) | adata | padding | plaintext | padding
@@ -104,8 +101,8 @@ ccm_build_iv(uint8_t *iv, size_t noncelen, const uint8_t *nonce,
   unsigned int i;
 
   /* Sanity check the nonce length. */
-  assert(noncelen >= CCM_IV_MIN_SIZE);
-  assert(noncelen <= CCM_IV_MAX_SIZE);
+  assert(noncelen >= CCM_MIN_NONCE_SIZE);
+  assert(noncelen <= CCM_MAX_NONCE_SIZE);
 
   /* Generate the IV */
   iv[CCM_OFFSET_FLAGS] = flags | CCM_FLAG_SET_L(CCM_L_SIZE(noncelen));
diff --git a/ccm.h b/ccm.h
index 9827e45db9dfc7d9dab11cd9112a1bfe3f080be7..271638b66cac4cf106c925a20055c894ec877bb0 100644
--- a/ccm.h
+++ b/ccm.h
@@ -89,6 +89,16 @@ extern "C" {
 
 /* For CCM, the block size of the block cipher shall be 128 bits. */
 #define CCM_BLOCK_SIZE  16
+#define CCM_MIN_NONCE_SIZE 7
+#define CCM_MAX_NONCE_SIZE 14
+
+/* Maximum cleartext message size, as a function of the nonce size N.
+   The length field is L octets, with L = 15 - N, and then the maximum
+   size M = 2^{8L} - 1. */
+#define CCM_MAX_MSG_SIZE(N)			\
+  ((sizeof(size_t) + (N) <= 15)			\
+   ? ~(size_t) 0				\
+   : ((size_t) 1 << (8*(15 - N))) - 1)
 
 /* Per-message state */
 struct ccm_ctx {