Вы уверены что входные данные верны? Попробуйте передать просто строку. Такой код дает на выходе ровно то что ожидается: 20364-726552704a0366dc3e0ca627e6ebacdeb8ecff70
size_t uid;
char hmac[41] = "";
sscanf("uid=20364-726552704a0366dc3e0ca627e6ebacdeb8ecff70", "uid=%zu-%s", &uid, &hmac[0]);
printf("%zu-%s\n", uid, hmac);