1cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root/*
2cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * Copyright (C) 2015 The Android Open Source Project
3cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root *
4cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
5cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * you may not use this file except in compliance with the License.
6cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * You may obtain a copy of the License at
7cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root *
8cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * http://www.apache.org/licenses/LICENSE-2.0
9cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root *
10cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * Unless required by applicable law or agreed to in writing, software
11cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
12cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * See the License for the specific language governing permissions and
14cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root * limitations under the License.
15cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root */
16cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root
17cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Rootpackage benchmarks.regression;
18cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root
19cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Rootimport java.security.Provider;
20cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Rootimport java.security.Security;
21cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Rootimport javax.crypto.Cipher;
22cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root
23ea13f8291a92b6f47f50011da1d5e8c107984bc3Paul Duffinpublic class ProviderBenchmark {
24cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    public void timeStableProviders(int reps) throws Exception {
25cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        for (int i = 0; i < reps; ++i) {
26cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            Cipher c = Cipher.getInstance("RSA");
27cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        }
28cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    }
29cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root
30cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    public void timeWithNewProvider(int reps) throws Exception {
31cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        for (int i = 0; i < reps; ++i) {
32cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            Security.addProvider(new MockProvider());
33cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            try {
34cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root                Cipher c = Cipher.getInstance("RSA");
35cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            } finally {
36cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root                Security.removeProvider("Mock");
37cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            }
38cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        }
39cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    }
40cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root
41cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    private static class MockProvider extends Provider {
42cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        public MockProvider() {
43cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root            super("Mock", 1.0, "Mock me!");
44cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root        }
45cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root    }
46cc4791ad77128039c93d4c03b582d4dc397e6a02Kenny Root}
47