From 578b7d1db256d9a582cef45ae5d13d858a977416 Mon Sep 17 00:00:00 2001 From: Yuuta Liang Date: Thu, 26 Oct 2023 05:00:12 +0800 Subject: Add persistence Signed-off-by: Yuuta Liang --- .../model/asn1/exceptions/InvalidDBException.java | 10 + src/main/model/ca/CertificationAuthority.java | 80 +++++- src/main/persistence/Decoder.java | 284 +++++++++++++++++++++ src/main/persistence/FS.java | 46 ++++ src/main/ui/IssueScreen.java | 8 +- src/main/ui/JCA.java | 95 +++++-- src/main/ui/MainScreen.java | 6 +- src/main/ui/MgmtScreen.java | 3 + src/main/ui/TemplateSetScreen.java | 8 +- src/main/ui/TemplatesScreen.java | 2 + src/main/ui/Utils.java | 6 +- src/test/persistence/DecoderTest.java | 81 ++++++ src/test/persistence/FSTest.java | 50 ++++ src/test/ui/UtilsTest.java | 6 + 14 files changed, 653 insertions(+), 32 deletions(-) create mode 100644 src/main/model/asn1/exceptions/InvalidDBException.java create mode 100644 src/main/persistence/Decoder.java create mode 100644 src/main/persistence/FS.java create mode 100644 src/test/persistence/DecoderTest.java create mode 100644 src/test/persistence/FSTest.java (limited to 'src') diff --git a/src/main/model/asn1/exceptions/InvalidDBException.java b/src/main/model/asn1/exceptions/InvalidDBException.java new file mode 100644 index 0000000..4068a4b --- /dev/null +++ b/src/main/model/asn1/exceptions/InvalidDBException.java @@ -0,0 +1,10 @@ +package model.asn1.exceptions; + +/** + * The database is invalid. + */ +public class InvalidDBException extends RuntimeException { + public InvalidDBException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/model/ca/CertificationAuthority.java b/src/main/model/ca/CertificationAuthority.java index feb557c..038d209 100644 --- a/src/main/model/ca/CertificationAuthority.java +++ b/src/main/model/ca/CertificationAuthority.java @@ -35,6 +35,8 @@ import java.util.stream.Stream; * Holds a CA private key, its certificate, signed / revoked list, template list, and logs list. */ public class CertificationAuthority { + public static final int SERIAL_DEFAULT = 1; + /** * The RSA2048 private key. */ @@ -81,14 +83,45 @@ public class CertificationAuthority { private final String user; /** - * EFFECT: Init with a null key and null certificate, empty signed, revoked template, and log list, serial at 1, and - * user "yuuta". + * EFFECT: Init with the given parameters and user "yuuta". + * Throws {@link NoSuchAlgorithmException} if the key is specified but RSA is not supported. + * Throws {@link InvalidKeySpecException} if the key specified is invalid. + * Throws {@link InvalidCAException} or {@link ParseException} if the CA specified is invalid. + * REQUIRES: n / p / e must be either all null or all non-null containing RSA2048 module and exponents. + * If certificate is non-null, n / p / e must be non-null. + */ + public CertificationAuthority(BigInteger n, BigInteger p, BigInteger e, + Certificate certificate, + List signed, + int serial, + List revoked, + List