--- ./test/default/core_ed25519.c.orig	2019-05-30 15:20:24.000000000 -0500
+++ ./test/default/core_ed25519.c	2026-01-06 14:49:49.507914357 -0600
@@ -130,11 +130,12 @@
     assert(crypto_core_ed25519_is_valid_point(p) == 0);
 
     p[0] = 9;
-    assert(crypto_core_ed25519_is_valid_point(p) == 1);
+    assert(crypto_core_ed25519_is_valid_point(p) == 0);
 
     assert(crypto_core_ed25519_is_valid_point(max_canonical_p) == 1);
     assert(crypto_core_ed25519_is_valid_point(non_canonical_invalid_p) == 0);
     assert(crypto_core_ed25519_is_valid_point(non_canonical_p) == 0);
+    assert(crypto_core_ed25519_is_valid_point(not_main_subgroup_p) == 0);
 
     memcpy(p2, p, crypto_core_ed25519_BYTES);
     add_P(p2);
--- ./src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c.orig	2019-05-30 15:20:24.000000000 -0500
+++ ./src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c	2026-01-06 14:49:49.507670057 -0600
@@ -992,10 +992,13 @@
 ge25519_is_on_main_subgroup(const ge25519_p3 *p)
 {
     ge25519_p3 pl;
+    fe25519    t;
 
     ge25519_mul_l(&pl, p);
 
-    return fe25519_iszero(pl.X);
+    fe25519_sub(t, pl.Y, pl.Z);
+
+    return fe25519_iszero(pl.X) & fe25519_iszero(t);
 }
 
 int
