I'm not 100% sure on this, but from digging through the code, it looks like the personal bytes needs to be exactly 16 bytes. While that's what the error message says, this check will all 1-16 bytes. I would do something like this:

    if (personal.Length != BLAKE2B_PERSONALBYTES)

II'd also rename `BLAKE2B_PERSONALBYTES` to something like `PERSONAL_BYTES` for consistency, as all this file deals with is Blake2b.