void main() { char guid[37]; random_uuid(guid); printf("guid = %s\n", guid); random_uuid(guid); printf("guid = %s\n", guid); random_uuid(guid); printf("guid = %s\n", guid); random_uuid(guid); printf("guid = %s\n", guid); }
int main(int argc, char **argv) { char oneline[100], filename[MAX_PART_ENTRY][36]; gpt_header pri_header, sec_header; char gpt_header_pad[GPT_HEADER_SIZE - sizeof(gpt_header)] = {0}; legacy_mbr leg_mbr; gpt_entry *entry; unsigned long long start[MAX_PART_ENTRY + 1], end[MAX_PART_ENTRY + 1], dev_sz; unsigned int i, j, num; char *output = NULL; int ret; cmdname = argv[0]; while (--argc > 0 && **++argv == '-') { while (*++*argv) { switch (**argv) { case 's': show_content = 1; break; case 'o': if (--argc <= 0) usage(); output = *++argv; goto NXTARG; default: usage(); } } NXTARG: ; } if (output) { num = strlen(output); if (output[num - 1] == SEPERATOR) output[num - 1] = 0; ret = access(output, F_OK); if (ret) { #ifndef __MINGW32__ ret = mkdir(output, S_IRWXU | S_IRWXG | S_IROTH); #else ret = mkdir(output); #endif if (ret) perror("mkdir fail"); } } if (argc != 2) { usage(); exit(EXIT_FAILURE); } if (sscanf(argv[1], "0%*[xX]%100s", oneline) == 1) dev_sz = strtoull(oneline, 0, 16); else dev_sz = strtoull(argv[1], 0, 10); desp = fopen(*argv, "r"); if (!desp) { fprintf(stderr, "Can't open %s: %s\n", *argv, strerror(errno)); exit(EXIT_FAILURE); } num = 0; while (fgets(oneline, sizeof(oneline), desp) != NULL) { switch (sscanf(oneline, "%s\t"OUTPUT"\t"OUTPUT"\n", filename[num], &start[num], &end[num])) { case 2: end[num] = start[num]; break; case 3: end[num] -= SECTOR_SIZE; break; default: fprintf(stderr, "desp file err\n"); fclose(desp); exit(EXIT_FAILURE); } if (strlen(filename[num]) > MAX_NAME_SZ) { fprintf(stderr, "The %dth entry name %s exceed max size of %x\n", num, filename[num], MAX_NAME_SZ); fclose(desp); exit(EXIT_FAILURE); } num++; } fclose(desp); if (num == 0) return 0; start[num] = dev_sz; end[num] = dev_sz; if (end[num - 1] > dev_sz) { fprintf(stderr, "The last entry end 0x"OUTPUT"exceed device size 0x"OUTPUT"\n", end[num - 1], dev_sz); exit(EXIT_FAILURE); } reformat_part_size(start, end, num); entry = malloc(sizeof(gpt_entry) * ENTRY_NUM); if (!entry) { fprintf(stderr, "malloc fail\n"); exit(EXIT_FAILURE); } if (output) { sprintf(mbrfile1, "%s%c%s_"OUTPUT_D, output, SEPERATOR, DEFAULT_MBR_NAME1, dev_sz); sprintf(mbrfile2, "%s%c%s_"OUTPUT_D, output, SEPERATOR, DEFAULT_MBR_NAME2, dev_sz); } else { sprintf(mbrfile1, "%s_"OUTPUT_D, DEFAULT_MBR_NAME1, dev_sz); sprintf(mbrfile2, "%s_"OUTPUT_D, DEFAULT_MBR_NAME2, dev_sz); } memset(entry, 0, sizeof(gpt_entry) * ENTRY_NUM); for (i = 0; i < num; i++) { memcpy(&entry[i].partition_type_guid, &PARTITION_BASIC_DATA_GUID, sizeof(efi_guid_t)); random_uuid((unsigned char *)&entry[i].unique_partition_guid); memcpy(&entry[i].starting_lba, &start[i], 8); memcpy(&entry[i].ending_lba, &end[i], 8); for (j = 0; j < strlen(filename[i]); j++) entry[i].partition_name[j] = filename[i][j]; } dev_sz /= SECTOR_SIZE; memset(&pri_header, 0, sizeof(pri_header)); pri_header.signature = cpu_to_le64(GPT_HEADER_SIGNATURE); pri_header.revision = cpu_to_le32(GPT_HEADER_REVISION_V1); pri_header.header_size = cpu_to_le32(HEADER_SIZE); pri_header.my_lba = cpu_to_le64(1); pri_header.alternate_lba = cpu_to_le64(dev_sz - 1); pri_header.first_usable_lba = cpu_to_le64(FIRST_USABLE_LBA); pri_header.last_usable_lba = cpu_to_le64(dev_sz - FIRST_USABLE_LBA); random_uuid((unsigned char *)&pri_header.disk_guid); pri_header.partition_entry_lba = cpu_to_le64(2); pri_header.num_partition_entries = cpu_to_le32(ENTRY_NUM); pri_header.sizeof_partition_entry = cpu_to_le32(GPT_SIZE); pri_header.partition_entry_array_crc32 = cpu_to_le32( crc32(0, (const unsigned char *)entry, sizeof(gpt_entry) * MAX_PART_ENTRY) ); pri_header.header_crc32 = cpu_to_le32( crc32(0, (const unsigned char *)&pri_header, HEADER_SIZE) ); memcpy(&sec_header, &pri_header, sizeof(pri_header)); memset(&sec_header.header_crc32, 0, 4); sec_header.my_lba = cpu_to_le64(dev_sz - 1); sec_header.alternate_lba = 0; sec_header.alternate_lba = cpu_to_le64(1); sec_header.header_crc32 = cpu_to_le32( crc32(0, (const unsigned char *)&sec_header, HEADER_SIZE) ); memset(&leg_mbr, 0, sizeof(leg_mbr)); leg_mbr.partition_record[0].sector = 1; leg_mbr.partition_record[0].sys_ind = EFI_PMBR_OSTYPE_EFI_GPT; leg_mbr.partition_record[0].end_head = 0xfe; leg_mbr.partition_record[0].end_sector = 0xff; leg_mbr.partition_record[0].end_cyl = 0xff; leg_mbr.partition_record[0].start_sect = cpu_to_le32(1); leg_mbr.partition_record[0].nr_sects = cpu_to_le32(dev_sz); leg_mbr.signature = cpu_to_le16(MSDOS_MBR_SIGNATURE); mbr = fopen(mbrfile1, "wb"); if (!mbr) { fprintf(stderr, "Can't create %s: %s\n", mbrfile1, strerror(errno)); exit(EXIT_FAILURE); } fwrite(&leg_mbr, 1, sizeof(leg_mbr), mbr); fwrite(&pri_header, 1, sizeof(pri_header), mbr); fwrite(gpt_header_pad, 1, sizeof(gpt_header_pad), mbr); fwrite(entry, 1, sizeof(gpt_entry) * ENTRY_NUM, mbr); fclose(mbr); mbr = fopen(mbrfile2, "wb"); if (!mbr) { fprintf(stderr, "Can't create %s: %s\n", mbrfile2, strerror(errno)); exit(EXIT_FAILURE); } fwrite(entry, 1, sizeof(gpt_entry) * ENTRY_NUM, mbr); fwrite(&sec_header, 1, sizeof(sec_header), mbr); fwrite(gpt_header_pad, 1, sizeof(gpt_header_pad), mbr); fclose(mbr); printf("GPT create sucessfull!!!\n" "Please write the primary mbr first from offset 0 to mmc device offset 0 with the size of 0x22\n" "And write the second mbr to mmc device offset 0x"OUTPUT" with the size of 0x21\n", dev_sz - FIRST_USABLE_LBA + 1); return 0; }
static void init_loop_cb(struct uloop_timeout *timeout) { uint32_t id; // replace *d char key_iv[32] = {0}; char repeater_pubkey[] = "-----BEGIN PUBLIC KEY-----\n"\ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyUF9+Td53E0lEqP8eRyM\n"\ "DoREPIety4BJscApuPwcGxiVA+75mYw8AFKlTaWlLL7w/qyuxnOiNm6TTFCxJGI1\n"\ "C9GnABm8myC5hnDSC6qE+E1Al6wZgyI4rkC+Qr7GFI9B8r9bM+RdKyMxD9JuXUcx\n"\ "+rx/TPnJttUfAkCloYStd5LiCel6c/bfWiR5hyxLjXC5Cz5cdpzXwvyvgEBvZHxX\n"\ "A5jqPVfWcJ3P3s88ogPxx52iM4dzLtzWB6BOmZA/3SbvZle2Efy7mVAl/9gkwvgf\n"\ "Dm/TSnMbnUBim3H5CIlECsvs2RuvI5og0S3oEO4B8TQQjujSqbA6h+EcZc9Djmh2\n"\ "vQIDAQAB\n"\ "-----END PUBLIC KEY-----\n"; unsigned char *encrypted=malloc(MAX_ALLOC_LEN); unsigned char *base64=malloc(MAX_ALLOC_LEN); RAND_seed(rnd_seed, sizeof rnd_seed); /* or RSA_PKCS1_PADDING/OAEP may fail */ random_uuid(repeater_key); random_uuid(repeater_iv); memcpy(key_iv, repeater_key, 16); memcpy(key_iv+16, repeater_iv, 16); int encrypted_length= public_encrypt(key_iv, 32, repeater_pubkey, encrypted); if(encrypted_length == -1) { printLastError("Public Encrypt failed "); exit(0); } printf("Encrypted length =%d\n",encrypted_length); printf("Try to init_loop_cb...\n"); int base64_length = base64Encode(base64, encrypted, encrypted_length); // printf("base64 len: %d\n", base64_length); // printf("base64: %s\n", base64); if(ubus_lookup_id(sys->tbus_ctx, "netapi", &id)){ dlog("can't lookup netapi\n"); goto fail; } blob_buf_init(&traffic_b, 0); blobmsg_add_field(&traffic_b, BLOBMSG_TYPE_UNSPEC, "data", base64, base64_length); ubus_invoke(sys->tbus_ctx, id, "init", traffic_b.head, receive_call_result_data, NULL, TRAFFICD_INIT_TIMEOUT); free(encrypted); free(base64); return; fail: free(encrypted); free(base64); uloop_timeout_set(&sd->timeout_init, TRAFFICD_INIT_LOOP_TIME); }
int main( int argc, char const *argv[]) { int serverSock ; int val = 1; struct sockaddr_in serverAddr ; struct sockaddr_in clientAddr ; socklen_t clientAddrLen = sizeof (clientAddr); char buffer [512]; char * uuid = random_uuid(); fprintf(stdout , "%s, %s\n" ,"Start", uuid); fprintf(stdout , "%s, %s\n" ,"Another", random_uuid()); serverSock = socket(AF_INET, SOCK_STREAM , 0 ); if (serverSock == -1 ) { fprintf (stderr, "%s\n" ,"open socket fail"); return - 1; } // Make sure the port can be immediately re-used if (setsockopt(serverSock, SOL_SOCKET , SO_REUSEADDR, &val , sizeof(val )) < 0 ) { fprintf (stderr, "%s\n" ,"can't reuse socket"); close (serverSock); return - 1; } memset(&serverAddr , 0 , sizeof (serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr .s_addr = htonl(INADDR_ANY ); serverAddr.sin_port = htons(12345); if (bind( serverSock, (struct sockaddr *) & serverAddr, sizeof(serverAddr )) != 0 ) { fprintf (stderr, "%s\n" ,"can't bind socket"); close (serverSock); return - 1; } // Listen to socket fprintf(stdout , "%s\n" ,"start listen port 12345"); if (listen( serverSock, 1024) < 0 ) { return - 1; } while(1){ //accept will wait for message coming fprintf (stdout, "%s\n" ,"wait accept"); int clientSock = accept(serverSock , ( struct sockaddr *) &clientAddr, &clientAddrLen ); int total_byte_cnt = 0; for (;;) { int byteCount = read(clientSock , buffer + total_byte_cnt, sizeof(buffer ) - total_byte_cnt - 1); if ( byteCount >= 0 ) { total_byte_cnt += byteCount; buffer [total_byte_cnt] = 0; /* fprintf (stdout, "[1] %d bytes read\n" , byteCount); fprintf (stdout, "%s\n" , "========================" ); fprintf (stdout, "%s\n" , buffer); fprintf (stdout, "%s\n" , "========================" ); */ // char *pch = strstr(buffer,"GET / HTTP/1.1"); char *Upgrade = extract_substring(buffer ,"Upgrade: ","\n"); char *Connection = extract_substring(buffer ,"Connection: ","\n"); //Sec-WebSocket-Protocol should be "chat" char *Sec_WebSocket_Protocol = extract_substring(buffer ,"Sec-WebSocket-Protocol: ","\n"); if (pch == NULL) printf("pch is null"); //printf("[%s]\n", Upgrade); //printf("[%s]\n", Connection); if ((pch == buffer) && ((strcmp(Upgrade,"websocket") == 0) || (strcmp(Upgrade,"Websocket") == 0)) && ((strcmp(Connection,"Upgrade") == 0) || (strcmp(Connection,"keep-alive, Upgrade") == 0)) ){ handle_header(clientSock, buffer); handle_message_loop(clientSock); } // break; } else { //fprintf (stdout, "%s\n" ,"[3] oh no"); break; } } } fprintf(stdout , "%s\n" ,"Finish"); return 0; }