mirror of
https://github.com/matrix-construct/construct
synced 2024-10-01 05:08:59 +02:00
ircd:Ⓜ️🆔 Use proper reference hashing procedure for event::v3/event::v4 ctors.
This commit is contained in:
parent
54d5afae49
commit
6c62515a6d
2 changed files with 31 additions and 6 deletions
|
@ -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;
|
||||
};
|
||||
|
|
32
ircd/m_id.cc
32
ircd/m_id.cc
|
@ -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] = '$';
|
||||
|
|
Loading…
Reference in a new issue