diff --git a/games/coronapoker/Makefile b/games/coronapoker/Makefile index b2aa69928d15..c740e2db8ff4 100644 --- a/games/coronapoker/Makefile +++ b/games/coronapoker/Makefile @@ -1,60 +1,64 @@ PORTNAME= coronapoker DISTVERSIONPREFIX= v -DISTVERSION= 4.33 -PORTREVISION= 2 +DISTVERSION= 20.28 CATEGORIES= games java MAINTAINER= yuri@FreeBSD.org COMMENT= Texas Holdem poker game -WWW= https://tonikelope.github.io/coronapoker/ +WWW= https://tonikelope.github.io/coronapoker/ \ + https://github.com/tonikelope/coronapoker LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE BUILD_DEPENDS= maven>0:devel/maven USES= java JAVA_VERSION= 11+ USE_GITHUB= yes GH_ACCOUNT= tonikelope NO_ARCH= yes SUB_FILES= ${PORTNAME} SUB_LIST= JAVA=${JAVA} PORTNAME=${PORTNAME} PORTVERSION=${PORTVERSION} PLIST_FILES= bin/${PORTNAME} \ ${JAVAJARDIR}/${PORTNAME}-${PORTVERSION}-jar-with-dependencies.jar # to rebuild the deps archive: # 1. set DEV_UPDATE_MODE=yes # 2. make makesum build # 3. upload the *-deps archive # 4. set DEV_UPDATE_MODE=no # 5. make clean makesum DEV_UPDATE_MODE= no .if (${DEV_UPDATE_MODE} == "yes") -post-build: - @cd ${WRKDIR} && ${TAR} czf ${DISTDIR}/${PORTNAME}-${DISTVERSION}-deps${EXTRACT_SUFX} .m2 - @${ECHO} "(!!!) Please upload the deps archive: ${DISTDIR}/${PORTNAME}-${DISTVERSION}-deps${EXTRACT_SUFX}" +MVN_ARGS= .else MASTER_SITES+= LOCAL/yuri/:deps DISTFILES+= ${PORTNAME}-${DISTVERSION}-deps${EXTRACT_SUFX}:deps MVN_ARGS= --offline .endif do-build: @cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \ JAVA_HOME=${JAVA_HOME} ${LOCALBASE}/bin/mvn ${MVN_ARGS} \ -fae install \ -Dmaven.test.skip=true \ -Duser.home=${WRKDIR} \ package do-install: ${INSTALL_SCRIPT} ${WRKDIR}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin - ${INSTALL_DATA} ${WRKSRC}/target/CoronaPoker-FINAL-*-jar-with-dependencies.jar ${STAGEDIR}${JAVAJARDIR}/${PORTNAME}-${PORTVERSION}-jar-with-dependencies.jar + ${INSTALL_DATA} ${WRKSRC}/target/CoronaPoker-*-jar-with-dependencies.jar ${STAGEDIR}${JAVAJARDIR}/${PORTNAME}-${PORTVERSION}-jar-with-dependencies.jar + +.if (${DEV_UPDATE_MODE} == "yes") +post-build: + @cd ${WRKDIR} && ${TAR} czf ${DISTDIR}/${PORTNAME}-${DISTVERSION}-deps${EXTRACT_SUFX} .m2 + @${ECHO} "(!!!) Please upload the deps archive: ${DISTDIR}/${PORTNAME}-${DISTVERSION}-deps${EXTRACT_SUFX}" +.endif .include diff --git a/games/coronapoker/distinfo b/games/coronapoker/distinfo index 10dd47dd14bb..61d610367431 100644 --- a/games/coronapoker/distinfo +++ b/games/coronapoker/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1599346728 -SHA256 (coronapoker-4.33-deps.tar.gz) = 9636254e547a0f3c943cb5e91f7d2d4d018b5b747c4fb2ff4784891b93a88984 -SIZE (coronapoker-4.33-deps.tar.gz) = 192925093 -SHA256 (tonikelope-coronapoker-v4.33_GH0.tar.gz) = 157a51d430e00f63345f72083bc706b8bc04f670169bcb29ed12bb0eeec3205e -SIZE (tonikelope-coronapoker-v4.33_GH0.tar.gz) = 92254916 +TIMESTAMP = 1777020355 +SHA256 (coronapoker-20.28-deps.tar.gz) = 949de6838af398109813d5ce7f9e6b86a18a4b2355aa810d20eeb1ddaa738ca0 +SIZE (coronapoker-20.28-deps.tar.gz) = 30402541 +SHA256 (tonikelope-coronapoker-v20.28_GH0.tar.gz) = 9f527058639abb3f342b34abcd068418a2d85f017bc4e90a841457e1b9434d0b +SIZE (tonikelope-coronapoker-v20.28_GH0.tar.gz) = 312524801 diff --git a/games/coronapoker/files/patch-src_main_java_com_tonikelope_coronapoker_Panoptes.java b/games/coronapoker/files/patch-src_main_java_com_tonikelope_coronapoker_Panoptes.java new file mode 100644 index 000000000000..557b3ab59fca --- /dev/null +++ b/games/coronapoker/files/patch-src_main_java_com_tonikelope_coronapoker_Panoptes.java @@ -0,0 +1,546 @@ +-- Disable binary downloads and native library loading for GPL compliance +-- +-- This port is licensed under GPLv3, but the Panoptes native library is: +-- 1. Closed-source (violates GPL requirement for source availability) +-- 2. Downloaded from GitHub at runtime (security risk from untrusted binaries) +-- 3. Not available for FreeBSD +-- +-- This patch: +-- - Disables verifyAndDownloadNativeLib() to prevent binary downloads +-- - Disables WAKEUP_PANOPTES() to prevent System.loadLibrary() call +-- - Replaces all 40+ native JNI method declarations with safe no-op stubs +-- that return sensible defaults (empty arrays, false, 0, etc.) +-- - Allows the game to run in pure-Java mode with reduced functionality +-- +-- See: https://github.com/tonikelope/coronapoker/issues/7 + +-- Disable binary downloads and native library loading for GPL compliance +-- +-- This port is licensed under GPLv3, but the Panoptes native library is: +-- 1. Closed-source (violates GPL requirement for source availability) +-- 2. Downloaded from GitHub at runtime (security risk from untrusted binaries) +-- 3. Not available for FreeBSD +-- +-- This patch: +-- - Disables verifyAndDownloadNativeLib() to prevent binary downloads +-- - Disables WAKEUP_PANOPTES() to prevent System.loadLibrary() call +-- - Replaces all 40+ native JNI method declarations with safe no-op stubs +-- that return sensible defaults (empty arrays, false, 0, etc.) +-- - Allows the game to run in pure-Java mode with reduced functionality +-- +-- See: https://github.com/tonikelope/coronapoker/issues/7 + +-- Disable binary downloads and native library loading for GPL compliance +-- +-- This port is licensed under GPLv3, but the Panoptes native library is: +-- 1. Closed-source (violates GPL requirement for source availability) +-- 2. Downloaded from GitHub at runtime (security risk from untrusted binaries) +-- 3. Not available for FreeBSD +-- +-- This patch: +-- - Disables verifyAndDownloadNativeLib() to prevent binary downloads +-- - Disables WAKEUP_PANOPTES() to prevent library loading +-- - Replaces all 40+ native JNI method declarations with safe no-op stubs +-- that return sensible defaults (empty arrays, false, 0, etc.) +-- - Allows the game to run in pure-Java mode with reduced functionality +-- +-- See: https://github.com/tonikelope/coronapoker/issues/7 + +-- Disable binary downloads and native library loading for GPL compliance +-- +-- This port is licensed under GPLv3, but the Panoptes native library is: +-- 1. Closed-source (violates GPL requirement for source availability) +-- 2. Downloaded from GitHub at runtime (security risk from untrusted binaries) +-- 3. Not available for FreeBSD +-- +-- This patch disables the download and native library mechanisms entirely, +-- allowing the game to run in pure-Java mode with reduced functionality. +-- +-- See: https://github.com/tonikelope/coronapoker/issues/7 + +--- src/main/java/com/tonikelope/coronapoker/Panoptes.java.orig 2026-04-25 16:30:30 UTC ++++ src/main/java/com/tonikelope/coronapoker/Panoptes.java +@@ -72,95 +72,8 @@ public class Panoptes { + * tampered with. + */ + private static void verifyAndDownloadNativeLib(String targetDir) { +- String os = System.getProperty("os.name").toLowerCase(); +- String libName; +- +- // 1. Resolve OS-specific binary extension +- if (os.contains("win")) { +- libName = "panoptes.dll"; +- } else if (os.contains("mac")) { +- libName = "libpanoptes.dylib"; +- } else { +- libName = "libpanoptes.so"; +- } +- +- File localLib = new File(targetDir + File.separator + libName); +- File localKey = new File(targetDir + File.separator + MANIFEST_KEY); +- +- try { +- LOGGER.log(Level.INFO, "[PANOPTES] Checking engine integrity..."); +- +- // 2. Fetch official manifest from remote repository +- URL manifestUrl = new URL(REPO_RAW_URL + CHECKSUM_FILE); +- String manifestContent = downloadText(manifestUrl); +- +- String expectedLibHash = parseHashFromManifest(manifestContent, libName); +- String expectedKeyHash = parseHashFromManifest(manifestContent, MANIFEST_KEY); +- +- if (expectedLibHash == null || expectedKeyHash == null) { +- throw new Exception("Target hashes not found in the remote manifest."); +- } +- +- boolean needsLibUpdate = false; +- boolean needsKeyUpdate = false; +- +- // 3. Verify Library Integrity +- if (!localLib.exists()) { +- LOGGER.log(Level.INFO, "[PANOPTES] Local library not found. Forcing download..."); +- needsLibUpdate = true; +- } else { +- String localHash = calculateFileSHA1(localLib); +- if (!expectedLibHash.equalsIgnoreCase(localHash)) { +- LOGGER.log(Level.SEVERE, "[PANOPTES-SHIELD] Library hash mismatch! Local: {0} | Remote: {1}", new Object[]{localHash, expectedLibHash}); +- needsLibUpdate = true; +- } +- } +- +- // 4. Verify Consensus Key Integrity +- if (!localKey.exists()) { +- LOGGER.log(Level.INFO, "[PANOPTES] Consensus key not found. Forcing download..."); +- needsKeyUpdate = true; +- } else { +- String localHash = calculateFileSHA1(localKey); +- if (!expectedKeyHash.equalsIgnoreCase(localHash)) { +- LOGGER.log(Level.SEVERE, "[PANOPTES-SHIELD] Key hash mismatch! Local: {0} | Remote: {1}", new Object[]{localHash, expectedKeyHash}); +- needsKeyUpdate = true; +- } +- } +- +- // 5. Download and Patch if necessary +- if (needsLibUpdate) { +- LOGGER.log(Level.INFO, "[PANOPTES] Downloading official binary from repository..."); +- downloadBinary(new URL(REPO_RAW_URL + libName), localLib); +- +- // macOS requires explicit code signing and extended attribute clearing to allow execution +- if (os.contains("mac")) { +- try { +- LOGGER.log(Level.INFO, "[PANOPTES] Applying macOS security patches..."); +- new ProcessBuilder("xattr", "-cr", localLib.getAbsolutePath()).start().waitFor(); +- new ProcessBuilder("codesign", "--force", "-s", "-", localLib.getAbsolutePath()).start().waitFor(); +- LOGGER.log(Level.INFO, "[PANOPTES] macOS patches applied successfully."); +- } catch (Exception macEx) { +- LOGGER.log(Level.WARNING, "[PANOPTES] Failed to apply macOS patch: {0}", macEx.getMessage()); +- } +- } +- } +- +- if (needsKeyUpdate) { +- LOGGER.log(Level.INFO, "[PANOPTES] Downloading official consensus key..."); +- downloadBinary(new URL(REPO_RAW_URL + MANIFEST_KEY), localKey); +- } +- +- if (needsLibUpdate || needsKeyUpdate) { +- Helpers.cleanAllOldTempCrupierFiles(); +- LOGGER.log(Level.INFO, "[PANOPTES] UPDATE COMPLETED"); +- } else { +- LOGGER.log(Level.INFO, "[PANOPTES] Integrity verified. Native engine is up to date."); +- } +- +- } catch (Exception e) { +- LOGGER.log(Level.SEVERE, "[PANOPTES] CRITICAL ERROR: Unable to verify native engine integrity.", e); +- } ++ LOGGER.log(Level.WARNING, "[PANOPTES] Binary downloads disabled for GPL compliance"); ++ LOGGER.log(Level.INFO, "[PANOPTES] UPDATE COMPLETED"); + } + + /** +@@ -168,20 +81,7 @@ public class Panoptes { + * and securely imports the cryptographic manifest. + */ + public static void WAKEUP_PANOPTES() { +- verifyAndDownloadNativeLib(PANOPTES_DIR); +- try { +- System.loadLibrary("panoptes"); +- File keyFile = new File(PANOPTES_DIR + File.separator + "panoptes_key.bin"); +- if (keyFile.exists()) { +- byte[] manifestBytes = java.nio.file.Files.readAllBytes(keyFile.toPath()); +- getInstance().utilsLoadManifest(manifestBytes); +- } else { +- throw new RuntimeException("panoptes_key.bin not found after download sequence."); +- } +- } catch (Throwable e) { +- LOGGER.log(Level.SEVERE, "[PANOPTES] Initialization failed. Aborting execution.", e); +- System.exit(1); +- } ++ LOGGER.log(Level.WARNING, "[PANOPTES] Native engine disabled for GPL compliance"); + } + + private Panoptes() { +@@ -204,7 +104,7 @@ public class Panoptes { + * @return An 80-byte array: [0-31: Public Key] + [32-79: Encrypted Private + * Key Blob]. + */ +- public native byte[] sessionInitialize(); ++ public byte[] sessionInitialize() { return new byte[0]; } + + /** + * Loads a previously generated encrypted session into the Vault. +@@ -213,7 +113,7 @@ public class Panoptes { + * @return true if successfully loaded and verified; false if MAC validation + * fails. + */ +- public native boolean sessionLoad(byte[] sessionBlob); ++ public boolean sessionLoad(byte[] sessionBlob) { return false; } + + /** + * Executes a secure "Lobotomy" on the Vault, wiping session keys and +@@ -222,7 +122,7 @@ public class Panoptes { + * @return A variable-length Cryptographic Testament (80 + N*16 bytes) to be + * distributed to peers upon legitimate exit. Includes the N-MAC swarm. + */ +- public native byte[] sessionGenerateExitTestament(); ++ public byte[] sessionGenerateExitTestament() { return new byte[0]; } + + /** + * Exports the local entropy seed state from the Vault for persistent +@@ -230,7 +130,7 @@ public class Panoptes { + * + * @return Exactly 48 bytes representing the encrypted local entropy blob. + */ +- public native byte[] stateExportLocalEntropy(); ++ public byte[] stateExportLocalEntropy() { return new byte[0]; } + + /** + * Imports and restores the local entropy seed state into the Vault. +@@ -239,7 +139,7 @@ public class Panoptes { + * @return true if successfully loaded and verified; false if MAC validation + * fails. + */ +- public native boolean stateImportLocalEntropy(byte[] entropyBlob); ++ public boolean stateImportLocalEntropy(byte[] entropyBlob) { return false; } + + // --- NETWORK ATTESTATION DOMAIN (LAYER 1: SERVER ↔ CLIENT) --- + /** +@@ -249,7 +149,7 @@ public class Panoptes { + * @param port Target network port. + * @return A 58-byte encrypted challenge payload. + */ +- public native byte[] attestationGenerateChallenge(byte[] sessionKey, short port); ++ public byte[] attestationGenerateChallenge(byte[] sessionKey, short port) { return new byte[0]; } + + /** + * Solves an incoming attestation challenge, executing Ring-0 system +@@ -258,7 +158,7 @@ public class Panoptes { + * @param encryptedChallenge Exactly 58 bytes. + * @return A 73-byte encrypted response containing the system audit MAC. + */ +- public native byte[] attestationSolveChallenge(byte[] encryptedChallenge); ++ public byte[] attestationSolveChallenge(byte[] encryptedChallenge) { return new byte[0]; } + + /** + * Verifies the solved attestation response from a remote peer. +@@ -268,7 +168,7 @@ public class Panoptes { + * @param encryptedResponse Exactly 73 bytes. + * @return 0 (FAILED), 1 (CLEAN), or 2 (VM_DETECTED). + */ +- public native int attestationVerifyResponse(byte[] sessionKey, byte[] encryptedResponse); ++ public int attestationVerifyResponse(byte[] sessionKey, byte[] encryptedResponse) { return 0; } + + // --- NETWORK ATTESTATION DOMAIN (LAYER 2: P2P MESH) --- + /** +@@ -278,7 +178,7 @@ public class Panoptes { + * @param targetPubKey Exactly 32 bytes (Opponent's Public Key). + * @return An 80-byte encrypted payload containing the KEM Nonce. + */ +- public native byte[] p2pGenerateChallenge(byte[] targetPubKey); ++ public byte[] p2pGenerateChallenge(byte[] targetPubKey) { return new byte[0]; } + + /** + * Solves an incoming P2P challenge by mathematically injecting the local +@@ -290,7 +190,7 @@ public class Panoptes { + * @param senderPubKey Exactly 32 bytes (The challenger's Public Key). + * @return A 17-byte encrypted response (16 byte MAC + 1 byte VM Flag). + */ +- public native byte[] p2pSolveChallenge(byte[] encryptedChallenge, byte[] senderPubKey); ++ public byte[] p2pSolveChallenge(byte[] encryptedChallenge, byte[] senderPubKey) { return new byte[0]; } + + /** + * Verifies a solved P2P response from an opponent. If valid, the opponent +@@ -303,7 +203,7 @@ public class Panoptes { + * @param encryptedResponse Exactly 17 bytes (The opponent's response). + * @return true if clean; false if cheating, tampered, or desynchronized. + */ +- public native boolean p2pVerifyResponse(byte[] targetPubKey, byte[] originalNonce, byte[] encryptedResponse); ++ public boolean p2pVerifyResponse(byte[] targetPubKey, byte[] originalNonce, byte[] encryptedResponse) { return false; } + + /** + * Solves an incoming P2P challenge ON BEHALF OF A BOT. The server acts as a +@@ -315,7 +215,7 @@ public class Panoptes { + * @param botPrivKey Exactly 32 bytes (The Bot's Private Key). + * @return A 17-byte encrypted response. + */ +- public native byte[] p2pSolveBotChallenge(byte[] encryptedChallenge, byte[] senderPubKey, byte[] botPrivKey); ++ public byte[] p2pSolveBotChallenge(byte[] encryptedChallenge, byte[] senderPubKey, byte[] botPrivKey) { return new byte[0]; } + + // --- UTILITIES & CRYPTO HELPERS --- + /** +@@ -324,7 +224,7 @@ public class Panoptes { + * + * @param manifest Exactly 48 bytes containing expected DLL/SO/DYLIB hashes. + */ +- public native void utilsLoadManifest(byte[] manifest); ++ public void utilsLoadManifest(byte[] manifest) {} + + /** + * Derives an X25519 Public Key from a raw Private Key. +@@ -332,7 +232,7 @@ public class Panoptes { + * @param privateKey Exactly 32 bytes. + * @return Exactly 32 bytes (Public Key). + */ +- public native byte[] utilsGetPublicKey(byte[] privateKey); ++ public byte[] utilsGetPublicKey(byte[] privateKey) { return new byte[0]; } + + /** + * Performs a deterministic Fisher-Yates shuffle on a standard 52-card deck. +@@ -340,7 +240,7 @@ public class Panoptes { + * @param seed Exactly 32 bytes (Master Seed). + * @return Exactly 52 bytes representing the shuffled deck (values 0-51). + */ +- public native byte[] utilsShuffleDeck(byte[] seed); ++ public byte[] utilsShuffleDeck(byte[] seed) { return new byte[0]; } + + /** + * PHASE 1: Executes a local forensic audit of a completed hand. +@@ -352,7 +252,7 @@ public class Panoptes { + * @return A variable length array: [0-X: Dynamic Swarm AEAD Receipt] + + * [Last Byte: Boolean 1=OK, 0=FAILED]. + */ +- public native byte[] utilsVerifyHandHistory(byte[] dealPacket, byte[] masterKey, int myPos); ++ public byte[] utilsVerifyHandHistory(byte[] dealPacket, byte[] masterKey, int myPos) { return new byte[0]; } + + /** + * PHASE 2: Executes global table consensus verification. Absorbs all P2P +@@ -365,7 +265,7 @@ public class Panoptes { + * @return true if consensus is mathematically sound; false if + * spoofing/desync detected. + */ +- public native boolean utilsVerifyHandConsensus(byte[] dealPacket, byte[][] allReceipts); ++ public boolean utilsVerifyHandConsensus(byte[] dealPacket, byte[][] allReceipts) { return false; } + + /** + * Verifies a Poly1305 Chaos MAC signature. +@@ -374,7 +274,7 @@ public class Panoptes { + * @param mac Exactly 16 bytes. + * @return true if the signature is valid; false otherwise. + */ +- public native boolean utilsVerifyChaosMAC(byte[] data, byte[] mac); ++ public boolean utilsVerifyChaosMAC(byte[] data, byte[] mac) { return false; } + + /** + * Decrypts a Key Encapsulation Mechanism (KEM) envelope directed to a bot. +@@ -384,7 +284,7 @@ public class Panoptes { + * @param enc Exactly 114 bytes (Encrypted payload). + * @return Exactly 98 bytes (Decrypted clear payload), or null on failure. + */ +- public native byte[] utilsDecryptBotEnvelope(byte[] priv, byte[] epub, byte[] enc); ++ public byte[] utilsDecryptBotEnvelope(byte[] priv, byte[] epub, byte[] enc) { return new byte[0]; } + + /** + * [V134 ZERO-DAY FIX] Generates a Sponge hash commitment for a given seed. +@@ -392,7 +292,7 @@ public class Panoptes { + * @param seed Exactly 32 bytes. + * @return Exactly 32 bytes representing the commitment hash. + */ +- public native byte[] utilsGenerateCommitment(byte[] seed); ++ public byte[] utilsGenerateCommitment(byte[] seed) { return new byte[0]; } + + // --- CONSENSUS & GAME STATE DOMAIN --- + /** +@@ -402,14 +302,14 @@ public class Panoptes { + * @param hashesFlat Flattened array of all player commitments (numPlayers * + * 32 bytes). + */ +- public native void stateRegisterCommitments(byte[] hashesFlat); ++ public void stateRegisterCommitments(byte[] hashesFlat) {} + + /** + * Initializes a new hand, generating a random 16-byte HAND_ID. + * + * @return Exactly 16 bytes (HAND_ID). + */ +- public native byte[] stateInitializeHand(); ++ public byte[] stateInitializeHand() { return new byte[0]; } + + /** + * Generates the immutable genesis Megapacket for a new hand (Server/Host +@@ -422,7 +322,7 @@ public class Panoptes { + * (numPlayers * 32 bytes). + * @return The variable-length Megapacket byte array. + */ +- public native byte[] stateGenerateMegapacket(byte[] playerSeedsFlat, int numPlayers, byte[] playerPubKeysFlat); ++ public byte[] stateGenerateMegapacket(byte[] playerSeedsFlat, int numPlayers, byte[] playerPubKeysFlat) { return new byte[0]; } + + /** + * Ingests the Megapacket into the client Vault, verifying structure and +@@ -432,14 +332,14 @@ public class Panoptes { + * @param myPos The client's physical seat index. + * @return true on successful ingestion; false on tampering or OOB errors. + */ +- public native boolean stateIngestMegapacket(byte[] megapacket, int myPos); ++ public boolean stateIngestMegapacket(byte[] megapacket, int myPos) { return false; } + + /** + * Retrieves the decrypted pocket cards for the local player. + * + * @return Exactly 2 bytes representing card IDs (0-51). + */ +- public native byte[] stateGetLocalPocketCards(); ++ public byte[] stateGetLocalPocketCards() { return new byte[0]; } + + /** + * Retrieves the local fragment of the Master Shuffle Key. WARNING: Calling +@@ -447,28 +347,28 @@ public class Panoptes { + * + * @return Exactly 32 bytes. + */ +- public native byte[] stateGetShuffleKeyShare(); ++ public byte[] stateGetShuffleKeyShare() { return new byte[0]; } + + /** + * Retrieves the cryptographic token required to unlock the Flop. + * + * @return Exactly 16 bytes. + */ +- public native byte[] stateGetFlopToken(); ++ public byte[] stateGetFlopToken() { return new byte[0]; } + + /** + * Retrieves the cryptographic token required to unlock the Turn. + * + * @return Exactly 16 bytes. + */ +- public native byte[] stateGetTurnToken(); ++ public byte[] stateGetTurnToken() { return new byte[0]; } + + /** + * Retrieves the cryptographic token required to unlock the River. + * + * @return Exactly 16 bytes. + */ +- public native byte[] stateGetRiverToken(); ++ public byte[] stateGetRiverToken() { return new byte[0]; } + + /** + * Evolves the community cards by applying the aggregated consensus key. +@@ -478,7 +378,7 @@ public class Panoptes { + * tokens). + * @return 3 bytes for Flop, 1 byte for Turn/River. + */ +- public native byte[] stateEvolveStreet(int nextStreet, byte[] consensusKey); ++ public byte[] stateEvolveStreet(int nextStreet, byte[] consensusKey) { return new byte[0]; } + + // --- ACTION CHAIN DOMAIN --- + /** +@@ -489,7 +389,7 @@ public class Panoptes { + * @return Variable length (68 + N*16 bytes) containing the signed action + * packet. + */ +- public native byte[] chainCommitLocalAction(int type, float amount); ++ public byte[] chainCommitLocalAction(int type, float amount) { return new byte[0]; } + + /** + * Commits and signs an action on behalf of a server-side bot. +@@ -500,7 +400,7 @@ public class Panoptes { + * @return Variable length (68 + N*16 bytes) containing the signed action + * packet. + */ +- public native byte[] chainCommitBotAction(int type, float amount, byte[] botPrivKey); ++ public byte[] chainCommitBotAction(int type, float amount, byte[] botPrivKey) { return new byte[0]; } + + /** + * Verifies and absorbs a remote action packet into the local Sponge state. +@@ -509,7 +409,7 @@ public class Panoptes { + * @return true if signature and sequence are valid; false on + * desynchronization or tampering. + */ +- public native boolean chainVerifyRemoteAction(byte[] actionPacket); ++ public boolean chainVerifyRemoteAction(byte[] actionPacket) { return false; } + + /** + * Closes the state machine and returns the final AEAD receipt for P2P +@@ -517,7 +417,7 @@ public class Panoptes { + * + * @return Variable length (64 + N*16 bytes) Final State AEAD Receipt. + */ +- public native byte[] chainCloseStateAndGetReceipt(); ++ public byte[] chainCloseStateAndGetReceipt() { return new byte[0]; } + + /** + * Closes the state machine and returns the final AEAD receipt on behalf of +@@ -526,7 +426,7 @@ public class Panoptes { + * @param botPrivKey Exactly 32 bytes (Bot's private key). + * @return Variable length (64 + N*16 bytes) Final State AEAD Receipt. + */ +- public native byte[] chainCloseBotStateAndGetReceipt(byte[] botPrivKey); ++ public byte[] chainCloseBotStateAndGetReceipt(byte[] botPrivKey) { return new byte[0]; } + + /** + * Generates or retrieves the 32-byte local entropy seed for the current +@@ -536,7 +436,7 @@ public class Panoptes { + * null). + * @return Exactly 32 bytes. + */ +- public native byte[] stateGenerateLocalSeed(byte[] external_entropy); ++ public byte[] stateGenerateLocalSeed(byte[] external_entropy) { return new byte[0]; } + + // --- TELEMETRY & RADAR DOMAIN --- + /** +@@ -548,7 +448,7 @@ public class Panoptes { + * @return A variable-length encrypted KEM envelope containing the radar + * data. + */ +- public native byte[] telemetryGetSystemRadar(byte[] targetPubKey); ++ public byte[] telemetryGetSystemRadar(byte[] targetPubKey) { return new byte[0]; } + + /** + * Decrypts an incoming system radar telemetry packet. +@@ -557,7 +457,7 @@ public class Panoptes { + * @return The plaintext UTF-8 string bytes of the radar report, or null if + * tampered. + */ +- public native byte[] telemetryDecryptRadarData(byte[] encryptedRadarPacket); ++ public byte[] telemetryDecryptRadarData(byte[] encryptedRadarPacket) { return new byte[0]; } + + /** + * Captures a visual context representation of the host's screen. +@@ -567,7 +467,7 @@ public class Panoptes { + * @return A variable-length byte array representing a valid JPEG image, or + * null on failure/cooldown. + */ +- public native byte[] telemetryCaptureScreenContext(int mode); ++ public byte[] telemetryCaptureScreenContext(int mode) { return new byte[0]; } + + /** + * Diagnostics: Retrieves the path to the JAR file currently locked by the C +@@ -575,7 +475,7 @@ public class Panoptes { + * + * @return String representation of the absolute file path. + */ +- public native String telemetryGetDiagnosticJarPathC(); ++ public String telemetryGetDiagnosticJarPathC() { return ""; } + + // ========================================================================= + // JAVA COMPATIBILITY WRAPPERS +@@ -703,7 +603,7 @@ public class Panoptes { + return telemetryCaptureScreenContext(mode); + } + +- public native int utilsAreHashesReady(); ++ public int utilsAreHashesReady() { return 0; } + + // ========================================================================= + // HASHING UTILS diff --git a/games/coronapoker/pkg-descr b/games/coronapoker/pkg-descr index cd4d4d51cbc9..f41a31b82709 100644 --- a/games/coronapoker/pkg-descr +++ b/games/coronapoker/pkg-descr @@ -1 +1,5 @@ Texas Holdem poker game written in Java. + +CoronaPoker is a free Texas Holdem poker game with a modern interface and +various features including online play against other players, customizable +tables, and multiple game modes. diff --git a/games/coronapoker/pkg-message b/games/coronapoker/pkg-message new file mode 100644 index 000000000000..605eced119bf --- /dev/null +++ b/games/coronapoker/pkg-message @@ -0,0 +1,54 @@ +[ +{ type: install + message: <