]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Add a return value to mac_t.get_bytes()
authorMartin Willi <martin@revosec.ch>
Fri, 6 Jul 2012 12:34:11 +0000 (14:34 +0200)
committerMartin Willi <martin@revosec.ch>
Mon, 16 Jul 2012 12:53:37 +0000 (14:53 +0200)
src/libstrongswan/crypto/mac.h
src/libstrongswan/crypto/prfs/mac_prf.c
src/libstrongswan/crypto/signers/mac_signer.c
src/libstrongswan/plugins/cmac/cmac.c
src/libstrongswan/plugins/hmac/hmac.c
src/libstrongswan/plugins/openssl/openssl_hmac.c
src/libstrongswan/plugins/xcbc/xcbc.c

index 10f09a83156f5dab44e69f2b1bbb0735793ad296..10e789c2278517de2bd15fc7e1247dddf22ee66e 100644 (file)
@@ -44,8 +44,10 @@ struct mac_t {
         *
         * @param data          chunk of data to authenticate
         * @param out           pointer where the generated bytes will be written
+        * @return                      TRUE if mac generated successfully
         */
-       void (*get_mac)(mac_t *this, chunk_t data, u_int8_t *out);
+       __attribute__((warn_unused_result))
+       bool (*get_mac)(mac_t *this, chunk_t data, u_int8_t *out);
 
        /**
         * Get the size of the resulting MAC.
index 7d3a97677975784a507693cbe53e551bca072317..600dbd155c4da334c9bfe1f3e66579fe61e5a6b0 100644 (file)
@@ -38,23 +38,18 @@ struct private_prf_t {
 METHOD(prf_t, get_bytes, bool,
        private_prf_t *this, chunk_t seed, u_int8_t *buffer)
 {
-       this->mac->get_mac(this->mac, seed, buffer);
-       return TRUE;
+       return this->mac->get_mac(this->mac, seed, buffer);
 }
 
 METHOD(prf_t, allocate_bytes, bool,
        private_prf_t *this, chunk_t seed, chunk_t *chunk)
 {
-       if (!chunk)
-       {
-               this->mac->get_mac(this->mac, seed, NULL);
-       }
-       else
+       if (chunk)
        {
                *chunk = chunk_alloc(this->mac->get_mac_size(this->mac));
-               this->mac->get_mac(this->mac, seed, chunk->ptr);
+               return this->mac->get_mac(this->mac, seed, chunk->ptr);
        }
-       return TRUE;
+       return this->mac->get_mac(this->mac, seed, NULL);
 }
 
 METHOD(prf_t, get_block_size, size_t,
index 36415e9d5b63aed86eca1dc68d67e253e357c3b9..8798bde5583c8b56dd63aa163d796d1e6e01cf8f 100644 (file)
@@ -43,37 +43,36 @@ struct private_signer_t {
 METHOD(signer_t, get_signature, bool,
        private_signer_t *this, chunk_t data, u_int8_t *buffer)
 {
-       if (buffer == NULL)
-       {
-               this->mac->get_mac(this->mac, data, NULL);
-       }
-       else
+       if (buffer)
        {
                u_int8_t mac[this->mac->get_mac_size(this->mac)];
 
-               this->mac->get_mac(this->mac, data, mac);
+               if (!this->mac->get_mac(this->mac, data, mac))
+               {
+                       return FALSE;
+               }
                memcpy(buffer, mac, this->truncation);
+               return TRUE;
        }
-       return TRUE;
+       return this->mac->get_mac(this->mac, data, NULL);
 }
 
 METHOD(signer_t, allocate_signature, bool,
        private_signer_t *this, chunk_t data, chunk_t *chunk)
 {
-       if (chunk == NULL)
-       {
-               this->mac->get_mac(this->mac, data, NULL);
-       }
-       else
+       if (chunk)
        {
                u_int8_t mac[this->mac->get_mac_size(this->mac)];
 
-               this->mac->get_mac(this->mac, data, mac);
-
+               if (!this->mac->get_mac(this->mac, data, mac))
+               {
+                       return FALSE;
+               }
                *chunk = chunk_alloc(this->truncation);
                memcpy(chunk->ptr, mac, this->truncation);
+               return TRUE;
        }
-       return TRUE;
+       return this->mac->get_mac(this->mac, data, NULL);
 }
 
 METHOD(signer_t, verify_signature, bool,
@@ -85,8 +84,8 @@ METHOD(signer_t, verify_signature, bool,
        {
                return FALSE;
        }
-       this->mac->get_mac(this->mac, data, mac);
-       return memeq(signature.ptr, mac, this->truncation);
+       return this->mac->get_mac(this->mac, data, mac) &&
+                  memeq(signature.ptr, mac, this->truncation);
 }
 
 METHOD(signer_t, get_key_size, size_t,
index 8d689f49fd20bb051e5f17210a276bfff353db0d..b36d4138709b9d7471eb61b6a3d6c9c49d2f6358 100644 (file)
@@ -165,7 +165,7 @@ static void final(private_mac_t *this, u_int8_t *out)
        this->remaining_bytes = 0;
 }
 
-METHOD(mac_t, get_mac, void,
+METHOD(mac_t, get_mac, bool,
        private_mac_t *this, chunk_t data, u_int8_t *out)
 {
        /* update T, do not process last block */
@@ -175,6 +175,7 @@ METHOD(mac_t, get_mac, void,
        {       /* if not in append mode, process last block and output result */
                final(this, out);
        }
+       return TRUE;
 }
 
 METHOD(mac_t, get_mac_size, size_t,
index ecfb01913fe1049a7307a5e51af2ce6ab317700a..85ad31776e4a69a1ca2f74f2e626febe0ab2e3a7 100644 (file)
@@ -56,7 +56,7 @@ struct private_mac_t {
        chunk_t ipaded_key;
 };
 
-METHOD(mac_t, get_mac, void,
+METHOD(mac_t, get_mac, bool,
        private_mac_t *this, chunk_t data, u_int8_t *out)
 {
        /* H(K XOR opad, H(K XOR ipad, text))
@@ -90,6 +90,7 @@ METHOD(mac_t, get_mac, void,
                /* reinit for next call */
                this->h->get_hash(this->h, this->ipaded_key, NULL);
        }
+       return TRUE;
 }
 
 METHOD(mac_t, get_mac_size, size_t,
index caf0d3aa2f681f9cf2b0fcbe12756c629bcab450..21b1cd88b6ca89702c186f9f775e68e08c8712a5 100644 (file)
@@ -75,24 +75,22 @@ struct private_mac_t {
 /**
  * Resets HMAC context
  */
-static void reset(private_mac_t *this)
+static bool reset(private_mac_t *this)
 {
-       HMAC_Init_ex(&this->hmac, this->key.ptr, this->key.len, this->hasher, NULL);
+       return HMAC_Init_ex(&this->hmac, this->key.ptr, this->key.len,
+                                               this->hasher, NULL);
 }
 
-METHOD(mac_t, get_mac, void,
+METHOD(mac_t, get_mac, bool,
        private_mac_t *this, chunk_t data, u_int8_t *out)
 {
        if (out == NULL)
        {
-               HMAC_Update(&this->hmac, data.ptr, data.len);
-       }
-       else
-       {
-               HMAC_Update(&this->hmac, data.ptr, data.len);
-               HMAC_Final(&this->hmac, out, NULL);
-               reset(this);
+               return HMAC_Update(&this->hmac, data.ptr, data.len);
        }
+       return HMAC_Update(&this->hmac, data.ptr, data.len) &&
+                  HMAC_Final(&this->hmac, out, NULL) &&
+                  reset(this);
 }
 
 METHOD(mac_t, get_mac_size, size_t,
index 59655cb1f994a606a41e71b56e3264d66bd2e5cd..776f15109f01d51d85e77eb06e2e9863a918bc69 100644 (file)
@@ -179,7 +179,7 @@ static void final(private_mac_t *this, u_int8_t *out)
        this->zero = TRUE;
 }
 
-METHOD(mac_t, get_mac, void,
+METHOD(mac_t, get_mac, bool,
        private_mac_t *this, chunk_t data, u_int8_t *out)
 {
        /* update E, do not process last block */
@@ -189,6 +189,7 @@ METHOD(mac_t, get_mac, void,
        {       /* if not in append mode, process last block and output result */
                final(this, out);
        }
+       return TRUE;
 }
 
 METHOD(mac_t, get_mac_size, size_t,
@@ -350,4 +351,4 @@ signer_t *xcbc_signer_create(integrity_algorithm_t algo)
                return mac_signer_create(xcbc, trunc);
        }
        return NULL;
-}
\ No newline at end of file
+}