Exemplo n.º 1
0
static bool hmac_sha512(const char *key, size_t keylen, const char *msg, size_t msglen, char *out) {
	char tmp[2 * mdlen];
	sha512_context md;

	if(keylen <= mdlen) {
		memcpy(tmp, key, keylen);
		memset(tmp + keylen, 0, mdlen - keylen);
	} else {
		if(sha512(key, keylen, tmp) != 0)
			return false;
	}

	if(sha512_init(&md) != 0)
		return false;

	// ipad
	memxor(tmp, 0x36, mdlen);
	if(sha512_update(&md, tmp, mdlen) != 0)
		return false;

	// message
	if(sha512_update(&md, msg, msglen) != 0)
		return false;

	if(sha512_final(&md, tmp + mdlen) != 0)
		return false;

	// opad
	memxor(tmp, 0x36 ^ 0x5c, mdlen);
	if(sha512(tmp, sizeof tmp, out) != 0)
		return false;

	return true;
}
Exemplo n.º 2
0
bool nnobRevealOblivBit(ProtocolDesc* pd, NnobProtocolDesc* npd, bool* output, 
		OblivBit* input)
{
	bool success = true;
	nnob_key_t inputMac;
	bool inputBit;
	if(pd->thisParty==1)
	{
		osend(pd, 2, input->nnob.shareAndMac.mac, NNOB_KEY_BYTES);
		osend(pd, 2, &input->nnob.shareAndMac.share, 1);

		orecv(pd, 2, inputMac, NNOB_KEY_BYTES);
		orecv(pd, 2, &inputBit, 1);
		if(inputBit) memxor(inputMac, npd->globalDelta, NNOB_KEY_BYTES);
		success&=memcmp(inputMac, input->nnob.key.key,NNOB_KEY_BYTES)==0?true:false;
	}
	else
	{
		orecv(pd, 1, inputMac, NNOB_KEY_BYTES);
		orecv(pd, 1, &inputBit, 1);
		if(inputBit) memxor(inputMac, npd->globalDelta, NNOB_KEY_BYTES);
		success&=memcmp(inputMac, input->nnob.key.key,NNOB_KEY_BYTES)==0?true:false;

		osend(pd, 1, input->nnob.shareAndMac.mac, NNOB_KEY_BYTES);
		osend(pd, 1, &input->nnob.shareAndMac.share, 1);
	}
	*output = inputBit^input->nnob.shareAndMac.share;
	assert(success);
	return success;
}
Exemplo n.º 3
0
void twister_small_nextBlock(twister_state_t* ctx, void* msg){
	uint8_t tmp[8][8];
	/* round 1 */
	memcpy(tmp, ctx->s, 64);
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	memxor(ctx->s, tmp, 64);

	/* round 2 */
	memcpy(tmp, ctx->s, 64);
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	memxor(ctx->s, tmp, 64);

	/* round 3 */
	memcpy(tmp, ctx->s, 64);
	twister_mini_round(ctx, msg);
	msg = ((uint8_t*)msg) + 8;
	twister_mini_round(ctx, msg);
	twister_blank_round(ctx);
	memxor(ctx->s, tmp, 64);
	ctx->length_counter_b += 512;
}
Exemplo n.º 4
0
END_TEST

START_TEST(test_memxor_aligned)
{
	uint64_t a = 0, b = 0;
	chunk_t ca, cb;
	int i;

	ca = chunk_from_thing(a);
	cb = chunk_from_thing(b);

	for (i = 0; i < 8; i++)
	{
		cb.ptr[i] = i + 1;
	}

	/* 64-bit aligned */
	memxor(ca.ptr, cb.ptr, 8);
	ck_assert(a == b);
	/* 32-bit aligned source */
	a = 0;
	memxor(ca.ptr, cb.ptr + 4, 4);
	ck_assert(chunk_equals(ca, chunk_from_chars(0x05, 0x06, 0x07, 0x08,
												0x00, 0x00, 0x00, 0x00)));
	/* 16-bit aligned source */
	a = 0;
	memxor(ca.ptr, cb.ptr + 2, 6);
	ck_assert(chunk_equals(ca, chunk_from_chars(0x03, 0x04, 0x05, 0x06,
												0x07, 0x08, 0x00, 0x00)));
	/* 8-bit aligned source */
	a = 0;
	memxor(ca.ptr, cb.ptr + 1, 7);
	ck_assert(chunk_equals(ca, chunk_from_chars(0x02, 0x03, 0x04, 0x05,
												0x06, 0x07, 0x08, 0x00)));
}
Exemplo n.º 5
0
/* If input is not a integral number of blocks, the final block is
   padded with zeros, no length field or anything like that. That's
   pretty broken, since it means that "$100" and "$100\0" always have
   the same checksum, but I think that's how it's supposed to work. */
