DECLARE(short const **, __ctype_b_loc, void) { BEGIN(__ctype_b_loc); short const** ret_ptr = REAL(__ctype_b_loc)(); RETURN_PTR(ret_ptr, ret_ptr, (char*) ret_ptr + /* HACK */ 1024 * 1024); }
DECLARE(char*, strdup, const char *s) { BEGIN(strdup); char *ret_ptr = REAL(strdup)(s); RETURN_PTR(ret_ptr, ret_ptr, ret_ptr + strlen(ret_ptr) + 1); }
DECLARE(int*, __errno_location, void) { BEGIN(__errno_location); int *ret = REAL(__errno_location)(); RETURN_PTR(ret, ret, (int*) ret + 1); }
int test_http(void) { /* http urls */ su_home_t home[1] = { SU_HOME_INIT(home) }; url_t http[1] = { URL_INIT_AS(http) }; url_t *u, url[1]; char *tst; char httpurl[] = "http://*****:*****@host:32/foo;param=1/bar;param=3" "?From=foo@bar&To=bar@baz#unf"; char http2[sizeof(httpurl) + 32]; char queryonly[] = "http://some.host?query"; BEGIN(); TEST_S(url_scheme(url_http), "http"); TEST_S(url_scheme(url_https), "https"); http->url_root = '/'; http->url_user = "******"; http->url_password = "******"; http->url_host = "host"; http->url_port = "32"; http->url_path = "foo;param=1/bar;param=3"; http->url_headers = "From=foo@bar&To=bar@baz"; http->url_fragment = "unf"; TEST_1(tst = su_strdup(home, httpurl)); TEST_1(url_d(url, tst) == 0); TEST_1(url_cmp(http, url) == 0); TEST(url->url_type, url_http); TEST_1(u = url_hdup(home, url)); TEST(u->url_type, url_http); TEST_1(url_cmp(http, u) == 0); TEST_SIZE(url_e(http2, sizeof(http2), u), strlen(httpurl)); TEST_1(strcmp(http2, httpurl) == 0); TEST_SIZE(snprintf(http2, sizeof(http2), URL_PRINT_FORMAT, URL_PRINT_ARGS(http)), strlen(httpurl)); TEST_1(strcmp(http2, httpurl) == 0); url_digest(hash1, sizeof(hash1), http, NULL); url_digest(hash2, sizeof(hash2), (url_t *)httpurl, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); memset(url, 0, sizeof url); TEST_1(tst = su_strdup(home, queryonly)); TEST(url_d(url, tst), 0); TEST_S(url->url_host, "some.host"); TEST_S(url->url_headers, "query"); TEST_S(url->url_params, NULL); TEST_1(u = url_hdup(home, (void *)"http://[::1]/test;ing?here")); TEST_S(u->url_host, "[::1]"); TEST_S(u->url_path, "test;ing"); TEST_S(u->url_headers, "here"); url_digest(hash1, sizeof(hash1), u, NULL); url_digest(hash2, sizeof(hash2), (url_t *)"http://[::1]/test;ing?here", NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); su_home_deinit(home); END(); }
uint256 CBlockHeader::GetHash() const { return Hash(BEGIN(nVersion), END(nNonce)); }
static int register_test(root_test_t *rt) { int i; int s; char msg[3] = "foo"; BEGIN(); TEST_1((s = su_socket(rt->rt_family, SOCK_DGRAM, 0)) != -1); for (i = 0; i < 5; i++) { rt->rt_ep[i]->registered = su_root_register(rt->rt_root, rt->rt_ep[i]->wait, wakeups[i], rt->rt_ep[i], 0); TEST(rt->rt_ep[i]->registered, i + 1 + SU_HAVE_PTHREADS); } for (i = 0; i < 5; i++) { test_ep_t *ep = rt->rt_ep[i]; TEST(su_sendto(s, msg, sizeof(msg), 0, ep->addr, ep->addrlen), sizeof(msg)); test_run(rt); TEST(rt->rt_received, i); TEST(rt->rt_wakeup, i); } for (i = 0; i < 5; i++) { TEST(su_root_unregister(rt->rt_root, rt->rt_ep[i]->wait, wakeups[i], rt->rt_ep[i]), rt->rt_ep[i]->registered); } for (i = 0; i < 5; i++) { rt->rt_ep[i]->registered = su_root_register(rt->rt_root, rt->rt_ep[i]->wait, wakeups[i], rt->rt_ep[i], 1); TEST_1(rt->rt_ep[i]->registered > 0); } for (i = 0; i < 5; i++) { test_ep_t *ep = rt->rt_ep[i]; TEST(su_sendto(s, msg, sizeof(msg), 0, ep->addr, ep->addrlen), sizeof(msg)); test_run(rt); TEST(rt->rt_received, i); TEST(rt->rt_wakeup, i); } for (i = 0; i < 5; i++) { TEST(su_root_deregister(rt->rt_root, rt->rt_ep[i]->registered), rt->rt_ep[i]->registered); } for (i = 0; i < 5; i++) { test_ep_t *ep = rt->rt_ep[i]; TEST_1(su_wait_create(ep->wait, ep->s, SU_WAIT_IN|SU_WAIT_ERR) != -1); ep->registered = su_root_register(rt->rt_root, ep->wait, wakeups[i], ep, 1); TEST_1(ep->registered > 0); } for (i = 0; i < 5; i++) { test_ep_t *ep = rt->rt_ep[i]; TEST(su_sendto(s, msg, sizeof(msg), 0, ep->addr, ep->addrlen), sizeof(msg)); test_run(rt); TEST(rt->rt_received, i); TEST(rt->rt_wakeup, i); } for (i = 0; i < 5; i++) { TEST(su_root_unregister(rt->rt_root, rt->rt_ep[i]->wait, wakeups[i], rt->rt_ep[i]), rt->rt_ep[i]->registered); } END(); }
int test_sip(void) { /* sip urls */ su_home_t home[1] = { SU_HOME_INIT(home) }; url_t sip[1] = { URL_INIT_AS(sip) }; url_t *u, url[1]; char *tst, *s; char sipurl0[] = "sip:pekka%2Epessi@nokia%2Ecom;method=%4D%45%53%53%41%47%45" "?body=CANNED%20MSG"; char sipurl[] = "sip:user:pass@host:32;param=1" "?From=foo@bar&To=bar@baz#unf"; char sip2url[] = "sip:user/path;tel-param:pass@host:32;param=1%3d%3d1" "?From=foo@bar&body=CANNED%20MSG&To=bar@baz#unf"; char sip2[sizeof(sipurl) + 32]; char sipsurl[] = "sips:user:pass@host:32;param=1" "?From=foo@bar&To=bar@baz#unf"; size_t i, j; url_t *a, *b; BEGIN(); TEST_S(url_scheme(url_sip), "sip"); TEST_S(url_scheme(url_sips), "sips"); memset(url, 255, sizeof url); TEST(url_d(url, sipurl0), 0); TEST(url->url_type, url_sip); TEST(url->url_root, 0); TEST_S(url->url_scheme, "sip"); TEST_S(url->url_user, "pekka.pessi"); TEST_P(url->url_password, NULL); TEST_S(url->url_host, "nokia.com"); TEST_P(url->url_port, NULL); TEST_P(url->url_path, NULL); TEST_S(url->url_params, "method=MESSAGE"); TEST_S(url->url_headers, "body=CANNED%20MSG"); TEST_P(url->url_fragment, NULL); TEST_S(url_query_as_header_string(home, url->url_headers), "\n\nCANNED MSG"); sip->url_user = "******"; sip->url_password = "******"; sip->url_host = "host"; sip->url_port = "32"; sip->url_params = "param=1"; sip->url_headers = "From=foo@bar&To=bar@baz"; sip->url_fragment = "unf"; memset(url, 255, sizeof url); TEST_1(tst = su_strdup(home, sipurl)); TEST_1(url_d(url, tst) == 0); TEST_1(url_cmp(sip, url) == 0); TEST(url->url_type, url_sip); TEST_1(u = url_hdup(home, url)); TEST(u->url_type, url_sip); TEST_1(url_cmp(sip, u) == 0); TEST(url_e(sip2, sizeof(sip2), u), strlen(sipurl)); TEST_1(strcmp(sip2, sipurl) == 0); TEST_SIZE(snprintf(sip2, sizeof(sip2), URL_PRINT_FORMAT, URL_PRINT_ARGS(sip)), strlen(sipurl)); TEST_1(strcmp(sip2, sipurl) == 0); url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)sipurl, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); TEST_1(tst = su_strdup(home, sip2url)); TEST_1(url_d(url, tst) == 0); TEST_S(url->url_user, "user/path;tel-param"); TEST_S(url->url_params, "param=1%3D%3D1"); TEST_S(url_query_as_header_string(home, url->url_headers), "From:foo@bar\nTo:bar@baz\n\nCANNED MSG"); url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t *)sip2url, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); sip->url_type = url_sips; sip->url_scheme = "sips"; TEST_1(tst = su_strdup(home, sipsurl)); TEST_1(url_d(url, tst) == 0); TEST_1(url_cmp(sip, url) == 0); TEST(url->url_type, url_sips); /* Test url_dup() */ for (i = 0; i <= sizeof(sipsurl); i++) { char buf[sizeof(sipsurl) + 1]; url_t dst[1]; buf[i] = '\377'; TEST_SIZE(url_dup(buf, i, dst, url), sizeof(sipsurl) - 1 - strlen("sips")); TEST(buf[i], '\377'); } url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t *)sipsurl, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); u = url_hdup(home, (url_t*)"SIP:[email protected]:55"); TEST_1(u); TEST(u->url_type, url_sip); u = url_hdup(home, (url_t*)"SIP:[email protected]:"); TEST_1(u); TEST(u->url_type, url_sip); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]::55"), NULL); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]:55:"), NULL); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]:sip"), NULL); u = url_hdup(home, (url_t*)"SIP:#**00**#;foo=/[email protected]"); TEST_1(u); TEST(u->url_type, url_sip); TEST_S(u->url_user, "#**00**#;foo=/bar"); TEST_1(!url_hdup(home, (url_t*)"SIP:#**00**#;foo=/bar@#127.0.0.1")); TEST_1(!url_hdup(home, (url_t*)"SIP:#**00**#;foo=/bar;127.0.0.1")); for (i = 32; i <= 256; i++) { char pu[512]; char param[512]; for (j = 0; j < i; j++) param[j] = 'x'; param[j] = '\0'; memcpy(param, "x=", 2); snprintf(pu, sizeof(pu), "sip:test@host;%s", param); u = url_hdup(home, (url_t*)pu); TEST_1(u); s = url_as_string(home, u); TEST_S(pu, s); } s = su_strdup(home, "ttl;transport=tcp;ttl=15;ttl=;method=INVITE;ttl"); TEST_1(s); s = url_strip_param_string(s, "ttl"); TEST_S(s, "transport=tcp;method=INVITE"); u = url_hdup(home, (void*)"sip:u:p@host:5060;maddr=127.0.0.1;transport=tcp"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_P(u->url_params, NULL); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;user=phone;ttl=1;isfocus"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone;isfocus"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;maddr=127.0.0.1;user=phone"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;user=phone;transport=tcp"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host;user=phone;;"); TEST_1(u); /* We don't have transport params */ TEST_1(!url_have_transport(u)); /* ...but we still strip empty params */ TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;ttl=1;isfocus;transport=udp;"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "isfocus"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void *)"sip:%22foo%[email protected]:5060"); TEST_1(u); TEST_S(u->url_user, "%22foo%22"); a = url_hdup(home, (void *)"sip:172.21.55.55:5060"); b = url_hdup(home, (void *)"sip:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST(url_cmp_all(a, b), 0); a = url_hdup(home, (void *)"sips:172.21.55.55:5060"); b = url_hdup(home, (void *)"sips:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) != 0); TEST_1(url_cmp_all(a, b) < 0); a = url_hdup(home, (void *)"sips:172.21.55.55:5061"); b = url_hdup(home, (void *)"sips:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST(url_cmp_all(a, b), 0); a = url_hdup(home, (void *)"sip:my.domain:5060"); b = url_hdup(home, (void *)"sip:my.domain"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) > 0); TEST_1(url_cmp_all(a, b) > 0); a = url_hdup(home, (void *)"sips:my.domain:5061"); b = url_hdup(home, (void *)"sips:my.domain"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) > 0); TEST_1(url_cmp_all(a, b) > 0); a = url_hdup(home, (void *)"sip:my.domain"); b = url_hdup(home, (void *)"SIP:MY.DOMAIN"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST_1(url_cmp_all(a, b) == 0); su_home_deinit(home); END(); }
int do_sync_pull(const char *rpath, const char *lpath) { unsigned mode; struct stat st; int fd; fd = sdb_connect("sync:"); if(fd < 0) { fprintf(stderr,"error: %s\n", sdb_error()); return 1; } if(sync_readmode(fd, rpath, &mode)) { return 1; } if(mode == 0) { fprintf(stderr,"remote object '%s' does not exist\n", rpath); return 1; } if(S_ISREG(mode) || S_ISLNK(mode) || S_ISCHR(mode) || S_ISBLK(mode)) { if(stat(lpath, &st) == 0) { if(S_ISDIR(st.st_mode)) { /* if we're copying a remote file to a local directory, ** we *really* want to copy to localdir + "/" + remotefilename */ const char *name = sdb_dirstop(rpath); if(name == 0) { name = rpath; } else { name++; } int tmplen = strlen(name) + strlen(lpath) + 2; char *tmp = malloc(tmplen); if(tmp == 0) return 1; snprintf(tmp, tmplen, "%s/%s", lpath, name); lpath = tmp; } } BEGIN(); if(sync_recv(fd, rpath, lpath)) { return 1; } else { END(); sync_quit(fd); return 0; } } else if(S_ISDIR(mode)) { BEGIN(); if (copy_remote_dir_local(fd, rpath, lpath, 0)) { return 1; } else { END(); sync_quit(fd); return 0; } } else { fprintf(stderr,"remote object '%s' not a file or directory\n", rpath); return 1; } }
static AlError init_shaders() { BEGIN() plainWidgetShader.shader = NULL; borderWidgetShader.shader = NULL; gridBorderWidgetShader.shader = NULL; modelShader.shader = NULL; textShader.shader = NULL; textShader.texture = NULL; TRY(algl_shader_init_with_sources(&plainWidgetShader.shader, AL_VERT_SHADER(widget), AL_FRAG_SHADER(widget), NULL)); ALGL_GET_UNIFORM(plainWidgetShader, viewportSize); ALGL_GET_UNIFORM(plainWidgetShader, minCoord); ALGL_GET_UNIFORM(plainWidgetShader, size); ALGL_GET_UNIFORM(plainWidgetShader, fillColour); ALGL_GET_ATTRIB(plainWidgetShader, position); TRY(algl_shader_init_with_sources(&borderWidgetShader.shader, AL_VERT_SHADER(widget), AL_FRAG_SHADER(widget), "#define WITH_BORDER\n")); ALGL_GET_UNIFORM(borderWidgetShader, viewportSize); ALGL_GET_UNIFORM(borderWidgetShader, minCoord); ALGL_GET_UNIFORM(borderWidgetShader, size); ALGL_GET_UNIFORM(borderWidgetShader, borderWidth); ALGL_GET_UNIFORM(borderWidgetShader, fillColour); ALGL_GET_UNIFORM(borderWidgetShader, borderColour); ALGL_GET_ATTRIB(borderWidgetShader, position); TRY(algl_shader_init_with_sources(&gridBorderWidgetShader.shader, AL_VERT_SHADER(widget), AL_FRAG_SHADER(widget), "#define WITH_BORDER\n" "#define WITH_GRID")); ALGL_GET_UNIFORM(gridBorderWidgetShader, viewportSize); ALGL_GET_UNIFORM(gridBorderWidgetShader, minCoord); ALGL_GET_UNIFORM(gridBorderWidgetShader, size); ALGL_GET_UNIFORM(gridBorderWidgetShader, borderWidth); ALGL_GET_UNIFORM(gridBorderWidgetShader, gridSize); ALGL_GET_UNIFORM(gridBorderWidgetShader, gridOffset); ALGL_GET_UNIFORM(gridBorderWidgetShader, fillColour); ALGL_GET_UNIFORM(gridBorderWidgetShader, borderColour); ALGL_GET_UNIFORM(gridBorderWidgetShader, gridColour); ALGL_GET_ATTRIB(gridBorderWidgetShader, position); TRY(algl_shader_init_with_sources(&modelShader.shader, AL_VERT_SHADER(model), AL_FRAG_SHADER(model), NULL)); ALGL_GET_UNIFORM(modelShader, viewportSize); ALGL_GET_UNIFORM(modelShader, translate); ALGL_GET_UNIFORM(modelShader, scale); ALGL_GET_UNIFORM(modelShader, colour); ALGL_GET_ATTRIB(modelShader, position); ALGL_GET_ATTRIB(modelShader, param); TRY(algl_shader_init_with_sources(&textShader.shader, AL_VERT_SHADER(text), AL_FRAG_SHADER(text), NULL)); ALGL_GET_UNIFORM(textShader, viewportSize); ALGL_GET_UNIFORM(textShader, minCoord); ALGL_GET_UNIFORM(textShader, size); ALGL_GET_UNIFORM(textShader, charMin); ALGL_GET_UNIFORM(textShader, charSize); ALGL_GET_UNIFORM(textShader, font); ALGL_GET_UNIFORM(textShader, colour); ALGL_GET_UNIFORM(textShader, edge); ALGL_GET_ATTRIB(textShader, position); TRY(algl_texture_init(&textShader.texture)); TRY(algl_texture_load_from_buffer(textShader.texture, images_font_png, images_font_png_size)); fontInfo.numCharsW = 16; fontInfo.numCharsH = 16; fontInfo.charWidth = 0.5; fontInfo.xAdvance = 100.0 / 256.0; fontInfo.edgeCenter = 0.38; fontInfo.edgeSpread = 4.0; CATCH( free_shaders(); )
int do_sync_pull(const char *rpath, const char *lpath, int show_progress, int copy_attrs) { unsigned mode, time; struct stat st; std::string error; int fd = adb_connect("sync:", &error); if (fd < 0) { fprintf(stderr,"error: %s\n", error.c_str()); return 1; } if(sync_readtime(fd, rpath, &time, &mode)) { return 1; } if(mode == 0) { fprintf(stderr,"remote object '%s' does not exist\n", rpath); return 1; } if(S_ISREG(mode) || S_ISLNK(mode) || S_ISCHR(mode) || S_ISBLK(mode)) { if(stat(lpath, &st) == 0) { if(S_ISDIR(st.st_mode)) { /* if we're copying a remote file to a local directory, ** we *really* want to copy to localdir + "/" + remotefilename */ const char *name = adb_dirstop(rpath); if(name == 0) { name = rpath; } else { name++; } int tmplen = strlen(name) + strlen(lpath) + 2; char *tmp = reinterpret_cast<char*>(malloc(tmplen)); if(tmp == 0) return 1; snprintf(tmp, tmplen, "%s/%s", lpath, name); lpath = tmp; } } BEGIN(); if (sync_recv(fd, rpath, lpath, show_progress)) { return 1; } else { if (copy_attrs && set_time_and_mode(lpath, time, mode)) return 1; END(); sync_quit(fd); return 0; } } else if(S_ISDIR(mode)) { BEGIN(); if (copy_remote_dir_local(fd, rpath, lpath, copy_attrs)) { return 1; } else { END(); sync_quit(fd); return 0; } } else { fprintf(stderr,"remote object '%s' not a file or directory\n", rpath); return 1; } }
/** *** Main() **/ int main(int argc, char* argv[]) { int res, verbose = 0, do_read = 0, do_write=1, do_interactive = 0, vid = FAN_VID, pid = FAN_PID, report_size=FAN_SIZE; int serial = 0; char *name; unsigned char buf[256], program[2 * FAN_STEPS]; #define MAX_STR 255 wchar_t wstr[MAX_STR]; hid_device *handle; int i; #ifdef WIN32 UNREFERENCED_PARAMETER(argc); UNREFERENCED_PARAMETER(argv); #endif // parse the command-line for(int i=1; i<argc; i++) { if ( !strncmp(argv[i], "--vid=", 6) ) sscanf(argv[i]+6, "%X", &vid); if ( !strncmp(argv[i], "--pid=", 6) ) sscanf(argv[i]+6, "%X", &pid); if ( !strcmp(argv[i], "--verbose") ) verbose = 1; if ( !strcmp(argv[i], "--read") ) do_read = 1; if ( !strcmp(argv[i], "--help") ) { printf("fanbot: control fanbot via USB HID communication\n" "kekbot.org - rev 1.0 - " __DATE__ " " __TIME__ "\n" "USE: \n" " fanbot [options] [data]\n" " --vid=0xABCD VID to use (default=0x%4.4X)\n" " --pid=0xABCD PID to use (default=0x%4.4X)\n" " --verbose Show more information\n", FAN_VID, FAN_PID, FAN_SIZE ); exit(1); } } // Wait for connection while( 1 ) { if ( verbose ) printf("Wait for connection...\n"); handle = hid_open(vid, pid, NULL); if ( handle ) break; // we have a connection Sleep(500); // usleep(1000*100); } hid_flush(handle); // Read serial# and name buf[1] = 0; res = hid_read(handle, buf, sizeof(buf)); memcpy(&serial, &buf[8], sizeof(serial) ); name = (char*)&buf[12]; printf("CONNECT %X %s\n", serial, name); memset(buf, 0, sizeof(buf)); read_program(handle, program); print_program(program); if ( verbose ) { // Read the Manufacturer String wstr[0] = 0x0000; res = hid_get_manufacturer_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read manufacturer string\n"); else printf("Manufacturer String: %ls\n", wstr); // Read the Product String wstr[0] = 0x0000; res = hid_get_product_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read product string\n"); else printf("Product String: %ls\n", wstr); // Read the Serial Number String wstr[0] = 0x0000; res = hid_get_serial_number_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read serial number string\n"); else printf("Serial Number String: (%d) %ls", wstr[0], wstr); printf("\n"); // Read Indexed String 1 wstr[0] = 0x0000; res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); if (res < 0) printf("Unable to read indexed string 1\n"); else printf("Indexed String 1: %ls\n", wstr); } #define BEGIN() pch = strtok (str,",. ") #define NEXT() pch = strtok (NULL,",. ") #define COMMAND(s) (!strncmp(pch, s, sizeof(s)-1)) while ( 1 ) { char str[MAX_STR], *pch; fgets(str , MAX_STR-1, stdin); if ( strlen(str) < 1 ) continue; BEGIN(); if ( COMMAND("SET") ) { int leds=0, s1=0, s2=0; if ( (NEXT()) != NULL ) sscanf(pch, "%d", &leds); if ( (NEXT()) != NULL ) sscanf(pch, "%d", &s1); if ( (NEXT()) != NULL ) sscanf(pch, "%d", &s2); buf[1] = CMD_SET; buf[2] = leds; buf[3] = s1; buf[4] = s2; res = hid_write(handle, buf, report_size); } else if ( COMMAND("PLAY") ) { int n = 1; buf[1] = CMD_PLAY; if ( (NEXT()) != NULL ) sscanf(pch, "%d", &n); buf[2] = n; res = hid_write(handle, buf, report_size); } else if ( COMMAND("PROGRAM") ) { int i = 2, val = 0; memset(buf,0,sizeof(buf)); buf[1] = CMD_PROGRAM; while ( (NEXT()) != NULL ) { sscanf(pch, "%d", &val); buf[i++] = val; } res = hid_write(handle, buf, report_size); } else if ( COMMAND("NAME") ) { buf[1] = CMD_NAME; memset(&buf[2], 0, 32); for(i=0; i<32 && str[i+5] != 0 && str[i+5] != '\n' && str[i+5] != '\r'; i++) buf[i+2] = (unsigned char) str[i+5]; res = hid_write(handle, buf, report_size); } else if ( COMMAND("STOP") ) { buf[1] = CMD_STOP; res = hid_write(handle, buf, report_size); } else if ( COMMAND("READ") ) // read memory content { res = read_program(handle, program); if ( res < 0 ) break; print_program(program); } else if ( COMMAND("QUIT") ) { break; } else buf[1] = CMD_NONE; if (res < 0) { printf("ERROR: Unable to write(), '%ls'\n", hid_error(handle)); exit(1); } } printf("DISCONNECT\n"); hid_close(handle); hid_exit();/* Free static HIDAPI objects. */ return res; }
static void test_write_nesting(void) { struct spdk_json_write_ctx *w; BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_END(); VAL_ARRAY_END(); END("[[]]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_END(); VAL_ARRAY_END(); VAL_ARRAY_END(); END("[[[]]]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_ARRAY_BEGIN(); VAL_ARRAY_END(); VAL_ARRAY_END(); END("[0,[]]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_END(); VAL_INT32(0); VAL_ARRAY_END(); END("[[],0]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_ARRAY_BEGIN(); VAL_INT32(1); VAL_ARRAY_END(); VAL_INT32(2); VAL_ARRAY_END(); END("[0,[1],2]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_INT32(1); VAL_ARRAY_BEGIN(); VAL_INT32(2); VAL_INT32(3); VAL_ARRAY_END(); VAL_INT32(4); VAL_INT32(5); VAL_ARRAY_END(); END("[0,1,[2,3],4,5]"); BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("a"); VAL_OBJECT_BEGIN(); VAL_OBJECT_END(); VAL_OBJECT_END(); END("{\"a\":{}}"); BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("a"); VAL_OBJECT_BEGIN(); VAL_NAME("b"); VAL_INT32(0); VAL_OBJECT_END(); VAL_OBJECT_END(); END("{\"a\":{\"b\":0}}"); BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("a"); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_ARRAY_END(); VAL_OBJECT_END(); END("{\"a\":[0]}"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("a"); VAL_INT32(0); VAL_OBJECT_END(); VAL_ARRAY_END(); END("[{\"a\":0}]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("a"); VAL_OBJECT_BEGIN(); VAL_NAME("b"); VAL_ARRAY_BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("c"); VAL_INT32(1); VAL_OBJECT_END(); VAL_INT32(2); VAL_ARRAY_END(); VAL_NAME("d"); VAL_INT32(3); VAL_OBJECT_END(); VAL_NAME("e"); VAL_INT32(4); VAL_OBJECT_END(); VAL_INT32(5); VAL_ARRAY_END(); END("[{\"a\":{\"b\":[{\"c\":1},2],\"d\":3},\"e\":4},5]"); /* Examples from RFC 7159 */ BEGIN(); VAL_OBJECT_BEGIN(); VAL_NAME("Image"); VAL_OBJECT_BEGIN(); VAL_NAME("Width"); VAL_INT32(800); VAL_NAME("Height"); VAL_INT32(600); VAL_NAME("Title"); VAL_STRING("View from 15th Floor"); VAL_NAME("Thumbnail"); VAL_OBJECT_BEGIN(); VAL_NAME("Url"); VAL_STRING("http://www.example.com/image/481989943"); VAL_NAME("Height"); VAL_INT32(125); VAL_NAME("Width"); VAL_INT32(100); VAL_OBJECT_END(); VAL_NAME("Animated"); VAL_FALSE(); VAL_NAME("IDs"); VAL_ARRAY_BEGIN(); VAL_INT32(116); VAL_INT32(943); VAL_INT32(234); VAL_INT32(38793); VAL_ARRAY_END(); VAL_OBJECT_END(); VAL_OBJECT_END(); END( "{\"Image\":" "{" "\"Width\":800," "\"Height\":600," "\"Title\":\"View from 15th Floor\"," "\"Thumbnail\":{" "\"Url\":\"http://www.example.com/image/481989943\"," "\"Height\":125," "\"Width\":100" "}," "\"Animated\":false," "\"IDs\":[116,943,234,38793]" "}" "}"); }
static void test_write_array(void) { struct spdk_json_write_ctx *w; BEGIN(); VAL_ARRAY_BEGIN(); VAL_ARRAY_END(); END("[]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_ARRAY_END(); END("[0]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_INT32(1); VAL_ARRAY_END(); END("[0,1]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_INT32(0); VAL_INT32(1); VAL_INT32(2); VAL_ARRAY_END(); END("[0,1,2]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_STRING("a"); VAL_ARRAY_END(); END("[\"a\"]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_STRING("a"); VAL_STRING("b"); VAL_ARRAY_END(); END("[\"a\",\"b\"]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_STRING("a"); VAL_STRING("b"); VAL_STRING("c"); VAL_ARRAY_END(); END("[\"a\",\"b\",\"c\"]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_TRUE(); VAL_ARRAY_END(); END("[true]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_TRUE(); VAL_FALSE(); VAL_ARRAY_END(); END("[true,false]"); BEGIN(); VAL_ARRAY_BEGIN(); VAL_TRUE(); VAL_FALSE(); VAL_TRUE(); VAL_ARRAY_END(); END("[true,false,true]"); }
int test_extension(struct context *ctx) { BEGIN(); struct endpoint *a = &ctx->a, *b = &ctx->b; struct call *a_call = a->call, *b_call = b->call; struct event *e; sip_t const *sip; /* Test for EXTENSION A B |------EXTENSION---->| |<--------501--------| (method not recognized) | | |------EXTENSION---->| |<-------200---------| (method allowed, responded) | | */ if (print_headings) printf("TEST NUA-13.1: EXTENSION\n"); TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END())); /* Test first without NUTAG_METHOD() */ METHOD(a, a_call, a_call->nh, TAG_IF(!ctx->proxy_tests, NUTAG_URL(b->contact->m_url)), TAG_END()); run_ab_until(ctx, -1, save_until_final_response, -1, NULL); /* Client events: nua_method(), nua_r_method */ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_r_method); TEST(e->data->e_status, 900); /* Internal error */ TEST_1(!e->data->e_msg); TEST_1(!e->next); free_events_in_list(ctx, a->events); nua_handle_destroy(a_call->nh), a_call->nh = NULL; TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END())); METHOD(a, a_call, a_call->nh, TAG_IF(!ctx->proxy_tests, NUTAG_URL(b->contact->m_url)), NUTAG_METHOD("EXTENSION"), TAG_END()); run_ab_until(ctx, -1, save_until_final_response, -1, NULL); /* Client events: nua_method(), nua_r_method */ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_r_method); TEST(e->data->e_status, 501); TEST_1(!e->next); free_events_in_list(ctx, a->events); nua_handle_destroy(a_call->nh), a_call->nh = NULL; free_events_in_list(ctx, b->events); nua_handle_destroy(b_call->nh), b_call->nh = NULL; nua_set_params(b->nua, NUTAG_ALLOW("EXTENSION"), TAG_END()); run_b_until(ctx, nua_r_set_params, until_final_response); TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END())); METHOD(a, a_call, a_call->nh, TAG_IF(!ctx->proxy_tests, NUTAG_URL(b->contact->m_url)), NUTAG_METHOD("EXTENSION"), TAG_END()); run_ab_until(ctx, -1, save_until_final_response, -1, respond_to_extension); /* Client events: nua_method(), nua_r_method */ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_r_method); TEST(e->data->e_status, 200); TEST_1(sip = sip_object(e->data->e_msg)); TEST_1(!e->next); /* Server events: nua_i_method */ TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_i_method); TEST(e->data->e_status, 100); TEST_1(!e->next); free_events_in_list(ctx, a->events); nua_handle_destroy(a_call->nh), a_call->nh = NULL; free_events_in_list(ctx, b->events); nua_handle_destroy(b_call->nh), b_call->nh = NULL; nua_set_params(b->nua, SIPTAG_ALLOW(b->allow), NUTAG_APPL_METHOD(NULL), NUTAG_APPL_METHOD(b->appl_method), TAG_END()); run_b_until(ctx, nua_r_set_params, until_final_response); if (print_headings) printf("TEST NUA-13.1: PASSED\n"); END(); }
DECLARE(int **, __ctype_tolower_loc, void) { BEGIN(__ctype_tolower_loc); int ** ret_ptr = REAL(__ctype_tolower_loc)(); RETURN_PTR(ret_ptr, ret_ptr, (char*) (ret_ptr + 1)); }
uint256 CBlock::ComputeMerkleRoot(bool* fMutated) const { /* WARNING! If you're reading this because you're learning about crypto and/or designing a new system that will use merkle trees, keep in mind that the following merkle tree algorithm has a serious flaw related to duplicate txids, resulting in a vulnerability (CVE-2012-2459). The reason is that if the number of hashes in the list at a given time is odd, the last one is duplicated before computing the next level (which is unusual in Merkle trees). This results in certain sequences of transactions leading to the same merkle root. For example, these two trees: A A / \ / \ B C B C / \ | / \ / \ D E F D E F F / \ / \ / \ / \ / \ / \ / \ 1 2 3 4 5 6 1 2 3 4 5 6 5 6 for transaction lists [1,2,3,4,5,6] and [1,2,3,4,5,6,5,6] (where 5 and 6 are repeated) result in the same root hash A (because the hash of both of (F) and (F,F) is C). The vulnerability results from being able to send a block with such a transaction list, with the same merkle root, and the same block hash as the original without duplication, resulting in failed validation. If the receiving node proceeds to mark that block as permanently invalid however, it will fail to accept further unmodified (and thus potentially valid) versions of the same block. We defend against this by detecting the case where we would hash two identical hashes at the end of the list together, and treating that identically to the block having an invalid merkle root. Assuming no double-SHA256 collisions, this will detect all known ways of changing the transactions without affecting the merkle root. */ std::vector<uint256> vMerkleTree; vMerkleTree.reserve(vtx.size() * 2 + 16); // Safe upper bound for the number of total nodes. for (std::vector<CTransaction>::const_iterator it(vtx.begin()); it != vtx.end(); ++it) vMerkleTree.push_back(it->GetHash()); int j = 0; bool mutated = false; for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) { for (int i = 0; i < nSize; i += 2) { int i2 = std::min(i+1, nSize-1); if (i2 == i + 1 && i2 + 1 == nSize && vMerkleTree[j+i] == vMerkleTree[j+i2]) { // Two identical hashes at the end of the list at a particular level. mutated = true; } vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j+i]), END(vMerkleTree[j+i]), BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); } j += nSize; } if (fMutated) { *fMutated = mutated; } return (vMerkleTree.empty() ? uint256() : vMerkleTree.back()); }
DECLARE(FILE*, fopen, const char *fname, const char *mode) { BEGIN(fopen); FILE *ret_ptr = REAL(fopen)(fname, mode); RETURN_PTR(ret_ptr, ret_ptr, (char*) ret_ptr + /* HACK */ 1024 * 1024); }
DECLARE(char *, strstr, const char *haystack, const char *needle) { BEGIN(strstr); char *ret_ptr = REAL(strstr)(haystack, needle); RETURN_PTR(ret_ptr, ret_ptr, (char*) ret_ptr + (ret_ptr ? strlen(ret_ptr) + 1 : 1)); }
int test_any(void) { /* Test any (*) urls */ url_t any[1] = { URL_INIT_AS(any) }; su_home_t home[1] = { SU_HOME_INIT(home) }; url_t *u, url[1]; char *tst; BEGIN(); TEST_S(url_scheme(url_any), "*"); TEST_S(url_scheme(url_mailto), "mailto"); TEST_S(url_scheme(url_im), "im"); TEST_S(url_scheme(url_cid), "cid"); TEST_S(url_scheme(url_msrp), "msrp"); TEST_S(url_scheme(url_msrps), "msrps"); TEST_1(tst = su_strdup(home, "*")); TEST(url_d(url, tst), 0); TEST(url_cmp(any, url), 0); TEST(url->url_type, url_any); TEST_1(u = url_hdup(home, url)); TEST(u->url_type, url_any); TEST(url_cmp(any, u), 0); url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t *)"*", NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); { char buf[6]; TEST_1(u = url_hdup(home, (void *)"error")); TEST_SIZE(url_xtra(u), 6); TEST_SIZE(url_dup(buf, 6, url, u), 6); TEST_S(buf, "error"); } { TEST_1(u = url_hdup(home, (void *)"scheme:test")); TEST(u->url_type, url_unknown); } { TEST_1(u = url_hdup(home, (void *)"*;param=foo?query=bar")); TEST(u->url_type, url_unknown); TEST_S(u->url_host, "*"); TEST_S(u->url_params, "param=foo"); TEST_S(u->url_headers, "query=bar"); } { TEST_1(u = url_hdup(home, (void *)"#foo")); TEST(u->url_type, url_unknown); TEST_S(u->url_fragment, "foo"); } { url_t u[1]; char b2[6] = ""; memset(u, 0xff, sizeof u); TEST(url_d(u, b2), 0); TEST(u->url_type, url_unknown); } su_home_deinit(home); END(); }
DECLARE(FILE*, tmpfile, void) { BEGIN(tmpfile); void* ret_ptr = REAL(tmpfile)(); RETURN_PTR(ret_ptr, ret_ptr, (char*) ret_ptr + sizeof(FILE)); }
/* test unquoting and canonizing */ int test_quote(void) { su_home_t home[1] = { SU_HOME_INIT(home) }; url_t *u; char s[] = "%73ip:q%74est%01:%01%02%00@host%2enokia.com;%70aram=%01%02"; char c[] = "sip:qtest%01:%01%02%[email protected];param=%01%02"; char *d; #define RESERVED ";/?:@&=+$," #define DELIMS "<>#%\"" #define UNWISE "{}|\\^[]`" #define EXCLUDED RESERVED DELIMS UNWISE char escaped[1 + 3 * 23 + 1]; #define UNRESERVED "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "abcdefghijklmnopqrstuvwxyz" \ "0123456789" \ "-_.!~*'()" char unreserved[26 + 26 + 10 + 9 + 1]; BEGIN(); d = url_as_string(home, (url_t *)"sip:[email protected]"); TEST_S(d, "sip:[email protected]"); TEST(strlen(EXCLUDED), 23); TEST(strlen(UNRESERVED), 71); TEST_1(!url_reserved_p("foo")); TEST_1(!url_reserved_p("")); TEST_1(url_reserved_p("foobar:bar")); TEST_SIZE(url_esclen("a" EXCLUDED, ""), 1 + strlen(RESERVED) + 3 * strlen(DELIMS UNWISE)); TEST_SIZE(url_esclen("a" EXCLUDED, DELIMS UNWISE), 1 + strlen(RESERVED) + 3 * strlen(DELIMS UNWISE)); TEST_SIZE(url_esclen("a" EXCLUDED, EXCLUDED), 1 + 3 * strlen(EXCLUDED)); TEST_SIZE(url_esclen("a" EXCLUDED, NULL), 1 + 3 * strlen(EXCLUDED)); TEST_S(url_escape(escaped, "a" EXCLUDED, NULL), "a%3B%2F%3F%3A%40%26%3D%2B%24%2C" "%3C%3E%23%25%22" "%7B%7D%7C%5C%5E%5B%5D%60"); TEST_S(url_unescape(escaped, escaped), "a" EXCLUDED); TEST_SIZE(url_esclen(UNRESERVED, NULL), strlen(UNRESERVED)); TEST_S(url_escape(unreserved, UNRESERVED, NULL), UNRESERVED); TEST_S(url_unescape(unreserved, UNRESERVED), UNRESERVED); d = "%53ip:%75@%48"; /* Sip:u@H */ u = url_hdup(home, (url_t *)d); TEST_1(u); url_digest(hash1, sizeof(hash1), u, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)d, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); d = "sip:u@h"; u = url_hdup(home, (url_t *)d); TEST_1(u); url_digest(hash1, sizeof(hash1), u, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); url_digest(hash2, sizeof(hash2), (url_t const *)d, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); u = url_hdup(home, (url_t *)s); TEST_1(u); d = url_as_string(home, u); TEST_1(d); TEST_S(d, c); d = "sip:&=+$,;?/:&=+$,@[::1]:56001;param=+$,/:@&;another=@%40%2F" "?header=" RESERVED "&%3b%2f%3f%3a%40%26%3d%2b%24%2c"; u = url_hdup(home, (url_t *)d); TEST_1(u); TEST_S(u->url_user, "&=+$,;?/"); TEST_S(u->url_host, "[::1]"); TEST_S(u->url_params, "param=+$,/:@&;another=@%40/"); TEST_S(u->url_headers, "header=" RESERVED "&%3B%2F%3F%3A%40%26%3D%2B%24%2C"); url_digest(hash1, sizeof(hash1), u, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)d, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); u = url_hdup(home, (url_t *)s); TEST_1(u); d = url_as_string(home, u); TEST_1(d); TEST_S(d, c); d = "http://&=+$,;:&=+$,;@host:8080/foo%2F%3B%3D" ";param=+$,%2f%3b%3d/bar;param=:@&;another=@" "?query=" RESERVED; u = url_hdup(home, (url_t *)d); TEST_1(u); TEST_S(u->url_user, "&=+$,;"); TEST_S(u->url_password, "&=+$,;"); TEST_S(u->url_path, "foo%2F%3B%3D;param=+$,%2F%3B%3D/bar;param=:@&;another=@"); url_digest(hash1, sizeof(hash1), u, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)d, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); u = url_hdup(home, (url_t *)s); TEST_1(u); d = url_as_string(home, u); TEST_1(d); TEST_S(d, c); url_digest(hash1, sizeof(hash1), u, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)s, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); url_digest(hash2, sizeof(hash2), (url_t const *)c, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); END(); }
DECLARE(DIR*, fdopendir, int fd) { BEGIN(fdopendir); void* ret_ptr = REAL(fdopendir)(fd); RETURN_PTR(ret_ptr, ret_ptr, (char*) ret_ptr + /* HACK */ 1024 * 1024); }
FPC_DLL::FPC_DLL() { BEGIN(); }
// max_nonce is not used by this function int scanhash_hodl( int threadNumber, struct work* work, uint32_t max_nonce, uint64_t *hashes_done ) { unsigned char *mainMemoryPsuedoRandomData = hodl_scratchbuf; uint32_t *pdata = work->data; uint32_t *ptarget = work->target; //retreive target std::stringstream s; for (int i = 7; i>=0; i--) s << strprintf("%08x", ptarget[i]); //retreive preveios hash std::stringstream p; for (int i = 0; i < 8; i++) p << strprintf("%08x", swab32(pdata[8 - i])); //retreive merkleroot std::stringstream m; for (int i = 0; i < 8; i++) m << strprintf("%08x", swab32(pdata[16 - i])); CBlock pblock; pblock.SetNull(); pblock.nVersion=swab32(pdata[0]); pblock.nNonce=swab32(pdata[19]); pblock.nTime=swab32(pdata[17]); pblock.nBits=swab32(pdata[18]); pblock.hashPrevBlock=uint256S(p.str()); pblock.hashMerkleRoot=uint256S(m.str()); uint256 hashTarget=uint256S(s.str()); int collisions=0; uint256 hash; //Begin AES Search //Allocate temporary memory uint32_t cacheMemorySize = (1<<L2CACHE_TARGET); //2^12 = 4096 bytes uint32_t comparisonSize=(1<<(PSUEDORANDOM_DATA_SIZE-L2CACHE_TARGET)); //2^(30-12) = 256K unsigned char *cacheMemoryOperatingData; unsigned char *cacheMemoryOperatingData2; cacheMemoryOperatingData=new unsigned char[cacheMemorySize+16]; cacheMemoryOperatingData2=new unsigned char[cacheMemorySize]; //Create references to data as 32 bit arrays uint32_t* cacheMemoryOperatingData32 = (uint32_t*)cacheMemoryOperatingData; uint32_t* cacheMemoryOperatingData322 = (uint32_t*)cacheMemoryOperatingData2; //Search for pattern in psuedorandom data unsigned char key[32] = {0}; unsigned char iv[AES_BLOCK_SIZE]; int outlen1, outlen2; //Iterate over the data // int searchNumber=comparisonSize/totalThreads; int searchNumber = comparisonSize / opt_n_threads; int startLoc=threadNumber*searchNumber; EVP_CIPHER_CTX ctx; for(int32_t k = startLoc;k<startLoc+searchNumber && !work_restart[threadNumber].restart;k++){ //copy data to first l2 cache memcpy((char*)&cacheMemoryOperatingData[0], (char*)&mainMemoryPsuedoRandomData[k*cacheMemorySize], cacheMemorySize); for(int j=0;j<AES_ITERATIONS;j++){ //use last 4 bytes of first cache as next location uint32_t nextLocation = cacheMemoryOperatingData32[(cacheMemorySize/4)-1]%comparisonSize; //Copy data from indicated location to second l2 cache - memcpy((char*)&cacheMemoryOperatingData2[0], (char*)&mainMemoryPsuedoRandomData[nextLocation*cacheMemorySize], cacheMemorySize); //XOR location data into second cache for(uint32_t i = 0; i < cacheMemorySize/4; i++) cacheMemoryOperatingData322[i] = cacheMemoryOperatingData32[i] ^ cacheMemoryOperatingData322[i]; memcpy(key,(unsigned char*)&cacheMemoryOperatingData2[cacheMemorySize-32],32); memcpy(iv,(unsigned char*)&cacheMemoryOperatingData2[cacheMemorySize-AES_BLOCK_SIZE],AES_BLOCK_SIZE); EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv); EVP_EncryptUpdate(&ctx, cacheMemoryOperatingData, &outlen1, cacheMemoryOperatingData2, cacheMemorySize); EVP_EncryptFinal(&ctx, cacheMemoryOperatingData + outlen1, &outlen2); EVP_CIPHER_CTX_cleanup(&ctx); } //use last X bits as solution uint32_t solution=cacheMemoryOperatingData32[(cacheMemorySize/4)-1]%comparisonSize; if(solution<1000){ uint32_t proofOfCalculation=cacheMemoryOperatingData32[(cacheMemorySize/4)-2]; pblock.nStartLocation = k; pblock.nFinalCalculation = proofOfCalculation; hash = Hash(BEGIN(pblock.nVersion), END(pblock.nFinalCalculation)); collisions++; if (UintToArith256(hash) <= UintToArith256(hashTarget) && !work_restart[threadNumber].restart){ pdata[21] = swab32(pblock.nFinalCalculation); pdata[20] = swab32(pblock.nStartLocation); *hashes_done = collisions; //free memory delete [] cacheMemoryOperatingData; delete [] cacheMemoryOperatingData2; return 1; } } } //free memory delete [] cacheMemoryOperatingData; delete [] cacheMemoryOperatingData2; *hashes_done = collisions; return 0; }