import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.sql.SQLException;
-import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import org.cacert.gigi.output.template.Template;
import org.cacert.gigi.pages.LoginPage;
import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.PEM;
import org.cacert.gigi.util.RandomToken;
import sun.security.pkcs10.PKCS10;
}
private PKCS10 parseCSR(String csr) throws IOException, GeneralSecurityException {
- csr = csr.replaceFirst("-----BEGIN (NEW )?CERTIFICATE REQUEST-----", "");
- csr = csr.replaceFirst("-----END (NEW )?CERTIFICATE REQUEST-----", "");
- csr = csr.replace("\r", "");
- csr = csr.replace("\n", "");
- byte[] b = Base64.getDecoder().decode(csr);
- // Also checks signature validity
- return new PKCS10(b);
+ return new PKCS10(PEM.decode("(NEW )?CERTIFICATE REQUEST", csr));
}
@Override
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Base64;
import java.util.HashMap;
import javax.servlet.ServletOutputStream;
import org.cacert.gigi.output.CertificateTable;
import org.cacert.gigi.pages.LoginPage;
import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.PEM;
public class MailCertificates extends Page {
}
ServletOutputStream out = resp.getOutputStream();
if (crt) {
- out.println("-----BEGIN CERTIFICATE-----");
- String block = Base64.getEncoder().encodeToString(cert.getEncoded()).replaceAll("(.{64})(?=.)", "$1\n");
- out.println(block);
- out.println("-----END CERTIFICATE-----");
+ out.println(PEM.encode("CERTIFICATE", cert.getEncoded()));
} else if (cer) {
out.write(cert.getEncoded());
}
--- /dev/null
+package org.cacert.gigi.util;
+
+import java.util.Base64;
+
+public class PEM {
+
+ public static String encode(String type, byte[] data) {
+ return "-----BEGIN " + type + "-----\n" + //
+ Base64.getEncoder().encodeToString(data).replaceAll("(.{64})(?=.)", "$1\n") + //
+ "\n-----END " + type + "-----";
+ }
+
+ public static byte[] decode(String type, String data) {
+ data = data.replaceAll("-----BEGIN " + type + "-----", "").replace("\n", "").replace("\r", "");
+ // Remove the first and last lines
+ data = data.replaceAll("-----END " + type + "-----", "");
+ // Base64 decode the data
+ return Base64.getDecoder().decode(data);
+
+ }
+}