void sha2_large_common_nextBlock(sha2_large_common_ctx_t* ctx, const void* block){
	uint64_t w[16], wx;
	uint64_t a[8];
	uint64_t t1, t2;
	const uint64_t *k=sha2_large_common_const;
	uint8_t i;
	i=16;
	do{
		w[16-i] = change_endian64(*((const uint64_t*)block));
		block = (uint8_t*)block + 8;
	}while(--i);
	memcpy(a, ctx->h, 8*8);
	for(i=0; i<80; ++i){
		if(i<16){
			wx=w[i];
		}else{
			wx = SIGMA_b(w[14]) + w[9] + SIGMA_a(w[1]) + w[0];
			memmove(&(w[0]), &(w[1]), 15*8);
			w[15] = wx;
		}
		t1 = a[7] + SIGMA_1(a[4]) + CH(a[4], a[5], a[6]) + pgm_read_uint64_t_P(k++) + wx;
		t2 = SIGMA_0(a[0]) + MAJ(a[0], a[1], a[2]);
		memmove(&(a[1]), &(a[0]), 7*8);
		a[0] = t1 + t2;
		a[4] += t1;
	}
	i=7;
	do{
		ctx->h[i] += a[i];
	}while(i--);
	ctx->length += 1;
}
Example #2
0
unsigned long long guppi_udp_packet_seq_num(const struct guppi_udp_packet *p) {
    // XXX Temp for new baseband mode, blank out top 8 bits which 
    // contain channel info.

    unsigned long long tmp = change_endian64((unsigned long long *)p->data);
    tmp &= 0x00FFFFFFFFFFFFFF;
    return(tmp);
    //return(change_endian64((unsigned long long *)(p->data)));
}
Example #3
0
void parkes_to_guppi(struct guppi_udp_packet *b, const int acc_len, 
        const int npol, const int nchan) {

    /* Convert IBOB clock count to packet count.
     * This assumes 2 samples per IBOB clock, and that
     * acc_len is the actual accumulation length (=reg_acclen+1).
     */
    const unsigned int counts_per_packet = (nchan/2) * acc_len;
    unsigned long long *packet_idx = (unsigned long long *)b->data;
    (*packet_idx) = change_endian64(packet_idx);
    (*packet_idx) /= counts_per_packet;
    (*packet_idx) = change_endian64(packet_idx);

    /* Reorder from the 2-pol Parkes ordering */
    int i;
    char tmp[GUPPI_MAX_PACKET_SIZE];
    char *pol0, *pol1, *pol2, *pol3, *in;
    in = b->data + sizeof(long long);
    if (npol==2) {
        pol0 = &tmp[0];
        pol1 = &tmp[nchan];
        for (i=0; i<nchan/2; i++) {
            /* Each loop handles 2 values from each pol */
            memcpy(pol0, in, 2*sizeof(char));
            memcpy(pol1, &in[2], 2*sizeof(char));
            pol0 += 2;
            pol1 += 2;
            in += 4;
        }
    } else if (npol==4) {
        pol0 = &tmp[0];
        pol1 = &tmp[nchan];
        pol2 = &tmp[2*nchan];
        pol3 = &tmp[3*nchan];
        for (i=0; i<nchan; i++) {
            /* Each loop handles one sample */
            *pol0 = *in; in++; pol0++;
            *pol1 = *in; in++; pol1++;
            *pol2 = *in; in++; pol2++;
            *pol3 = *in; in++; pol3++;
        }
    }
    memcpy(b->data + sizeof(long long), tmp, sizeof(char) * npol * nchan);
}
void sha2_large_common_lastBlock(sha2_large_common_ctx_t* ctx, const void* block, uint16_t length_b){
	while(length_b >= 1024){
		sha2_large_common_nextBlock(ctx, block);
		block = (uint8_t*)block + 1024/8;
		length_b -= 1024;
	}
	uint8_t buffer[1024/8];
	uint64_t len;
	len = ((uint64_t)ctx->length)*1024LL + length_b;
	len = change_endian64(len);
	memset(buffer, 0, 1024/8);
	memcpy(buffer, block, (length_b+7)/8);
	buffer[length_b/8] |= 0x80>>(length_b%8);
	if(length_b>1024-128-1){
		/* length goes into the next block */
		sha2_large_common_nextBlock(ctx, buffer);
		memset(buffer, 0, 120);
	}
	memcpy(&(buffer[128-8]), &len, 8);
	sha2_large_common_nextBlock(ctx, buffer);
}
Example #5
0
unsigned long long guppi_udp_packet_seq_num(const struct guppi_udp_packet *p) {
    return(change_endian64((unsigned long long *)(p->data)));
}