mirror of
https://codeberg.org/PGPainless/cert-d-java.git
synced 2025-09-10 11:49:39 +02:00
Add tests for PGPCertificateStoreAdapter
This commit is contained in:
parent
dee2ea88a7
commit
f34c6d7735
6 changed files with 295 additions and 148 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue