annotate foosdk/sdk/foobar2000/SDK/hasher_md5.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "hasher_md5.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 GUID hasher_md5::guid_from_result(const hasher_md5_result & param)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 static_assert(sizeof(GUID) == sizeof(hasher_md5_result), "sanity");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 GUID temp = * reinterpret_cast<const GUID*>(&param);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 byte_order::order_le_to_native_t(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 return temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 GUID hasher_md5_result::asGUID() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 return hasher_md5::guid_from_result( *this );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 hasher_md5_result hasher_md5::process_single(const void * p_buffer,t_size p_bytes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 hasher_md5_state state;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 initialize(state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 process(state,p_buffer,p_bytes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 return get_result(state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 GUID hasher_md5::process_single_guid(const void * p_buffer,t_size p_bytes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 return guid_from_result(process_single(p_buffer,p_bytes));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 t_uint64 hasher_md5_result::xorHalve() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 #if PFC_BYTE_ORDER_IS_BIG_ENDIAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 t_uint64 ret = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 for(int walk = 0; walk < 8; ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 ret |= (t_uint64)((t_uint8)m_data[walk] ^ (t_uint8)m_data[walk+8]) << (walk * 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 const t_uint64 * v = reinterpret_cast<const t_uint64*>(&m_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 return v[0] ^ v[1];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 pfc::string8 hasher_md5_result::asString() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 return pfc::format_hexdump( this->m_data, sizeof(m_data), "");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 GUID hasher_md5_result::toGUID() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 return hasher_md5::guid_from_result( *this );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 }