fix(nid): update nid computing algorithm

This commit is contained in:
boykopovar 2026-08-22 10:39:19 +03:00
parent 54e66624ec
commit b49279e832
1 changed files with 18 additions and 6 deletions

View File

@ -25,18 +25,30 @@ std::string ComputeNid(const std::string& symbolName, const std::string& library
input.push_back(b);
const auto digest = Sha1(input);
uint64_t v = 0;
uint8_t reversed[8];
for (int i = 0; i < 8; i++)
v = (v << 8) | digest[7 - i];
reversed[i] = digest[7 - i];
char nid[12];
for (int i = 10; i >= 0; i--) {
nid[i] = kBase64S[v & 0x3F];
v >>= 6;
int nidIndex = 0;
for (int i = 0; i < 6; i += 3) {
const uint32_t triple = (static_cast<uint32_t>(reversed[i]) << 16) |
(static_cast<uint32_t>(reversed[i + 1]) << 8) |
static_cast<uint32_t>(reversed[i + 2]);
nid[nidIndex++] = kBase64S[(triple >> 18) & 0x3F];
nid[nidIndex++] = kBase64S[(triple >> 12) & 0x3F];
nid[nidIndex++] = kBase64S[(triple >> 6) & 0x3F];
nid[nidIndex++] = kBase64S[triple & 0x3F];
}
const uint32_t tail = (static_cast<uint32_t>(reversed[6]) << 16) |
(static_cast<uint32_t>(reversed[7]) << 8);
nid[nidIndex++] = kBase64S[(tail >> 18) & 0x3F];
nid[nidIndex++] = kBase64S[(tail >> 12) & 0x3F];
nid[nidIndex++] = kBase64S[(tail >> 6) & 0x3F];
nid[11] = '\0';
return std::string(nid, 11);
}
}
}