/* * casino_portable.h - Cross-Platform Assembler Casino Engine Header * Version 2.0: Cloud Sync, Account Transfer Keys & P2P Anti-Cheat Authentication */ #ifndef CASINO_PORTABLE_H #define CASINO_PORTABLE_H #include #include #include #include #include #include #ifdef _WIN32 #include #include #include #include #pragma comment(lib, "ws2_32.lib") #define SOCKET_TYPE SOCKET #define IS_INVALID_SOCKET(s) ((s) == INVALID_SOCKET) #define CLOSESOCKET(s) closesocket(s) #else #include #include #include #include #include #include #include #include #define SOCKET_TYPE int #define INVALID_SOCKET (-1) #define SOCKET_ERROR (-1) #define IS_INVALID_SOCKET(s) ((s) < 0) #define CLOSESOCKET(s) close(s) #endif #define CASINO_PORT 27015 #define MAX_LOBBY_ROOMS 10 #define MAX_ROOM_NAME 32 #define MAX_PASS_LEN 32 #define MAX_NAME_LEN 32 #define TRANSFER_KEY_LEN 19 #define SAVE_MAGIC 0x31435653 #define SAVE_SALT_MAGIC 0xA57C0DE /* Password Salted Hash & Account Structure */ typedef struct { uint32_t magic; uint32_t salt; uint32_t password_hash; uint64_t bank_balance; uint32_t wins; uint32_t losses; uint32_t signature; char username[MAX_NAME_LEN]; } AccountData; /* Network Packet Commands */ typedef enum { NET_CMD_HOST_ROOM = 1, NET_CMD_LIST_ROOMS, NET_CMD_JOIN_ROOM, NET_CMD_LOBBY_STATE, NET_CMD_PLAYER_READY, NET_CMD_START_GAME, NET_CMD_CHAT_MSG, NET_CMD_AUTH_CHALLENGE, NET_CMD_AUTH_RESPONSE, NET_CMD_AUTH_REJECTED } NetCmdType; /* Network Packet Header */ typedef struct { uint8_t cmd; uint8_t room_id; uint16_t data_len; } NetPacketHeader; /* Challenge-Response Anti-Cheat Packet */ typedef struct { uint32_t challenge_nonce; uint32_t client_signature; char username[MAX_NAME_LEN]; } AuthChallengePacket; /* Room Info Structure */ typedef struct { uint8_t room_id; char room_name[MAX_ROOM_NAME]; char host_name[MAX_NAME_LEN]; uint8_t max_players; uint8_t current_players; uint8_t game_type; bool has_password; char password[MAX_PASS_LEN]; } RoomInfo; /* Platform Helpers */ void platform_init(void); void platform_cleanup(void); void clear_screen(void); void set_text_color(const char* color_code); char get_masked_char(void); void read_masked_password(char* out_pass, size_t max_len); uint32_t hash_password(const char* password, uint32_t salt); uint32_t calc_account_signature(const AccountData* acc); /* Account System & Transfer */ bool account_register(AccountData* acc); bool account_login(AccountData* acc); bool account_save(const AccountData* acc); void account_generate_transfer_key(const AccountData* acc, char* out_key); bool account_import_transfer_key(AccountData* acc, const char* key, const char* new_pass); bool account_cloud_sync_upload(const AccountData* acc); bool account_cloud_sync_download(AccountData* acc, const char* username, const char* password); /* Network Lobby System & P2P Anti-Cheat */ void net_lobby_menu(AccountData* acc); bool verify_peer_account_signature(uint32_t nonce, uint32_t signature, uint32_t expected_hash); #endif /* CASINO_PORTABLE_H */