void skein256_init(skein_t* ctx, W64* key, W64 outlen) { W64 config[4] = {0x0000000133414853, outlen, 0, 0}; static W64 zeroes[4] = {0,0,0,0}; /* Set up key if needed */ if(key != NULL) { init_tweak(T_KEY, ctx->tweak); set_last(1, ctx->tweak); add_bytes(32, ctx->tweak); encrypt256(zeroes, ctx->tweak[0], ctx->tweak[1], key, ctx->key); ctx->key[0] ^= key[0]; ctx->key[1] ^= key[1]; ctx->key[2] ^= key[2]; ctx->key[3] ^= key[3]; } else { ctx->key[0] = 0; ctx->key[1] = 0; ctx->key[2] = 0; ctx->key[3] = 0; } /* Process config string */ mk_config_tweak(ctx->tweak); add_bytes(32, ctx->tweak); encrypt256(ctx->key, ctx->tweak[0], ctx->tweak[1], config, ctx->key); ctx->key[0] ^= config[0]; ctx->key[1] ^= config[1]; ctx->key[2] ^= config[2]; ctx->key[3] ^= config[3]; }
void skein256_output(skein_t* ctx, int from, int to, W64* out) { W64 buf[4] = {from,0,0,0}; W64 *k = ctx->key; W64 *tweak = ctx->tweak; for(; from <= to; ++from) { init_tweak(T_OUT, tweak); set_last(1, tweak); add_bytes(8, tweak); encrypt256(k, tweak[0], tweak[1], buf, out); out += 4; ++buf[0]; } }
void skein256_update(skein_t* ctx, int firstlast, UBIType type, W64 len, W64* data) { W64 buf[4] = {0,0,0,0}; W64* k = ctx->key; W64* tweak = ctx->tweak; int lastlen; /* Process message */ if(firstlast & 1) { init_tweak(type, tweak); } /* If this is not the last update, don't do last block processing */ if(!(firstlast & 2) && len % 32 == 0) { ++len; } while(len > 32) { add_bytes(32, tweak); encrypt256(k, tweak[0], tweak[1], data, k); set_first(0, tweak); k[0] ^= *data; ++data; k[1] ^= *data; ++data; k[2] ^= *data; ++data; k[3] ^= *data; ++data; len -= 32; } /* Process last block */ if(firstlast & 2) { lastlen = len % 32; if(lastlen == 0 && len > 0) { lastlen = 32; } add_bytes(lastlen, tweak); set_last(1, tweak); memcpy(buf, data, lastlen); encrypt256(k, tweak[0], tweak[1], buf, k); k[0] ^= buf[0]; k[1] ^= buf[1]; k[2] ^= buf[2]; k[3] ^= buf[3]; } }
gboolean mouse_clicked(GtkWidget *widget, GdkEventButton *event) { // Handle click event on canvas int index; double coordx, coordy; select_t *select = NULL; // Length from click location to nearest dot mouse_discarded = 0; if (event->button == 8) { // back button if (event->state == GDK_SHIFT_MASK) set_prev_count(); else if (event->state == GDK_CONTROL_MASK) set_first(); else set_prev(); fldstate.mouse_clicked = 0x0; } else if (event->button == 9) { // forward button if (event->state == GDK_SHIFT_MASK) set_next_count(); else if (event->state == GDK_CONTROL_MASK) set_last(); else set_next(); fldstate.mouse_clicked = 0x0; } else if (event->button == 1) { fldstate.mouse_clicked = 0x1; mouse_clickx = event->x; mouse_clicky = event->y; pixel_to_field(&mouse_clickx, &mouse_clicky); fldstate.mouse_clickx = mouse_clickx; fldstate.mouse_clicky = mouse_clicky; switch(mouse_currentMode) { case SELECTONE: // select 1 performer select = field_get_in_area(mouse_clickx, mouse_clicky); if (event->state == GDK_CONTROL_MASK) { // ctrl-click select_toggle_multiple(pstate.select, select); } else if ((event->state & ~GDK_SHIFT_MASK)== 0) { // regular click if (select_empty(select)) { //select_dots_discard(); select_clear(pstate.select); mouse_discarded = 1; break; } index = select_get_form(select); if (!select_form_empty(select) && !select_check_form(pstate.select, index)) { // select form with ability to scale form select_clear(pstate.select); mouse_discarded = 1; select_add_form(pstate.select, select_get_form(select)); select_update_center(pstate.select); } else if (select_form_empty(select) && isSelected(select_get_dot(select)) != 1) { // dot is not selected select_clear(pstate.select); mouse_discarded = 1; if ((index = select_get_dot(select))!= -1) { select_add_dot(pstate.select, index); } } else { // hold click; dots being moved fldstate.mouse_clicked |= 0x2; } } dr_canvas_refresh(drill); break; case ADDPERF: // Add performers by clicking on canvas coordx = event->x; coordy = event->y; pixel_to_field(&coordx, &coordy); index = perf_add(); //coords_set_coord(pshow, index, coordx, coordy); coords_set(pshow->sets->currset->coords[index], coordx, coordy); dr_canvas_refresh(drill); break; case ADDFORM: break; } } else fldstate.mouse_clicked = 0; return TRUE; }