Huge refactor, now able to add hash type
0.3.0 -> 0.4.0