def decode(jwt, key = nil, verify = true, custom_options = {}, &keyfinder)
raise(JWT::DecodeError, 'Nil JSON web token') unless jwt
merged_options = DEFAULT_OPTIONS.merge(custom_options)
decoder = Decode.new jwt, key, verify, merged_options, &keyfinder
header, payload, signature, signing_input = decoder.decode_segments
decode_verify_signature(key, header, signature, signing_input, merged_options, &keyfinder) if verify
decoder.verify
raise(JWT::DecodeError, 'Not enough or too many segments') unless header && payload
[payload, header]
end