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()); }
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. }