Add tests for PGPCertificateStoreAdapter

This commit is contained in:
Paul Schaub 2022-08-24 23:18:54 +02:00
parent dee2ea88a7
commit f34c6d7735
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
6 changed files with 295 additions and 148 deletions

View file

@ -16,6 +16,7 @@ import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
/**
* Implementation of the Shared PGP Certificate Directory.
@ -27,6 +28,7 @@ public class PGPCertificateDirectory
final Backend backend;
final SubkeyLookup subkeyLookup;
private final Pattern openPgpV4FingerprintPattern = Pattern.compile("^[a-f0-9]{40}$");
/**
* Constructor for a PGP certificate directory.
@ -41,6 +43,9 @@ public class PGPCertificateDirectory
@Override
public Certificate getByFingerprint(String fingerprint) throws BadDataException, BadNameException, IOException {
if (!openPgpV4FingerprintPattern.matcher(fingerprint).matches()) {
throw new BadNameException();
}
return backend.readByFingerprint(fingerprint);
}

View file

@ -19,6 +19,7 @@ import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirectory.Backend {
@ -60,6 +61,7 @@ public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirect
private final Map<String, KeyMaterial> keyMaterialSpecialNameMap = new HashMap<>();
private final PGPCertificateDirectory.LockingMechanism lock = new ObjectLockingMechanism();
private final KeyMaterialReaderBackend reader;
private final AtomicLong nonce = new AtomicLong(1);
public InMemoryCertificateDirectoryBackend(KeyMaterialReaderBackend reader) {
this.reader = reader;
@ -102,9 +104,9 @@ public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirect
}
KeyMaterial merged = merge.merge(update, existing);
if (merged instanceof Key) {
merged = new Key((Key) merged, System.currentTimeMillis());
merged = new Key((Key) merged, newTag());
} else {
merged = new Certificate((Certificate) merged, System.currentTimeMillis());
merged = new Certificate((Certificate) merged, newTag());
}
keyMaterialSpecialNameMap.put(SpecialNames.TRUST_ROOT, merged);
return merged;
@ -117,7 +119,7 @@ public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirect
KeyMaterial update = reader.read(data, null);
Certificate existing = readByFingerprint(update.getFingerprint());
Certificate merged = merge.merge(update, existing).asCertificate();
merged = new Certificate(merged, System.currentTimeMillis());
merged = new Certificate(merged, newTag());
certificateFingerprintMap.put(update.getFingerprint(), merged);
return merged;
}
@ -129,9 +131,9 @@ public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirect
KeyMaterial existing = readBySpecialName(specialName);
KeyMaterial merged = merge.merge(keyMaterial, existing);
if (merged instanceof Key) {
merged = new Key((Key) merged, System.currentTimeMillis());
merged = new Key((Key) merged, newTag());
} else {
merged = new Certificate((Certificate) merged, System.currentTimeMillis());
merged = new Certificate((Certificate) merged, newTag());
}
keyMaterialSpecialNameMap.put(specialName, merged);
return merged.asCertificate();
@ -157,4 +159,8 @@ public class InMemoryCertificateDirectoryBackend implements PGPCertificateDirect
}
return tagged.getTag();
}
private Long newTag() {
return System.currentTimeMillis() + nonce.incrementAndGet();
}
}