Extract CryptoNote crypto sources from upstream (fa1608cf). Build as static libcryptonote.a via CMake with compat stubs for external dependencies (warnings, logging, varint, profiling). 37 upstream files, 10 compat stubs, 680KB static library. Co-Authored-By: Charon <charon@lethean.io>
77 lines
2.5 KiB
C++
Executable file
77 lines
2.5 KiB
C++
Executable file
// Copyright (c) 2014-2018 Zano Project
|
||
// Copyright (c) 2014-2018 The Louisdor Project
|
||
// Copyright (c) 2012-2013 The Boolberry developers
|
||
// Copyright (c) 2017-2025 Lethean (https://lt.hn)
|
||
//
|
||
// Licensed under the European Union Public Licence (EUPL) version 1.2.
|
||
// You may obtain a copy of the licence at:
|
||
//
|
||
// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl
|
||
//
|
||
// The EUPL is a copyleft licence that is compatible with the MIT/X11
|
||
// licence used by the original projects; the MIT terms are therefore
|
||
// considered “grandfathered” under the EUPL for this code.
|
||
//
|
||
// SPDX‑License‑Identifier: EUPL-1.2
|
||
//
|
||
#include "RIPEMD160_helper.h"
|
||
#include "auto_val_init.h"
|
||
extern "C" {
|
||
#include "RIPEMD160.h"
|
||
}
|
||
|
||
#define RMDsize 160
|
||
|
||
namespace crypto {
|
||
|
||
void RIPEMD160_hash(const void *data, size_t length_size_t, hash160 &h)
|
||
{
|
||
|
||
dword MDbuf[RMDsize / 32] = {0}; /* contains (A, B, C, D(, E)) */
|
||
byte* hashcode = (byte*)&h; /* hashcode[RMDsize / 8]; for final hash-value */
|
||
dword X[16] = {0}; /* current 16-word chunk */
|
||
unsigned int i = 0; /* counter */
|
||
dword length = static_cast<dword>(length_size_t); /* length in bytes of message */
|
||
dword nbytes = 0; /* # of bytes not yet processed */
|
||
byte* message = (byte*)data;
|
||
|
||
/* initialize */
|
||
MDinit(MDbuf);
|
||
//length = (dword)strlen((char *)message);
|
||
|
||
/* process message in 16-word chunks */
|
||
for (nbytes = length; nbytes > 63; nbytes -= 64) {
|
||
for (i = 0; i < 16; i++) {
|
||
X[i] = BYTES_TO_DWORD(message);
|
||
message += 4;
|
||
}
|
||
compress(MDbuf, X);
|
||
}/* length mod 64 bytes left */
|
||
|
||
/* finish: */
|
||
MDfinish(MDbuf, message, length, 0);
|
||
|
||
for (i = 0; i < RMDsize / 8; i += 4) {
|
||
hashcode[i] = (byte)MDbuf[i >> 2]; /* implicit cast to byte */
|
||
hashcode[i + 1] = (byte)(MDbuf[i >> 2] >> 8); /* extracts the 8 least */
|
||
hashcode[i + 2] = (byte)(MDbuf[i >> 2] >> 16); /* significant bits. */
|
||
hashcode[i + 3] = (byte)(MDbuf[i >> 2] >> 24);
|
||
}
|
||
}
|
||
|
||
hash160 RIPEMD160_hash(const void *data, size_t length)
|
||
{
|
||
hash160 h = AUTO_VAL_INIT(h);
|
||
RIPEMD160_hash(data, length, h);
|
||
return h;
|
||
}
|
||
|
||
hash RIPEMD160_hash_256(const void *data, size_t length)
|
||
{
|
||
hash160 h = RIPEMD160_hash(data, length);
|
||
hash h256 = AUTO_VAL_INIT(h256);
|
||
memcpy(&h256, &h, sizeof(h));
|
||
return h256;
|
||
}
|
||
|
||
}
|