Skip to content

Commit

Permalink
Version 3.48.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Willena committed Feb 9, 2025
1 parent c8bd8b9 commit 9d0ed76
Show file tree
Hide file tree
Showing 21 changed files with 198 additions and 185 deletions.
4 changes: 2 additions & 2 deletions VERSION
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version=3.48.0
artifactVersion=3.48.0.0-SNAPSHOT
sqliteMCVersion=2.0.2
artifactVersion=3.48.0.0
sqliteMCVersion=2.0.2
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.willena</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.48.0.0-SNAPSHOT</version>
<version>3.48.0.0</version>
<name>SQLite JDBC</name>
<description>SQLite JDBC library with encryption and authentication support</description>
<url>https://github.com/Willena/sqlite-jdbc-crypt</url>
Expand Down
28 changes: 16 additions & 12 deletions src/main/java/org/sqlite/SQLiteConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -633,18 +633,22 @@ public enum Pragma {
"plaintext_header_size",
"Allows to configure the cipher scheme to keep the database header partially unencrypted",
null),
TCOST("tcost",
"Allows to specify the number of iterations used to derive the key material with the Argon2id function.",
null),
MCOST("mcost",
"Allows to specify the amount of memory used to derive the key material with the Argon2id function. The amount is specified as the number of kB memory blocks.",
null),
PCOST("pcost",
"Allows to modify the parallelism aka the number of threads used to derive the key material with the Argon2id function. The value corresponds to the hash algoritm for HMAC calculation" ,
null),
ALGORITHM("algorithm",
"Allows to modify the AEGIS algorithm variant used for encryption",
null);
TCOST(
"tcost",
"Allows to specify the number of iterations used to derive the key material with the Argon2id function.",
null),
MCOST(
"mcost",
"Allows to specify the amount of memory used to derive the key material with the Argon2id function. The amount is specified as the number of kB memory blocks.",
null),
PCOST(
"pcost",
"Allows to modify the parallelism aka the number of threads used to derive the key material with the Argon2id function. The value corresponds to the hash algoritm for HMAC calculation",
null),
ALGORITHM(
"algorithm",
"Allows to modify the AEGIS algorithm variant used for encryption",
null);

public final String pragmaName;
public final String[] choices;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/sqlite/mc/SQLiteMCAegisConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public SQLiteMCAegisConfig setAegisAlgorithm(AegisAlgorithm algorithm) {
}

