void QmlCommerce::changePassphrase(const QString& oldPassphrase, const QString& newPassphrase) { auto wallet = DependencyManager::get<Wallet>(); if (wallet->getPassphrase()->isEmpty()) { emit changePassphraseStatusResult(wallet->setPassphrase(newPassphrase)); } else if (wallet->getPassphrase() == oldPassphrase && !newPassphrase.isEmpty()) { emit changePassphraseStatusResult(wallet->changePassphrase(newPassphrase)); } else { emit changePassphraseStatusResult(false); } }
// use the cached _passphrase if it exists, otherwise we need to prompt int passwordCallback(char* password, int maxPasswordSize, int rwFlag, void* u) { // just return a hardcoded pwd for now auto wallet = DependencyManager::get<Wallet>(); auto passphrase = wallet->getPassphrase(); if (passphrase && !passphrase->isEmpty()) { QString saltedPassphrase(*passphrase); saltedPassphrase.append(wallet->getSalt()); strcpy(password, saltedPassphrase.toUtf8().constData()); return static_cast<int>(passphrase->size()); } else { // this shouldn't happen - so lets log it to tell us we have // a problem with the flow... qCCritical(commerce) << "no cached passphrase while decrypting!"; return 0; } }
LPSTR __cdecl _gpg_decrypt(LPCSTR message) { char buffer[ciphertextsize]; char plaintext[plaintextsize]; char keyuserid[keyuseridsize]; int dlgresult; BOOL useridvalid; char *storedpassphrase; char passphrase[passphrasesize]; char *decmessage = 0; int decmessagelen; gpgResult gpgresult; const char *begin = strstr(message, txtbeginpgpmessage); const char *end = strstr(message, txtendpgpmessage); if ((begin!=NULL)&&(end!=NULL)) { strcpy(buffer, ""); strncat(buffer, begin, end-begin+strlen(txtendpgpmessage)); replace(buffer, "\r", ""); replace(buffer, "\n", txtcrlf); ZeroMemory(keyuserid, sizeof(keyuserid)); gpgresult=gpgDetectUserID(keyuserid, buffer); storedpassphrase=NULL; if(gpgresult!=gpgSuccess) { // ErrorMessage(txtwarning, txtdetectuseridfailed, txtverifyoptions); strcpy(keyuserid, txtunknownuserid); useridvalid=FALSE; } else { storedpassphrase=getPassphrase(keyuserid); useridvalid=TRUE; } if(storedpassphrase!=NULL) { strcpy(passphrase, storedpassphrase); ZeroMemory(plaintext, sizeof(plaintext)); gpgresult=gpgDecrypt(plaintext, buffer, passphrase); } else gpgresult=gpgUnknownError; dlgresult=IDOK; while((gpgresult!=gpgSuccess)&&(dlgresult!=IDCANCEL)) { dlgresult=DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_PASSPHRASE), NULL, PassphraseDialogProcedure, (LPARAM)keyuserid); if(dlgresult==IDOK) { strcpy(passphrase, dlgpassphrase); ZeroMemory(dlgpassphrase, passphrasesize); strcat(passphrase, txtcrlf); ZeroMemory(plaintext, sizeof(plaintext)); gpgresult=gpgDecrypt(plaintext, buffer, passphrase); } } if(gpgresult==gpgSuccess) { strcpy(buffer, plaintext); } if ( gpgresult==gpgSuccess && useridvalid==TRUE) addPassphrase(keyuserid, passphrase); ZeroMemory(passphrase, sizeof(passphrase)); decmessagelen = strlen(buffer)+1; decmessage = (char *) LocalAlloc(LPTR,decmessagelen); MoveMemory(decmessage, buffer, decmessagelen); } return decmessage; }