publicstaticvoid main(String[] args) throws Exception {
String[] algos = { "A", "B", "C" };
test3rdParty(algos); // reverse the order and re-check
String[] algosReversed = { "C", "B", "A" };
test3rdParty(algosReversed);
}
privatestaticvoid test3rdParty(String[] algos) {
Provider[] provs = { new SampleLegacyProvider(algos), new SampleServiceProvider(algos), new CustomProvider(algos)
}; for (Provider p : provs) {
checkDefault(p, algos);
}
}
// validate the specified SecureRandom obj to be from the specified // provider and matches the specified algorithm privatestaticvoid validate(SecureRandom sr, String pName, String algo) { if (!sr.getProvider().getName().equals(pName)) { thrownew RuntimeException("Failed provider check, exp: " +
pName + ", got " + sr.getProvider().getName());
} if (!sr.getAlgorithm().equals(algo)) { thrownew RuntimeException("Failed algo check, exp: " +
algo + ", got " + sr.getAlgorithm());
}
}
boolean isLegacy = pName.equals("SampleLegacy"); try { if (isLegacy) { for (String s : algos) {
validate(new SecureRandom(), pName, s);
p.remove("SecureRandom." + s);
out.println("removed " + s);
}
validate(new SecureRandom(), "SUN",
SunEntries.DEF_SECURE_RANDOM_ALGO);
} else {
validate(new SecureRandom(), pName, algos[0]);
}
out.println("=> Test Passed");
} finally { if (pos != -1) {
Security.removeProvider(pName);
} if (isLegacy) { // add back the removed algos for (String s : algos) {
p.put("SecureRandom." + s, SR_IMPLCLASS);
}
}
}
}
privatestaticclass SampleLegacyProvider extends Provider {
SampleLegacyProvider(String[] listOfSupportedRNGs) { super("SampleLegacy", "1.0", "test provider using legacy put"); for (String s : listOfSupportedRNGs) {
put("SecureRandom." + s, SR_IMPLCLASS);
}
}
}
privatestaticclass SampleServiceProvider extends Provider {
SampleServiceProvider(String[] listOfSupportedRNGs) { super("SampleService", "1.0", "test provider using putService"); for (String s : listOfSupportedRNGs) {
putService(new Provider.Service(this, "SecureRandom", s,
SR_IMPLCLASS, null, null));
}
}
}
// custom provider which overrides putService(...)/getService() and uses // its own Service impl privatestaticclass CustomProvider extends Provider { privatestaticclass CustomService extends Provider.Service {
CustomService(Provider p, String type, String algo, String cName) { super(p, type, algo, cName, null, null);
}
}
CustomProvider(String[] listOfSupportedRNGs) { super("Custom", "1.0", "test provider overrides putService with " + " custom service with legacy registration"); for (String s : listOfSupportedRNGs) {
putService(new CustomService(this, "SecureRandom", s ,
SR_IMPLCLASS));
}
}
@Override protectedvoid putService(Provider.Service s) { // convert to legacy puts
put(s.getType() + "." + s.getAlgorithm(), s.getClassName());
put(s.getType() + ":" + s.getAlgorithm(), s);
}
@Override public Provider.Service getService(String type, String algo) { return (Provider.Service) get(type + ":" + algo);
}
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(vorverarbeitet am 2026-06-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.