5 #ifndef CRYPTOPP_IMPORTS
11 #if defined(CRYPTOPP_MEMALIGN_AVAILABLE) || defined(CRYPTOPP_MM_MALLOC_AVAILABLE) || defined(QNX)
15 NAMESPACE_BEGIN(CryptoPP)
17 void xorbuf(byte *buf, const byte *mask,
size_t count)
21 if (IsAligned<word32>(buf) && IsAligned<word32>(mask))
23 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(buf) && IsAligned<word64>(mask))
25 for (i=0; i<count/8; i++)
26 ((word64*)buf)[i] ^= ((word64*)mask)[i];
34 for (i=0; i<count/4; i++)
35 ((word32*)buf)[i] ^= ((word32*)mask)[i];
43 for (i=0; i<count; i++)
47 void xorbuf(byte *output,
const byte *input,
const byte *mask,
size_t count)
51 if (IsAligned<word32>(output) && IsAligned<word32>(input) && IsAligned<word32>(mask))
53 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(output) && IsAligned<word64>(input) && IsAligned<word64>(mask))
55 for (i=0; i<count/8; i++)
56 ((word64*)output)[i] = ((word64*)input)[i] ^ ((word64*)mask)[i];
65 for (i=0; i<count/4; i++)
66 ((word32*)output)[i] = ((word32*)input)[i] ^ ((word32*)mask)[i];
75 for (i=0; i<count; i++)
76 output[i] = input[i] ^ mask[i];
79 bool VerifyBufsEqual(
const byte *buf,
const byte *mask,
size_t count)
84 if (IsAligned<word32>(buf) && IsAligned<word32>(mask))
87 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(buf) && IsAligned<word64>(mask))
90 for (i=0; i<count/8; i++)
91 acc64 |= ((word64*)buf)[i] ^ ((word64*)mask)[i];
97 acc32 = word32(acc64) | word32(acc64>>32);
100 for (i=0; i<count/4; i++)
101 acc32 |= ((word32*)buf)[i] ^ ((word32*)mask)[i];
107 acc8 = byte(acc32) | byte(acc32>>8) | byte(acc32>>16) | byte(acc32>>24);
110 for (i=0; i<count; i++)
111 acc8 |= buf[i] ^ mask[i];
115 #if !(defined(_MSC_VER) && (_MSC_VER < 1300))
116 using std::new_handler;
117 using std::set_new_handler;
120 void CallNewHandler()
122 new_handler newHandler = set_new_handler(NULL);
124 set_new_handler(newHandler);
129 throw std::bad_alloc();
132 #if CRYPTOPP_BOOL_ALIGN16_ENABLED
134 void * AlignedAllocate(
size_t size)
137 #ifdef CRYPTOPP_MM_MALLOC_AVAILABLE
138 while (!(p = (byte *)_mm_malloc(size, 16)))
139 #elif defined(CRYPTOPP_MEMALIGN_AVAILABLE)
140 while (!(p = (byte *)memalign(16, size)))
141 #elif defined(CRYPTOPP_MALLOC_ALIGNMENT_IS_16)
142 while (!(p = (byte *)malloc(size)))
144 while (!(p = (byte *)malloc(size + 16)))
148 #ifdef CRYPTOPP_NO_ALIGNED_ALLOC
149 size_t adjustment = 16-((size_t)p%16);
151 p[-1] = (byte)adjustment;
154 assert(IsAlignedOn(p, 16));
158 void AlignedDeallocate(
void *p)
160 #ifdef CRYPTOPP_MM_MALLOC_AVAILABLE
162 #elif defined(CRYPTOPP_NO_ALIGNED_ALLOC)
163 p = (byte *)p - ((byte *)p)[-1];
172 void * UnalignedAllocate(
size_t size)
175 while (!(p = malloc(size)))
180 void UnalignedDeallocate(
void *p)