uint32_t
des_cbc_cksum(const uint8_t *src, des_cblock *dst,
	      long length, des_key_schedule ctx,
	      const_des_cblock *iv)
{
  /* FIXME: I'm not entirely sure how this function is supposed to
   * work, in particular what it should return, and if iv can be
   * modified. */
  uint8_t block[DES_BLOCK_SIZE];

  memcpy(block, *iv, DES_BLOCK_SIZE);

  while (length >= DES_BLOCK_SIZE)
    {
      memxor(block, src, DES_BLOCK_SIZE);
      nettle_des_encrypt(ctx, DES_BLOCK_SIZE, block, block);

      src += DES_BLOCK_SIZE;
      length -= DES_BLOCK_SIZE;	  
    }
  if (length > 0)
    {
      memxor(block, src, length);
      nettle_des_encrypt(ctx, DES_BLOCK_SIZE, block, block);	  
    }
  memcpy(*dst, block, DES_BLOCK_SIZE);

  return LE_READ_UINT32(block + 4);
}
Exemplo n.º 6
0
void cscipher_enc(void* buffer, const cscipher_ctx_t* ctx){
	uint8_t i,j,k;
	uint8_t tmp[8];
	for(i=0; i<8; ++i){
#if DEBUG
		cli_putstr("\r\nDBG: round ");
		cli_hexdump(&i, 1);
		cli_putstr(" buffer:");
		cli_hexdump(buffer, 8);
#endif
		for(j=0; j<3; ++j){
			if(j==0){
				memxor(buffer, ctx->keys[i], 8);
			}else{
				memxor(buffer, round_const+((j==1)?0:8), 8);
			}
			for(k=0; k<4; ++k){
				((uint16_t*)tmp)[k] = m(((uint16_t*)buffer)[k]);
			}
			for(k=0; k<4; ++k){
				((uint8_t*)buffer)[k]   = tmp[2*k];
				((uint8_t*)buffer)[k+4] = tmp[2*k+1];
			}
		}
	}
	memxor(buffer, ctx->keys[8], 8);
}
Exemplo n.º 7
0
static int
wrap_padlock_hmac_fast (gnutls_mac_algorithm_t algo,
                        const void *key, size_t key_size, const void *text,
                        size_t text_size, void *digest)
{
    if (algo == GNUTLS_MAC_SHA1 || algo == GNUTLS_MAC_SHA256)
      {
          unsigned char *pad;
          unsigned char pad2[SHA1_DATA_SIZE + MAX_SHA_DIGEST_SIZE];
          unsigned char hkey[MAX_SHA_DIGEST_SIZE];
          unsigned int digest_size = _gnutls_hmac_get_algo_len (algo);

          if (key_size > SHA1_DATA_SIZE)
            {
                wrap_padlock_hash_fast (algo, key, key_size, hkey);
                key = hkey;
                key_size = digest_size;
            }

          pad = gnutls_malloc (text_size + SHA1_DATA_SIZE);
          if (pad == NULL)
              return gnutls_assert_val (GNUTLS_E_MEMORY_ERROR);

          memset (pad, IPAD, SHA1_DATA_SIZE);
          memxor (pad, key, key_size);

          memcpy (&pad[SHA1_DATA_SIZE], text, text_size);

          wrap_padlock_hash_fast (algo, pad, text_size + SHA1_DATA_SIZE,
                                  &pad2[SHA1_DATA_SIZE]);

          gnutls_free (pad);

          memset (pad2, OPAD, SHA1_DATA_SIZE);
          memxor (pad2, key, key_size);

          wrap_padlock_hash_fast (algo, pad2, digest_size + SHA1_DATA_SIZE,
                                  digest);

      }
    else
      {
          struct padlock_hmac_ctx ctx;
          int ret;

          ret = _hmac_ctx_init (algo, &ctx);
          if (ret < 0)
              return gnutls_assert_val (ret);
          ctx.algo = algo;

          wrap_padlock_hmac_setkey (&ctx, key, key_size);

          wrap_padlock_hmac_update (&ctx, text, text_size);

          wrap_padlock_hmac_output (&ctx, digest, ctx.length);
      }

    return 0;
}
Exemplo n.º 8
0
/*
 Ripara un singolo settore:
 in		file guasto
 sec		file contenente il blocco di sicurezza
 nsec		numero di settori componenti il blocco di sicurezza
 sector	settore guasto
 force		se rigenerare anche un settore recuperabile solo in parte
*/
int repair_sector(FILE* in, FILE* sec, ULONG nsec, ULONG sector, char force)
{
 int err = EFIO_ALL_OK;
 char xorblock[SECTOR];
 ULONG pos, i = sector%nsec; /* Posizione del settore guasto relativa al blocco di appartenenza */
 USHORT crc, crc2;
 long size, start=sector*SECTOR;

 pos = ftell(in);
 size = filesize(in);

 memset(xorblock,0,SECTOR);
 /* Prepara la lettura del primo settore */
 fseek(in,(long)i*SECTOR,SEEK_SET);

 for (;;)
 {
  char buf[SECTOR];
  size_t read;
/* Ignora il settore da riparare */
  if ( ftell(in) == start )
  {
   fseek(in,(long)nsec*SECTOR,SEEK_CUR);
   fseek(sec,(long)nsec*sizeof(USHORT),SEEK_CUR);
   continue;
  }
/* Aggiunge il corrispondente settore dal blocco di sicurezza */
/* dopo aver elaborato i settori sani */
  if (size <= ftell(in))
  {
   fseek(sec,0,SEEK_END);
   fseek(sec,(long)-(nsec-i)*SECTOR,SEEK_CUR);
   read = fread(buf,1,SECTOR,sec);
   memxor(xorblock,buf,read);
   break;
  }
  read = fread(buf,1,SECTOR,in);
  if (ferror(in)) return EFIO_READ_SECTOR;
  memxor(xorblock,buf,read);
  fseek(in,(long)(nsec-1)*SECTOR,SEEK_CUR);
 }
 /* Determina se la riparazione è possibile, confrontando i CRC del settore originale e di quello rigenerato */
 crc = crc16_for_block(0,xorblock,(start+SECTOR > size)? size-start : SECTOR);
 fseek(sec,(long)sizeof(HEADER)+sector*sizeof(USHORT),SEEK_SET);
 fread(&crc2,sizeof(USHORT),1,sec);
 if (crc!=crc2) err = EFIO_CANT_REPAIR;
 if (err==EFIO_CANT_REPAIR && !force) goto fine;
 if (err==EFIO_CANT_REPAIR && force) err=EFIO_FORCED_REPAIR;
 fseek(in,start,SEEK_SET);
 /* Se il settore finale è incompleto (piuttosto comune!), scrive solo la parte mancante */
 fwrite(xorblock,(start+SECTOR > size)? size-start : SECTOR,1,in);
 if (ferror(in)) return EFIO_WRITE_SECTOR;
 /* Riporta il puntatore dove repair_file l'aveva lasciato... */
fine:
 fseek(in,pos,SEEK_SET);
 return err;
}
Exemplo n.º 9
0
void bcal_eax_ctx2tag(void *dest, uint16_t length_b, bcal_eax_ctx_t *ctx){
	uint8_t tmp[ctx->blocksize_B];
	if(ctx->header_set==0){
		bcal_cmac_lastBlock(&(ctx->htag), NULL, 0);
	}

	bcal_cmac_ctx2mac(tmp, ctx->blocksize_B*8, &(ctx->htag));
	memxor(ctx->nonce, tmp, ctx->blocksize_B);

	bcal_cmac_ctx2mac(tmp, ctx->blocksize_B*8, &(ctx->ctag));
	memxor(ctx->nonce, tmp, ctx->blocksize_B);
	memcpy(dest, ctx->nonce, (length_b+7)/8);
}
Exemplo n.º 10
0
void bcal_cmac_lastBlock(bcal_cmac_ctx_t* ctx, const void* block, uint16_t length_b){
	uint16_t blocksize_b;
	blocksize_b = ctx->blocksize_B*8;
	while(length_b>=blocksize_b){
		bcal_cmac_nextBlock(ctx, block);
		block = (uint8_t*)block + ctx->blocksize_B;
		length_b -= blocksize_b;
	}
	if(ctx->last_set==0){
		memxor(ctx->accu, block, (length_b+7)/8);
		memxor(ctx->accu, ctx->k2, ctx->blocksize_B);
		ctx->accu[length_b/8] ^= 0x80>>(length_b&7);
	}else{
Exemplo n.º 11
0
int
hmac_sha256 (const void *key, size_t keylen,
             const void *in, size_t inlen, void *resbuf)
{
  struct sha256_ctx inner;
  struct sha256_ctx outer;
  char optkeybuf[32];
  char block[64];
  char innerhash[32];

  /* Reduce the key's size, so that it becomes <= 64 bytes large.  */

  if (keylen > 64)
    {
      struct sha256_ctx keyhash;

      sha256_init_ctx (&keyhash);
      sha256_process_bytes (key, keylen, &keyhash);
      sha256_finish_ctx (&keyhash, optkeybuf);

      key = optkeybuf;
      keylen = 32;
    }

  /* Compute INNERHASH from KEY and IN.  */

  sha256_init_ctx (&inner);

  memset (block, IPAD, sizeof (block));
  memxor (block, key, keylen);

  sha256_process_block (block, 64, &inner);
  sha256_process_bytes (in, inlen, &inner);

  sha256_finish_ctx (&inner, innerhash);

  /* Compute result from KEY and INNERHASH.  */

  sha256_init_ctx (&outer);

  memset (block, OPAD, sizeof (block));
  memxor (block, key, keylen);

  sha256_process_block (block, 64, &outer);
  sha256_process_bytes (innerhash, 32, &outer);

  sha256_finish_ctx (&outer, resbuf);

  return 0;
}
void present_generic_enc(void* buffer, uint8_t* ctx, uint8_t ksize_B,
	void(*update)(uint8_t*, uint8_t)){
	uint8_t i,j,tmp[8], k[ksize_B];
	memcpy(k, ctx, ksize_B);
	memxor(buffer, k, 8);
	for(i=1; i<32; ++i){
		j = 7;
		do{
			tmp[j] = present_sbox(((uint8_t*)buffer)[j]);
		}while(j--);
		present_p(buffer, tmp);
		update(k, i);
		memxor(buffer, k, 8);
	}
}
Exemplo n.º 13
0
void bcal_cbc_decNext(void *block, bcal_cbc_ctx_t *ctx){
	uint8_t tmp[ctx->blocksize_B];
	memcpy(tmp, block, ctx->blocksize_B);
	bcal_cipher_dec(block, &(ctx->cctx));
	memxor(block, ctx->prev_block, ctx->blocksize_B);
	memcpy(ctx->prev_block, tmp, ctx->blocksize_B);
}
Exemplo n.º 14
0
int
drbg_aes_reseed(struct drbg_aes_ctx *ctx,
		unsigned entropy_size, const uint8_t * entropy,
		unsigned add_size, const uint8_t * add)
{
	uint8_t tmp[DRBG_AES_SEED_SIZE];
	unsigned len = 0;

	if (add_size > DRBG_AES_SEED_SIZE || entropy_size != DRBG_AES_SEED_SIZE)
		return 0;

	if (add_size <= DRBG_AES_SEED_SIZE && add_size > 0) {
		memcpy(tmp, add, add_size);
		len = add_size;
	}

	if (len != DRBG_AES_SEED_SIZE)
		memset(&tmp[len], 0, DRBG_AES_SEED_SIZE - len);

	memxor(tmp, entropy, entropy_size);

	drbg_aes_update(ctx, tmp);

	return 1;
}
Exemplo n.º 15
0
void raptor_decoder::at_Desymbol_process(elim_stack *_mtr_op, long long _mtr_op_size, byte **cdc, byte **erc1, int _SYMBOL_SIZE, int _M, int _N, byte **_intermid_index)
{
	for (int i=0,p=0; i<_M; ++i)
	{
		(i<_M-_N) ?	memset((byte*)(cdc[i]), 0, _SYMBOL_SIZE*sizeof(byte)) : memcpy( (byte*)(cdc[i]), (byte*)(erc1[p++]), _SYMBOL_SIZE*sizeof(byte) );
		_intermid_index[i]=(byte*)(cdc[i]);
	}
	for(int i=0;i<_mtr_op_size;++i)
	{	
		byte *tempo = NULL;
		short int opr0=_mtr_op[i].opr;
		short int opr1=_mtr_op[i].addr1;
		short int opr2=_mtr_op[i].addr2;
		
		if(opr0==eliml)
		{
			memxor((byte*)(_intermid_index[opr2]),(byte*)(_intermid_index[opr1]),_SYMBOL_SIZE);
		}
		if(_mtr_op[i].opr==chpos)
		{
			tempo = (byte*)(_intermid_index[opr2]);
			_intermid_index[opr2] = (byte*)(_intermid_index[opr1]);
			_intermid_index[opr1] = (byte*)(tempo);
		}
	}
	return ;
}
Exemplo n.º 16
0
void cscipher_init(const void* key, cscipher_ctx_t* ctx){
	uint8_t tmp_key[16], tmp[8];
	uint8_t i,j,k,t=0;
	memcpy(tmp_key, key, 16);
	for(i=0; i<9; ++i){
#if DEBUG
		cli_putstr("\r\nDBG: round ");
		cli_hexdump(&i, 1);
		cli_putstr(" key state:");
		cli_hexdump(tmp_key, 16);
#endif
		memcpy(tmp, tmp_key+(((i&1)==0)?0:8), 8);
		memxor(tmp, ks_const+8*i, 8);
		for(j=0; j<8; ++j){
			tmp[j] = P(tmp[j]);
		}
		for(j=0; j<8; ++j){
			for(k=0; k<8; ++k){
				t<<=1;
				t |= tmp[k]>>7;
				tmp[k]<<=1;
			}
			tmp_key[j+(((i&1)==0)?8:0)] ^= t;
		}
		memcpy(ctx->keys[i], tmp_key+(((i&1)==0)?8:0), 8);
	}
}
Exemplo n.º 17
0
void cubehash_nextBlock(cubehash_ctx_t *ctx, void *block){
	uint8_t i;
	memxor(ctx->a, block, ctx->blocksize_B);
	for(i=0; i<ctx->rounds; ++i){
		cubehash_round(ctx);
	}
}
Exemplo n.º 18
0
void bcal_ctr_encNext(void* block, bcal_ctr_ctx_t* ctx){
	uint8_t tmp[ctx->blocksize_B];
	memcpy(tmp, ctx->in_block, ctx->blocksize_B);
	bcal_cipher_enc(tmp, &(ctx->cctx));
	memxor(block, tmp, ctx->blocksize_B);
	ctx->inc_func(ctx->in_block, ctx->blocksize_B);
}
Exemplo n.º 19
0
static void
prf_iterate(u_int8_t *r, const u_int8_t *P, size_t Plen,
	    const u_int8_t *S, size_t Slen, size_t c, size_t ind)
{
	int		 first_time = 1;
	size_t		 i;
	size_t		 datalen;
	ssize_t		 tmplen;
	u_int8_t	*data;
	u_int8_t	 tmp[128];

	data = emalloc(Slen + 4);
	(void)memcpy(data, S, Slen);
	be32enc(data + Slen, ind);
	datalen = Slen + 4;

	for (i=0; i < c; i++) {
		tmplen = hmac("sha1", P, Plen, data, datalen, tmp, sizeof(tmp));

		assert(tmplen == PRF_BLOCKLEN);

		if (first_time) {
			(void)memcpy(r, tmp, PRF_BLOCKLEN);
			first_time = 0;
		} else
			memxor(r, tmp, PRF_BLOCKLEN);
		(void)memcpy(data, tmp, PRF_BLOCKLEN);
		datalen = PRF_BLOCKLEN;
	}
	free(data);
}
Exemplo n.º 20
0
static void
prf_iterate(u_int8_t *r, const u_int8_t *P, size_t Plen,
	    const u_int8_t *S, size_t Slen, size_t c, size_t ind)
{
	int		 first_time = 1;
	size_t		 i;
	size_t		 datalen;
	unsigned int	 tmplen;
	u_int8_t	*data;
	u_int8_t	 tmp[EVP_MAX_MD_SIZE];

	data = emalloc(Slen + 4);
	(void)memcpy(data, S, Slen);
	be32enc(data + Slen, ind);
	datalen = Slen + 4;

	for (i=0; i < c; i++) {
		(void)HMAC(EVP_sha1(), P, Plen, data, datalen, tmp, &tmplen);

		assert(tmplen == PRF_BLOCKLEN);

		if (first_time) {
			(void)memcpy(r, tmp, PRF_BLOCKLEN);
			first_time = 0;
		} else 
			memxor(r, tmp, PRF_BLOCKLEN);
		(void)memcpy(data, tmp, PRF_BLOCKLEN);
		datalen = PRF_BLOCKLEN;
	}
	free(data);
}
Exemplo n.º 21
0
static void
test_memxor (const uint8_t *a, const uint8_t *b, const uint8_t *c,
	     size_t size, unsigned align_dst, unsigned align_src)
{
  uint8_t dst_buf[MAX_SIZE + ALIGN_SIZE + 1];
  uint8_t src_buf[MAX_SIZE + ALIGN_SIZE + 1];

  uint8_t *dst = set_align (dst_buf, align_dst);
  uint8_t *src = set_align (src_buf, align_src);

  if (verbose)
    fprintf(stderr, "size = %d, align_dst = %d, align_src = %d\n",
	      (int) size, align_dst, align_src);

  memcpy (dst, a, size);
  dst[-1] = 17;
  dst[size] = 17;

  memcpy (src, b, size);
  memxor (dst, src, size);

  ASSERT (MEMEQ (size, dst, c));
  ASSERT (dst[-1] == 17);
  ASSERT (dst[size] == 17);
}
Exemplo n.º 22
0
void debugPrintXor(const char* a, const char* b, int len)
{
	char* out = malloc(len);
	memcpy(out, a, len);
	memxor(out, b, len);
	debugPrintHex(out,len);
	free(out);
}
Exemplo n.º 23
0
void raptor_decoder::GEcalculate(long long **AA, int _K, int _L, int _N, int _M, int _SYMBOL_SIZE, int r, byte** _intermid_index)
{//GEcalculate(Aw, erc1, _SYMBOL_SIZE, r);Aw:matrix build before: (_N+S+H) * _L, erc1: _N * _SYMBOL_SIZE
	const int lenth_row_L=INT_CEIL64(_L);
	int P=0;
	long long *temp = new long long[lenth_row_L];
	byte *tempo = NULL;
	int base_zero_line=0;
	int i=0;
	for (int jj=0; jj<_L; jj++)
	{
		tempo=NULL;
		memset((long long*)temp,0,lenth_row_L*sizeof(long long));
		for(i=jj; (i<_M) && (!GET_MATRIX_ij(AA,i,jj)); ++i);
		if (i==_M){
			error = 4;
			continue;
		}//all is 0, non-mark matrix
		base_zero_line=i;
		for(i=0;i<base_zero_line;++i)
		{
			if( GET_MATRIX_ij(AA,i,jj) )
			{
				memxor((byte*)(_intermid_index[i]),(byte*)(_intermid_index[base_zero_line]),_SYMBOL_SIZE);
				memxor((long long *)(AA[i]),(long long*)(AA[base_zero_line]),lenth_row_L*sizeof(long long));
			}
		}
		for(++i;i<_M;++i)
		{
			if( GET_MATRIX_ij(AA,i,jj) )
			{
				memxor((byte*)(_intermid_index[i]),(byte*)(_intermid_index[base_zero_line]),_SYMBOL_SIZE);
				memxor((char *)(AA[i]),(char*)(AA[base_zero_line]),lenth_row_L*sizeof(long long));
			}
		}
		memcpy((long long*)temp,(long long *)(AA[jj]),lenth_row_L*sizeof(long long));
		memcpy((long long*)(AA[jj]),(long long*)(AA[base_zero_line]),lenth_row_L*sizeof(long long));
		memcpy((long long*)(AA[base_zero_line]),(long long*)temp,lenth_row_L*sizeof(long long));

		tempo = (byte*)(_intermid_index[jj]);
		_intermid_index[jj] = (byte*)(_intermid_index[base_zero_line]);
		_intermid_index[base_zero_line] = (byte*)(tempo);
	}
	SAFE_DELETE_ARR(temp);
	//discarded _M-_L rows to get the result
	return ;
}
Exemplo n.º 24
0
void bcal_cfb_B_encNext(void* block, bcal_cfb_B_ctx_t* ctx){
	uint8_t tmp[ctx->blocksize_B];
	memcpy(tmp, ctx->in_block, ctx->blocksize_B);
	bcal_cipher_enc(tmp, &(ctx->cctx));
	memxor(block, tmp, ctx->size_B);
	memmove(ctx->in_block, ctx->in_block+ctx->size_B, ctx->blocksize_B - ctx->size_B);
	memcpy(ctx->in_block+ctx->blocksize_B-ctx->size_B, block, ctx->size_B);
}
Exemplo n.º 25
0
void bcal_cmac_nextBlock (bcal_cmac_ctx_t* ctx, const void* block){
	if(ctx->last_set){
		memxor(ctx->accu, ctx->lastblock, ctx->blocksize_B);
		bcal_cipher_enc(ctx->accu, &(ctx->cctx));
	}
	memcpy(ctx->lastblock, block, ctx->blocksize_B);
	ctx->last_set=1;
}
Exemplo n.º 26
0
void groestl_small_nextBlock(groestl_small_ctx_t* ctx, const void* block){
	uint8_t tmp1[64], tmp2[64];
/*	for(i=0; i<8; ++i){
		for(j=0; j<8; ++j){
			tmp1[j*8+i] = ((uint8_t*)block)[i*8+j];
		}
	}
*/
	memcpy(tmp1, block, 64);
	memcpy(tmp2, tmp1, 64);
	memxor(tmp1, ctx->h, 64);
	groestl_small_rounds(tmp1, 0);
	groestl_small_rounds(tmp2, 1);
	memxor(ctx->h, tmp1, 64);
	memxor(ctx->h, tmp2, 64);
	ctx->counter++;
}
void present_generic_dec(void* buffer, uint8_t* ctx, uint8_t ksize_B,
	void(*update)(uint8_t*, uint8_t)){
	uint8_t j,tmp[8], k[ksize_B];
	uint8_t i;
	memcpy(k, ctx + ksize_B, ksize_B);
	memxor(buffer, k, 8);
	i = 31;
	do{
		present_p(tmp, buffer);
		present_p(buffer, tmp);
		j = 7;
		do{
			((uint8_t*)buffer)[j] = present_sbox_inv(((uint8_t*)buffer)[j]);
		}while(j--);
		update(k, i);
		memxor(buffer, k, 8);
	}while(--i);
}
Exemplo n.º 28
0
void ubi1024_nextBlock(ubi1024_ctx_t* ctx, const void* block){
	threefish1024_ctx_t tfctx;
	ctx->tweak.v64[0] += UBI1024_BLOCKSIZE_B;
	threefish1024_init(ctx->g, ctx->tweak.v8, &tfctx);
	memcpy(ctx->g, block, UBI1024_BLOCKSIZE_B);
	threefish1024_enc(ctx->g, &tfctx);
	memxor(ctx->g, block, UBI1024_BLOCKSIZE_B);
	ctx->tweak.v8[15] &= (uint8_t)~0x40;
} 
static
void blake_small_expand(uint32_t* v, const blake_small_ctx_t* ctx){
	uint8_t i;
	memcpy(v, ctx->h, 8*4);
	for(i=0; i<8; ++i){
		v[8+i] = pgm_read_dword(&(blake_c[i]));
	}
	memxor((uint8_t*)v+8, ctx->s, 4*4);

}
Exemplo n.º 30
0
static
void blake_large_expand(uint64_t *v, const blake_large_ctx_t *ctx){
	uint8_t i;
	memcpy(v, ctx->h, 8*8);
	for(i=0; i<8; ++i){
		v[8+i] = pgm_read_qword(&(blake_c[i]));
	}
	memxor((uint8_t*)v+8, ctx->s, 4*8);

}