aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Victorovich <yuri@FreeBSD.org>2026-04-25 17:10:24 +0000
committerYuri Victorovich <yuri@FreeBSD.org>2026-04-25 17:12:53 +0000
commitb14a7be4225c5268af83f53322095592ac07f81b (patch)
treee405b985619d38351ba2dab08c79bf30c7e9c58d
parentf47b3e15960e7525857cf757d58626ecf71f399b (diff)
games/coronapoker: Remove
coronapoker downloads binary module that defeats its GPL license. This download presents a potential security risk. Reference: https://github.com/tonikelope/coronapoker/issues/7
-rw-r--r--MOVED1
-rw-r--r--games/Makefile1
-rw-r--r--games/coronapoker/Makefile64
-rw-r--r--games/coronapoker/distinfo5
-rw-r--r--games/coronapoker/files/coronapoker.in5
-rw-r--r--games/coronapoker/files/patch-src_main_java_com_tonikelope_coronapoker_Panoptes.java546
-rw-r--r--games/coronapoker/pkg-descr5
-rw-r--r--games/coronapoker/pkg-message54
8 files changed, 1 insertions, 680 deletions
diff --git a/MOVED b/MOVED
index 71884484d744..b63bfb58c9c0 100644
--- a/MOVED
+++ b/MOVED
@@ -5251,3 +5251,4 @@ databases/py-sqlglotrs|databases/py-sqlglotc|2026-04-18|Remove obsoleted port. U
devel/py-prettytable0|devel/py-prettytable|2026-04-18|Remove obsoleted port. Use devel/py-prettytable instead
www/py-requests-cache0|www/py-requests-cache|2026-04-18|Remove obsoleted port. Use www/py-requests-cache instead
sysutils/py-azure-cli-base||2026-04-21|Remove obsoleted port
+games/coronapoker||2026-04-25|Remove for security concerns: downloads closed source binary modules, should not be restored unless https://github.com/tonikelope/coronapoker/issues/7 is addressed
diff --git a/games/Makefile b/games/Makefile
index 5855c139832c..963274b9958b 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -161,7 +161,6 @@
SUBDIR += connectagram
SUBDIR += connectfive
SUBDIR += construo
- SUBDIR += coronapoker
SUBDIR += corsix-th
SUBDIR += cosmosmash
SUBDIR += cowsay
diff --git a/games/coronapoker/Makefile b/games/coronapoker/Makefile
deleted file mode 100644
index c740e2db8ff4..000000000000
--- a/games/coronapoker/Makefile
+++ /dev/null
@@ -1,64 +0,0 @@
-PORTNAME= coronapoker
-DISTVERSIONPREFIX= v
-DISTVERSION= 20.28
-CATEGORIES= games java
-
-MAINTAINER= yuri@FreeBSD.org
-COMMENT= Texas Holdem poker game
-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")
-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-*-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 <bsd.port.mk>
diff --git a/games/coronapoker/distinfo b/games/coronapoker/distinfo
deleted file mode 100644
index 61d610367431..000000000000
--- a/games/coronapoker/distinfo
+++ /dev/null
@@ -1,5 +0,0 @@
-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/coronapoker.in b/games/coronapoker/files/coronapoker.in
deleted file mode 100644
index 18c1f4238265..000000000000
--- a/games/coronapoker/files/coronapoker.in
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-export LC_ALL=en_US.UTF-8
-
-%%JAVA%% -jar %%JAVAJARDIR%%/%%PORTNAME%%-%%PORTVERSION%%-jar-with-dependencies.jar "$@"
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
deleted file mode 100644
index 557b3ab59fca..000000000000
--- a/games/coronapoker/files/patch-src_main_java_com_tonikelope_coronapoker_Panoptes.java
+++ /dev/null
@@ -1,546 +0,0 @@
--- 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
deleted file mode 100644
index f41a31b82709..000000000000
--- a/games/coronapoker/pkg-descr
+++ /dev/null
@@ -1,5 +0,0 @@
-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
deleted file mode 100644
index 605eced119bf..000000000000
--- a/games/coronapoker/pkg-message
+++ /dev/null
@@ -1,54 +0,0 @@
-[
-{ type: install
- message: <<EOM
-You installed coronapoker: Poker game implemented in Java.
-
-================================================================
-
- GPL COMPLIANCE AND SECURITY NOTICE
-
- This port has been patched for GPL compliance and security.
-
- ISSUE: Binary Downloads Disabled
- ================================
- CoronaPoker includes Panoptes, a closed-source cryptographic
- anti-cheat engine, which this port previously attempted to:
-
- • Download at runtime from GitHub (untrusted binary source)
- • Cache locally to ~/.coronapoker/Panoptes/
- • Load via JNI as native code
-
- This violates the GPLv3 license under which CoronaPoker is
- licensed, as it requires source code availability.
-
- APPLIED FIX
- ===========
- This port has been patched to:
-
- • DISABLE remote binary downloads
- • PREVENT native library loading on all platforms
- • RUN in pure-Java mode without cryptographic anti-cheat
-
- FUNCTIONAL LIMITATIONS
- ======================
- Without the Panoptes engine, the game will:
-
- • Have NO tamper detection
- • Have NO action blockchain verification
- • Have NO post-game auditing capabilities
- • Rely solely on Java-level game logic enforcement
-
- SECURITY IMPLICATIONS
- ======================
- • No untrusted binaries will be downloaded
- • No closed-source libraries will be executed
- • Game integrity depends on player honesty
- • Suitable for casual/trusted gameplay only
-
- For more information about this issue:
- https://github.com/tonikelope/coronapoker/issues/7
-
-================================================================
-EOM
-}
-]