public static SQLiteMCAegisConfig getDefault() {
return new SQLiteMCAegisConfig()
return new SQLiteMCAegisConfig()
.setAegisAlgorithm(AegisAlgorithm.AEGIS_256)
.setTCost(2)
.setMCost(19456)
Expand Down
44 changes: 23 additions & 21 deletions src/main/java/org/sqlite/mc/SQLiteMCConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import java.util.Map;
import java.util.Properties;
import java.util.function.Function;

import org.sqlite.SQLiteConfig;
import org.sqlite.SQLiteConfigFactory;

Expand All @@ -26,24 +25,24 @@ public class SQLiteMCConfig extends SQLiteConfig {
}

private static final Pragma[] CIPHER_PRAGMA_ORDER =
new Pragma[]{
Pragma.CIPHER,
Pragma.LEGACY,
Pragma.HMAC_CHECK,
Pragma.MC_LEGACY_WAL,
Pragma.LEGACY_PAGE_SIZE,
Pragma.KDF_ITER,
Pragma.FAST_KDF_ITER,
Pragma.HMAC_USE,
Pragma.HMAC_PGNO,
Pragma.HMAC_SALT_MASK,
Pragma.KDF_ALGORITHM,
Pragma.HMAC_ALGORITHM,
Pragma.PLAINTEXT_HEADER_SIZE,
Pragma.TCOST,
Pragma.MCOST,
Pragma.PCOST,
Pragma.ALGORITHM
new Pragma[] {
Pragma.CIPHER,
Pragma.LEGACY,
Pragma.HMAC_CHECK,
Pragma.MC_LEGACY_WAL,
Pragma.LEGACY_PAGE_SIZE,
Pragma.KDF_ITER,
Pragma.FAST_KDF_ITER,
Pragma.HMAC_USE,
Pragma.HMAC_PGNO,
Pragma.HMAC_SALT_MASK,
Pragma.KDF_ALGORITHM,
Pragma.HMAC_ALGORITHM,
Pragma.PLAINTEXT_HEADER_SIZE,
Pragma.TCOST,
Pragma.MCOST,
Pragma.PCOST,
Pragma.ALGORITHM
};

private SQLiteMCConfig(Properties existingProperties) {
Expand Down Expand Up @@ -89,9 +88,12 @@ protected void setupConnection(
String property = pragmaTable.getProperty(pragma.getPragmaName(), null);

if (property != null) {
Function<String, String> converter = CONVERTERS.getOrDefault(pragma, IDENTITY_CONVERTER);
Function<String, String> converter =
CONVERTERS.getOrDefault(pragma, IDENTITY_CONVERTER);
statement.execute(
String.format("PRAGMA %s = %s", pragma.getPragmaName(), converter.apply(property)));
String.format(
"PRAGMA %s = %s",
pragma.getPragmaName(), converter.apply(property)));
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/org/sqlite/mc/SQLiteMCSqlCipherConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public SQLiteMCSqlCipherConfig setHmacAlgorithm(HmacAlgorithm value) {
@Override
public SQLiteMCSqlCipherConfig setPlaintextHeaderSize(int value) {
if (!isValid(value, 0, 100) || value % 16 != 0) {
throw new IllegalArgumentException("PlainTextHeaderSize must be a multiple of 16 and between 0 and 100");
throw new IllegalArgumentException(
"PlainTextHeaderSize must be a multiple of 16 and between 0 and 100");
}
super.setPlaintextHeaderSize(value);
return this;
Expand Down
6 changes: 3 additions & 3 deletions src/test/java/org/sqlite/mc/AegisAlgorithmTest.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class AegisAlgorithmTest {

@Test
void getValue() {
assertThat(AegisAlgorithm.AEGIS_256X4.getStringValue()).isEqualTo("aegis-256x4");
assertThat(AegisAlgorithm.AEGIS_256X4.getInValue()).isEqualTo(6);
}
}
}
6 changes: 3 additions & 3 deletions src/test/java/org/sqlite/mc/CipherAlgorithmTest.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class CipherAlgorithmTest {

@Test
void getValue() {
assertThat(CipherAlgorithm.AEGIS.getValue()).isEqualTo("aegis");
}
}
}
6 changes: 3 additions & 3 deletions src/test/java/org/sqlite/mc/HmacAlgorithmTest.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class HmacAlgorithmTest {

@Test
void getValue() {
assertThat(HmacAlgorithm.SHA256.getValue()).isEqualTo(1);
}
}
}
6 changes: 3 additions & 3 deletions src/test/java/org/sqlite/mc/HmacPgnoTest.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class HmacPgnoTest {

@Test
void getValue() {
assertThat(HmacPgno.LITTLE_ENDIAN.getValue()).isEqualTo(1);
}
}
}
6 changes: 3 additions & 3 deletions src/test/java/org/sqlite/mc/KdfAlgorithmTest.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class KdfAlgorithmTest {

@Test
void getValue() {
assertThat(KdfAlgorithm.SHA256.getValue()).isEqualTo(1);
}
}
}
26 changes: 15 additions & 11 deletions src/test/java/org/sqlite/mc/SQLiteMCAegisConfigTest.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;
import org.sqlite.SQLiteConfig;

import java.util.Properties;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.*;

import java.util.Properties;
import org.junit.jupiter.api.Test;
import org.sqlite.SQLiteConfig;

class SQLiteMCAegisConfigTest {

@Test
void setMCost() {
SQLiteMCAegisConfig aegisConfig = new SQLiteMCAegisConfig();
assertThatThrownBy( () -> aegisConfig.setMCost(0)).isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> aegisConfig.setMCost(0))
.isInstanceOf(IllegalArgumentException.class);
aegisConfig.setMCost(2);

Properties props = aegisConfig.build().toProperties();
Expand All @@ -24,7 +24,8 @@ void setMCost() {
@Test
void setPCost() {
SQLiteMCAegisConfig aegisConfig = new SQLiteMCAegisConfig();
assertThatThrownBy( () -> aegisConfig.setPCost(0)).isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> aegisConfig.setPCost(0))
.isInstanceOf(IllegalArgumentException.class);
aegisConfig.setPCost(2);

Properties props = aegisConfig.build().toProperties();
Expand All @@ -34,7 +35,8 @@ void setPCost() {
@Test
void setTCost() {
SQLiteMCAegisConfig aegisConfig = new SQLiteMCAegisConfig();
assertThatThrownBy( () -> aegisConfig.setTCost(0)).isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> aegisConfig.setTCost(0))
.isInstanceOf(IllegalArgumentException.class);
aegisConfig.setTCost(2);

Properties props = aegisConfig.build().toProperties();
Expand All @@ -47,18 +49,20 @@ void setAegisAlgorithm() {
aegisConfig.setAegisAlgorithm(AegisAlgorithm.AEGIS_256X2);

Properties props = aegisConfig.build().toProperties();
assertThat(props.get(SQLiteConfig.Pragma.ALGORITHM.pragmaName)).isEqualTo(AegisAlgorithm.AEGIS_256X2.getStringValue());
assertThat(props.get(SQLiteConfig.Pragma.ALGORITHM.pragmaName))
.isEqualTo(AegisAlgorithm.AEGIS_256X2.getStringValue());
}

@Test
void getDefault() {
SQLiteMCAegisConfig defaultConfig = SQLiteMCAegisConfig.getDefault();
Properties props = defaultConfig.build().toProperties();
assertThat(props.get(SQLiteConfig.Pragma.ALGORITHM.pragmaName)).isEqualTo(AegisAlgorithm.AEGIS_256.getStringValue());
assertThat(props.get(SQLiteConfig.Pragma.ALGORITHM.pragmaName))
.isEqualTo(AegisAlgorithm.AEGIS_256.getStringValue());
assertThat(props.get(SQLiteConfig.Pragma.TCOST.pragmaName)).isEqualTo("2");
assertThat(props.get(SQLiteConfig.Pragma.MCOST.pragmaName)).isEqualTo("19456");
assertThat(props.get(SQLiteConfig.Pragma.PCOST.pragmaName)).isEqualTo("1");

assertThat(props.get(SQLiteConfig.Pragma.CIPHER.pragmaName)).isEqualTo("aegis");
}
}
}
19 changes: 9 additions & 10 deletions src/test/java/org/sqlite/mc/SQLiteMCAscon128ConfigTest.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
package org.sqlite.mc;

import org.junit.jupiter.api.Test;
import org.sqlite.SQLiteConfig;

import java.util.Properties;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.*;

import java.util.Properties;
import org.junit.jupiter.api.Test;
import org.sqlite.SQLiteConfig;

class SQLiteMCAscon128ConfigTest {

@Test
void setKdfIter() {
SQLiteMCAscon128Config config = new SQLiteMCAscon128Config();
assertThatThrownBy( () -> config.setKdfIter(0)).isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> config.setKdfIter(0)).isInstanceOf(IllegalArgumentException.class);

config.setKdfIter(2);

Properties props = config.build().toProperties();
assertThat(props.get(SQLiteConfig.Pragma.KDF_ITER.pragmaName)).isEqualTo( "2");
assertThat(props.get(SQLiteConfig.Pragma.KDF_ITER.pragmaName)).isEqualTo("2");
}

@Test
void getDefault() {
SQLiteMCAscon128Config config = SQLiteMCAscon128Config.getDefault();
Properties props = config.build().toProperties();
assertThat(props.get(SQLiteConfig.Pragma.KDF_ITER.pragmaName)).isEqualTo( "64007");
assertThat(props.get(SQLiteConfig.Pragma.CIPHER.pragmaName)).isEqualTo( "ascon128");
assertThat(props.get(SQLiteConfig.Pragma.KDF_ITER.pragmaName)).isEqualTo("64007");
assertThat(props.get(SQLiteConfig.Pragma.CIPHER.pragmaName)).isEqualTo("ascon128");
}
}
}
Loading

0 comments on commit 9d0ed76

Please sign in to comment.