def _verify_error_contents(packet):
    """
    Verify the contents of an error object
        - Returns False, list of errors if verification fails
                            OR
        - Returns True, None if passes verification
    """
    errors = []
    j_rpc_predefined = {
        "-32700": "Parse error",
        "-32600": "Invalid Request",
        "-32601": "Method not found",
        "-32602": "Invalid params",
        "-32603": "Internal error"
    }

    for key in ("code", "message"):
        if key not in packet:
            errors.append(key)

    # We need to have both "code" and "message" keys
    if "code" in packet and "message" in packet:
        if not isinstance(packet["code"], int):
            errors.append("Error key 'code' type is required to be type int,"
                          " got type {}".format(type(packet["code"])))

        if str(packet["code"]) in j_rpc_predefined:
            # It's matching one of the reservered codes
            if packet["message"] != j_rpc_predefined[str(packet["code"])]:
                errors.append("Key 'code' value '{}' is a JSON-RPC predefined,"
                              " but key 'message' value '{}' does not match"
                              " required message.".format(packet["code"],
                                                          packet["message"]))
        else:
            # It's not in the predefined values dict, but it's reserved
            if packet["code"] in range(-32768, -32000):
                errors.append("Key 'code' value '{}' is a JSON-RPC reserved"
                              " code and MAY NOT be used for a response"
                              " code.".format(packet["code"]))
    if len(errors) > 0:
        # It failed, so return list of "Missing required key 'KEY'"
        #   for each 1 length strings (keys) OR
        #   just the error string if length > 1
        return False, ["Missing required key '{}' in error object".format(err)
                       if len(err.split()) == 1 else err
                       for err in errors]
    else:
        # Success, execution to this point means the packet has passed
        return True, None