On Fri, 18 Dec 2020 14:29:00 GMT, PROgrm_JARvis <github.com+7693005+jarviscr...@openjdk.org> wrote:
>> There are pre-existing microbenchmarks for java.security under >> test/micro/org/openjdk/bench/java/security >> >> You can build and run these using `make test TEST=micro:YourBenchmark`. >> Refer to >> [doc/testing.md](https://github.com/openjdk/jdk/blob/master/doc/testing.md) >> for some required configuration steps. >> >> I'd suggest starting with a simple micro that zooms in on >> MessageDigest.getInstance("MD5"), maybe like so: >> >> /* >> * Copyright (c) 2020, 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 org.openjdk.bench.java.security; >> >> import java.security.DigestException; >> import java.security.MessageDigest; >> import java.security.NoSuchAlgorithmException; >> import java.security.NoSuchProviderException; >> import java.util.Random; >> import java.util.concurrent.TimeUnit; >> import org.openjdk.jmh.annotations.Benchmark; >> import org.openjdk.jmh.annotations.BenchmarkMode; >> import org.openjdk.jmh.annotations.Fork; >> import org.openjdk.jmh.annotations.Measurement; >> import org.openjdk.jmh.annotations.Mode; >> import org.openjdk.jmh.annotations.OutputTimeUnit; >> import org.openjdk.jmh.annotations.Param; >> import org.openjdk.jmh.annotations.Scope; >> import org.openjdk.jmh.annotations.Setup; >> import org.openjdk.jmh.annotations.State; >> import org.openjdk.jmh.annotations.Warmup; >> >> /** >> * Tests speed of looking up MessageDigests. >> */ >> @State(Scope.Thread) >> @BenchmarkMode(Mode.AverageTime) >> @OutputTimeUnit(TimeUnit.NANOSECONDS) >> @Warmup(iterations = 5, time = 1) >> @Measurement(iterations = 10, time = 1) >> @Fork(value = 3) >> public class GetMessageDigest { >> >> @Benchmark >> public MessageDigest getMD5Digest() throws NoSuchAlgorithmException { >> return MessageDigest.getInstance("MD5"); >> } >> } > >> I'd suggest starting with a simple micro that zooms in on >> MessageDigest.getInstance("MD5"), maybe like so: > > Thanks, that's what I wanted to hear. > I will implement it now. > I've looked through [Standard Algorithms section for > MessageDigest](https://docs.oracle.com/en/java/javase/15/docs/specs/security/standard-names.html#messagedigest-algorithms) > and is says > > > Algorithm names that _can_ be specified > > And the javadoc of `MessageDigest` says: > > > Every implementation of the Java platform is required to support the > > following standard `MessageDigest` algorithms: > > > > * `SHA-1` > > * `SHA-256` > > So I cannot find any requirement for `MD5` to be present. Although I believe > that every implementation does provide it, it may be essential to either > specify it or describe the behavior for its absence in case of `UUID`'s usage. MD5 and DES were removed as SE requirements in JDK 14. See https://bugs.openjdk.java.net/browse/JDK-8214483 for more information. However, there are no plans to remove the implementations from the JDK at this time. ------------- PR: https://git.openjdk.java.net/jdk/pull/1821