Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,9 @@ platform. We publish artifacts to Maven Central for the following platforms:
Classifier | OS | Architecture
-----------| ------- | ---------------- |
linux-x86_64 | Linux | x86_64 (64-bit)
linux-aarch_64 | Linux | aarch_64 (64-bit)
osx-x86_64 | Mac | x86_64 (64-bit)
windows-x86 | Windows | x86 (32-bit)
osx-aarch_64 | Mac | aarch_64 (64-bit)
windows-x86_64 | Windows | x86_64 (64-bit)

#### Maven
Expand All @@ -149,7 +150,7 @@ Use the [os-maven-plugin](https://github.com/trustin/os-maven-plugin) to add the
<dependency>
<groupId>org.conscrypt</groupId>
<artifactId>conscrypt-openjdk</artifactId>
<version>2.5.2</version>
<version>2.6.0</version>
<classifier>${os.detected.classifier}</classifier>
</dependency>
```
Expand All @@ -172,7 +173,7 @@ buildscript {
apply plugin: "com.google.osdetector"

dependencies {
compile 'org.conscrypt:conscrypt-openjdk:2.5.2:' + osdetector.classifier
compile 'org.conscrypt:conscrypt-openjdk:2.6.0:' + osdetector.classifier
}
```

Expand All @@ -190,14 +191,14 @@ To depend on the uber jar, simply use the `conscrypt-openjdk-uber` artifacts.
<dependency>
<groupId>org.conscrypt</groupId>
<artifactId>conscrypt-openjdk-uber</artifactId>
<version>2.5.2</version>
<version>2.6.0</version>
</dependency>
```

##### Gradle
```gradle
dependencies {
compile 'org.conscrypt:conscrypt-openjdk-uber:2.5.2'
compile 'org.conscrypt:conscrypt-openjdk-uber:2.6.0'
}
```

Expand All @@ -210,7 +211,7 @@ arm64-v8a.

```gradle
dependencies {
implementation 'org.conscrypt:conscrypt-android:2.5.2'
implementation 'org.conscrypt:conscrypt-android:2.6.0'
}
```

Expand Down
6 changes: 3 additions & 3 deletions common/src/jni/main/cpp/conscrypt/native_crypto.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3850,12 +3850,12 @@ static jbyteArray NativeCrypto_EVP_DigestSign(JNIEnv* env, jclass, jobject evpMd
jint in_offset = inOffset;
jint in_size = inLength;

jbyte* array_elements = env->GetByteArrayElements(inJavaBytes, nullptr);
if (array_elements == nullptr) {
ScopedByteArrayRO array_elements(env, inJavaBytes);
if (array_elements.get() == nullptr) {
conscrypt::jniutil::throwOutOfMemory(env, "Unable to obtain elements of inBytes");
return nullptr;
}
const unsigned char* buf = reinterpret_cast<const unsigned char*>(array_elements);
const unsigned char* buf = reinterpret_cast<const unsigned char*>(array_elements.get());
const unsigned char* inStart = buf + in_offset;
size_t inLen = static_cast<size_t>(in_size);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ private static List<Integer> getKeySizes(String algorithm) throws Exception {
putKeySize("ML-DSA-87", -1);
putKeySize("SLH-DSA-SHA2-128S", -1);
putKeySize("XWING", -1);
putKeySize("MLDSA44-Ed25519-SHA512", -1);
putKeySize("MLDSA65-Ed25519-SHA512", -1);
}

/** Elliptic Curve Crypto named curves that should be supported. */
Expand Down Expand Up @@ -284,8 +286,8 @@ private void test_Key(KeyPairGenerator kpg, Key k) throws Exception {
// serializable, so just skip them.
return;
}
if (expectedAlgorithm.equals("ML-DSA")) {
// ML-DSA keys are not yet serializable, so just skip them.
if (expectedAlgorithm.equals("ML-DSA") || expectedAlgorithm.startsWith("MLDSA")) {
// ML-DSA and Composite ML-DSA keys are not yet serializable, so just skip them.
return;
}
if (expectedAlgorithm.equals("ML-KEM")) {
Expand Down
62 changes: 44 additions & 18 deletions common/src/test/java/org/conscrypt/javax/net/ssl/SSLSocketTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1043,14 +1043,19 @@ public void handshake_p256IsSupportedByDefault() throws Exception {
s.get();
c.get();
// By default, BoringSSL uses X25519, P-256, and P-384.
// On newer versions of BoringSSL, X25519MLKEM768 is also a default.
if (sslParametersSupportsNamedGroups()) {
// If the client requests P-256, it will be chosen.
assertEquals("P-256", getCurveName(client));
assertEquals("P-256", getCurveName(server));
} else {
// Otherwise, X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// Otherwise, X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down Expand Up @@ -1078,14 +1083,19 @@ public void handshake_p384IsSupportedByDefault() throws Exception {
s.get();
c.get();
// By default, BoringSSL uses X25519, P-256, and P-384.
// On newer versions of BoringSSL, X25519MLKEM768 is also a default.
if (sslParametersSupportsNamedGroups()) {
// If the client requests P-384, it will be chosen.
assertEquals("P-384", getCurveName(client));
assertEquals("P-384", getCurveName(server));
} else {
// Otherwise, X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// Otherwise, X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down Expand Up @@ -1120,9 +1130,13 @@ public void handshake_setsNamedGroups_usesFirstServerNamedGroupThatClientSupport
assertEquals("P-384", getCurveName(client));
assertEquals("P-384", getCurveName(server));
} else {
// The defaults are used, and X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// The defaults are used, and X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down Expand Up @@ -1179,9 +1193,13 @@ public void handshake_setsNamedGroupsBeforeAccept_usesFirstServerNamedGroupThatC
assertEquals("P-384", getCurveName(client));
assertEquals("P-384", getCurveName(server));
} else {
// The defaults are used, and X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// The defaults are used, X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down Expand Up @@ -1214,9 +1232,13 @@ public void handshake_withX25519MLKEM768_works() throws Exception {
assertEquals("X25519MLKEM768", getCurveName(client));
assertEquals("X25519MLKEM768", getCurveName(server));
} else {
// The defaults are used, and X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// The defaults are used, and X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down Expand Up @@ -1309,9 +1331,13 @@ public void handshake_namedGroupsDontIntersect_throwsException() throws Exceptio
} else {
s.get();
c.get();
// The defaults are used, and X25519 gets priority.
assertEquals("X25519", getCurveName(client));
assertEquals("X25519", getCurveName(server));
// The defaults are used, and X25519 or X25519MLKEM768 gets priority.
String clientCurve = getCurveName(client);
String serverCurve = getCurveName(server);
assertTrue("Curve is not X25519 or X25519MLKEM768: " + clientCurve,
clientCurve.equals("X25519") || clientCurve.equals("X25519MLKEM768"));
assertTrue("Curve is not X25519 or X25519MLKEM768: " + serverCurve,
serverCurve.equals("X25519") || serverCurve.equals("X25519MLKEM768"));
}
client.close();
server.close();
Expand Down
1 change: 1 addition & 0 deletions openjdk-uber/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ if (buildUberJar) {
attributes ('BoringSSL-Version': boringSslVersion,
'Automatic-Module-Name': 'org.conscrypt',
'Bundle-SymbolicName': 'org.conscrypt',
'Import-Package': '!android.util,*',
'-exportcontents': 'org.conscrypt.*')
}

Expand Down
1 change: 1 addition & 0 deletions openjdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ jar.manifest {
attributes ('BoringSSL-Version' : boringSslVersion,
'Automatic-Module-Name' : 'org.conscrypt',
'Bundle-SymbolicName': 'org.conscrypt',
'Import-Package': '!android.util,*',
'-exportcontents': 'org.conscrypt.*')
}

Expand Down
Loading