187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob/*
287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * Copyright (C) 2009 The Android Open Source Project
387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob *
487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * Licensed under the Apache License, Version 2.0 (the "License");
587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * you may not use this file except in compliance with the License.
687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * You may obtain a copy of the License at
787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob *
887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob *     http://www.apache.org/licenses/LICENSE-2.0
987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob *
1087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * Unless required by applicable law or agreed to in writing, software
1187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * distributed under the License is distributed on an "AS IS" BASIS,
1287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * See the License for the specific language governing permissions and
1487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob * limitations under the License.
1587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob */
1687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobpackage tests.targets.security;
1787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
1887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobimport dalvik.annotation.AndroidOnly;
1987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobimport java.security.MessageDigest;
2087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobimport java.security.NoSuchAlgorithmException;
2187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobimport java.security.Provider;
2287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobimport java.security.Security;
23f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilsonimport junit.framework.TestCase;
2487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
2587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grobpublic class MessageDigestTestMD2 extends TestCase {
2687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
2787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    @AndroidOnly("Android doesn't include MD2 message digest algorithm")
2887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    public void testMessageDigest1() throws Exception{
2987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        try {
3087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            MessageDigest digest = MessageDigest.getInstance("MD2");
3187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            fail("MD2 MessageDigest algorithm must not be supported");
3287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        } catch (NoSuchAlgorithmException e) {
3387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            // expected
3487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
3587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
3687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        try {
3787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            MessageDigest digest = MessageDigest.getInstance(
3887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob                    "1.2.840.113549.2.2");
3987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            fail("MD2 MessageDigest algorithm must not be supported");
4087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        } catch (NoSuchAlgorithmException e) {
4187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            // expected
4287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
4387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    }
4487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
4587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    @AndroidOnly("Android allows usage of MD2 in third party providers")
4687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    public void testMessageDigest2() throws Exception{
4787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
4887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        Provider provider  = new MyProvider();
4987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        Security.addProvider(provider);
5087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
5187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        try {
5287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            MessageDigest digest = MessageDigest.getInstance("MD2");
5387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
5487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            digest = MessageDigest.getInstance("1.2.840.113549.2.2");
5587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        } finally {
5687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            Security.removeProvider(provider.getName());
5787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
5887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    }
5987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
6087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    public final class MyProvider extends Provider {
6187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        public MyProvider() {
6287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            super("MessageDigestMD2Test", 1.00, "TestProvider");
6387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            put("MessageDigest.MD2",
6487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob                    "tests.targets.security.MessageDigestTestMD2$MD2");
6587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            put("Alg.Alias.MessageDigest.1.2.840.113549.2.2", "MD2");
6687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
6787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    }
6887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
6987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    public static class MD2 extends MessageDigest {
7087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
7187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        public MD2() {
7287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            super("MD2");
7387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
7487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
7587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        protected MD2(String algorithm) {
7687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            super(algorithm);
7787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
7887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
7987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        @Override
8087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        protected byte[] engineDigest() {
8187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob            return null;
8287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
8387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
8487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        @Override
8587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        protected void engineReset() {
8687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
8787eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
8887eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        @Override
8987eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        protected void engineUpdate(byte input) {
9087eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
9187eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob
9287eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        @Override
9387eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        protected void engineUpdate(byte[] input, int offset, int len) {
9487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        }
9587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob    }
9687eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob}
97