Program Listing for File helpers.h
↰ Return to documentation for file (include/embers/crypto/helpers.h
)
/* Copyright © 2020 Advanced Micro Devices, Inc. All rights reserved */
#ifndef _EMBERS_CRYPTO_HELPERS_H_
#define _EMBERS_CRYPTO_HELPERS_H_
#include <cstdint>
#include <hip/hip_runtime.h>
namespace embers
{
namespace crypto
{
constexpr int HASH256_H8_NUM_INDEXES = 4;
constexpr int HASH256_H4_NUM_INDEXES = (2 * HASH256_H8_NUM_INDEXES);
constexpr int HASH256_H2_NUM_INDEXES = (2 * HASH256_H4_NUM_INDEXES);
constexpr int HASH256_H1_NUM_INDEXES = (2 * HASH256_H2_NUM_INDEXES);
struct hash256_t {
union {
uint64_t h8[HASH256_H8_NUM_INDEXES];
uint32_t h4[HASH256_H4_NUM_INDEXES];
uint16_t h2[HASH256_H2_NUM_INDEXES];
uint8_t h1[HASH256_H1_NUM_INDEXES];
};
__host__ __device__ inline bool operator==(const hash256_t &other) const
{
for (auto i = 0; i < HASH256_H8_NUM_INDEXES; i++) {
if (h8[i] != other.h8[i]) {
return false;
}
}
return true;
}
__host__ __device__ inline bool operator!=(const hash256_t &other) const
{
return !(this->operator==(other));
}
__host__ __device__ inline hash256_t operator^(const hash256_t &other) const
{
hash256_t hash;
for (auto i = 0; i < HASH256_H8_NUM_INDEXES; i++) {
hash.h8[i] = h8[i] ^ other.h8[i];
}
return hash;
}
};
} // namespace crypto
} // namespace embers
#endif // _EMBERS_CRYPTO_HELPERS_H_