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>
69 lines
1.7 KiB
C++
Executable file
69 lines
1.7 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
|
||
//
|
||
|
||
#pragma once
|
||
|
||
#include <stddef.h>
|
||
|
||
#include "common/pod-class.h"
|
||
#include "generic-ops.h"
|
||
#include "warnings.h"
|
||
PUSH_VS_WARNINGS
|
||
DISABLE_VS_WARNINGS(4804)
|
||
#include "blake2.h"
|
||
POP_VS_WARNINGS
|
||
namespace crypto {
|
||
|
||
extern "C" {
|
||
#include "hash-ops.h"
|
||
}
|
||
|
||
#pragma pack(push, 1)
|
||
POD_CLASS hash {
|
||
char data[HASH_SIZE];
|
||
};
|
||
#pragma pack(pop)
|
||
|
||
static_assert(sizeof(hash) == HASH_SIZE, "Invalid structure size");
|
||
|
||
/*
|
||
Cryptonight hash functions
|
||
*/
|
||
|
||
inline void cn_fast_hash(const void *data, std::size_t length, hash &hash) {
|
||
cn_fast_hash(data, length, reinterpret_cast<char *>(&hash));
|
||
}
|
||
|
||
inline hash cn_fast_hash(const void *data, std::size_t length) {
|
||
hash h;
|
||
cn_fast_hash(data, length, reinterpret_cast<char *>(&h));
|
||
return h;
|
||
}
|
||
|
||
inline void tree_hash(const hash *hashes, std::size_t count, hash &root_hash) {
|
||
tree_hash(reinterpret_cast<const char (*)[HASH_SIZE]>(hashes), count, reinterpret_cast<char *>(&root_hash));
|
||
}
|
||
|
||
inline hash blake2_hash(const void *data, std::size_t length) {
|
||
hash h;
|
||
blake2(&h, sizeof(h), data, length, nullptr, 0);
|
||
return h;
|
||
}
|
||
|
||
}
|
||
|
||
POD_MAKE_HASHABLE(crypto, hash)
|