Hi @ll. I like to encrypt and decrypt large files e.g. pdf files. I wrote some code based on libgcrypt. I tested it with .txt files. Encryption seems to work, but gcry_pk_decrypt works only, if there's a single line in the txt file. If the txt file contains more than one line of text, the result is wrong. But no error occurs.
/** Start encryption */ //read data block InputFile.seekg (0, ios::end); int FileSize = InputFile.tellg(); InputFile.seekg (0, ios::beg); char* Buffer; Buffer = new char[FileSize]; InputFile.read(Buffer,FileSize); //build S-Expression char fmt[] = "(data (flags raw) (value %s))"; char* strSExp = (char *) malloc(strlen(Buffer)+strlen(fmt)); sprintf(strSExp, fmt, (va_list) Buffer); rc = gcry_sexp_build(&sexp, NULL, fmt, strSExp); // Encrypt plaintext rc = gcry_pk_encrypt(&result, sexp, pKey); // Write it to file size_t retSize = gcry_sexp_sprint(result, GCRYSEXP_FMT_ADVANCED, NULL, 0); strSExp = (char *) realloc(strSExp, retSize); retSize = gcry_sexp_sprint(result, GCRYSEXP_FMT_ADVANCED, strSExp, retSize); fwrite( &retSize, 1 , sizeof(retSize) , OutputFile ); fwrite( strSExp , 1 , retSize , OutputFile ); ... /** End encryption */ /** Start decryption */ ... //read size fread(&retSize, 1, sizeof(retSize), InputFile); //read encrypted text Buffer = (char *) malloc(retSize); fread(Buffer, 1, retSize, InputFile); rc = gcry_sexp_new(&sexp, Buffer, 0, 1); //decrypt rc = gcry_pk_decrypt(&result, sexp, sKey); /** End decryption */ After that rc is 0 and result is like that #070E7FE38DC4C2B8657B0329511023D56CA5F895AAF74F4CD764FC5D8093E314C7A09AF009A3BE013AD16C7E891375B0FAC 9AE7E9A7F8E0019023BC225526424# Any help would be appreciated. Yours Claudia _______________________________________________ Gnupg-users mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnupg-users
