pgpainless/pgpainless-cli/src/test/java/org/pgpainless/cli/TestUtils.java

93 lines
3.5 KiB
Java

// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
package org.pgpainless.cli;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Random;
import org.bouncycastle.openpgp.PGPUtil;
import org.bouncycastle.util.io.Streams;
public class TestUtils {
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final Random RANDOM = new Random();
public static final String ARMOR_PRIVATE_KEY_HEADER = "-----BEGIN PGP PRIVATE KEY BLOCK-----";
public static final byte[] ARMOR_PRIVATE_KEY_HEADER_BYTES =
ARMOR_PRIVATE_KEY_HEADER.getBytes(StandardCharsets.UTF_8);
public static final String ARMOR_SIGNATURE_HEADER = "-----BEGIN PGP SIGNATURE-----";
public static final byte[] ARMOR_SIGNATURE_HEADER_BYTES =
ARMOR_SIGNATURE_HEADER.getBytes(StandardCharsets.UTF_8);
public static File createTempDirectory() throws IOException {
String name = randomString(10);
File dir = Files.createTempDirectory(name).toFile();
// dir.deleteOnExit();
return dir;
}
private static String randomString(int length) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(ALPHABET.charAt(RANDOM.nextInt(ALPHABET.length())));
}
return sb.toString();
}
public static void assertSignatureEquals(String sig1, String sig2) throws IOException {
assertSignatureEquals(sig1.getBytes(StandardCharsets.UTF_8), sig2.getBytes(StandardCharsets.UTF_8));
}
public static void assertSignatureEquals(byte[] sig1, byte[] sig2) throws IOException {
InputStream sigIn1 = PGPUtil.getDecoderStream(new ByteArrayInputStream(sig1));
InputStream sigIn2 = PGPUtil.getDecoderStream(new ByteArrayInputStream(sig2));
assertSignatureEquals(sigIn1, sigIn2);
}
public static void assertSignatureEquals(InputStream sig1, InputStream sig2) throws IOException {
ByteArrayOutputStream bout1 = new ByteArrayOutputStream();
ByteArrayOutputStream bout2 = new ByteArrayOutputStream();
Streams.pipeAll(sig1, bout1);
Streams.pipeAll(sig2, bout2);
assertArrayEquals(bout1.toByteArray(), bout2.toByteArray());
}
public static void assertSignatureIsArmored(byte[] sig) {
assertTrue(isSignatureArmored(sig), "Signature encoding does not start with armor header.\n" +
"Expected: " + ARMOR_SIGNATURE_HEADER + "\n" +
"Actual: " + new String(sig));
}
public static void assertSignatureIsNotArmored(byte[] sig) {
assertFalse(isSignatureArmored(sig), "Signature encoding starts with armor header.\n" +
"Actual: " + new String(sig));
}
public static boolean isSignatureArmored(byte[] sig) {
boolean same = true;
for (int i = 0; i < ARMOR_SIGNATURE_HEADER_BYTES.length; i++) {
if (sig[i] != ARMOR_SIGNATURE_HEADER_BYTES[i]) {
same = false;
break;
}
}
return same;
}
}