コード例 #1
0
ファイル: morus1280128v1opt64.c プロジェクト: Vieteg/EACirc
void morus_stateupdate(const uint64_t* msgblk, uint64_t state[][4])   // call it as fun(state)
{
        uint64_t temp,temp1;

        state[0][0] ^= state[3][0]; state[0][1] ^= state[3][1]; state[0][2] ^= state[3][2]; state[0][3] ^= state[3][3];
        temp = state[3][3];    state[3][3] = state[3][2];  state[3][2] = state[3][1];  state[3][1] = state[3][0];  state[3][0] = temp;        
        state[0][0] ^= state[1][0] & state[2][0]; state[0][1] ^= state[1][1] & state[2][1]; state[0][2] ^= state[1][2] & state[2][2]; state[0][3] ^= state[1][3] & state[2][3];
        state[0][0] = rotl(state[0][0],n1);  state[0][1] = rotl(state[0][1],n1);       state[0][2] = rotl(state[0][2],n1);       state[0][3] = rotl(state[0][3],n1);
        
        state[1][0] ^= msgblk[0];   state[1][1] ^= msgblk[1];   state[1][2] ^= msgblk[2];   state[1][3] ^= msgblk[3];
        state[1][0] ^= state[4][0]; state[1][1] ^= state[4][1]; state[1][2] ^= state[4][2]; state[1][3] ^= state[4][3];
        temp = state[4][3];    state[4][3] = state[4][1];  state[4][1] = temp;
        temp1= state[4][2];    state[4][2] = state[4][0];  state[4][0] = temp1;
        state[1][0] ^= (state[2][0] & state[3][0]); state[1][1] ^= (state[2][1] & state[3][1]); state[1][2] ^= (state[2][2] & state[3][2]); state[1][3] ^= (state[2][3] & state[3][3]);
        state[1][0] = rotl(state[1][0],n2);  state[1][1] = rotl(state[1][1],n2);       state[1][2] = rotl(state[1][2],n2);       state[1][3] = rotl(state[1][3],n2);

        state[2][0] ^= msgblk[0];   state[2][1] ^= msgblk[1];   state[2][2] ^= msgblk[2];   state[2][3] ^= msgblk[3];
        state[2][0] ^= state[0][0]; state[2][1] ^= state[0][1]; state[2][2] ^= state[0][2]; state[2][3] ^= state[0][3];
        temp = state[0][0];    state[0][0] = state[0][1];  state[0][1] = state[0][2];  state[0][2] = state[0][3];  state[0][3] = temp;
        state[2][0] ^= state[3][0] & state[4][0]; state[2][1] ^= state[3][1] & state[4][1]; state[2][2] ^= state[3][2] & state[4][2]; state[2][3] ^= state[3][3] & state[4][3];
        state[2][0] = rotl(state[2][0],n3);  state[2][1] = rotl(state[2][1],n3);       state[2][2] = rotl(state[2][2],n3);       state[2][3] = rotl(state[2][3],n3);

        state[3][0] ^= msgblk[0];   state[3][1] ^= msgblk[1];   state[3][2] ^= msgblk[2];   state[3][3] ^= msgblk[3];
        state[3][0] ^= state[1][0]; state[3][1] ^= state[1][1]; state[3][2] ^= state[1][2]; state[3][3] ^= state[1][3];
        temp = state[1][3];    state[1][3] = state[1][1];  state[1][1] = temp;
        temp1= state[1][2];    state[1][2] = state[1][0];  state[1][0] = temp1;
        state[3][0] ^= state[4][0] & state[0][0]; state[3][1] ^= state[4][1] & state[0][1]; state[3][2] ^= state[4][2] & state[0][2]; state[3][3] ^= state[4][3] & state[0][3];
        state[3][0] = rotl(state[3][0],n4);  state[3][1] = rotl(state[3][1],n4);       state[3][2] = rotl(state[3][2],n4);       state[3][3] = rotl(state[3][3],n4);

        state[4][0] ^= msgblk[0];   state[4][1] ^= msgblk[1];   state[4][2] ^= msgblk[2];   state[4][3] ^= msgblk[3];
        state[4][0] ^= state[2][0]; state[4][1] ^= state[2][1]; state[4][2] ^= state[2][2]; state[4][3] ^= state[2][3];
        temp = state[2][3];    state[2][3] = state[2][2];  state[2][2] = state[2][1];  state[2][1] = state[2][0];  state[2][0] = temp;
        state[4][0] ^= state[0][0] & state[1][0]; state[4][1] ^= state[0][1] & state[1][1]; state[4][2] ^= state[0][2] & state[1][2]; state[4][3] ^= state[0][3] & state[1][3];
        state[4][0] = rotl(state[4][0],n5);  state[4][1] = rotl(state[4][1],n5);       state[4][2] = rotl(state[4][2],n5);       state[4][3] = rotl(state[4][3],n5);
}
コード例 #2
0
ファイル: sshdes.c プロジェクト: rdebath/sgt
void des_decipher(word32 *output, word32 L, word32 R, DESContext *sched) {
    word32 swap, s0246, s1357;

    IP(L, R);

    L = rotl(L, 1);
    R = rotl(R, 1);

    L ^= f(R, sched->k0246[15], sched->k1357[15]);
    R ^= f(L, sched->k0246[14], sched->k1357[14]);
    L ^= f(R, sched->k0246[13], sched->k1357[13]);
    R ^= f(L, sched->k0246[12], sched->k1357[12]);
    L ^= f(R, sched->k0246[11], sched->k1357[11]);
    R ^= f(L, sched->k0246[10], sched->k1357[10]);
    L ^= f(R, sched->k0246[ 9], sched->k1357[ 9]);
    R ^= f(L, sched->k0246[ 8], sched->k1357[ 8]);
    L ^= f(R, sched->k0246[ 7], sched->k1357[ 7]);
    R ^= f(L, sched->k0246[ 6], sched->k1357[ 6]);
    L ^= f(R, sched->k0246[ 5], sched->k1357[ 5]);
    R ^= f(L, sched->k0246[ 4], sched->k1357[ 4]);
    L ^= f(R, sched->k0246[ 3], sched->k1357[ 3]);
    R ^= f(L, sched->k0246[ 2], sched->k1357[ 2]);
    L ^= f(R, sched->k0246[ 1], sched->k1357[ 1]);
    R ^= f(L, sched->k0246[ 0], sched->k1357[ 0]);

    L = rotl(L, 31);
    R = rotl(R, 31);

    swap = L; L = R; R = swap;

    FP(L, R);

    output[0] = L;
    output[1] = R;
}
コード例 #3
0
void Encrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) {
		blk[3] = rotr((blk[2] ^ RK(rk, 3)) + (blk[3] ^ RK(rk, 1)), 3);
		blk[2] = rotr((blk[1] ^ RK(rk, 2)) + (blk[2] ^ RK(rk, 1)), 5);
		blk[1] = rotl((blk[0] ^ RK(rk, 0)) + (blk[1] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[0] = rotr((blk[3] ^ RK(rk, 3)) + (blk[0] ^ RK(rk, 1)), 3);
		blk[3] = rotr((blk[2] ^ RK(rk, 2)) + (blk[3] ^ RK(rk, 1)), 5);
		blk[2] = rotl((blk[1] ^ RK(rk, 0)) + (blk[2] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[1] = rotr((blk[0] ^ RK(rk, 3)) + (blk[1] ^ RK(rk, 1)), 3);
		blk[0] = rotr((blk[3] ^ RK(rk, 2)) + (blk[0] ^ RK(rk, 1)), 5);
		blk[3] = rotl((blk[2] ^ RK(rk, 0)) + (blk[3] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[2] = rotr((blk[1] ^ RK(rk, 3)) + (blk[2] ^ RK(rk, 1)), 3);
		blk[1] = rotr((blk[0] ^ RK(rk, 2)) + (blk[1] ^ RK(rk, 1)), 5);
		blk[0] = rotl((blk[3] ^ RK(rk, 0)) + (blk[0] ^ RK(rk, 1)), 9);
	}
}
コード例 #4
0
ファイル: sha3.c プロジェクト: martinthomson/sha3
int rnd(SHA3Context* ctx, int ir) {
  int x,y;

  // theta
  for (x = 0; x < 5; ++x) {
    ctx->C[x] = ctx->A[0][x] ^ ctx->A[1][x] ^ ctx->A[2][x] ^ ctx->A[3][x] ^ ctx->A[4][x];
  }

  // rho + pi
  for (x = 0; x < 5; ++x) {
    ctx->D[x] = ctx->C[mod5(x-1)] ^ rotl(ctx->C[mod5(x+1)], 1);

    for (y = 0; y < 5; ++y) {
      ctx->A[y][x] = rotl(ctx->A[y][x] ^ ctx->D[x], rho_offsets[y][x]);
      ctx->B[y][x] = ctx->A[x][pi_x[x][y]];
    }
  }

  // chi
  for (x = 0; x < 5; ++x) {
    for (y = 0; y < 5; ++y) {
      ctx->A[y][x] = ctx->B[y][x] ^ (ctx->B[y][mod5(x+1)] ^ ONE) & ctx->B[y][mod5(x+2)];
    }
  }

  // iota
  ctx->A[0][0] ^= RC[ir];

  return 1;
}
コード例 #5
0
ファイル: xs.c プロジェクト: npe9/harvey
void
rleft(void)
{
    if(canfit(rotl(piece))) {
        setpiece(rotl(piece));
        drawpiece();
        flushimage(display, 1);
    }
}
コード例 #6
0
ファイル: pisc.c プロジェクト: yogo1212/nahcf
static void unscramble_quadrupel(uint32_t *quad, uint32_t key)
{
	uint32_t tmp[4];
	memcpy(tmp, quad, 4 * WORD_SIZE);

	quad[1] = tmp[0] ^ (rotl(key + key_byte(key, 3), rot_amount_from_key(key, 0)));
	quad[2] = tmp[3] ^ (rotl(quad[1] + key_byte(key, 2), rot_amount_from_key(key, 1)));
	quad[3] = tmp[1] ^ (rotl(quad[2] + key_byte(key, 1), rot_amount_from_key(key, 3)));
	quad[0] = tmp[2] ^ (rotl(quad[3] + key_byte(key, 0), rot_amount_from_key(key, 2)));
}
コード例 #7
0
ファイル: util.c プロジェクト: Metabolix/HackBGRT
UINT64 Random(void) {
	// Implemented after xoroshiro128plus.c
	if (!Random_a && !Random_b) {
		RandomSeedAuto();
	}
	UINT64 a = Random_a, b = Random_b, r = a + b;
	b ^= a;
	Random_a = rotl(a, 55) ^ b ^ (b << 14);
	Random_b = rotl(b, 36);
	return r;
}
コード例 #8
0
ファイル: avl.cpp プロジェクト: viniciusmalloc/lib-monkeys
Node *rebalance(Node *x) {
    x->u();
    if (x->l->h > 1 + x->r->h){
        if (x->l->l->h < x->l->r->h) x->l = rotl(x->l);
        x = rotr(x);
    }
    else if (x->r->h > 1 + x->l->h){
        if (x->r->r->h < x->r->l->h) x->r = rotr(x->r);
        x = rotl(x);    
    }
    return x;
}
コード例 #9
0
ファイル: tsearch_avl.c プロジェクト: freiling/mojo
static struct node* balance(struct node* n) {
  int d = delta(n);

  if (d < -1) {
    if (delta(n->right) > 0)
      n->right = rotr(n->right);
    return rotl(n);
  } else if (d > 1) {
    if (delta(n->left) < 0)
      n->left = rotl(n->left);
    return rotr(n);
  }
  updateheight(n);
  return n;
}
コード例 #10
0
ファイル: AvlTree.cpp プロジェクト: 0x0all/codelibrary
Node *rebalance(Node *x) {
	x->u();
	if (x->l->h > 1 + x->r->h) {
		12
		if (x->l->l->h < x->l->r->h) x->l = rotl(x->l);
		x = rotr(x);
	} else if (x->r->h > 1 + x->l->h) {
コード例 #11
0
ファイル: 20050922-2.c プロジェクト: BigEd/snes-sdk
uint32_t
f (uint32_t a, uint32_t b)
{

  b = rotl (a, b & 31);
  return b;
}
コード例 #12
0
/* Sets RC5 key */
static int
rc5_set_key(struct cipher_context *cx, const u8 *key, int key_len,
	    int atomic)
{
	struct rc5_ctx *ctx;
	const u32 *in_key = (const u32 *)key;
	u32 i, j, k, A, B, L[C], c;

	ctx = (struct rc5_ctx *) cx->keyinfo;

 	if (key_len != 16 && key_len != 24 && key_len != 32)
		return -EINVAL; /* unsupported key length */

	cx->key_length = key_len;

	key_len *= 8;
	c = key_len / W;

	/* init L */
	for (i = 0; i < C; i++) {
		L[i] = 0;
	}

	for (i = 0; i < (key_len / W); i++) {
		L[i] = le32_to_cpu (in_key[i]);
	}

	/* initialize expanded key array */
	ctx->xk[0] = 0xb7e15163;
	for (i = 1; i < TABSIZE; i++) {
		ctx->xk[i] = ctx->xk[i - 1] + 0x9e3779b9;
	}

	/* mix L and key array (S) */
	A = B = 0;
	i = j = 0;
	for (k = 0; k < (3 * TABSIZE); k++) {
		A = ctx->xk[i] = rotl(ctx->xk[i] + A + B, 3);
		B = L[j] = rotl(L[j] + (A + B), A + B);
		i = (i + 1) % TABSIZE;
		j = (j + 1) % c;
	}

	return 0;
}
コード例 #13
0
ファイル: pisc.c プロジェクト: yogo1212/nahcf
static void scramble_block(struct piscine *pisc, uint32_t swap_seed)
{
	uint8_t i = 0;
	do {
		swap_quadrupel(pisc->w_buf, i, ((~i) ^ swap_seed) & 0xF);
		swap_seed = rotl(swap_seed, 3);
		i++;
	} while (i != 16);
}
コード例 #14
0
ファイル: pisc.c プロジェクト: yogo1212/nahcf
static void unscramble_block(struct piscine *pisc, uint32_t swap_seed)
{
	swap_seed = rotl(swap_seed, 16);
	uint8_t i = 16;
	do {
		i--;
		swap_seed = rotr(swap_seed, 3);
		swap_quadrupel(pisc->w_buf, i, ((~i) ^ swap_seed) & 0xF);
	} while (i != 0);
}
コード例 #15
0
ファイル: morus1280128v1opt64.c プロジェクト: Vieteg/EACirc
// one step of decryption: it decrypts a 32-byte block
void morus_dec_aut_step(uint8_t *plaintextblock,
                   const uint8_t *ciphertextblock, uint64_t state[][4])
{
        uint64_t temp,temp1;

        //decryption
        ((uint64_t*)plaintextblock)[0] = ((uint64_t*)ciphertextblock)[0] ^ state[0][0] ^ state[1][1] ^ (state[2][0] & state[3][0]);
        ((uint64_t*)plaintextblock)[1] = ((uint64_t*)ciphertextblock)[1] ^ state[0][1] ^ state[1][2] ^ (state[2][1] & state[3][1]);
        ((uint64_t*)plaintextblock)[2] = ((uint64_t*)ciphertextblock)[2] ^ state[0][2] ^ state[1][3] ^ (state[2][2] & state[3][2]);
        ((uint64_t*)plaintextblock)[3] = ((uint64_t*)ciphertextblock)[3] ^ state[0][3] ^ state[1][0] ^ (state[2][3] & state[3][3]);

        state[0][0] ^= state[3][0]; state[0][1] ^= state[3][1]; state[0][2] ^= state[3][2]; state[0][3] ^= state[3][3];
        temp = state[3][3];    state[3][3] = state[3][2];  state[3][2] = state[3][1];  state[3][1] = state[3][0];  state[3][0] = temp;        
        state[0][0] ^= state[1][0] & state[2][0]; state[0][1] ^= state[1][1] & state[2][1]; state[0][2] ^= state[1][2] & state[2][2]; state[0][3] ^= state[1][3] & state[2][3];
        state[0][0] = rotl(state[0][0],n1);  state[0][1] = rotl(state[0][1],n1);       state[0][2] = rotl(state[0][2],n1);       state[0][3] = rotl(state[0][3],n1);
        
        state[1][0] ^= ((uint64_t*)plaintextblock)[0];   state[1][1] ^= ((uint64_t*)plaintextblock)[1];   state[1][2] ^= ((uint64_t*)plaintextblock)[2];   state[1][3] ^= ((uint64_t*)plaintextblock)[3];
        state[1][0] ^= state[4][0]; state[1][1] ^= state[4][1]; state[1][2] ^= state[4][2]; state[1][3] ^= state[4][3];
        temp = state[4][3];    state[4][3] = state[4][1];  state[4][1] = temp;
        temp1= state[4][2];    state[4][2] = state[4][0];  state[4][0] = temp1;
        state[1][0] ^= (state[2][0] & state[3][0]); state[1][1] ^= (state[2][1] & state[3][1]); state[1][2] ^= (state[2][2] & state[3][2]); state[1][3] ^= (state[2][3] & state[3][3]);
        state[1][0] = rotl(state[1][0],n2);  state[1][1] = rotl(state[1][1],n2);       state[1][2] = rotl(state[1][2],n2);       state[1][3] = rotl(state[1][3],n2);

        state[2][0] ^= ((uint64_t*)plaintextblock)[0];   state[2][1] ^= ((uint64_t*)plaintextblock)[1];   state[2][2] ^= ((uint64_t*)plaintextblock)[2];   state[2][3] ^= ((uint64_t*)plaintextblock)[3];
        state[2][0] ^= state[0][0]; state[2][1] ^= state[0][1]; state[2][2] ^= state[0][2]; state[2][3] ^= state[0][3];
        temp = state[0][0];    state[0][0] = state[0][1];  state[0][1] = state[0][2];  state[0][2] = state[0][3];  state[0][3] = temp;
        state[2][0] ^= state[3][0] & state[4][0]; state[2][1] ^= state[3][1] & state[4][1]; state[2][2] ^= state[3][2] & state[4][2]; state[2][3] ^= state[3][3] & state[4][3];
        state[2][0] = rotl(state[2][0],n3);  state[2][1] = rotl(state[2][1],n3);       state[2][2] = rotl(state[2][2],n3);       state[2][3] = rotl(state[2][3],n3);

        state[3][0] ^= ((uint64_t*)plaintextblock)[0];   state[3][1] ^= ((uint64_t*)plaintextblock)[1];   state[3][2] ^= ((uint64_t*)plaintextblock)[2];   state[3][3] ^= ((uint64_t*)plaintextblock)[3];
        state[3][0] ^= state[1][0]; state[3][1] ^= state[1][1]; state[3][2] ^= state[1][2]; state[3][3] ^= state[1][3];
        temp = state[1][3];    state[1][3] = state[1][1];  state[1][1] = temp;
        temp1= state[1][2];    state[1][2] = state[1][0];  state[1][0] = temp1;
        state[3][0] ^= state[4][0] & state[0][0]; state[3][1] ^= state[4][1] & state[0][1]; state[3][2] ^= state[4][2] & state[0][2]; state[3][3] ^= state[4][3] & state[0][3];
        state[3][0] = rotl(state[3][0],n4);  state[3][1] = rotl(state[3][1],n4);       state[3][2] = rotl(state[3][2],n4);       state[3][3] = rotl(state[3][3],n4);

        state[4][0] ^= ((uint64_t*)plaintextblock)[0];   state[4][1] ^= ((uint64_t*)plaintextblock)[1];   state[4][2] ^= ((uint64_t*)plaintextblock)[2];   state[4][3] ^= ((uint64_t*)plaintextblock)[3];
        state[4][0] ^= state[2][0]; state[4][1] ^= state[2][1]; state[4][2] ^= state[2][2]; state[4][3] ^= state[2][3];
        temp = state[2][3];    state[2][3] = state[2][2];  state[2][2] = state[2][1];  state[2][1] = state[2][0];  state[2][0] = temp;
        state[4][0] ^= state[0][0] & state[1][0]; state[4][1] ^= state[0][1] & state[1][1]; state[4][2] ^= state[0][2] & state[1][2]; state[4][3] ^= state[0][3] & state[1][3];
        state[4][0] = rotl(state[4][0],n5);  state[4][1] = rotl(state[4][1],n5);       state[4][2] = rotl(state[4][2],n5);       state[4][3] = rotl(state[4][3],n5);
} 
コード例 #16
0
ファイル: rotl.cpp プロジェクト: endeav0r/solver
bool Rotl :: execute () {
    bool changed = false;
    unsigned int mask;
    Word tmp;

    tmp = Word(rotl(this->source->g_word(), this->bits),
               rotl(this->source->g_mask(), this->bits));
    mask = this->result->g_mask();
    this->result->take_bits(tmp);
    if (mask != this->result->g_mask())
        changed = true;


    tmp = Word(rotr(this->result->g_word(), this->bits),
               rotr(this->result->g_mask(), this->bits));
    mask = this->source->g_mask();
    this->source->take_bits(tmp);
    if (mask != this->source->g_mask())
        changed = true;

    return changed;
}
コード例 #17
0
ファイル: safer.cpp プロジェクト: NSOiO/DsbyStudyNote
SAFER::SAFER(const byte *userkey_1, const byte *userkey_2, unsigned nof_rounds, bool strengthened)
    : keySchedule(1 + BLOCKSIZE * (1 + 2 * nof_rounds))
{
    unsigned int i, j;
    byte *key = keySchedule;
    SecByteBlock ka(BLOCKSIZE + 1), kb(BLOCKSIZE + 1);

    if (MAX_ROUNDS < nof_rounds)
        nof_rounds = MAX_ROUNDS;
    *key++ = (unsigned char)nof_rounds;
    ka[BLOCKSIZE] = 0;
    kb[BLOCKSIZE] = 0;
    for (j = 0; j < BLOCKSIZE; j++)
    {
        ka[BLOCKSIZE] ^= ka[j] = rotl(userkey_1[j], 5U);
        kb[BLOCKSIZE] ^= kb[j] = *key++ = userkey_2[j];
    }
    for (i = 1; i <= nof_rounds; i++)
    {
        for (j = 0; j < BLOCKSIZE + 1; j++)
        {
            ka[j] = rotl(ka[j], 6U);
            kb[j] = rotl(kb[j], 6U);
        }
        for (j = 0; j < BLOCKSIZE; j++)
            if (strengthened)
                *key++ = (ka[(j + 2 * i - 1) % (BLOCKSIZE + 1)]
                          + exp_tab[exp_tab[18 * i + j + 1]]) & 0xFF;
            else
                *key++ = (ka[j] + exp_tab[exp_tab[18 * i + j + 1]]) & 0xFF;
        for (j = 0; j < BLOCKSIZE; j++)
            if (strengthened)
                *key++ = (kb[(j + 2 * i) % (BLOCKSIZE + 1)]
                          + exp_tab[exp_tab[18 * i + j + 10]]) & 0xFF;
            else
                *key++ = (kb[j] + exp_tab[exp_tab[18 * i + j + 10]]) & 0xFF;
    }
}
コード例 #18
0
ファイル: p.c プロジェクト: DavidToca/acm
void insert(int k)
{
	int x;

	if (root == 0) {
		left[0] = right[0] = parent[0] = height[0] = key[0] = count[0] = 0;
		left[1] = right[1] = parent[1] = 0;
		count[1] = height[1] = total = root = 1;
		key[1] = k;
		return;
	}

	for (total++, x = root;;) {
		if (k < key[x]) {
			if (left[x] == 0) {
				left[x] = total;
				break;
			}
			x = left[x];
		} else if (k > key[x]) {
			if (right[x] == 0) {
				right[x] = total;
				break;
			}
			x = right[x];
		} else {
			for (; x != 0; x = parent[x])
				count[x]++;
			return;
		}
	}

	parent[total] = x;
	x = total;
	key[x] = k;
	left[x] = 0;
	right[x] = 0;
	count[x] = 1;
	height[x] = 1;

	for (x = parent[x]; x != 0; x = parent[x]) {
		count[x]++;
		height[x] = max(height[left[x]], height[right[x]]) + 1;

		if (height[left[x]] < (height[right[x]] - 1))
			x = rotl(x);
		else if (height[right[x]] < (height[left[x]] - 1))
			x = rotr(x);
	}
}
コード例 #19
0
void Encrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	uint32_t b0 = blk[0];
	uint32_t b1 = blk[1];
	uint32_t b2 = blk[2];
	uint32_t b3 = blk[3];
	
	for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) {
		b3 = rotr((b2 ^ RK(rk, 3)) + (b3 ^ RK(rk, 1)), 3);
		b2 = rotr((b1 ^ RK(rk, 2)) + (b2 ^ RK(rk, 1)), 5);
		b1 = rotl((b0 ^ RK(rk, 0)) + (b1 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b0 = rotr((b3 ^ RK(rk, 3)) + (b0 ^ RK(rk, 1)), 3);
		b3 = rotr((b2 ^ RK(rk, 2)) + (b3 ^ RK(rk, 1)), 5);
		b2 = rotl((b1 ^ RK(rk, 0)) + (b2 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b1 = rotr((b0 ^ RK(rk, 3)) + (b1 ^ RK(rk, 1)), 3);
		b0 = rotr((b3 ^ RK(rk, 2)) + (b0 ^ RK(rk, 1)), 5);
		b3 = rotl((b2 ^ RK(rk, 0)) + (b3 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b2 = rotr((b1 ^ RK(rk, 3)) + (b2 ^ RK(rk, 1)), 3);
		b1 = rotr((b0 ^ RK(rk, 2)) + (b1 ^ RK(rk, 1)), 5);
		b0 = rotl((b3 ^ RK(rk, 0)) + (b0 ^ RK(rk, 1)), 9);
	}
	
	blk[0] = b0;
	blk[1] = b1;
	blk[2] = b2;
	blk[3] = b3;
}
コード例 #20
0
int rc6_set_key(struct cipher_context *cx, const unsigned char *key, int key_len,
		int atomic)
{       u32 *in_key = (u32 *)key;
        /* l_key - storage for the key schedule */
        u32 *l_key   = cx->keyinfo;
	u32	i, j, k, a, b, l[8], t;

	if (key_len != 16 && key_len != 24 && key_len != 32)
		return -EINVAL; /* unsupported key length */

	key_len *= 8;

	l_key[0] = 0xb7e15163;

	for(k = 1; k < 44; ++k)
		
		l_key[k] = l_key[k - 1] + 0x9e3779b9;

	for(k = 0; k < key_len / 32; ++k)

		l[k] = in_key[k];

	t = (key_len / 32) - 1;

	a = b = i = j = 0;

	for(k = 0; k < 132; ++k)
	{	a = rotl(l_key[i] + a + b, 3); b += a;
		b = rotl(l[j] + b, b);
		l_key[i] = a; l[j] = b;
		i = (i == 43 ? 0 : i + 1);
		j = (j == t ? 0 : j + 1);
	}

	return 0;
};
コード例 #21
0
void RunEncryptionKeySchedule(uint8_t *key, uint8_t *roundKeys)
{
	uint32_t ri = 0;
	int32_t i;
	uint32_t T[4];
    uint32_t* rk = (uint32_t*) roundKeys;
	memcpy(T, key, KEY_SIZE);

	for(i = 0; i < NUMBER_OF_ROUNDS; ++i) {
		uint32_t tmp = rotl(READ_RAM_DATA_DOUBLE_WORD(DELTA[i & 3]), i);
		
		T[0] = rotl(T[0] + tmp, 1);
		T[1] = rotl(T[1] + rotl(tmp, 1), 3);
		T[2] = rotl(T[2] + rotl(tmp, 2), 6);
		T[3] = rotl(T[3] + rotl(tmp, 3), 11);

		rk[ri++] = T[0]; // rk0
		rk[ri++] = T[1]; // rk1, rk3, rk5
		rk[ri++] = T[2]; // rk2
		rk[ri++] = T[3]; // rk4
	}
}
コード例 #22
0
void Decrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	uint32_t b0 = blk[0];
	uint32_t b1 = blk[1];
	uint32_t b2 = blk[2];
	uint32_t b3 = blk[3];
	
	for (i = NUMBER_OF_ROUNDS - 1, rk += 92; i >= 0; i -= 4, rk -= 4) {
		b0 = (rotr(b0, 9) - (b3 ^ RK(rk, 0))) ^ RK(rk, 1);
		b1 = (rotl(b1, 5) - (b0 ^ RK(rk, 2))) ^ RK(rk, 1);
		b2 = (rotl(b2, 3) - (b1 ^ RK(rk, 3))) ^ RK(rk, 1);
				
		rk -= 4;
		b3 = (rotr(b3, 9) - (b2 ^ RK(rk, 0))) ^ RK(rk, 1);
		b0 = (rotl(b0, 5) - (b3 ^ RK(rk, 2))) ^ RK(rk, 1);
		b1 = (rotl(b1, 3) - (b0 ^ RK(rk, 3))) ^ RK(rk, 1);
		
		rk -= 4;
		b2 = (rotr(b2, 9) - (b1 ^ RK(rk, 0))) ^ RK(rk, 1);
		b3 = (rotl(b3, 5) - (b2 ^ RK(rk, 2))) ^ RK(rk, 1);
		b0 = (rotl(b0, 3) - (b3 ^ RK(rk, 3))) ^ RK(rk, 1);
		
		rk -= 4;
		b1 = (rotr(b1, 9) - (b0 ^ RK(rk, 0))) ^ RK(rk, 1);
		b2 = (rotl(b2, 5) - (b1 ^ RK(rk, 2))) ^ RK(rk, 1);
		b3 = (rotl(b3, 3) - (b2 ^ RK(rk, 3))) ^ RK(rk, 1);
	}
	
	blk[0] = b0;
	blk[1] = b1;
	blk[2] = b2;
	blk[3] = b3;
}
コード例 #23
0
ファイル: cast.c プロジェクト: dendisuhubdy/encryption
    0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 
    0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 
    0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, 
    0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
    0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2,
    0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 
    0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda,
    0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
    0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6,
    0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e,
    0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
  }
};

#define f1(y,x,kr,km)           \
    t  = rotl(km + x, kr);      \
    u  = s_box[0][byte(t,3)];   \
    u ^= s_box[1][byte(t,2)];   \
    u -= s_box[2][byte(t,1)];   \
    u += s_box[3][byte(t,0)];   \
    y ^= u

#define f2(y,x,kr,km)           \
    t  = rotl(km ^ x, kr);      \
    u  = s_box[0][byte(t,3)];   \
    u -= s_box[1][byte(t,2)];   \
    u += s_box[2][byte(t,1)];   \
    u ^= s_box[3][byte(t,0)];   \
    y ^= u

#define f3(y,x,kr,km)           \
コード例 #24
0
ファイル: lnc_cast6.c プロジェクト: peterwankman/libnetcrypt
static uint32_t f1(const uint32_t D, const uint8_t Kr, const uint32_t Km) {
	uint32_t I = rotl((Km + D), Kr);
	return ((S1[byte(I, 0)] ^ S2[byte(I, 1)]) - S3[byte(I, 2)]) + S4[byte(I, 3)];
}
コード例 #25
0
ファイル: lnc_cast6.c プロジェクト: peterwankman/libnetcrypt
static uint32_t f2(const uint32_t D, const uint8_t Kr, const uint32_t Km) {
	uint32_t I = rotl((Km ^ D), Kr);
	return ((S1[byte(I, 0)] - S2[byte(I, 1)]) + S3[byte(I, 2)]) ^ S4[byte(I, 3)];	
}
コード例 #26
0
ファイル: mrsha3.c プロジェクト: BingyZhang/CommutEnc
static void shs_transform(sha3 *sh)
{
	int i,j,k;
	mr_unsign64 C[5],D[5],B[5][5];
	
	for (k=0;k<SHA3_ROUNDS;k++)
	{
		C[0]=sh->S[0][0]^sh->S[0][1]^sh->S[0][2]^sh->S[0][3]^sh->S[0][4];
		C[1]=sh->S[1][0]^sh->S[1][1]^sh->S[1][2]^sh->S[1][3]^sh->S[1][4];
		C[2]=sh->S[2][0]^sh->S[2][1]^sh->S[2][2]^sh->S[2][3]^sh->S[2][4];
		C[3]=sh->S[3][0]^sh->S[3][1]^sh->S[3][2]^sh->S[3][3]^sh->S[3][4];
		C[4]=sh->S[4][0]^sh->S[4][1]^sh->S[4][2]^sh->S[4][3]^sh->S[4][4];

		D[0]=C[4]^rotl(C[1],1);
		D[1]=C[0]^rotl(C[2],1);
		D[2]=C[1]^rotl(C[3],1);
		D[3]=C[2]^rotl(C[4],1);
		D[4]=C[3]^rotl(C[0],1);

		for (i=0;i<5;i++)
			for (j=0;j<5;j++)
				sh->S[i][j]^=D[i];  /* let the compiler unroll it! */

		B[0][0]=sh->S[0][0];
		B[1][3]=rotl(sh->S[0][1],36);
		B[2][1]=rotl(sh->S[0][2],3);
		B[3][4]=rotl(sh->S[0][3],41);
		B[4][2]=rotl(sh->S[0][4],18);

		B[0][2]=rotl(sh->S[1][0],1);
		B[1][0]=rotl(sh->S[1][1],44);
		B[2][3]=rotl(sh->S[1][2],10);
		B[3][1]=rotl(sh->S[1][3],45);
		B[4][4]=rotl(sh->S[1][4],2);

		B[0][4]=rotl(sh->S[2][0],62);
		B[1][2]=rotl(sh->S[2][1],6);
		B[2][0]=rotl(sh->S[2][2],43);
		B[3][3]=rotl(sh->S[2][3],15);
		B[4][1]=rotl(sh->S[2][4],61);

		B[0][1]=rotl(sh->S[3][0],28);
		B[1][4]=rotl(sh->S[3][1],55);
		B[2][2]=rotl(sh->S[3][2],25);
		B[3][0]=rotl(sh->S[3][3],21);
		B[4][3]=rotl(sh->S[3][4],56);

		B[0][3]=rotl(sh->S[4][0],27);
		B[1][1]=rotl(sh->S[4][1],20);
		B[2][4]=rotl(sh->S[4][2],39);
		B[3][2]=rotl(sh->S[4][3],8);
		B[4][0]=rotl(sh->S[4][4],14);

		for (i=0;i<5;i++)
			for (j=0;j<5;j++)
				sh->S[i][j]=B[i][j]^(~B[(i+1)%5][j]&B[(i+2)%5][j]);

		sh->S[0][0]^=RC[k];
	}
}
コード例 #27
0
ファイル: lnc_cast6.c プロジェクト: peterwankman/libnetcrypt
static uint32_t f3(const uint32_t D, const uint8_t Kr, const uint32_t Km) {	
	uint32_t I = rotl((Km - D), Kr);
	return ((S1[byte(I, 0)] + S2[byte(I, 1)]) ^ S3[byte(I, 2)]) - S4[byte(I, 3)];	
}