mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-06-17 00:54:50 +02:00
Move ArmorUtils to org.pgpainless.ascii_armor Move Armored*StreamFactory to org.pgpainless.ascii_armor Move CRCingArmoredInputStreamWrapper to org.pgpainless.ascii_armor Move SessionKey to org.pgpainless.s2k Move RevocationAttributes to org.pgpainless.key Move UserId to org.pgpainless.key Move Passphrase to org.pgpainless.s2k Move NotationRegistry to org.pgpainless.policy
89 lines
2.8 KiB
Java
89 lines
2.8 KiB
Java
// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package org.pgpainless.ascii_armor;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import org.bouncycastle.bcpg.ArmoredOutputStream;
|
|
|
|
/**
|
|
* Factory to create configured {@link ArmoredOutputStream ArmoredOutputStreams}.
|
|
* The configuration entails setting custom version and comment headers.
|
|
*/
|
|
public final class ArmoredOutputStreamFactory {
|
|
|
|
public static final String PGPAINLESS = "PGPainless";
|
|
private static String version = PGPAINLESS;
|
|
private static String[] comment = new String[0];
|
|
|
|
private ArmoredOutputStreamFactory() {
|
|
|
|
}
|
|
|
|
/**
|
|
* Wrap an {@link OutputStream} inside a preconfigured {@link ArmoredOutputStream}.
|
|
*
|
|
* @param outputStream inner stream
|
|
* @return armored output stream
|
|
*/
|
|
public static ArmoredOutputStream get(OutputStream outputStream) {
|
|
ArmoredOutputStream armoredOutputStream = new ArmoredOutputStream(outputStream);
|
|
armoredOutputStream.setHeader(ArmorUtils.HEADER_VERSION, version);
|
|
for (String comment : comment) {
|
|
ArmorUtils.addCommentHeader(armoredOutputStream, comment);
|
|
}
|
|
return armoredOutputStream;
|
|
}
|
|
|
|
/**
|
|
* Overwrite the version header of ASCII armors with a custom value.
|
|
* Newlines in the version info string result in multiple version header entries.
|
|
*
|
|
* @param versionString version string
|
|
*/
|
|
public static void setVersionInfo(String versionString) {
|
|
if (versionString == null || versionString.trim().isEmpty()) {
|
|
throw new IllegalArgumentException("Version Info MUST NOT be null NOR empty.");
|
|
}
|
|
version = versionString;
|
|
}
|
|
|
|
/**
|
|
* Reset the version header to its default value of {@link #PGPAINLESS}.
|
|
*/
|
|
public static void resetVersionInfo() {
|
|
version = PGPAINLESS;
|
|
}
|
|
|
|
/**
|
|
* Set a comment header value in the ASCII armor header.
|
|
* If the comment contains newlines, it will be split into multiple header entries.
|
|
*
|
|
* @see org.pgpainless.encryption_signing.ProducerOptions#setComment(String) for how to set comments for
|
|
* individual messages.
|
|
*
|
|
* @param commentString comment
|
|
*/
|
|
public static void setComment(String commentString) {
|
|
if (commentString == null) {
|
|
throw new IllegalArgumentException("Comment cannot be null.");
|
|
}
|
|
String trimmed = commentString.trim();
|
|
if (trimmed.isEmpty()) {
|
|
throw new IllegalArgumentException("Comment cannot be empty.");
|
|
}
|
|
|
|
String[] lines = commentString.split("\n");
|
|
comment = lines;
|
|
}
|
|
|
|
/**
|
|
* Reset to the default of no comment headers.
|
|
*/
|
|
public static void resetComment() {
|
|
comment = new String[0];
|
|
}
|
|
}
|