Blob Manifest::getMasterSignature () const { STObject st (sfGeneric); SerialIter sit (serialized.data (), serialized.size ()); st.set (sit); return st.getFieldVL (sfMasterSignature); }
boost::optional<Manifest> Manifest::make_Manifest (std::string s) { try { STObject st (sfGeneric); SerialIter sit (s.data (), s.size ()); st.set (sit); auto const pk = st.getFieldVL (sfPublicKey); if (! publicKeyType (makeSlice(pk))) return boost::none; auto const opt_seq = get (st, sfSequence); auto const opt_msig = get (st, sfMasterSignature); if (!opt_seq || !opt_msig) return boost::none; // Signing key and signature are not required for // master key revocations if (*opt_seq != std::numeric_limits<std::uint32_t>::max ()) { auto const spk = st.getFieldVL (sfSigningPubKey); if (! publicKeyType (makeSlice(spk))) return boost::none; auto const opt_sig = get (st, sfSignature); if (! opt_sig) return boost::none; return Manifest (std::move (s), PublicKey (makeSlice(pk)), PublicKey (makeSlice(spk)), *opt_seq); } return Manifest (std::move (s), PublicKey (makeSlice(pk)), PublicKey(), *opt_seq); } catch (std::exception const&) { return boost::none; } }