I'm not doubting the provably fair system, I'm doubting its implementation.
I understand how hmac works. But what you don't understand is that "convert into a roll" isn't included in the provably fair bit.
You can take a game seed and server seed and nonce, and generate a completely random number. This is true, and provable.
I would recommend reading:
https://dicesites.com/provably-fair it has a great overview
But to answer your points:
a) You don't need "trust the implementation", you just need to verify your rolls (.e.g. use an external trusted tool, like one I linked to in my previous post)
b) "convert into a roll"
must be included in the provably fair system, or it would make no sense at all
c) You do not convert to a "completely random number", in fact it's provably it's not.
But what's the output of the hmac-sha256 hash algorithm? It's a hexadecimal string of bytes.
Not really. The output is a 256 bit. It's most commonly represented in hex, but you can just as easily write in any way you want. It's really just a huge number. Or probably best thought of an ordered list of 256 "1s" and "0s".
How do you turn this into a random number? By generating say a big int, or an int, or using the string into a pseudo-random generator, it doesn't matter really, because so far, the number is still random and reproductible in the future using the same server + client + nonce input.
You don't.
But this is where you can't tell me there's any provably fair bit. How do you turn this random number, into a bet? You're not telling me that just-dice generates random numbers written as integers between 1 and 100. This is just not true. So you have to take the random number, and somehow convert it into a bet between a limited interval.
Did you even read the description on just-dice? It literally specifies *exactly* how this is done:
We then take the first 5 characters of that hex string and convert them to a decimal integer (that will be in the range 0 through 1048575 (16^5-1)).
If it is less than 1 million, we divide it by 10,000 and use it as your dice roll. That is the case 96% of the time.
Otherwise we use the next five characters of the 128 character hex string, and repeat.
You will notice all the verifiers follow that exact procedure, to all arrive at the exact same rolls.