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