int func(void * arg)
{
    (void)arg;
    for (int i = 0; i < 1000000; i++) 
        increase_counter();
    return 0;
}
Beispiel #2
0
__inline static
#else
inline static
#endif
void xor_stuff( CTR_BUFFER *buf, void* akey, void (*func)(void*,void*), byte* plain,  int blocksize, int xor_size) 
{
	void (*_mcrypt_block_encrypt) (void *, void *);

	_mcrypt_block_encrypt = func;

	if (xor_size == blocksize) {
		if (buf->c_counter_pos == 0) {

			memcpy( buf->enc_counter, buf->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, buf->enc_counter);

			memxor( plain, buf->enc_counter, blocksize);

			increase_counter( buf->c_counter, blocksize);


		} else {
			int size = blocksize - buf->c_counter_pos;

			memxor( plain, &buf->enc_counter[buf->c_counter_pos],
				size);
		
			increase_counter( buf->c_counter, blocksize);

			memcpy( buf->enc_counter, buf->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, buf->enc_counter);

			memxor( &plain[size], buf->enc_counter,
				buf->c_counter_pos);

			/* buf->c_counter_pos remains the same */

		}
	} else { /* xor_size != blocksize */
		if (buf->c_counter_pos == 0) {
			memcpy( buf->enc_counter, buf->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, buf->enc_counter);

			memxor( plain, buf->enc_counter, xor_size);
			buf->c_counter_pos = xor_size;
		} else {
			int size = blocksize - buf->c_counter_pos;
			int min_size =  size < xor_size ? size: xor_size;

			memxor( plain, &buf->enc_counter[buf->c_counter_pos],
				min_size); 

			buf->c_counter_pos += min_size;

			if (min_size >= xor_size)
				return;

			increase_counter( buf->c_counter, blocksize);

			memcpy( buf->enc_counter, buf->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, buf->enc_counter);

			memxor( &plain[min_size], buf->enc_counter,
				xor_size - min_size);

			buf->c_counter_pos = xor_size - min_size;

		}
	
	}
	return;
}
Beispiel #3
0
Datei: ctr.c Projekt: erelh/gpac
static GFINLINE
void xor_stuff( CTR_BUFFER *buf, void* akey, void (*func)(void*,void*), u8* plain,  int blocksize, int xor_size)
{
	void (*_mcrypt_block_encrypt) (void *, void *);

	_mcrypt_block_encrypt = func;

	if (xor_size == blocksize) {
		if (((CTR_BUFFER* )buf)->c_counter_pos == 0) {

			memcpy( ((CTR_BUFFER* )buf)->enc_counter, ((CTR_BUFFER* )buf)->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, ((CTR_BUFFER* )buf)->enc_counter);

			memxor( plain, ((CTR_BUFFER* )buf)->enc_counter, blocksize);

			increase_counter( ((CTR_BUFFER* )buf)->c_counter, blocksize);


		} else {
			int size = blocksize - ((CTR_BUFFER* )buf)->c_counter_pos;

			memxor( plain, &((CTR_BUFFER* )buf)->enc_counter[((CTR_BUFFER* )buf)->c_counter_pos],
				size);

			increase_counter( ((CTR_BUFFER* )buf)->c_counter, blocksize);

			memcpy( ((CTR_BUFFER* )buf)->enc_counter, ((CTR_BUFFER* )buf)->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, ((CTR_BUFFER* )buf)->enc_counter);

			memxor( &plain[size], ((CTR_BUFFER* )buf)->enc_counter,
				((CTR_BUFFER* )buf)->c_counter_pos);

			/* ((CTR_BUFFER* )buf)->c_counter_pos remains the same */

		}
	} else { /* xor_size != blocksize */
		if (((CTR_BUFFER* )buf)->c_counter_pos == 0) {
			memcpy( ((CTR_BUFFER* )buf)->enc_counter, ((CTR_BUFFER* )buf)->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, ((CTR_BUFFER* )buf)->enc_counter);

			memxor( plain, ((CTR_BUFFER* )buf)->enc_counter, xor_size);
			((CTR_BUFFER* )buf)->c_counter_pos = xor_size;
		} else {
			int size = blocksize - ((CTR_BUFFER* )buf)->c_counter_pos;
			int min_size =  size < xor_size ? size: xor_size;

			memxor( plain, &((CTR_BUFFER* )buf)->enc_counter[((CTR_BUFFER* )buf)->c_counter_pos],
				min_size);

			((CTR_BUFFER* )buf)->c_counter_pos += min_size;

			if (min_size >= xor_size)
				return;

			increase_counter( ((CTR_BUFFER* )buf)->c_counter, blocksize);

			memcpy( ((CTR_BUFFER* )buf)->enc_counter, ((CTR_BUFFER* )buf)->c_counter, blocksize);
			_mcrypt_block_encrypt(akey, ((CTR_BUFFER* )buf)->enc_counter);

			memxor( &plain[min_size], ((CTR_BUFFER* )buf)->enc_counter,
				xor_size - min_size);

			((CTR_BUFFER* )buf)->c_counter_pos = xor_size - min_size;

		}

	}
	return;
}