1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package tests.targets.security;
17
18import java.security.InvalidKeyException;
19import java.security.InvalidParameterException;
20import java.security.NoSuchAlgorithmException;
21import java.security.PrivateKey;
22import java.security.Provider;
23import java.security.PublicKey;
24import java.security.Security;
25import java.security.Signature;
26import java.security.SignatureException;
27import junit.framework.TestCase;
28
29public class SignatureTestMD2withRSA extends TestCase {
30
31    public void testSignature() {
32
33        // MD2 must not be part of android.
34
35        try {
36            Signature signature = Signature.getInstance("MD2withRSA");
37            fail("MD2withRSA for signature verification must not be supported");
38        } catch (NoSuchAlgorithmException e) {
39            // expected
40        }
41
42        try {
43            Signature signature = Signature.getInstance("MD2WithRSA");
44            fail("MD2withRSA for signature verification must not be supported");
45        } catch (NoSuchAlgorithmException e) {
46            // expected
47        }
48
49        try {
50            Signature signature = Signature.getInstance("MD2WITHRSA");
51            fail("MD2withRSA for signature verification must not be supported");
52        } catch (NoSuchAlgorithmException e) {
53            // expected
54        }
55
56        try {
57            Signature signature = Signature.getInstance("MD2withRSAEncryption");
58            fail("MD2withRSA for signature verification must not be supported");
59        } catch (NoSuchAlgorithmException e) {
60            // expected
61        }
62
63        try {
64            Signature signature = Signature.getInstance("MD2WithRSAEncryption");
65            fail("MD2withRSA for signature verification must not be supported");
66        } catch (NoSuchAlgorithmException e) {
67            // expected
68        }
69
70        try {
71            Signature signature = Signature.getInstance("MD2WITHRSAENCRYPTION");
72            fail("MD2withRSA for signature verification must not be supported");
73        } catch (NoSuchAlgorithmException e) {
74            // expected
75        }
76
77        try {
78            Signature signature = Signature.getInstance("MD2/RSA");
79            fail("MD2withRSA for signature verification must not be supported");
80        } catch (NoSuchAlgorithmException e) {
81            // expected
82        }
83
84        try {
85            Signature signature = Signature.getInstance("1.2.840.113549.1.1.2");
86            fail("MD2withRSA for signature verification must not be supported");
87        } catch (NoSuchAlgorithmException e) {
88            // expected
89        }
90    }
91
92    public void testSignature2() throws Exception{
93
94        Provider provider = new MyProvider();
95        Security.addProvider(provider);
96
97        Signature signature = Signature.getInstance("MD2withRSA");
98        signature = Signature.getInstance("MD2WithRSA");
99        signature = Signature.getInstance("MD2WITHRSA");
100        signature = Signature.getInstance("MD2withRSAEncryption");
101        signature = Signature.getInstance("MD2WithRSAEncryption");
102        signature = Signature.getInstance("MD2WITHRSAENCRYPTION");
103        signature = Signature.getInstance("MD2/RSA");
104        signature = Signature.getInstance("1.2.840.113549.1.1.2");
105
106        Security.removeProvider(provider.getName());
107    }
108
109    public final class MyProvider extends Provider {
110        public MyProvider()
111        {
112            super("SignatureMD2WithRSATest", 1.00, "TestProvider");
113            put("Signature.MD2WithRSAEncryption",
114                    "tests.targets.security.SignatureTestMD2withRSA$MD2withRSA");
115            put("Alg.Alias.Signature.MD2WITHRSAENCRYPTION",
116                    "MD2WithRSAEncryption");
117            put("Alg.Alias.Signature.MD2WithRSA", "MD2WithRSAEncryption");
118            put("Alg.Alias.Signature.MD2withRSA", "MD2WithRSAEncryption");
119            put("Alg.Alias.Signature.MD2/RSA", "MD2WithRSAEncryption");
120            put("Alg.Alias.Signature.1.2.840.113549.1.1.2",
121                    "MD2WithRSAEncryption");
122        }
123    }
124
125    public static class MD2withRSA extends Signature {
126
127        public MD2withRSA() {
128            super("MD2WithRSA");
129        }
130
131        public MD2withRSA(String algorithm) {
132            super(algorithm);
133        }
134
135        @Override
136        protected Object engineGetParameter(String param)
137                throws InvalidParameterException {
138            return null;
139        }
140
141        @Override
142        protected void engineInitSign(PrivateKey privateKey)
143                throws InvalidKeyException {
144        }
145
146        @Override
147        protected void engineInitVerify(PublicKey publicKey)
148                throws InvalidKeyException {
149        }
150
151        @Override
152        protected void engineSetParameter(String param, Object value)
153                throws InvalidParameterException {
154        }
155
156        @Override
157        protected byte[] engineSign() throws SignatureException {
158            return null;
159        }
160
161        @Override
162        protected void engineUpdate(byte b) throws SignatureException {
163        }
164
165        @Override
166        protected void engineUpdate(byte[] b, int off, int len)
167                throws SignatureException {
168        }
169
170        @Override
171        protected boolean engineVerify(byte[] sigBytes)
172                throws SignatureException {
173            return false;
174        }
175    }
176}
177