QString OAuthPrivate::buildAuthHeader(const QString & method, const QString & url, const Params & data, const QString & verifier) { QMap<QString, QString> params; params.insert("oauth_consumer_key", consumerKey.toAscii()); params.insert("oauth_nonce", Helper::identifier(42)); params.insert("oauth_signature_method", "HMAC-SHA1"); params.insert("oauth_timestamp", QString("%1").arg(Helper::timestamp())); params.insert("oauth_version", "1.0"); if(!verifier.isEmpty()) params.insert("oauth_verifier", verifier); if(!oauthToken.isEmpty()) params.insert("oauth_token", oauthToken.toAscii()); params.unite(data); QString authStr; Params::const_iterator i = params.constBegin(); params.insert("oauth_signature", signature(signingKey(consumerSecret, oauthTokenSecret), baseString(method, url, paramsString(params)))); while (i != params.constEnd()){ authStr += QUrl::toPercentEncoding(i.key()) + "=\"" + QUrl::toPercentEncoding(i.value()) + "\", "; ++i; } return authStr.mid(0, authStr.length() - 2); }
bool PaymentCode::Sign( const uint32_t nym, const Credential& credential, proto::Signature& sig, const OTPasswordData* pPWData) const { if (!pubkey_) { otErr << __FUNCTION__ << ": Payment code not instantiated.\n"; return false; } serializedAsymmetricKey privatekey = App::Me().Crypto().BIP32().GetPaymentCode(nym); if (!privatekey) { otErr << __FUNCTION__ << ": Failed to derive private key for" << " payment code.\n"; return false; } OTData existingKeyData, compareKeyData; serializedAsymmetricKey compareKey = App::Me().Crypto().BIP32().PrivateToPublic(*privatekey); compareKey->clear_path(); std::dynamic_pointer_cast<AsymmetricKeySecp256k1> (pubkey_)->GetKey(existingKeyData); compareKeyData.Assign(compareKey->key().c_str(), compareKey->key().size()); if (!(existingKeyData == compareKeyData)) { otErr << __FUNCTION__ << ": Private key is not valid for this" << " payment code.\n"; return false; } std::unique_ptr<OTAsymmetricKey> signingKey(OTAsymmetricKey::KeyFactory(*privatekey)); serializedCredential serialized = credential.asSerialized( Credential::AS_PUBLIC, Credential::WITHOUT_SIGNATURES); bool goodSig = signingKey->Sign( proto::ProtoAsData<proto::Credential>(*serialized), sig, pPWData, nullptr, ID(), proto::SIGROLE_NYMIDSOURCE); return goodSig; }