From b49279e832adf99812ff18a0ae30db60162c02de Mon Sep 17 00:00:00 2001 From: boykopovar Date: Sat, 22 Aug 2026 10:39:19 +0300 Subject: [PATCH] fix(nid): update nid computing algorithm --- core/libs/nid/src/NidCompute.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/core/libs/nid/src/NidCompute.cpp b/core/libs/nid/src/NidCompute.cpp index c77896fdf..491b3bb1f 100644 --- a/core/libs/nid/src/NidCompute.cpp +++ b/core/libs/nid/src/NidCompute.cpp @@ -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(reversed[i]) << 16) | + (static_cast(reversed[i + 1]) << 8) | + static_cast(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(reversed[6]) << 16) | + (static_cast(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); } -} \ No newline at end of file +}