<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, May 17, 2018 at 11:35 AM, Ben McGinnes <span dir="ltr"><<a href="mailto:ben@adversary.org" target="_blank">ben@adversary.org</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> Does the website encrypt the file uploaded by (eventually) some end<br>> user or do they encrypt the file first and then upload that which your<br>> code subsequently decrypts? </blockquote><div><br></div><div>The file is encrypted first by the user and then uploaded to which my code subsequently decrypts it.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"></blockquote><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> Yeah, this is strange, but we'll need more info to work out what's<br>> going on.  Are you able to share the code for what's happening here<br>> and, if the website also encrypts the uploaded data, that bit too?<br></blockquote><div><br></div><div>Certainly! I've provided the entire GPGME portion of the function below, I'm not entirely certain if this is acceptable to call every time my program decides to attempt a decrypt though (Feel free to highlight my errors):</div><div><br></div><div><div>gpgme_check_version(NULL);</div><div>setlocale (LC_ALL, "");</div></div><div><div>gpgme_error_t err, stat;</div><div>gpgme_ctx_t ctx;</div><div>gpgme_decrypt_result_t decResult;</div><div>gpgme_data_t fileEncrypted, fileDecrypted, keydata;</div><div>int systemVal;</div><div>std::string tempFile = "TemporaryFile";</div><div>std::string newFileName = "Decrypted";</div><div>std::string newFileNameExt = newFileName + ".tar.gz";</div><div>const char* name = newFileNameExt.c_str();</div><div><br></div><div>err = gpgme_new(&ctx);<br></div></div><div><div>err = gpgme_engine_check_version (GPGME_PROTOCOL_OpenPGP);</div><div><br></div><div><div>if (boost::filesystem::exists(tempFile))</div><div>{</div><div>    boost::filesystem::remove_all(tempFile);</div><div>}</div><div><br></div><div>boost::filesystem::create_directory(tempFile);<br></div><div><br></div><div>int fdEncrypt = open(fileName, O_RDONLY);</div><div>int fdDecrypt = open(name, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);</div><div><br></div><div>err = gpgme_data_new_from_fd(&fileEncrypted, fdEncrypt);</div><div>err = gpgme_data_new_from_fd(&fileDecrypted, fdDecrypt);</div><div>err = gpgme_op_decrypt_start(ctx, fileEncrypted, fileDecrypted);</div><div>ctx = gpgme_wait(ctx, &stat, 1);</div><div><br></div><div>std::cout << "Decrypt Status: " << gpgme_strerror(err) << std::endl;</div><div><br></div><div>gpgme_decrypt_result_t dResult = gpgme_op_decrypt_result(ctx);</div><div>if (dResult->unsupported_algorithm)</div><div>{</div><div>    std::cout << "invalid decrypt" << std::endl;</div><div>}</div><div><br></div><div>close(fdEncrypt);</div><div>close(fdDecrypt);</div><div>gpgme_release(ctx);<br></div></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> No, that's not normal and I'm wondering how it happened, but there are<br>> some functions which might do it and it may also depend on which<br>> version(s) of GPG and GPGME you're using.  Which are they, by the way?<br></blockquote><div><br></div><div>The version of GPG I am using is 2.0.22 (or 1.4.16) I have both installed but I'm actually not entirely confident which one is being used by GPGME. As for GPGME, I am using Ver 1.11.1. </div><div><br></div><div>Thanks for the reply! <span style="font-size:12.8px">😉</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Cheers,</span></div><div><span style="font-size:12.8px">Randy</span></div></div></div></div>