int main(int argc, char** argv) { char* mode = GetArgString(argc, argv, "mode"); char* algo = GetArgString(argc, argv, "algo"); if (mode == NULL || algo == NULL) { PrintUsage(); return -1; } int bsMode = 0; if (strcmp(mode, "benchmark") == 0) bsMode = 0x1; else if (strcmp(mode, "encrypt" ) == 0) bsMode = 0x2; else if (strcmp(mode, "decrypt" ) == 0) bsMode = 0x4; int bsAlgo = 0; if (strcmp(algo, "ecb") == 0) bsAlgo = 0x1; else if (strcmp(algo, "ctr") == 0) bsAlgo = 0x2; if (bsMode == 0 || bsAlgo == 0) { PrintUsage(); return -1; } if (bsMode == 0x1) { if (bsAlgo == 0x1) // Benckmark benchmark_ecb(argc, argv); else if (bsAlgo == 0x2) benchmark_ctr(argc, argv); } else if (bsMode == 0x2) // Encrypt { if (bsAlgo == 0x1) ImageOperationECB(argc, argv, true); else if (bsAlgo == 0x2) ImageOperationCTR(argc, argv); } else if (bsMode == 0x4) // Decrypt { if (bsAlgo == 0x1) ImageOperationECB(argc, argv, false); else if (bsAlgo == 0x2) ImageOperationCTR(argc, argv); } else { PrintUsage(); return -1; } return 0; }
bool MyUPnP::deletePortmap(int eport, const CString& type) { CString args; args.Empty(); args.Append(GetArgString(_T("NewRemoteHost"), _T(""))); args.Append(GetArgString(_T("NewExternalPort"), eport)); args.Append(GetArgString(_T("NewProtocol"), type)); return InvokeCommand(UPNPDELPORTMAP, args); }
bool MyUPnP::addPortmap(int eport, int iport, const CString& iclient, const CString& descri, const CString& type) { CString args; args.Empty(); args.Append(GetArgString(_T("NewRemoteHost"), _T(""))); args.Append(GetArgString(_T("NewExternalPort"), eport)); args.Append(GetArgString(_T("NewProtocol"), type)); args.Append(GetArgString(_T("NewInternalPort"), iport)); args.Append(GetArgString(_T("NewInternalClient"), iclient)); args.Append(GetArgString(_T("NewEnabled"), _T("1"))); args.Append(GetArgString(_T("NewPortMappingDescription"), descri)); args.Append(GetArgString(_T("NewLeaseDuration"), 0)); return InvokeCommand(UPNPADDPORTMAP, args); }
int test1(int argc, char** argv) { // Parse arguments // OpenCL arguments: platform and device cl_int err; int iPlatform = GetArgInt(argc, argv, "p"); int iDevice = GetArgInt(argc, argv, "d"); char* sFileName = GetArgString(argc, argv, "n"); // Allocate Host Memory unsigned char pattern[16] = { 0x32, 0x43, 0xF6, 0xA8, 0x88, 0x5A, 0x30, 0x8D, 0x31, 0x31, 0x98, 0xA2, 0xE0, 0x37, 0x07, 0x34}; unsigned char data[16*256]; for (int i = 0; i < 256; i++) for (int k; k < 16; k++) data[i*16 + k] = pattern[k]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) printf("%2X ", data[i + j*4]); printf("\n"); } printf("\n"); unsigned char key[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C}; unsigned char* roundKeys = NULL; int rounds = 0; ComputeRoundKeys(&roundKeys, &rounds, 16, key); // Set-up OpenCL Platform OCL_Device* pOCL_Device = new OCL_Device(iPlatform, iDevice); pOCL_Device->SetBuildOptions(""); pOCL_Device->PrintInfo(); // Set up OpenCL cl_kernel kernel = pOCL_Device->GetKernel("aes-kernel.cl", "AES_ECB_Encypt4"); // Allocate Device Memory cl_mem d_A = pOCL_Device->DeviceMalloc(0, 16); cl_mem d_B = pOCL_Device->DeviceMalloc(1, 16); cl_mem d_C = pOCL_Device->DeviceMalloc(2, rounds * 16); // Copy Image to Device pOCL_Device->CopyBufferToDevice(data, 0, 16); // Keys pOCL_Device->CopyBufferToDevice(roundKeys, 2, rounds * 16); // Set Kernel Arguments err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &d_A); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &d_B); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &d_C); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(kernel, 3, sizeof(cl_int), &rounds); CHECK_OPENCL_ERROR(err); cl_int _num = 1; err = clSetKernelArg(kernel, 4, sizeof(cl_int), &_num); CHECK_OPENCL_ERROR(err); // Wait for previous action to finish err = clFinish(pOCL_Device->GetQueue()); CHECK_OPENCL_ERROR(err); double seconds = GetTime(); // Run the kernel size_t off = 0; size_t num = 256; size_t threads = 256; err = clEnqueueNDRangeKernel(pOCL_Device->GetQueue(), kernel, 1, NULL, &num, &threads, 0, NULL, NULL); CHECK_OPENCL_ERROR(err); // Wait for kernel to finish err = clFinish(pOCL_Device->GetQueue()); CHECK_OPENCL_ERROR(err); seconds = GetTime() - seconds; printf("Elapsed Time: %f s (%f MiB/s)\n" , seconds, 16 /seconds * 10.f / 1024.f / 1024.f); // Copy Data From Device pOCL_Device->CopyBufferToHost (data, 1, 16); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) printf("%2X ", data[i + j*4]); printf("\n"); } printf("\n"); // Free resources delete pOCL_Device; delete[] roundKeys; //write test data //WriteImageFile("tux2.jpg", img); //free(img.data); return 0; }
int ImageOperationECB(int argc, char** argv, bool bEncrypt = true) { // Parse arguments // OpenCL arguments: platform and device cl_int err; int iPlatform = GetArgInt (argc, argv, "p"); int iDevice = GetArgInt (argc, argv, "d"); char* sInFile = GetArgString(argc, argv, "in"); char* sOutFile = GetArgString(argc, argv, "out"); if (sInFile == NULL || sOutFile == NULL || !FileExists(sInFile)) { PrintUsage(); return -1; } // Initialize ImageMagick Magick::InitializeMagick(*argv); ImageData img = ReadImageFile(sInFile); // Allocate Host Memory unsigned char key[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C}; unsigned char* roundKeys = NULL; int rounds = 0; ComputeRoundKeys(&roundKeys, &rounds, 16, key); // Set-up OpenCL Platform OCL_Device* pOCL_Device = new OCL_Device(iPlatform, iDevice); pOCL_Device->SetBuildOptions(""); pOCL_Device->PrintInfo(); // Set up OpenCL cl_kernel Kernel = pOCL_Device->GetKernel("aes-kernel.cl", bEncrypt ? "AES_ECB_Encrypt" : "AES_ECB_Decrypt"); // Allocate Device Memory cl_mem d_A = pOCL_Device->DeviceMalloc(0, img.padded_bytes); cl_mem d_B = pOCL_Device->DeviceMalloc(1, img.padded_bytes); cl_mem d_C = pOCL_Device->DeviceMalloc(2, rounds * 16); // Copy Image to Device pOCL_Device->CopyBufferToDevice(img.data, 0, img.padded_bytes); // Keys pOCL_Device->CopyBufferToDevice(roundKeys, 2, rounds * 16); // Set Kernel Arguments cl_int _num = img.padded_bytes / 16; err = clSetKernelArg(Kernel, 0, sizeof(cl_mem), &d_A); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(Kernel, 1, sizeof(cl_mem), &d_B); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(Kernel, 2, sizeof(cl_mem), &d_C); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(Kernel, 3, sizeof(cl_int), &rounds); CHECK_OPENCL_ERROR(err); err = clSetKernelArg(Kernel, 4, sizeof(cl_int), &_num); CHECK_OPENCL_ERROR(err); // Wait for previous action to finish err = clFinish(pOCL_Device->GetQueue()); CHECK_OPENCL_ERROR(err); size_t off = 0; size_t num = img.padded_bytes / 16; size_t threads = 256; // Run the kernel err = clEnqueueNDRangeKernel(pOCL_Device->GetQueue(), Kernel, 1, NULL, &num, &threads, 0, NULL, NULL); CHECK_OPENCL_ERROR(err); // Wait for kernel to finish err = clFinish(pOCL_Device->GetQueue()); CHECK_OPENCL_ERROR(err); // Copy Data From Device pOCL_Device->CopyBufferToHost (img.data, 1, img.padded_bytes); // Free resources delete pOCL_Device; delete[] roundKeys; // Write Output data WriteImageFile(sOutFile, img); free(img.data); return 0; }