$p = 2^{255} - 19$
@@ -49,7 +49,7 @@ static long load_4(byte[] in, int offset) {
*
* Then $q = [2^{-255} * (h + 19 * 2^{-25} * h_9 + 1/2)]$ where $[x] = floor(x)$.
*
- *
Proof:
+ * Proof:
*
*
We begin with some very raw estimation for the bounds of some expressions:
*
@@ -58,13 +58,9 @@ static long load_4(byte[] in, int offset) {
* 2^{230} * h_9| = |h_0 + \dots + 2^{204} * h_8| \lt 2^{204} * 2^{30} = 2^{234}. \\ \Rightarrow
* -1/4 \le b := 19 * 2^{-255} * (h - 2^{230} * h_9) \lt 1/4 \end{equation} $$
*
- *
Therefore $0 \lt 1/2 - a - b \lt 1$.
- *
- *
Set $x := r + 19 * 2^{-255} * r + 1/2 - a - b$. Then:
- *
- *
$$ 0 \le x \lt 255 - 20 + 19 + 1 = 2^{255} \\ \Rightarrow 0 \le 2^{-255} * x \lt 1. $$
- *
- *
Since $q$ is an integer we have
+ *
Therefore $0 \lt 1/2 - a - b \lt 1$. Set $x := r + 19 * 2^{-255} * r + 1/2 - a - b$. Then:
+ * $$ 0 \le x \lt 255 - 20 + 19 + 1 = 2^{255} \\ \Rightarrow 0 \le 2^{-255} * x \lt 1. $$ Since
+ * $q$ is an integer we have
*
*
$$ [q + 2^{-255} * x] = q \quad (1) $$
*
diff --git a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/math/ed25519/ScalarOps.java b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/math/ed25519/ScalarOps.java
similarity index 98%
rename from src/main/java/org/mariadb/r2dbc/authentication/ed25519/math/ed25519/ScalarOps.java
rename to src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/math/ed25519/ScalarOps.java
index 9fc48722..f8a408ec 100644
--- a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/math/ed25519/ScalarOps.java
+++ b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/math/ed25519/ScalarOps.java
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020-2021 MariaDB Corporation Ab
-package org.mariadb.r2dbc.authentication.ed25519.math.ed25519;
+// Copyright (c) 2020-2022 MariaDB Corporation Ab
+package org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519;
-import static org.mariadb.r2dbc.authentication.ed25519.math.ed25519.Ed25519LittleEndianEncoding.load_3;
-import static org.mariadb.r2dbc.authentication.ed25519.math.ed25519.Ed25519LittleEndianEncoding.load_4;
+import static org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.Ed25519LittleEndianEncoding.load_3;
+import static org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.Ed25519LittleEndianEncoding.load_4;
/**
* Class for reducing a huge integer modulo the group order q and doing a combined multiply plus add
diff --git a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveSpec.java b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveSpec.java
similarity index 60%
rename from src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveSpec.java
rename to src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveSpec.java
index cda76c5c..0e208056 100644
--- a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveSpec.java
+++ b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveSpec.java
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020-2021 MariaDB Corporation Ab
-package org.mariadb.r2dbc.authentication.ed25519.spec;
+// Copyright (c) 2020-2022 MariaDB Corporation Ab
+package org.mariadb.r2dbc.authentication.standard.ed25519.spec;
-import org.mariadb.r2dbc.authentication.ed25519.math.Curve;
-import org.mariadb.r2dbc.authentication.ed25519.math.GroupElement;
-import org.mariadb.r2dbc.authentication.ed25519.math.ed25519.ScalarOps;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.Curve;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.GroupElement;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.ScalarOps;
/**
* EdDSA Curve specification that can also be referred to by name.
diff --git a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveTable.java b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveTable.java
similarity index 79%
rename from src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveTable.java
rename to src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveTable.java
index e5df7fe6..dc8918f5 100644
--- a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSANamedCurveTable.java
+++ b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSANamedCurveTable.java
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020-2021 MariaDB Corporation Ab
-package org.mariadb.r2dbc.authentication.ed25519.spec;
+// Copyright (c) 2020-2022 MariaDB Corporation Ab
+package org.mariadb.r2dbc.authentication.standard.ed25519.spec;
import java.util.Hashtable;
import java.util.Locale;
-import org.mariadb.r2dbc.authentication.ed25519.Utils;
-import org.mariadb.r2dbc.authentication.ed25519.math.Curve;
-import org.mariadb.r2dbc.authentication.ed25519.math.Field;
-import org.mariadb.r2dbc.authentication.ed25519.math.ed25519.Ed25519LittleEndianEncoding;
-import org.mariadb.r2dbc.authentication.ed25519.math.ed25519.ScalarOps;
+import org.mariadb.r2dbc.authentication.standard.ed25519.Utils;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.Curve;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.Field;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.Ed25519LittleEndianEncoding;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.ScalarOps;
/**
* The named EdDSA curves.
diff --git a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSAParameterSpec.java b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSAParameterSpec.java
similarity index 86%
rename from src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSAParameterSpec.java
rename to src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSAParameterSpec.java
index 2659f27f..a5678345 100644
--- a/src/main/java/org/mariadb/r2dbc/authentication/ed25519/spec/EdDSAParameterSpec.java
+++ b/src/main/java/org/mariadb/r2dbc/authentication/standard/ed25519/spec/EdDSAParameterSpec.java
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020-2021 MariaDB Corporation Ab
-package org.mariadb.r2dbc.authentication.ed25519.spec;
+// Copyright (c) 2020-2022 MariaDB Corporation Ab
+package org.mariadb.r2dbc.authentication.standard.ed25519.spec;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
-import org.mariadb.r2dbc.authentication.ed25519.math.Curve;
-import org.mariadb.r2dbc.authentication.ed25519.math.GroupElement;
-import org.mariadb.r2dbc.authentication.ed25519.math.ed25519.ScalarOps;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.Curve;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.GroupElement;
+import org.mariadb.r2dbc.authentication.standard.ed25519.math.ed25519.ScalarOps;
/**
* Parameter specification for an EdDSA algorithm.
diff --git a/src/main/java/org/mariadb/r2dbc/client/Client.java b/src/main/java/org/mariadb/r2dbc/client/Client.java
index 26681dff..69c03934 100644
--- a/src/main/java/org/mariadb/r2dbc/client/Client.java
+++ b/src/main/java/org/mariadb/r2dbc/client/Client.java
@@ -1,16 +1,21 @@
// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020-2021 MariaDB Corporation Ab
+// Copyright (c) 2020-2022 MariaDB Corporation Ab
package org.mariadb.r2dbc.client;
+import io.r2dbc.spi.TransactionDefinition;
+import org.mariadb.r2dbc.ExceptionFactory;
import org.mariadb.r2dbc.MariadbConnectionConfiguration;
-import org.mariadb.r2dbc.message.client.ClientMessage;
+import org.mariadb.r2dbc.message.ClientMessage;
+import org.mariadb.r2dbc.message.Context;
+import org.mariadb.r2dbc.message.ServerMessage;
import org.mariadb.r2dbc.message.client.ExecutePacket;
import org.mariadb.r2dbc.message.client.PreparePacket;
import org.mariadb.r2dbc.message.client.SslRequestPacket;
import org.mariadb.r2dbc.message.server.InitialHandshakePacket;
-import org.mariadb.r2dbc.message.server.ServerMessage;
+import org.mariadb.r2dbc.util.HostAddress;
import org.mariadb.r2dbc.util.PrepareCache;
+import org.mariadb.r2dbc.util.ServerPrepareResult;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -18,39 +23,47 @@ public interface Client {
Mono close();
- Flux receive(DecoderState initialState);
-
void sendCommandWithoutResult(ClientMessage requests);
- Flux sendCommand(ClientMessage requests);
+ Flux sendCommand(ClientMessage requests, boolean canSafelyBeReExecuted);
+
+ Flux sendCommand(
+ ClientMessage requests, DecoderState initialState, boolean canSafelyBeReExecuted);
- Flux sendCommand(ClientMessage requests, DecoderState initialState);
+ Flux sendCommand(
+ ClientMessage requests, DecoderState initialState, String sql, boolean canSafelyBeReExecuted);
- Flux sendCommand(ClientMessage requests, DecoderState initialState, String sql);
+ Flux sendCommand(
+ PreparePacket preparePacket, ExecutePacket executePacket, boolean canSafelyBeReExecuted);
- Flux sendCommand(PreparePacket preparePacket, ExecutePacket executePacket);
+ Mono sendPrepare(
+ ClientMessage requests, ExceptionFactory factory, String sql);
Mono sendSslRequest(
SslRequestPacket sslRequest, MariadbConnectionConfiguration configuration);
boolean isAutoCommit();
+ boolean isInTransaction();
+
boolean noBackslashEscapes();
ServerVersion getVersion();
boolean isConnected();
- void setContext(InitialHandshakePacket packet);
+ boolean isCloseRequested();
- void sendNext();
+ void setContext(InitialHandshakePacket packet, long clientCapabilities);
- MariadbConnectionConfiguration getConf();
+ Context getContext();
PrepareCache getPrepareCache();
Mono beginTransaction();
+ Mono beginTransaction(TransactionDefinition definition);
+
Mono commitTransaction();
Mono rollbackTransaction();
@@ -59,9 +72,7 @@ Mono sendSslRequest(
Mono rollbackTransactionToSavepoint(String name);
- Mono