bool OTAccount::SaveContractWallet(OTString & strContents) const { const OTString strAccountID(GetPurportedAccountID()), strServerID(GetPurportedServerID()), strUserID(GetUserID()), strAssetTypeID(m_AcctAssetTypeID); OTString strAcctType; TranslateAccountTypeToString(m_AcctType, strAcctType); OTASCIIArmor ascName; if (m_strName.Exists()) // name is in the clear in memory, and base64 in storage. { ascName.SetString(m_strName, false); // linebreaks == false } strContents.Concatenate("<!-- Last retrieved balance: %s on date: %s -->\n" "<!-- Account type: %s --><assetAccount name=\"%s\"\n" " accountID=\"%s\"\n" " userID=\"%s\"\n" " serverID=\"%s\" />\n" "<!-- assetTypeID: %s -->\n\n", m_BalanceAmount.Get(), m_BalanceDate.Get(), strAcctType.Get(), m_strName.Exists() ? ascName.Get() : "", strAccountID.Get(), strUserID.Get(), strServerID.Get(), strAssetTypeID.Get()); return true; }
void OTSubkey::UpdateContents() { m_xmlUnsigned.Release(); Tag tag("keyCredential"); // a hash of the nymIDSource tag.add_attribute("nymID", GetNymID().Get()); // Hash of the master credential that signed this subcredential. tag.add_attribute("masterID", GetMasterCredID().Get()); if (GetNymIDSource().Exists()) { OTASCIIArmor ascSource; // A nym should always verify through its own // source. (Whatever that may be.) ascSource.SetString(GetNymIDSource()); tag.add_tag("nymIDSource", ascSource.Get()); } // MASTER-SIGNED INFO if (OTSubcredential::credMasterSigned == m_StoreAs || OTSubcredential::credPrivateInfo == m_StoreAs) { UpdatePublicContentsToTag(tag); } // PUBLIC INFO (signed by subkey, contains master signed info.) if (OTSubcredential::credPublicInfo == m_StoreAs || OTSubcredential::credPrivateInfo == m_StoreAs) { // GetMasterSigned() returns the contract // containing the master-signed contents // from the above block. OTASCIIArmor ascMasterSigned(GetMasterSigned()); // Contains all the public info, signed by the master key. // Packaged up here inside a final, subkey-signed credential. tag.add_tag("masterSigned", ascMasterSigned.Get()); } // PRIVATE INFO // // If we're saving the private credential info... if (OTSubcredential::credPrivateInfo == m_StoreAs) { UpdatePublicCredentialToTag(tag); UpdatePrivateContentsToTag(tag); } // <=== SET IT BACK TO DEFAULT BEHAVIOR. Any other state // processes ONCE, and then goes back to this again. m_StoreAs = OTSubcredential::credPrivateInfo; std::string str_result; tag.output(str_result); m_xmlUnsigned.Concatenate("%s", str_result.c_str()); }
// SignContract will call this function at the right time. void OTLedger::UpdateContents() // Before transmission or serialization, this is where the ledger saves its contents { // Notice I use the PURPORTED Account ID and Server ID to create the output. That's because // I don't want to inadvertantly substitute the real ID for a bad one and then sign it. // So if there's a bad one in there when I read it, THAT's the one that I write as well! OTString strType, strLedgerAcctID(GetPurportedAccountID()), strLedgerAcctServerID(GetPurportedServerID()), strUserID(GetUserID()); switch (m_Type) { case OTLedger::message: strType.Set("message"); break; case OTLedger::inbox: strType.Set("inbox"); break; case OTLedger::outbox: strType.Set("outbox"); break; default: strType.Set("error-unknown"); break; } // I release this because I'm about to repopulate it. m_xmlUnsigned.Release(); // m_xmlUnsigned.Concatenate("<?xml version=\"%s\"?>\n\n", "1.0"); m_xmlUnsigned.Concatenate("<accountLedger version=\"%s\"\n type=\"%s\"\n accountID=\"%s\"\n userID=\"%s\"\n" "serverID=\"%s\" >\n\n", m_strVersion.Get(), strType.Get(), strLedgerAcctID.Get(), strUserID.Get(), strLedgerAcctServerID.Get()); // loop through the transactions and print them out here. OTTransaction * pTransaction = NULL; for (mapOfTransactions::iterator ii = m_mapTransactions.begin(); ii != m_mapTransactions.end(); ++ii) { if ((pTransaction = (*ii).second)) // if pointer not null { OTString strTransaction; pTransaction->SaveContract(strTransaction); OTASCIIArmor ascTransaction; ascTransaction.SetString(strTransaction, true); // linebreaks = true m_xmlUnsigned.Concatenate("<transaction>\n%s</transaction>\n\n", ascTransaction.Get()); } } m_xmlUnsigned.Concatenate("</accountLedger>\n"); }
void OTSubkey::UpdateContents() { m_xmlUnsigned.Release(); m_xmlUnsigned.Concatenate("<keyCredential nymID=\"%s\"\n" // a hash of the nymIDSource " masterCredentialID=\"%s\" >\n\n", // Hash of the master credential that signed this subcredential. this->GetNymID().Get(), this->GetMasterCredID().Get()); if (this->GetNymIDSource().Exists()) { OTASCIIArmor ascSource; ascSource.SetString(this->GetNymIDSource()); // A nym should always verify through its own source. (Whatever that may be.) m_xmlUnsigned.Concatenate("<nymIDSource>\n%s</nymIDSource>\n\n", ascSource.Get()); } // -------------------------------------------- // MASTER-SIGNED INFO // if ((OTSubcredential::credMasterSigned == m_StoreAs) || // MASTER-SIGNED INFO (OTSubcredential::credPrivateInfo == m_StoreAs)) { // -------------------------------------------- this->UpdateMasterPublicToString(m_xmlUnsigned); // -------------------------------------------- this->UpdatePublicContentsToString(m_xmlUnsigned); } // -------------------------------------------- // PUBLIC INFO // if ((OTSubcredential::credPublicInfo == m_StoreAs) || // PUBLIC INFO (signed by subkey, contains master signed info.) (OTSubcredential::credPrivateInfo == m_StoreAs)) { OTASCIIArmor ascMasterSigned(this->GetMasterSigned()); // GetMasterSigned() returns the contract containing the master-signed contents from the above block. m_xmlUnsigned.Concatenate("<masterSigned>\n%s</masterSigned>\n\n", // Contains all the public info, signed by the master key. ascMasterSigned.Get()); // Packaged up here inside a final, subkey-signed credential. } // ------------------------------------------------- // PRIVATE INFO // // If we're saving the private credential info... // if (OTSubcredential::credPrivateInfo == m_StoreAs) // PRIVATE INFO { this->UpdatePublicCredentialToString(m_xmlUnsigned); // ------------------------------------- this->UpdatePrivateContentsToString(m_xmlUnsigned); } // ------------------------------------------------- m_xmlUnsigned.Concatenate("</keyCredential>\n"); // -------------------------------------------- m_StoreAs = OTSubcredential::credPrivateInfo; // <=== SET IT BACK TO DEFAULT BEHAVIOR. Any other state processes ONCE, and then goes back to this again. }
void OTClause::Serialize(Tag& parent) const { OTASCIIArmor ascCode; if (m_strCode.GetLength() > 2) ascCode.SetString(m_strCode); else otErr << "Empty script code in OTClause::Serialize()\n"; TagPtr pTag(new Tag("clause", ascCode.Get())); pTag->add_attribute("name", m_strName.Get()); parent.add_tag(pTag); }
bool OTServerContract::SaveContractWallet(OTString & strContents) const { const OTString strID(m_ID); OTASCIIArmor ascName; if (m_strName.Exists()) // name is in the clear in memory, and base64 in storage. { ascName.SetString(m_strName, false); // linebreaks == false } strContents.Concatenate("<notaryProvider name=\"%s\"\n" " serverID=\"%s\" />\n\n", m_strName.Exists() ? ascName.Get() : "", strID.Get()); return true; }
void OTMasterkey::UpdateContents() { m_xmlUnsigned.Release(); Tag tag("masterCredential"); // a hash of the nymIDSource tag.add_attribute("nymID", GetNymID().Get()); if (GetNymIDSource().Exists()) { OTASCIIArmor ascSource; ascSource.SetString(GetNymIDSource()); // A nym should always // verify through its own // source. (Whatever that // may be.) tag.add_tag("nymIDSource", ascSource.Get()); } // PUBLIC INFO // // if (OTSubcredential::credPublicInfo == m_StoreAs) // PUBLIC INFO // (Always save this in every state.) { UpdatePublicContentsToTag(tag); } // PRIVATE INFO // // If we're saving the private credential info... // if (OTSubcredential::credPrivateInfo == m_StoreAs) // PRIVATE INFO { UpdatePublicCredentialToTag(tag); UpdatePrivateContentsToTag(tag); } // ------------------------------------------------- std::string str_result; tag.output(str_result); m_xmlUnsigned.Concatenate("%s", str_result.c_str()); m_StoreAs = OTSubcredential::credPrivateInfo; // <=== SET IT BACK TO DEFAULT // BEHAVIOR. Any other state // processes ONCE, and then // goes back to this again. }
bool AssetContract::SaveContractWallet(Tag& parent) const { const String strID(m_ID); // Name is in the clear in memory, // and base64 in storage. OTASCIIArmor ascName; if (m_strName.Exists()) { ascName.SetString(m_strName, false); // linebreaks == false } TagPtr pTag(new Tag("assetType")); pTag->add_attribute("name", m_strName.Exists() ? ascName.Get() : ""); pTag->add_attribute("instrumentDefinitionID", strID.Get()); parent.add_tag(pTag); return true; }
void OTMasterkey::UpdateContents() { m_xmlUnsigned.Release(); m_xmlUnsigned.Concatenate("<masterCredential nymID=\"%s\" >\n\n", // a hash of the nymIDSource this->GetNymID().Get()); if (this->GetNymIDSource().Exists()) { OTASCIIArmor ascSource; ascSource.SetString(this->GetNymIDSource()); // A nym should always verify through its own source. (Whatever that may be.) m_xmlUnsigned.Concatenate("<nymIDSource>\n%s</nymIDSource>\n\n", ascSource.Get()); } // -------------------------------------------- // PUBLIC INFO // // if (OTSubcredential::credPublicInfo == m_StoreAs) // PUBLIC INFO (Always save this in every state.) { this->UpdatePublicContentsToString(m_xmlUnsigned); } // ------------------------------------------------- // PRIVATE INFO // // If we're saving the private credential info... // if (OTSubcredential::credPrivateInfo == m_StoreAs) // PRIVATE INFO { this->UpdatePublicCredentialToString(m_xmlUnsigned); // ------------------------------------- this->UpdatePrivateContentsToString(m_xmlUnsigned); } // ------------------------------------------------- m_xmlUnsigned.Concatenate("</masterCredential>\n"); // -------------------------------------------- m_StoreAs = OTSubcredential::credPrivateInfo; // <=== SET IT BACK TO DEFAULT BEHAVIOR. Any other state processes ONCE, and then goes back to this again. }
// The mint has a different key pair for each denomination. // Pass the actual denomination such as 5, 10, 20, 50, 100... bool OTMint_Lucre::AddDenomination(OTPseudonym & theNotary, int64_t lDenomination, int32_t nPrimeLength/*=1024*/) { OT_ASSERT(NULL != m_pKeyPublic); bool bReturnValue = false; // Let's make sure it doesn't already exist OTASCIIArmor theArmor; if (GetPublic(theArmor, lDenomination)) { // it already exists. OTLog::Error("Error: Denomination public already exists in OTMint::AddDenomination\n"); return false; } if (GetPrivate(theArmor, lDenomination)) { // it already exists. OTLog::Error("Error: Denomination private already exists in OTMint::AddDenomination\n"); return false; } // OTLog::Error("%s <size of bank prime in bits> <bank data file> <bank public data file>\n", if ((nPrimeLength/8) < (MIN_COIN_LENGTH+DIGEST_LENGTH)) { OTLog::vError("Prime must be at least %d bits\n", (MIN_COIN_LENGTH+DIGEST_LENGTH)*8); return false; } if (nPrimeLength%8) { OTLog::Error("Prime length must be a multiple of 8\n"); return false; } #ifdef _WIN32 SetMonitor("openssl.dump"); #else SetMonitor(stderr); #endif OpenSSL_BIO bio = BIO_new(BIO_s_mem()); OpenSSL_BIO bioPublic = BIO_new(BIO_s_mem()); // Generate the mint private key information Bank bank(nPrimeLength/8); bank.WriteBIO(bio); // Generate the mint public key information PublicBank pbank(bank); pbank.WriteBIO(bioPublic); // Copy from BIO back to a normal OTString or Ascii-Armor char privateBankBuffer[4096], publicBankBuffer[4096]; // todo stop hardcoding these string lengths int32_t privatebankLen = BIO_read(bio, privateBankBuffer, 4000); // cutting it a little short on purpose, with the buffer. int32_t publicbankLen = BIO_read(bioPublic, publicBankBuffer, 4000); // Just makes me feel more comfortable for some reason. if (privatebankLen && publicbankLen) { // With this, we have the Lucre public and private bank info converted to OTStrings OTString strPublicBank; strPublicBank.Set(publicBankBuffer, publicbankLen); OTString strPrivateBank; strPrivateBank.Set(privateBankBuffer, privatebankLen); OTASCIIArmor * pPublic = new OTASCIIArmor(); OTASCIIArmor * pPrivate = new OTASCIIArmor(); OT_ASSERT(NULL != pPublic); OT_ASSERT(NULL != pPrivate); // Set the public bank info onto pPublic pPublic->SetString(strPublicBank, true); // linebreaks = true // Seal the private bank info up into an encrypted Envelope // and set it onto pPrivate OTEnvelope theEnvelope; theEnvelope.Seal(theNotary, strPrivateBank); // Todo check the return values on these two functions theEnvelope.GetAsciiArmoredData(*pPrivate); // Add the new key pair to the maps, using denomination as the key m_mapPublic[lDenomination] = pPublic; m_mapPrivate[lDenomination] = pPrivate; // Grab the Server Nym ID and save it with this Mint theNotary.GetIdentifier(m_ServerNymID); // --------------------------- // Grab the Server's public key and save it with this Mint // const OTAsymmetricKey & theNotaryPubKey = theNotary.GetPublicSignKey(); delete m_pKeyPublic; m_pKeyPublic = theNotaryPubKey.ClonePubKey(); // --------------------------- m_nDenominationCount++; // --------------------------- // Success! bReturnValue = true; OTLog::vOutput(1, "Successfully added denomination: %lld\n", lDenomination); } return bReturnValue; }