int main(void){ const unsigned char *password = "******"; unsigned char rc4Salt[PKCS5_SALT_LEN + 1] = { 0 }; unsigned char rc4Key[RC4_KEY_LEN + 1] = { 0 }; const char plain[] = "PLAIN_TEXT_PLAIN_TEXT_PLAIN_TEXT\0"; int cipherTextLength = 0; char *ciphertext = { 0 }; char *decryptedtext = { 0 }; if (GenerateKeys(password, strlen(password) + 1, rc4Salt, rc4Key)){ cipherTextLength = Encrypt(&ciphertext, plain, strlen(plain) + 1, rc4Key); if (cipherTextLength > 0){ printf("Encrypted text: %s\n\n", ciphertext); if (Decrypt(&decryptedtext, ciphertext, cipherTextLength, rc4Key) > 0){ printf("Decrypted text: %s\n\n", decryptedtext); if (decryptedtext){ HeapFree(GetProcessHeap(), 0, decryptedtext); decryptedtext = NULL; } } if (ciphertext){ HeapFree(GetProcessHeap(), 0, ciphertext); ciphertext = NULL; } } } return EXIT_SUCCESS; }
void TClient::Register(const std::string& preferedLogin) { lock_guard<mutex> guard(Lock); State.Clear(); if (CurrentState != CS_Disconnected) { throw UException("should be disconnected before logining"); } pair<string, string> loginHost = GetLoginHost(preferedLogin); State.set_login(loginHost.first); State.set_host(loginHost.second); std::vector<TNetworkAddressRef> addresses = GetConnectionAddresses(loginHost.first, loginHost.second); if (addresses.size() == 0) { throw UException("no address found for host"); } // todo: random address selection CurrentState = CS_Registering; pair<string, string> keys = GenerateKeys(); State.set_publickey(keys.second); State.set_privatekey(keys.first); UdtClient->Connect(*addresses[0], false); }
/** * Application entry point * Params: * -Test test if the pak file is healthy * -Extract extracts pak file contents (followed by a path, i.e.: -extract D:\ExtractedPak) * -Create=filename response file to create a pak file with * -Sign=filename use the key pair in filename to sign a pak file, or: -sign=key_hex_values_separated_with_+, i.e: -sign=0x123456789abcdef+0x1234567+0x12345abc * where the first number is the private key exponend, the second one is modulus and the third one is the public key exponent. * -Signed use with -extract and -test to let the code know this is a signed pak * -GenerateKeys=filename generates encryption key pair for signing a pak file * -P=prime will use a predefined prime number for generating encryption key file * -Q=prime same as above, P != Q, GCD(P, Q) = 1 (which is always true if they're both prime) * -GeneratePrimeTable=filename generates a prime table for faster prime number generation (.inl file) * -TableMax=number maximum prime number in the generated table (default is 10000) * * @param ArgC Command-line argument count * @param ArgV Argument strings */ INT32_MAIN_INT32_ARGC_TCHAR_ARGV() { // start up the main loop GEngineLoop.PreInit(ArgC, ArgV); if (ArgC < 2) { UE_LOG(LogPakFile, Error, TEXT("No pak file name specified. Usage:")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak <PakFilename> -Test")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak <PakFilename> -List")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak <PakFilename> -Extract <ExtractDir>")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak <PakFilename> -Create=<ResponseFile> [Options]")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak <PakFilename> -Dest=<MountPoint>")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak GenerateKeys=<KeyFilename>")); UE_LOG(LogPakFile, Error, TEXT(" UnrealPak GeneratePrimeTable=<KeyFilename> [-TableMax=<N>]")); UE_LOG(LogPakFile, Error, TEXT(" Options:")); UE_LOG(LogPakFile, Error, TEXT(" -blocksize=<BlockSize>")); UE_LOG(LogPakFile, Error, TEXT(" -compress")); UE_LOG(LogPakFile, Error, TEXT(" -encrypt")); UE_LOG(LogPakFile, Error, TEXT(" -order=<OrderingFile>")); return 1; } FPakCommandLineParameters CmdLineParameters; int32 Result = 0; FString KeyFilename; if (FParse::Value(FCommandLine::Get(), TEXT("GenerateKeys="), KeyFilename, false)) { Result = GenerateKeys(*KeyFilename) ? 0 : 1; } else if (FParse::Value(FCommandLine::Get(), TEXT("GeneratePrimeTable="), KeyFilename, false)) { int64 MaxPrimeValue = 10000; FParse::Value(FCommandLine::Get(), TEXT("TableMax="), MaxPrimeValue); GeneratePrimeNumberTable(MaxPrimeValue, *KeyFilename); } else { if (FParse::Param(FCommandLine::Get(), TEXT("Test"))) { FString PakFilename = GetPakPath(ArgV[1], false); Result = TestPakFile(*PakFilename) ? 0 : 1; } else if (FParse::Param(FCommandLine::Get(), TEXT("List"))) { FString PakFilename = GetPakPath(ArgV[1], false); Result = ListFilesInPak(*PakFilename); } else if (FParse::Param(FCommandLine::Get(), TEXT("Extract"))) { FString PakFilename = GetPakPath(ArgV[1], false); if (ArgC < 4) { UE_LOG(LogPakFile, Error, TEXT("No extraction path specified.")); Result = 1; } else { FString DestPath = (ArgV[2][0] == '-') ? ArgV[3] : ArgV[2]; Result = ExtractFilesFromPak(*PakFilename, *DestPath) ? 0 : 1; } } else { // since this is for creation, we pass true to make it not look in LaunchDir FString PakFilename = GetPakPath(ArgV[1], true); // List of all items to add to pak file TArray<FPakInputPair> Entries; ProcessCommandLine(ArgC, ArgV, Entries, CmdLineParameters); TMap<FString, uint64> OrderMap; ProcessOrderFile(ArgC, ArgV, OrderMap); if (Entries.Num() == 0) { UE_LOG(LogPakFile, Error, TEXT("No files specified to add to pak file.")); Result = 1; } else { if ( CmdLineParameters.GeneratePatch ) { FString OutputPath = FPaths::GetPath(PakFilename) / FString(TEXT("TempFiles")); IFileManager::Get().DeleteDirectory(*OutputPath); UE_LOG(LogPakFile, Display, TEXT("Generating patch from %s."), *CmdLineParameters.SourcePatchPakFilename ); if ( ExtractFilesFromPak( *CmdLineParameters.SourcePatchPakFilename, *OutputPath, true ) == false ) { UE_LOG(LogPakFile, Error, TEXT("Unable to extract files from source pak file for patch") ); } CmdLineParameters.SourcePatchDiffDirectory = OutputPath; } // Start collecting files TArray<FPakInputPair> FilesToAdd; CollectFilesToAdd(FilesToAdd, Entries, OrderMap); if ( CmdLineParameters.GeneratePatch ) { // if we are generating a patch here we remove files which are already shipped... RemoveIdenticalFiles(FilesToAdd, CmdLineParameters.SourcePatchDiffDirectory); } Result = CreatePakFile(*PakFilename, FilesToAdd, CmdLineParameters) ? 0 : 1; } } } return Result; }