void convert(const u::array& a, users& us) { us.reserve(us.size() + a.size()); for(const auto& v : a) { user_info_ptr n{new user_info}; convert(v.as_dict(), *n); CHECK(n); us.emplace_back(n); } ENSURE_EQUAL(us.size(), a.size()); }
u::bytes private_key::sign(const u::bytes& b) const { INVARIANT(_k); u::mutex_scoped_lock l(BOTAN_MUTEX); init_rng(); CHECK(RNG); b::PK_Signer s{*_k, EMSA_SCHEME}; auto r = s.sign_message(reinterpret_cast<const unsigned char*>(b.data()), b.size(), *RNG); ENSURE_EQUAL(r.size(), SIGNATURE_SIZE); return u::bytes {std::begin(r), std::end(r)}; }
u::array convert(const users& us) { u::array a; a.reserve(us.size()); for(const auto& u : us) { CHECK(u); a.add(convert(*u)); } ENSURE_EQUAL(a.size(), us.size()); return a; }
public_key& public_key::operator=(const public_key& o) { if(&o == this) return *this; u::mutex_scoped_lock l(BOTAN_MUTEX); _ks = o._ks; b::DataSource_Memory ds{reinterpret_cast<const b::byte*>(&_ks[0]), _ks.size()}; _k.reset(b::X509::load_key(ds)); ENSURE(_k); ENSURE_NOT_EQUAL(_k, o._k); ENSURE_FALSE(_ks.empty()); ENSURE_EQUAL(_ks, o._ks); return *this; }
message to_message() const { message m; m.meta.type = type; if(!from_id.empty()) m.meta.extra["from_id"] = from_id; if(!from_ip.empty()) m.meta.extra["from_ip"] = from_ip; if(from_port != 0) m.meta.extra["from_port"] = from_port; //serialize structure CHECK(this); const C& self = reinterpret_cast<const C&>(*this); util::serialize(m.data, self); ENSURE_EQUAL(m.meta.type, type); return m; }