6 #if CRYPTOPP_MSC_VERSION
7 # pragma warning(disable: 4189)
8 # if (CRYPTOPP_MSC_VERSION >= 1400)
9 # pragma warning(disable: 6237)
13 #ifndef CRYPTOPP_IMPORTS
22 #if defined(CRYPTOPP_MEMALIGN_AVAILABLE) || defined(CRYPTOPP_MM_MALLOC_AVAILABLE) || defined(QNX)
26 NAMESPACE_BEGIN(CryptoPP)
28 void
xorbuf(byte *buf, const byte *mask,
size_t count)
35 if (IsAligned<word32>(buf) && IsAligned<word32>(mask))
37 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(buf) && IsAligned<word64>(mask))
39 for (i=0; i<count/8; i++)
40 ((word64*)(
void*)buf)[i] ^= ((word64*)(
void*)mask)[i];
48 for (i=0; i<count/4; i++)
49 ((word32*)(
void*)buf)[i] ^= ((word32*)(
void*)mask)[i];
57 for (i=0; i<count; i++)
61 void xorbuf(byte *output,
const byte *input,
const byte *mask,
size_t count)
68 if (IsAligned<word32>(output) && IsAligned<word32>(input) && IsAligned<word32>(mask))
70 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(output) && IsAligned<word64>(input) && IsAligned<word64>(mask))
72 for (i=0; i<count/8; i++)
73 ((word64*)(
void*)output)[i] = ((word64*)(
void*)input)[i] ^ ((word64*)(
void*)mask)[i];
82 for (i=0; i<count/4; i++)
83 ((word32*)(
void*)output)[i] = ((word32*)(
void*)input)[i] ^ ((word32*)(
void*)mask)[i];
92 for (i=0; i<count; i++)
93 output[i] = input[i] ^ mask[i];
105 if (IsAligned<word32>(buf) && IsAligned<word32>(mask))
108 if (!CRYPTOPP_BOOL_SLOW_WORD64 && IsAligned<word64>(buf) && IsAligned<word64>(mask))
111 for (i=0; i<count/8; i++)
112 acc64 |= ((word64*)(
void*)buf)[i] ^ ((word64*)(
void*)mask)[i];
118 acc32 = word32(acc64) | word32(acc64>>32);
121 for (i=0; i<count/4; i++)
122 acc32 |= ((word32*)(
void*)buf)[i] ^ ((word32*)(
void*)mask)[i];
128 acc8 = byte(acc32) | byte(acc32>>8) | byte(acc32>>16) | byte(acc32>>24);
131 for (i=0; i<count; i++)
132 acc8 |= buf[i] ^ mask[i];
136 #ifndef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562
137 std::string StringNarrow(
const wchar_t *str,
bool throwOnError)
143 #if (CRYPTOPP_MSC_VERSION >= 1400)
144 size_t len=0, size=0;
151 err = wcstombs_s(&size, NULL, 0, str, len*
sizeof(
wchar_t));
153 if (err != 0) {
goto CONVERSION_ERROR;}
156 err = wcstombs_s(&size, &result[0], size, str, len*
sizeof(
wchar_t));
165 return std::string();
169 if (!result.empty() && result[size - 1] ==
'\0')
170 result.erase(size - 1);
172 size_t size = wcstombs(NULL, str, 0);
174 if (size == (
size_t)-1) {
goto CONVERSION_ERROR;}
177 size = wcstombs(&result[0], str, size);
180 if (size == (
size_t)-1)
186 return std::string();
192 #endif // StringNarrow and CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562
194 #if !(defined(_MSC_VER) && (_MSC_VER < 1300))
195 using std::new_handler;
196 using std::set_new_handler;
201 new_handler newHandler = set_new_handler(NULL);
203 set_new_handler(newHandler);
208 throw std::bad_alloc();
211 #if CRYPTOPP_BOOL_ALIGN16
216 #if defined(CRYPTOPP_APPLE_ALLOC_AVAILABLE)
217 while ((p = (byte *)calloc(1, size)) == NULL)
218 #elif defined(CRYPTOPP_MM_MALLOC_AVAILABLE)
219 while ((p = (byte *)_mm_malloc(size, 16)) == NULL)
220 #elif defined(CRYPTOPP_MEMALIGN_AVAILABLE)
221 while ((p = (byte *)memalign(16, size)) == NULL)
222 #elif defined(CRYPTOPP_MALLOC_ALIGNMENT_IS_16)
223 while ((p = (byte *)malloc(size)) == NULL)
225 while ((p = (byte *)malloc(size + 16)) == NULL)
229 #ifdef CRYPTOPP_NO_ALIGNED_ALLOC
230 size_t adjustment = 16-((size_t)p%16);
232 p[-1] = (byte)adjustment;
241 #ifdef CRYPTOPP_MM_MALLOC_AVAILABLE
243 #elif defined(CRYPTOPP_NO_ALIGNED_ALLOC)
244 p = (byte *)p - ((byte *)p)[-1];
256 while ((p = malloc(size)) == NULL)
An invalid argument was detected.
Utility functions for the Crypto++ library.
void AlignedDeallocate(void *ptr)
Frees a buffer allocated with AlignedAllocate.
Library configuration file.
bool IsAlignedOn(const void *ptr, unsigned int alignment)
Determines whether ptr is aligned to a minimum value.
void * UnalignedAllocate(size_t size)
Allocates a buffer.
void CallNewHandler()
Attempts to reclaim unused memory.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
void xorbuf(byte *buf, const byte *mask, size_t count)
Performs an XOR of a buffer with a mask.
std::string IntToString(T value, unsigned int base=10)
Converts a value to a string.
bool VerifyBufsEqual(const byte *buf1, const byte *buf2, size_t count)
Performs a near constant-time comparison of two equally sized buffers.
Multiple precision integer with arithmetic operations.
void UnalignedDeallocate(void *ptr)
Frees a buffer allocated with UnalignedAllocate.
void * AlignedAllocate(size_t size)
Allocates a buffer on 16-byte boundary.