yggm/libs/keymanip.cu
2025-03-15 01:38:00 +05:00

46 lines
1.7 KiB
Plaintext

#include <keymanip.cuh>
__device__ ds64 ktos(const unsigned char* key) noexcept {
ds64 str;
const char* hexDigits = "0123456789abcdef";
#pragma unroll 32
for (unsigned char i = 0; i < 32; i++) {
str.data[2 * i] = hexDigits[key[i] >> 4];
str.data[2 * i + 1] = hexDigits[key[i] & 0x0F];
}
str.data[65] = '\0';
return str;
}
__device__ ds46 getAddr(const unsigned char rawAddr[16]) noexcept {
ds46 addrStr;
const char* hexDigits = "0123456789abcdef";
unsigned pos = 0;
#pragma unroll 8
for (unsigned char group = 0; group < 8; group++) {
int idx = group * 2;
addrStr.data[pos++] = hexDigits[rawAddr[idx] >> 4];
addrStr.data[pos++] = hexDigits[rawAddr[idx] & 0x0F];
addrStr.data[pos++] = hexDigits[rawAddr[idx + 1] >> 4];
addrStr.data[pos++] = hexDigits[rawAddr[idx + 1] & 0x0F];
if (group < 7) { addrStr.data[pos++] = ':'; }
}
addrStr.data[pos] = '\0';
return addrStr;
}
__device__ void getRawAddress(int lErase, Key32& InvertedPublicKey, Address& rawAddr) noexcept {
lErase++;
const int bitsToShift = lErase & 7;
const int start = lErase >> 3;
if (bitsToShift) {
#pragma unroll
for (int i = start; i < start + 15; i++) {
InvertedPublicKey[i] = static_cast<unsigned char>((InvertedPublicKey[i] << bitsToShift) | (InvertedPublicKey[i + 1] >> (8 - bitsToShift)));
}
}
rawAddr[0] = 0x02;
rawAddr[1] = static_cast<unsigned char>(lErase - 1);
memcpy(&rawAddr[2], &InvertedPublicKey[start], 14);
}
__device__ void invertKey(const unsigned char* key, unsigned char* inverted) {
#pragma unroll 32
for (unsigned char i = 0; i < 32; i++) inverted[i] = key[i] ^ 0xFF;
}