summaryrefslogtreecommitdiffstats
path: root/luni/src/test/java/tests/targets/security/MessageDigestTestMD2.java
blob: 6811bc07825c1f2a971aabe92686b3f06988d923 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package tests.targets.security;

import dalvik.annotation.AndroidOnly;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.Security;
import junit.framework.TestCase;

public class MessageDigestTestMD2 extends TestCase {

    @AndroidOnly("Android doesn't include MD2 message digest algorithm")
    public void testMessageDigest1() throws Exception{
        try {
            MessageDigest digest = MessageDigest.getInstance("MD2");
            fail("MD2 MessageDigest algorithm must not be supported");
        } catch (NoSuchAlgorithmException e) {
            // expected
        }

        try {
            MessageDigest digest = MessageDigest.getInstance(
                    "1.2.840.113549.2.2");
            fail("MD2 MessageDigest algorithm must not be supported");
        } catch (NoSuchAlgorithmException e) {
            // expected
        }
    }

    @AndroidOnly("Android allows usage of MD2 in third party providers")
    public void testMessageDigest2() throws Exception{

        Provider provider  = new MyProvider();
        Security.addProvider(provider);

        try {
            MessageDigest digest = MessageDigest.getInstance("MD2");

            digest = MessageDigest.getInstance("1.2.840.113549.2.2");
        } finally {
            Security.removeProvider(provider.getName());
        }
    }

    public final class MyProvider extends Provider {
        public MyProvider() {
            super("MessageDigestMD2Test", 1.00, "TestProvider");
            put("MessageDigest.MD2",
                    "tests.targets.security.MessageDigestTestMD2$MD2");
            put("Alg.Alias.MessageDigest.1.2.840.113549.2.2", "MD2");
        }
    }

    public static class MD2 extends MessageDigest {

        public MD2() {
            super("MD2");
        }

        protected MD2(String algorithm) {
            super(algorithm);
        }

        @Override
        protected byte[] engineDigest() {
            return null;
        }

        @Override
        protected void engineReset() {
        }

        @Override
        protected void engineUpdate(byte input) {
        }

        @Override
        protected void engineUpdate(byte[] input, int offset, int len) {
        }
    }
}