calculating the hash should never need to throw; all error cases should
be detectable at construction time. we should panic if we detect such an
error.
this fixes a compilation warning
HARD vs SOFT assertions were never very well defined or supported.
Currently they just imply a level of functionality that isn't present;
it's better to remove them instead of expending the effort at this
point.