mirror of
https://github.com/matrix-construct/construct
synced 2024-11-13 21:41:06 +01:00
ircd:Ⓜ️:event: Fix signature interface regression; optimize call path.
This commit is contained in:
parent
a0af97ae3e
commit
8baaf366c4
4 changed files with 48 additions and 17 deletions
|
@ -43,6 +43,7 @@ namespace ircd::m
|
||||||
id::event make_id(const event &, const string_view &version, id::event::buf &buf);
|
id::event make_id(const event &, const string_view &version, id::event::buf &buf);
|
||||||
|
|
||||||
json::object hashes(const mutable_buffer &, const event &);
|
json::object hashes(const mutable_buffer &, const event &);
|
||||||
|
event signatures(const mutable_buffer &, const m::event &, const string_view &origin);
|
||||||
event signatures(const mutable_buffer &, const m::event &);
|
event signatures(const mutable_buffer &, const m::event &);
|
||||||
event essential(event, const mutable_buffer &content);
|
event essential(event, const mutable_buffer &content);
|
||||||
|
|
||||||
|
@ -58,6 +59,7 @@ namespace ircd::m
|
||||||
|
|
||||||
sha256::buf hash(const event &);
|
sha256::buf hash(const event &);
|
||||||
ed25519::sig sign(const event &, const ed25519::sk &);
|
ed25519::sig sign(const event &, const ed25519::sk &);
|
||||||
|
ed25519::sig sign(const event &, const string_view &origin);
|
||||||
ed25519::sig sign(const event &);
|
ed25519::sig sign(const event &);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -211,9 +211,22 @@ ircd::m::event::signatures(const mutable_buffer &out,
|
||||||
return json::stringify(mutable_buffer{out}, sigs);
|
return json::stringify(mutable_buffer{out}, sigs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ircd::m::event
|
||||||
|
ircd::m::signatures(const mutable_buffer &out,
|
||||||
|
const m::event &event)
|
||||||
|
{
|
||||||
|
const string_view &origin
|
||||||
|
{
|
||||||
|
at<"origin"_>(event)
|
||||||
|
};
|
||||||
|
|
||||||
|
return signatures(out, event, origin);
|
||||||
|
}
|
||||||
|
|
||||||
ircd::m::event
|
ircd::m::event
|
||||||
ircd::m::signatures(const mutable_buffer &out_,
|
ircd::m::signatures(const mutable_buffer &out_,
|
||||||
const m::event &event_)
|
const m::event &event_,
|
||||||
|
const string_view &origin)
|
||||||
{
|
{
|
||||||
thread_local char content[event::MAX_SIZE];
|
thread_local char content[event::MAX_SIZE];
|
||||||
m::event event
|
m::event event
|
||||||
|
@ -222,19 +235,14 @@ ircd::m::signatures(const mutable_buffer &out_,
|
||||||
};
|
};
|
||||||
|
|
||||||
thread_local char buf[event::MAX_SIZE];
|
thread_local char buf[event::MAX_SIZE];
|
||||||
const json::object &preimage
|
const string_view &preimage
|
||||||
{
|
{
|
||||||
stringify(buf, event)
|
stringify(buf, event)
|
||||||
};
|
};
|
||||||
|
|
||||||
const ed25519::sig sig
|
const auto &secret_key
|
||||||
{
|
{
|
||||||
sign(preimage)
|
m::secret_key(my(origin))
|
||||||
};
|
|
||||||
|
|
||||||
const auto &origin
|
|
||||||
{
|
|
||||||
json::at<"origin"_>(event)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const string_view public_key_id
|
const string_view public_key_id
|
||||||
|
@ -242,12 +250,22 @@ ircd::m::signatures(const mutable_buffer &out_,
|
||||||
m::public_key_id(my(origin))
|
m::public_key_id(my(origin))
|
||||||
};
|
};
|
||||||
|
|
||||||
thread_local char sigb64buf[b64encode_size(sizeof(sig))];
|
const ed25519::sig my_sig
|
||||||
const json::member my_sig
|
{
|
||||||
|
event::sign(preimage, secret_key)
|
||||||
|
};
|
||||||
|
|
||||||
|
static const auto sigb64bufsz
|
||||||
|
{
|
||||||
|
b64encode_size(sizeof(my_sig))
|
||||||
|
};
|
||||||
|
|
||||||
|
thread_local char sigb64buf[sigb64bufsz];
|
||||||
|
const json::member my_sig_member
|
||||||
{
|
{
|
||||||
origin, json::members
|
origin, json::members
|
||||||
{
|
{
|
||||||
{ public_key_id, b64encode_unpadded(sigb64buf, sig) }
|
{ public_key_id, b64encode_unpadded(sigb64buf, my_sig) }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -255,9 +273,9 @@ ircd::m::signatures(const mutable_buffer &out_,
|
||||||
thread_local std::array<json::member, SIG_MAX> sigs;
|
thread_local std::array<json::member, SIG_MAX> sigs;
|
||||||
|
|
||||||
size_t i(0);
|
size_t i(0);
|
||||||
sigs.at(i++) = my_sig;
|
sigs.at(i++) = my_sig_member;
|
||||||
for(const auto &[host, sig] : json::get<"signatures"_>(event_))
|
for(const auto &[host, sig] : json::get<"signatures"_>(event_))
|
||||||
if(!my_host(json::string(host)))
|
if(json::string(host) != origin)
|
||||||
sigs.at(i++) = { host, sig };
|
sigs.at(i++) = { host, sig };
|
||||||
|
|
||||||
event = event_;
|
event = event_;
|
||||||
|
@ -303,9 +321,16 @@ ircd::m::sign(const event &event)
|
||||||
{
|
{
|
||||||
const string_view &origin
|
const string_view &origin
|
||||||
{
|
{
|
||||||
json::at<"origin"_>(event)
|
at<"origin"_>(event)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return sign(event, origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::ed25519::sig
|
||||||
|
ircd::m::sign(const event &event,
|
||||||
|
const string_view &origin)
|
||||||
|
{
|
||||||
const auto &secret_key
|
const auto &secret_key
|
||||||
{
|
{
|
||||||
m::secret_key(my(origin))
|
m::secret_key(my(origin))
|
||||||
|
|
|
@ -110,11 +110,15 @@ put__invite(client &client,
|
||||||
};
|
};
|
||||||
|
|
||||||
check_event(request, event);
|
check_event(request, event);
|
||||||
|
const m::user::id target
|
||||||
|
{
|
||||||
|
at<"state_key"_>(event)
|
||||||
|
};
|
||||||
|
|
||||||
thread_local char sigs[4_KiB];
|
thread_local char sigs[4_KiB];
|
||||||
const m::event signed_event
|
const m::event signed_event
|
||||||
{
|
{
|
||||||
signatures(sigs, event)
|
signatures(sigs, event, target.host())
|
||||||
};
|
};
|
||||||
|
|
||||||
const json::strung revent
|
const json::strung revent
|
||||||
|
|
|
@ -184,7 +184,7 @@ put__invite(client &client,
|
||||||
thread_local char sigs[4_KiB];
|
thread_local char sigs[4_KiB];
|
||||||
m::event signed_event
|
m::event signed_event
|
||||||
{
|
{
|
||||||
signatures(sigs, event)
|
signatures(sigs, event, target.host())
|
||||||
};
|
};
|
||||||
|
|
||||||
signed_event.event_id = event_id;
|
signed_event.event_id = event_id;
|
||||||
|
|
Loading…
Reference in a new issue