Ejemplo n.º 1
0
/* increment counter (128-bit int) by 1 */
static void AES_ctr128_inc(unsigned char *counter) {
	unsigned long c;

	/* Grab bottom dword of counter and increment */
	c = GETU32(counter + 12);
	c++;	c &= 0xFFFFFFFF;
	PUTU32(counter + 12, c);

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab 1st dword of counter and increment */
	c = GETU32(counter +  8);
	c++;	c &= 0xFFFFFFFF;
	PUTU32(counter +  8, c);

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab 2nd dword of counter and increment */
	c = GETU32(counter +  4);
	c++;	c &= 0xFFFFFFFF;
	PUTU32(counter +  4, c);

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab top dword of counter and increment */
	c = GETU32(counter +  0);
	c++;	c &= 0xFFFFFFFF;
	PUTU32(counter +  0, c);
}
Ejemplo n.º 2
0
static void
garmin_pack_d1005 ( D1005 * limits, uint8 ** pos )
{
    PUTU32(limits->max_workouts);
    PUTU32(limits->max_unscheduled_workouts);
    PUTU32(limits->max_occurrences);
}
Ejemplo n.º 3
0
static void
garmin_pack_d1015 ( D1015 * lap, uint8 ** pos )
{
    PUTU16(lap->index);
    SKIP(2);
    PUTU32(lap->start_time);
    PUTU32(lap->total_time);
    PUTF32(lap->total_dist);
    PUTF32(lap->max_speed);
    PUTPOS(lap->begin);
    PUTPOS(lap->end);
    PUTU16(lap->calories);
    PUTU8(lap->avg_heart_rate);
    PUTU8(lap->max_heart_rate);
    PUTU8(lap->intensity);
    PUTU8(lap->avg_cadence);
    PUTU8(lap->trigger_method);

    /* Hopefully we'll know what this stuff actually is someday. */

    PUTU8(lap->unknown[0]);
    PUTU8(lap->unknown[1]);
    PUTU8(lap->unknown[2]);
    PUTU8(lap->unknown[3]);
    PUTU8(lap->unknown[4]);
}
Ejemplo n.º 4
0
static void
garmin_pack_d110 ( D110 * wpt, uint8 ** pos )
{
    PUTU8(wpt->dtyp);
    PUTU8(wpt->wpt_class);
    PUTU8(wpt->dspl_color);
    PUTU8(wpt->attr);
    PUTU16(wpt->smbl);
    PUTSTR(wpt->subclass);
    PUTPOS(wpt->posn);
    PUTF32(wpt->alt);
    PUTF32(wpt->dpth);
    PUTF32(wpt->dist);
    PUTSTR(wpt->state);
    PUTSTR(wpt->cc);
    PUTU32(wpt->ete);
    PUTF32(wpt->temp);
    PUTU32(wpt->time);
    PUTU16(wpt->wpt_cat);
    PUTVST(wpt->ident);
    PUTVST(wpt->comment);
    PUTVST(wpt->facility);
    PUTVST(wpt->city);
    PUTVST(wpt->addr);
    PUTVST(wpt->cross_road);
}
Ejemplo n.º 5
0
/* increment counter (128-bit int) by 2^64 */
void AES_ctr128_inc(unsigned char *counter) {
	unsigned long c;

	/* Grab 3rd dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter + 8);
	c++;
	PUTU32(counter + 8, c);
#else
	c = GETU32(counter + 4);
	c++;
	PUTU32(counter + 4, c);
#endif

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab top dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter + 12);
	c++;
	PUTU32(counter + 12, c);
#else
	c = GETU32(counter +  0);
	c++;
	PUTU32(counter +  0, c);
#endif

}
Ejemplo n.º 6
0
void
Camellia_DecryptBlock(const int keyBitLength, 
		      const unsigned char *ciphertext, 
		      const uint32_t *subkey,
		      unsigned char *plaintext)
{
    uint32_t tmp[4];
 
    tmp[0] = GETU32(ciphertext);
    tmp[1] = GETU32(ciphertext + 4);
    tmp[2] = GETU32(ciphertext + 8);
    tmp[3] = GETU32(ciphertext + 12);

    switch (keyBitLength) {
    case 128:
	camellia_decrypt128(subkey, tmp);
	break;
    case 192:
	/* fall through */
    case 256:
	camellia_decrypt256(subkey, tmp);
	break;
    default:
	break;
    }

    PUTU32(plaintext,    tmp[0]);
    PUTU32(plaintext+4,  tmp[1]);
    PUTU32(plaintext+8,  tmp[2]);
    PUTU32(plaintext+12, tmp[3]);
}
Ejemplo n.º 7
0
static void
garmin_pack_d1013 ( D1013 * limits, uint8 ** pos )
{
    PUTU32(limits->max_courses);
    PUTU32(limits->max_course_laps);
    PUTU32(limits->max_course_pnt);
    PUTU32(limits->max_course_trk_pnt);
}
Ejemplo n.º 8
0
void ctr_init_iv(uint8 *iv, int64 counter)
{
	int64 val = counter;
	unsigned int ll = (unsigned int)counter;
	unsigned int hh = (unsigned int)(counter >> 32);

	memset(iv, 0, 16);
	PUTU32(iv+8, hh);
	PUTU32(iv+12, ll);
}
Ejemplo n.º 9
0
static void
garmin_pack_d906 ( D906 * lap, uint8 ** pos )
{
    PUTU32(lap->start_time);
    PUTU32(lap->total_time);
    PUTF32(lap->total_distance);
    PUTPOS(lap->begin);
    PUTPOS(lap->end);
    PUTU16(lap->calories);
    PUTU8(lap->track_index);
}
Ejemplo n.º 10
0
static void
garmin_pack_dlist ( garmin_list * list, uint8 ** pos )
{
    garmin_list_node * node;

    PUTU32(list->id);
    PUTU32(list->elements);
    for ( node = list->head; node != NULL; node = node->next ) {
        PUTU32(list->id);
        garmin_pack(node->data,pos);
    }
}
Ejemplo n.º 11
0
static void
garmin_pack_d1000 ( D1000 * run, uint8 ** pos )
{
    PUTU32(run->track_index);
    PUTU32(run->first_lap_index);
    PUTU32(run->last_lap_index);
    PUTU8(run->sport_type);
    PUTU8(run->program_type);
    SKIP(2);
    PUTU32(run->virtual_partner.time);
    PUTF32(run->virtual_partner.distance);
    garmin_pack_d1002(&run->workout,pos);
}
Ejemplo n.º 12
0
void rijndaelDecrypt_Final(const u32 rk[/*44*/], u8 pt[16], int rank)
{
	//printf("In AES final thread\n");
	float tempArray[4];
	int i = 0;
	u32 s[4], t0 = 0, t1 = 0, t2 = 0, t3 = 0;

	int Nr = 10;

	int * s_sign = (int*)s;
	MPI_Recv(s_sign, 4, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
	ROUND(9, &t0, &t1, &t2, &t3, s[0], s[1], s[2], s[3], rk);

	/*
	 * apply last round and
	 * map cipher state to byte array block:
	 */

	rk += Nr << 2;

	s[0] = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
	PUTU32(pt     , s[0]);
	s[1] = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
	PUTU32(pt +  4, s[1]);
	s[2] = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
	PUTU32(pt +  8, s[2]);
	s[3] = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
	PUTU32(pt + 12, s[3]);

	for(i=0; i <4; i++)
	{
		union {
			float f;
			unsigned char b[4];
		} u;

		u.b[3] = pt[4*i+0];
		u.b[2] = pt[4*i+1];
		u.b[1] = pt[4*i+2];
		u.b[0] = pt[4*i+3];

		tempArray[i] = u.f;
		//printf("%f ",tempArray[i]);
	}

	//printf("\n");
	//for(i = 1; i <= 4; i++)
	//printf("Sent the values to %d\n", rank + 1);
	MPI_Send(tempArray, 4, MPI_FLOAT, rank + 1, 0, MPI_COMM_WORLD);
}
Ejemplo n.º 13
0
static void
garmin_pack_d1001 ( D1001 * lap, uint8 ** pos )
{
    PUTU32(lap->index);
    PUTU32(lap->start_time);
    PUTU32(lap->total_time);
    PUTF32(lap->total_dist);
    PUTF32(lap->max_speed);
    PUTPOS(lap->begin);
    PUTPOS(lap->end);
    PUTU16(lap->calories);
    PUTU8(lap->avg_heart_rate);
    PUTU8(lap->max_heart_rate);
    PUTU8(lap->intensity);
}
Ejemplo n.º 14
0
void sms4_encrypt(const unsigned char *in, unsigned char *out, const sms4_key_t *key)
{
	const uint32_t *rk = key->rk;
	uint32_t X0, X1, X2, X3, X4;

	X0 = GETU32(in     );
	X1 = GETU32(in +  4);
	X2 = GETU32(in +  8);
	X3 = GETU32(in + 12);

	ROUND(X0, X1, X2, X3, X4, rk[0]);
	ROUND(X1, X2, X3, X4, X0, rk[1]);
	ROUND(X2, X3, X4, X0, X1, rk[2]);
	ROUND(X3, X4, X0, X1, X2, rk[3]);
	ROUND(X4, X0, X1, X2, X3, rk[4]);
	ROUND(X0, X1, X2, X3, X4, rk[5]);
	ROUND(X1, X2, X3, X4, X0, rk[6]);
	ROUND(X2, X3, X4, X0, X1, rk[7]);
	ROUND(X3, X4, X0, X1, X2, rk[8]);
	ROUND(X4, X0, X1, X2, X3, rk[9]);
	ROUND(X0, X1, X2, X3, X4, rk[10]);
	ROUND(X1, X2, X3, X4, X0, rk[11]);
	ROUND(X2, X3, X4, X0, X1, rk[12]);
	ROUND(X3, X4, X0, X1, X2, rk[13]);
	ROUND(X4, X0, X1, X2, X3, rk[14]);
	ROUND(X0, X1, X2, X3, X4, rk[15]);
	ROUND(X1, X2, X3, X4, X0, rk[16]);
	ROUND(X2, X3, X4, X0, X1, rk[17]);
	ROUND(X3, X4, X0, X1, X2, rk[18]);
	ROUND(X4, X0, X1, X2, X3, rk[19]);
	ROUND(X0, X1, X2, X3, X4, rk[20]);
	ROUND(X1, X2, X3, X4, X0, rk[21]);
	ROUND(X2, X3, X4, X0, X1, rk[22]);
	ROUND(X3, X4, X0, X1, X2, rk[23]);
	ROUND(X4, X0, X1, X2, X3, rk[24]);
	ROUND(X0, X1, X2, X3, X4, rk[25]);
	ROUND(X1, X2, X3, X4, X0, rk[26]);
	ROUND(X2, X3, X4, X0, X1, rk[27]);
	ROUND(X3, X4, X0, X1, X2, rk[28]);
	ROUND(X4, X0, X1, X2, X3, rk[29]);
	ROUND(X0, X1, X2, X3, X4, rk[30]);
	ROUND(X1, X2, X3, X4, X0, rk[31]);

	PUTU32(X0, out);
	PUTU32(X4, out + 4);
	PUTU32(X3, out + 8);
	PUTU32(X2, out + 12);
}
Ejemplo n.º 15
0
int aes_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
               const unsigned char *in, size_t len)
{
    int block;
    int i, j;
    unsigned int mode, key_len;

    mode = EVP_CIPHER_CTX_mode(ctx) - 1;
    key_len = (ctx->key_len)/8 - 2;

    block = len / 16;

    for (i = 0; i < block; i++) {
        for (j = 0; j < 4; j++) {
            REG_TEXT(j) = GETU32(in + i*16 + j*4);
        }

        REG_AES = ED(0, key_len, ctx->encrypt, mode, 0, 0);

        int a[5];
        a[4] = REG_RESULT(0);
        for (j = 0; j < 4; j++) {
            a[j] = REG_RESULT(j);
        }

        for (j = 0; j < 4; j++) {
            PUTU32(a[j], out + i*16 + j*4);
        }
    }

    return 1;
}
Ejemplo n.º 16
0
static void
garmin_pack_d300 ( D300 * point, uint8 ** pos )
{
    PUTPOS(point->posn);
    PUTU32(point->time);
    PUTU8(point->new_trk);
}
Ejemplo n.º 17
0
static void
garmin_pack_d303 ( D303 * point, uint8 ** pos )
{
    PUTPOS(point->posn);
    PUTU32(point->time);
    PUTF32(point->alt);
    PUTU8(point->heart_rate);
}
Ejemplo n.º 18
0
static void
garmin_pack_d450 ( D450 * prx, uint8 ** pos )
{
    PUTU32(prx->idx);
    garmin_pack_d150(&prx->wpt,pos);
    SKIP(sizeof(D150));
    PUTF32(prx->dst);
}
Ejemplo n.º 19
0
void Camellia_DecryptBlock_Rounds(int grandRounds, const u8 ciphertext[],
                                  const KEY_TABLE_TYPE keyTable,
                                  u8 plaintext[])
{
    u32 s0, s1, s2, s3;
    const u32 *k = keyTable + grandRounds * 16, *kend = keyTable + 4;

    s0 = GETU32(ciphertext) ^ k[0];
    s1 = GETU32(ciphertext + 4) ^ k[1];
    s2 = GETU32(ciphertext + 8) ^ k[2];
    s3 = GETU32(ciphertext + 12) ^ k[3];

    while (1) {
        /* Camellia makes 6 Feistel rounds */
        k -= 12;
        Camellia_Feistel(s0, s1, s2, s3, k + 10);
        Camellia_Feistel(s2, s3, s0, s1, k + 8);
        Camellia_Feistel(s0, s1, s2, s3, k + 6);
        Camellia_Feistel(s2, s3, s0, s1, k + 4);
        Camellia_Feistel(s0, s1, s2, s3, k + 2);
        Camellia_Feistel(s2, s3, s0, s1, k + 0);

        if (k == kend)
            break;

        /*
         * This is the same function as the diffusion function D of the
         * accompanying documentation. See section 3.2 for properties of the
         * FLlayer function.
         */
        k -= 4;
        s1 ^= LeftRotate(s0 & k[2], 1);
        s2 ^= s3 | k[1];
        s0 ^= s1 | k[3];
        s3 ^= LeftRotate(s2 & k[0], 1);
    }

    k -= 4;
    s2 ^= k[0], s3 ^= k[1], s0 ^= k[2], s1 ^= k[3];

    PUTU32(plaintext, s2);
    PUTU32(plaintext + 4, s3);
    PUTU32(plaintext + 8, s0);
    PUTU32(plaintext + 12, s1);
}
Ejemplo n.º 20
0
static void
garmin_pack_d301 ( D301 * point, uint8 ** pos )
{
    PUTPOS(point->posn);
    PUTU32(point->time);
    PUTF32(point->alt);
    PUTF32(point->dpth);
    PUTU8(point->new_trk);
}
Ejemplo n.º 21
0
static void
garmin_pack_d650 ( D650 * fbr, uint8 ** pos )
{
    PUTU32(fbr->takeoff_time);
    PUTU32(fbr->landing_time);
    PUTPOS(fbr->takeoff_posn);
    PUTPOS(fbr->landing_posn);
    PUTU32(fbr->night_time);
    PUTU32(fbr->num_landings);
    PUTF32(fbr->max_speed);
    PUTF32(fbr->max_alt);
    PUTF32(fbr->distance);
    PUTU8(fbr->cross_country_flag);
    PUTVST(fbr->departure_name);
    PUTVST(fbr->departure_ident);
    PUTVST(fbr->arrival_name);
    PUTVST(fbr->arrival_ident);
    PUTVST(fbr->ac_id);
}
Ejemplo n.º 22
0
static void
garmin_pack_d1012 ( D1012 * point, uint8 ** pos )
{
    PUTSTR(point->name);
    SKIP(1);
    PUTU16(point->course_index);
    SKIP(2);
    PUTU32(point->track_point_time);
    PUTU8(point->point_type);
}
Ejemplo n.º 23
0
static void
garmin_pack_d304 ( D304 * point, uint8 ** pos )
{
    PUTPOS(point->posn);
    PUTU32(point->time);
    PUTF32(point->alt);
    PUTF32(point->distance);
    PUTU8(point->heart_rate);
    PUTU8(point->cadence);
    PUTU8(point->sensor);
}
Ejemplo n.º 24
0
/* increment counter (128-bit int) by 1 */
static void ctr128_inc(unsigned char *counter) {
	u32 c,n=16;

	do {
		n -= 4;
		c = GETU32(counter+n);
		++c;	c &= 0xFFFFFFFF;
		PUTU32(counter + n, c);
		if (c) return;
	} while (n);
}
Ejemplo n.º 25
0
void rijndaelDecrypt_Final(const u32 rk[/*44*/], u8 pt[16], int rank)
{
  u32 s[4], t0 = 0, t1 = 0, t2 = 0, t3 = 0;

  int Nr = 10;

  int * s_sign = (int*)s;
  MPI_Recv(s_sign, 4, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
//printf("read:rank %d val: %#x,%#x,%#x,%#x\n",rank,s_sign[0],s_sign[1],s_sign[2],s_sign[3]);
  ROUND(9, &t0, &t1, &t2, &t3, s[0], s[1], s[2], s[3], rk);

  /*
   * apply last round and
   * map cipher state to byte array block:
   */

	rk += Nr << 2;

        s[0] = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
        PUTU32(pt     , s[0]);
        s[1] = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
        PUTU32(pt +  4, s[1]);
        s[2] = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
        PUTU32(pt +  8, s[2]);
        s[3] = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
        PUTU32(pt + 12, s[3]);

/*
  s[0] = TE41(t0) ^ TE42(t1) ^ TE43(t2) ^ TE44(t3) ^ rk[8];
  PUTU32(ct     , s[0]);
  s[1] = TE41(t1) ^ TE42(t2) ^ TE43(t3) ^ TE44(t0) ^ rk[9];
  PUTU32(ct +  4, s[1]);
  s[2] = TE41(t2) ^ TE42(t3) ^ TE43(t0) ^ TE44(t1) ^ rk[10];
  PUTU32(ct +  8, s[2]);
  s[3] = TE41(t3) ^ TE42(t0) ^ TE43(t1) ^ TE44(t2) ^ rk[11];
  PUTU32(ct + 12, s[3]);
*/
}
Ejemplo n.º 26
0
static void
garmin_pack_d1007 ( D1007 * lap, uint8 ** pos )
{
    PUTU16(lap->course_index);
    PUTU16(lap->lap_index);
    PUTU32(lap->total_time);
    PUTF32(lap->total_dist);
    PUTPOS(lap->begin);
    PUTPOS(lap->end);
    PUTU8(lap->avg_heart_rate);
    PUTU8(lap->max_heart_rate);
    PUTU8(lap->intensity);
    PUTU8(lap->avg_cadence);
}
Ejemplo n.º 27
0
static void
garmin_pack_d1009 ( D1009 * run, uint8 ** pos )
{
    PUTU16(run->track_index);
    PUTU16(run->first_lap_index);
    PUTU16(run->last_lap_index);
    PUTU8(run->sport_type);
    PUTU8(run->program_type);
    PUTU8(run->multisport);
    SKIP(3);
    PUTU32(run->quick_workout.time);
    PUTF32(run->quick_workout.distance);
    garmin_pack_d1008(&run->workout,pos);
}
Ejemplo n.º 28
0
static void
garmin_pack_d800 ( D800 * pvt, uint8 ** pos )
{
    PUTF32(pvt->alt);
    PUTF32(pvt->epe);
    PUTF32(pvt->eph);
    PUTF32(pvt->epv);
    PUTU16(pvt->fix);
    PUTF64(pvt->tow);
    PUTRPT(pvt->posn);
    PUTF32(pvt->east);
    PUTF32(pvt->north);
    PUTF32(pvt->up);
    PUTF32(pvt->msl_hght);
    PUTS16(pvt->leap_scnds);
    PUTU32(pvt->wn_days);
}
Ejemplo n.º 29
0
static void
garmin_pack_d1002 ( D1002 * wkt, uint8 ** pos )
{
    int i;

    PUTU32(wkt->num_valid_steps);
    for ( i = 0; i < 20; i++ ) {
        PUTSTR(wkt->steps[i].custom_name);
        PUTF32(wkt->steps[i].target_custom_zone_low);
        PUTF32(wkt->steps[i].target_custom_zone_high);
        PUTU16(wkt->steps[i].duration_value);
        PUTU8(wkt->steps[i].intensity);
        PUTU8(wkt->steps[i].duration_type);
        PUTU8(wkt->steps[i].target_type);
        PUTU8(wkt->steps[i].target_value);
        SKIP(2);
    }
    PUTSTR(wkt->name);
    PUTU8(wkt->sport_type);
}
Ejemplo n.º 30
0
void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
                                 size_t len, const void *key,
                                 unsigned char ivec[16],
                                 unsigned char ecount_buf[16],
                                 unsigned int *num, ctr128_f func)
{
    unsigned int n, ctr32;

    assert(in && out && key && ecount_buf && num);
    assert(*num < 16);

    n = *num;

    while (n && len) {
        *(out++) = *(in++) ^ ecount_buf[n];
        --len;
        n = (n + 1) % 16;
    }

    ctr32 = GETU32(ivec + 12);
    while (len >= 16) {
        size_t blocks = len / 16;
        /*
         * 1<<28 is just a not-so-small yet not-so-large number...
         * Below condition is practically never met, but it has to
         * be checked for code correctness.
         */
        if (sizeof(size_t) > sizeof(unsigned int) && blocks > (1U << 28))
            blocks = (1U << 28);
        /*
         * As (*func) operates on 32-bit counter, caller
         * has to handle overflow. 'if' below detects the
         * overflow, which is then handled by limiting the
         * amount of blocks to the exact overflow point...
         */
        ctr32 += (u32)blocks;
        if (ctr32 < blocks) {
            blocks -= ctr32;
            ctr32 = 0;
        }
        (*func) (in, out, blocks, key, ivec);
        /* (*ctr) does not update ivec, caller does: */
        PUTU32(ivec + 12, ctr32);
        /* ... overflow was detected, propogate carry. */
        if (ctr32 == 0)
            ctr96_inc(ivec);
        blocks *= 16;
        len -= blocks;
        out += blocks;
        in += blocks;
    }
    if (len) {
        memset(ecount_buf, 0, 16);
        (*func) (ecount_buf, ecount_buf, 1, key, ivec);
        ++ctr32;
        PUTU32(ivec + 12, ctr32);
        if (ctr32 == 0)
            ctr96_inc(ivec);
        while (len--) {
            out[n] = in[n] ^ ecount_buf[n];
            ++n;
        }
    }

    *num = n;
}