-
Notifications
You must be signed in to change notification settings - Fork 236
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
8254711: Add java.security.Provider.getService JFR Event
8294673: JFR: Add SecurityProviderService#threshold to TestActiveSettingEvent.java Reviewed-by: mbaesken Backport-of: bc2af47e1e4e6e96020e03a60ce098ddd17f63ba
- Loading branch information
Showing
10 changed files
with
286 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
src/java.base/share/classes/jdk/internal/event/SecurityProviderServiceEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. Oracle designates this | ||
* particular file as subject to the "Classpath" exception as provided | ||
* by Oracle in the LICENSE file that accompanied this code. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
package jdk.internal.event; | ||
|
||
/** | ||
* Event recording details of Provider.getService(String type, String algorithm) calls | ||
*/ | ||
|
||
public final class SecurityProviderServiceEvent extends Event { | ||
private final static SecurityProviderServiceEvent EVENT = new SecurityProviderServiceEvent(); | ||
|
||
/** | ||
* Returns {@code true} if event is enabled, {@code false} otherwise. | ||
*/ | ||
public static boolean isTurnedOn() { | ||
return EVENT.isEnabled(); | ||
} | ||
|
||
public String type; | ||
public String algorithm; | ||
public String provider; | ||
} |
48 changes: 48 additions & 0 deletions
48
src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. Oracle designates this | ||
* particular file as subject to the "Classpath" exception as provided | ||
* by Oracle in the LICENSE file that accompanied this code. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
package jdk.jfr.events; | ||
|
||
import jdk.jfr.Category; | ||
import jdk.jfr.Description; | ||
import jdk.jfr.Label; | ||
import jdk.jfr.Name; | ||
import jdk.jfr.internal.MirrorEvent; | ||
|
||
@Category({"Java Development Kit", "Security"}) | ||
@Label("Security Provider Instance Request") | ||
@Name("jdk.SecurityProviderService") | ||
@Description("Details of Provider.getInstance(String type, String algorithm) calls") | ||
@MirrorEvent(className = "jdk.internal.event.SecurityProviderServiceEvent") | ||
public final class SecurityProviderServiceEvent extends AbstractJDKEvent { | ||
@Label("Type of Service") | ||
public String type; | ||
|
||
@Label("Algorithm Name") | ||
public String algorithm; | ||
|
||
@Label("Security Provider") | ||
public String provider; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
157 changes: 157 additions & 0 deletions
157
test/jdk/jdk/jfr/event/security/TestSecurityProviderServiceEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
/* | ||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
package jdk.jfr.event.security; | ||
|
||
import java.security.*; | ||
import java.security.cert.CertPathBuilder; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.function.*; | ||
|
||
import jdk.jfr.Recording; | ||
import jdk.jfr.consumer.RecordedEvent; | ||
import jdk.test.lib.Asserts; | ||
import jdk.test.lib.jfr.Events; | ||
import jdk.test.lib.jfr.EventNames; | ||
|
||
import javax.crypto.Cipher; | ||
import javax.crypto.NoSuchPaddingException; | ||
|
||
/* | ||
* @test | ||
* @bug 8254711 | ||
* @summary Add JFR events for security crypto algorithms | ||
* @key jfr | ||
* @requires vm.hasJFR | ||
* @library /test/lib | ||
* @modules jdk.jfr/jdk.jfr.events | ||
* @run main/othervm jdk.jfr.event.security.TestSecurityProviderServiceEvent | ||
*/ | ||
public class TestSecurityProviderServiceEvent { | ||
|
||
public static void main(String[] args) throws Exception { | ||
testAlg(cipherFunc, "AES", "SunJCE", | ||
"SunEC", "Cipher", 1, Collections.emptyList()); | ||
testAlg(signatureFunc, "SHA256withRSA", "SunRsaSign", | ||
"SunEC", "Signature", 2, List.of("MessageDigest")); | ||
testAlg(messageDigestFunc, "SHA-512", "SUN", | ||
"SunEC", "MessageDigest", 1, Collections.emptyList()); | ||
testAlg(keystoreFunc, "PKCS12", "SUN", | ||
"SunEC", "KeyStore", 1, Collections.emptyList()); | ||
testAlg(certPathBuilderFunc, "PKIX", "SUN", | ||
"SunEC", "CertPathBuilder", 2, List.of("CertificateFactory")); | ||
} | ||
|
||
private static void testAlg(BiFunction<String, String, Provider> bif, String alg, | ||
String workingProv, String brokenProv, String algType, | ||
int expected, List<String> other) throws Exception { | ||
// bootstrap security Provider services | ||
Provider p = bif.apply(alg, workingProv); | ||
|
||
try (Recording recording = new Recording()) { | ||
recording.enable(EventNames.SecurityProviderService); | ||
recording.start(); | ||
p = bif.apply(alg, workingProv); | ||
bif.apply(alg, brokenProv); | ||
recording.stop(); | ||
List<RecordedEvent> events = Events.fromRecording(recording); | ||
Asserts.assertEquals(events.size(), expected, "Incorrect number of events"); | ||
assertEvent(events, algType, alg, p.getName(), other); | ||
} | ||
} | ||
|
||
private static BiFunction<String, String, Provider> cipherFunc = (s1, p1 ) -> { | ||
Cipher c; | ||
try { | ||
c = Cipher.getInstance(s1, p1); | ||
return c.getProvider(); | ||
} catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) { | ||
// expected | ||
} | ||
return null; | ||
}; | ||
|
||
private static BiFunction<String, String, Provider> signatureFunc = (s1, p1 ) -> { | ||
Signature s; | ||
try { | ||
s = Signature.getInstance(s1, p1); | ||
return s.getProvider(); | ||
} catch (NoSuchAlgorithmException | NoSuchProviderException e) { | ||
// expected | ||
} | ||
return null; | ||
}; | ||
|
||
private static BiFunction<String, String, Provider> messageDigestFunc = (s1, p1 ) -> { | ||
MessageDigest md; | ||
try { | ||
md = MessageDigest.getInstance(s1, p1); | ||
return md.getProvider(); | ||
} catch (NoSuchAlgorithmException | NoSuchProviderException e) { | ||
// expected | ||
} | ||
return null; | ||
}; | ||
|
||
private static BiFunction<String, String, Provider> keystoreFunc = (s1, p1 ) -> { | ||
KeyStore ks; | ||
try { | ||
ks = KeyStore.getInstance(s1, p1); | ||
return ks.getProvider(); | ||
} catch (NoSuchProviderException | KeyStoreException e) { | ||
// expected | ||
} | ||
return null; | ||
}; | ||
|
||
private static BiFunction<String, String, Provider> certPathBuilderFunc = (s1, p1 ) -> { | ||
CertPathBuilder cps; | ||
try { | ||
cps = CertPathBuilder.getInstance(s1, p1); | ||
return cps.getProvider(); | ||
} catch (NoSuchProviderException | NoSuchAlgorithmException e) { | ||
// expected | ||
} | ||
return null; | ||
}; | ||
|
||
private static void assertEvent(List<RecordedEvent> events, String type, | ||
String alg, String workingProv, List<String> other) { | ||
boolean secondaryEventOK = other.isEmpty() ? true : false; | ||
for (RecordedEvent e : events) { | ||
if (other.contains(e.getValue("type"))) { | ||
// secondary operation in service stack while constructing this request | ||
secondaryEventOK = true; | ||
continue; | ||
} | ||
Events.assertField(e, "provider").equal(workingProv); | ||
Events.assertField(e, "type").equal(type); | ||
Events.assertField(e, "algorithm").equal(alg); | ||
} | ||
if (!secondaryEventOK) { | ||
throw new RuntimeException("Secondary events missing"); | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2835c6a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review
Issues