Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 1e9d675

Browse files
committedMay 23, 2024
Added multiple hash algorithms
1 parent b9d3c1c commit 1e9d675

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed
 

‎pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
<artifactId>opentelemetry-instrumentation-annotations</artifactId>
2121
<version>2.0.0</version>
2222
</dependency>
23+
<dependency>
24+
<groupId>org.bouncycastle</groupId>
25+
<artifactId>bcprov-jdk18on</artifactId>
26+
<version>1.78.1</version>
27+
</dependency>
2328
</dependencies>
2429

2530
<build>
@@ -40,6 +45,15 @@
4045
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
4146
<mainClass>co.elastic.demo.CpuBurnerMain</mainClass>
4247
</transformer>
48+
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
49+
<resource>.SF</resource>
50+
</transformer>
51+
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
52+
<resource>.DSA</resource>
53+
</transformer>
54+
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
55+
<resource>java.security.Provider</resource>
56+
</transformer>
4357
</transformers>
4458
</configuration>
4559
</execution>

‎src/main/java/co/elastic/demo/CpuBurnerMain.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import io.opentelemetry.api.trace.Span;
55
import io.opentelemetry.api.trace.Tracer;
66
import io.opentelemetry.instrumentation.annotations.WithSpan;
7+
import org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi;
8+
import org.bouncycastle.jcajce.provider.digest.SHA3;
79

810
import java.security.MessageDigest;
911
import java.security.NoSuchAlgorithmException;
@@ -16,7 +18,14 @@ public class CpuBurnerMain {
1618

1719
public static volatile Object sink;
1820

19-
public static void main(String[] args) throws InterruptedException {
21+
public static void main(String[] args) throws InterruptedException, NoSuchAlgorithmException {
22+
23+
MessageDigest[] hashAlgos = new MessageDigest[] {
24+
MessageDigest.getInstance("SHA-256"),
25+
new SHA3.DigestSHA3(256)
26+
};
27+
28+
2029
Thread t1 = new Thread(() -> {
2130
while (true) {
2231
try {
@@ -33,8 +42,10 @@ public static void main(String[] args) throws InterruptedException {
3342

3443

3544
Thread t2 = new Thread(() -> {
45+
int iteration = 0;
3646
while (true) {
37-
shaShenanigans();
47+
iteration++;
48+
shaShenanigans(hashAlgos[iteration % hashAlgos.length]);
3849
try {
3950
Thread.sleep(2000);
4051
} catch (InterruptedException e) {
@@ -88,32 +99,30 @@ public static void fibonacciFun() {
8899
}
89100
}
90101

91-
public static void shaShenanigans() {
92-
Span span = tracer.spanBuilder("shaShenanigans").startSpan();
102+
public static void shaShenanigans(MessageDigest digest) {
103+
Span span = tracer.spanBuilder("shaShenanigans")
104+
.setAttribute("algorithm", digest.getAlgorithm())
105+
.startSpan();
106+
93107
try (var scope = span.makeCurrent()) {
94108
long start = System.nanoTime();
95109
while ((System.nanoTime() - start) < 100_000_000L) {
96-
sink = hashRandomStuff();
110+
sink = hashRandomStuff(digest);
97111
}
98112
} finally {
99113
span.end();
100114
}
101115
}
102116

103117
@WithSpan
104-
private static byte[] hashRandomStuff() {
105-
try {
106-
MessageDigest digest = MessageDigest.getInstance("SHA-256");
107-
Random rnd = new Random();
108-
byte[] buffer = new byte[1024];
109-
for (int i = 0; i < 5000; i++) {
110-
rnd.nextBytes(buffer);
111-
digest.update(buffer);
112-
}
113-
return digest.digest();
114-
} catch (NoSuchAlgorithmException e) {
115-
throw new RuntimeException(e);
118+
private static byte[] hashRandomStuff(MessageDigest digest) {
119+
Random rnd = new Random();
120+
byte[] buffer = new byte[1024];
121+
for (int i = 0; i < 5000; i++) {
122+
rnd.nextBytes(buffer);
123+
digest.update(buffer);
116124
}
125+
return digest.digest();
117126
}
118127

119128

0 commit comments

Comments
 (0)
Please sign in to comment.