Don't require a signature and separate out a generic `generate_key` def