]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/sha2_internal.cc
test framework: Correctly generate new paths in noopchroot
[apt.git] / apt-pkg / contrib / sha2_internal.cc
index 83b5a98d3952391fbba89fcaa8cb9420d1cc05c8..f70b7b17d49f514c7bf0e9dc3e444dd9095f9db6 100644 (file)
@@ -33,6 +33,7 @@
  */
 #include <config.h>
 
+#include <endian.h>
 #include <string.h>    /* memcpy()/memset() or bcopy()/bzero() */
 #include <assert.h>    /* assert() */
 #include "sha2_internal.h"
@@ -65,7 +66,7 @@
  * Please make sure that your system defines BYTE_ORDER.  If your
  * architecture is little-endian, make sure it also defines
  * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
- * equivilent.
+ * equivalent.
  *
  * If your system does not define the above, then you can do so by
  * hand like this:
@@ -128,6 +129,14 @@ typedef u_int64_t sha2_word64;     /* Exactly 8 bytes */
 
 /*** ENDIAN REVERSAL MACROS *******************************************/
 #if BYTE_ORDER == LITTLE_ENDIAN
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+#define REVERSE32(w,x) { \
+       (x) = __builtin_bswap32(w); \
+}
+#define REVERSE64(w,x) { \
+       (x) = __builtin_bswap64(w); \
+}
+#else
 #define REVERSE32(w,x) { \
        sha2_word32 tmp = (w); \
        tmp = (tmp >> 16) | (tmp << 16); \
@@ -141,6 +150,7 @@ typedef u_int64_t sha2_word64;      /* Exactly 8 bytes */
        (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
              ((tmp & 0x0000ffff0000ffffULL) << 16); \
 }
+#endif
 #endif /* BYTE_ORDER == LITTLE_ENDIAN */
 
 /*
@@ -632,7 +642,7 @@ void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
        }
 
        /* Clean up state data: */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
        usedspace = 0;
 }
 
@@ -653,7 +663,7 @@ char *SHA256_End(SHA256_CTX* context, char buffer[]) {
                }
                *buffer = (char)0;
        } else {
-               MEMSET_BZERO(context, sizeof(context));
+               MEMSET_BZERO(context, sizeof(*context));
        }
        MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH);
        return buffer;
@@ -969,7 +979,7 @@ void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
        }
 
        /* Zero out state data */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA512_End(SHA512_CTX* context, char buffer[]) {
@@ -989,7 +999,7 @@ char *SHA512_End(SHA512_CTX* context, char buffer[]) {
                }
                *buffer = (char)0;
        } else {
-               MEMSET_BZERO(context, sizeof(context));
+               MEMSET_BZERO(context, sizeof(*context));
        }
        MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
        return buffer;
@@ -1044,7 +1054,7 @@ void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
        }
 
        /* Zero out state data */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA384_End(SHA384_CTX* context, char buffer[]) {
@@ -1064,7 +1074,7 @@ char *SHA384_End(SHA384_CTX* context, char buffer[]) {
                }
                *buffer = (char)0;
        } else {
-               MEMSET_BZERO(context, sizeof(context));
+               MEMSET_BZERO(context, sizeof(*context));
        }
        MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
        return buffer;