Here, I would do the guards for `SignVersion` in the fun head and add another fun head that returns `bad_signing_version`.

While not code you added, in reading over this again, I think I'd like to cleanup the verify functions and avoid the attempt-match-and-catch-badmatch pattern. I think that's more effort and less idiomatic now that I've read more Erlang code.