script_app::script_app( app_ptr app, app_service_ptr as, s::conversation_service_ptr conversation_s, s::conversation_ptr conversation) : generic_app{}, _from_id{conversation->user_service()->user().info().id()}, _id{u::uuid()}, _conversation_service{conversation_s}, _conversation{conversation}, _app{app}, _app_service{as} { REQUIRE(conversation_s); REQUIRE(conversation); REQUIRE(app); REQUIRE(as); init(); INVARIANT(_api); INVARIANT(_conversation_service); INVARIANT(_conversation); INVARIANT(_app); INVARIANT(_app_service); INVARIANT_FALSE(_id.empty()); }
script_app::script_app( const std::string& from_id, const std::string& id, app_ptr app, app_service_ptr as, s::conversation_service_ptr conversation_s, s::conversation_ptr conversation) : generic_app{}, _from_id{from_id}, _id{id}, _conversation_service{conversation_s}, _conversation{conversation}, _app{app}, _app_service{as} { REQUIRE(conversation_s); REQUIRE(conversation); REQUIRE(app); REQUIRE(as); REQUIRE_FALSE(id.empty()); init(); INVARIANT(_api); INVARIANT(_conversation_service); INVARIANT(_conversation); INVARIANT(_app); INVARIANT(_app_service); INVARIANT_FALSE(_id.empty()); }
public_key::public_key(const public_key& pk) : _ks(pk._ks), _k{} { if(!pk._k) return; set(pk.key()); INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); }
public_key::public_key(const std::string& key) : _ks(key) { REQUIRE_FALSE(key.empty()); set(key); INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); }
bool public_key::verify(const util::bytes& msg, const util::bytes& sig) const { INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); u::mutex_scoped_lock l(BOTAN_MUTEX); b::PK_Verifier v{*_k, EMSA_SCHEME}; return v.verify_message( reinterpret_cast<const unsigned char*>(msg.data()), msg.size(), reinterpret_cast<const unsigned char*>(sig.data()), sig.size()); }
void public_key::set(const std::string& key) { REQUIRE_FALSE(key.empty()); u::mutex_scoped_lock l(BOTAN_MUTEX); b::DataSource_Memory ds{reinterpret_cast<const b::byte*>(&_ks[0]), _ks.size()}; _k.reset(b::X509::load_key(ds)); INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); }
u::bytes public_key::encrypt(const u::bytes& b) const { INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); u::mutex_scoped_lock l(BOTAN_MUTEX); init_rng(); CHECK(RNG); std::stringstream rs; b::PK_Encryptor_EME e{*_k, EME_SCHEME}; size_t advance = 0; while(advance < b.size()) { size_t size = std::min(e.maximum_input_size(), b.size()-advance); auto c = e.encrypt(reinterpret_cast<const unsigned char*>(b.data())+advance, size, *RNG); u::bytes bs{std::begin(c), std::end(c)}; rs << bs; advance+=size; } return u::to_bytes(rs.str()); }
const util::bytes& dh_secret::public_value() const { u::mutex_scoped_lock l(_mutex); INVARIANT_FALSE(_pub_value.empty()); return _pub_value; }
public_key::public_key(const private_key& pkey) : public_key(pkey.public_key()) { INVARIANT(_k); INVARIANT_FALSE(_ks.empty()); }