0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-07-01 00:08:22 +02:00

ircd:Ⓜ️🆔 Use proper reference hashing procedure for event::v3/event::v4 ctors.

This commit is contained in:
Jason Volk 2019-06-27 19:46:37 -07:00
parent 54d5afae49
commit 6c62515a6d
2 changed files with 31 additions and 6 deletions

View file

@ -14,6 +14,7 @@
namespace ircd::m
{
struct id;
struct event; // forward declaration for id::event ctors
IRCD_M_EXCEPTION(error, INVALID_MXID, http::BAD_REQUEST)
IRCD_M_EXCEPTION(INVALID_MXID, BAD_SIGIL, http::BAD_REQUEST)
@ -178,7 +179,7 @@ struct ircd::m::id::event
struct ircd::m::id::event::v3
:ircd::m::id::event
{
v3(const mutable_buffer &out, const json::object &);
v3(const mutable_buffer &out, const m::event &);
v3(const string_view &id);
v3() = default;
};
@ -187,7 +188,7 @@ struct ircd::m::id::event::v3
struct ircd::m::id::event::v4
:ircd::m::id::event
{
v4(const mutable_buffer &out, const json::object &);
v4(const mutable_buffer &out, const m::event &);
v4(const string_view &id);
v4() = default;
};

View file

@ -692,7 +692,7 @@ ircd::m::id::event::v3::v3(const string_view &id)
}
ircd::m::id::event::v3::v3(const mutable_buffer &out,
const json::object &event)
const m::event &event)
:v3{[&out, event]
{
if(unlikely(buffer::size(out) < 44))
@ -701,9 +701,21 @@ ircd::m::id::event::v3::v3(const mutable_buffer &out,
"Output buffer insufficient for v3 event_id"
};
thread_local char content_buffer[m::event::MAX_SIZE];
const m::event essential
{
m::essential(event, content_buffer)
};
thread_local char preimage_buffer[m::event::MAX_SIZE];
const json::object &preimage
{
json::stringify(preimage_buffer, essential)
};
const sha256::buf hash
{
sha256{event}
sha256{preimage}
};
out[0] = '$';
@ -735,7 +747,7 @@ ircd::m::id::event::v4::v4(const string_view &id)
}
ircd::m::id::event::v4::v4(const mutable_buffer &out,
const json::object &event)
const m::event &event)
:v4{[&out, event]
{
if(unlikely(buffer::size(out) < 44))
@ -744,9 +756,21 @@ ircd::m::id::event::v4::v4(const mutable_buffer &out,
"Output buffer insufficient for v4 event_id"
};
thread_local char content_buffer[m::event::MAX_SIZE];
const m::event essential
{
m::essential(event, content_buffer)
};
thread_local char preimage_buffer[m::event::MAX_SIZE];
const json::object &preimage
{
json::stringify(preimage_buffer, essential)
};
const sha256::buf hash
{
sha256{event}
sha256{preimage}
};
out[0] = '$';