1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.DigestException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.MessageDigest; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.MessageDigestSpi; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.MyMessageDigest1; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>MessageDigest</code> constructor and methods 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class MessageDigest1Test extends TestCase { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 3744e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#reset() 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_reset() { 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.reset(); 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineReset); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 4644e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#update(byte) 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_updateLB() { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update((byte) 1); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineUpdate1); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 5544e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#update(byte[], int, int) 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_updateLB$LILI() { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final byte[] bytes = { 1, 2, 3, 4, 5 }; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(bytes, 1, 2); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineUpdate2); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-1120 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // buf == null 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(null, 0, 1); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset + len > buf.length 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(bytes, 0, bytes.length + 1); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset + len > Integer.MAX_VALUE 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(bytes, Integer.MAX_VALUE, 1); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset<0 and len<0 are passed to provider 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int offset = -1; 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int len = -1; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = new MyMessageDigest1("ABC") { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineUpdate(byte[] arg0, int arg1, int arg2) { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertSame("buf", bytes, arg0); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("offset", offset, arg1); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("len", len, arg2); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project runEngineUpdate2 = true; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(bytes, offset, len); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineUpdate2); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 9944e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#update(byte[]) 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_updateLB$() { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = { 1, 2, 3, 4, 5 }; 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(b); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineUpdate2); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 10944e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#update(ByteBuffer) 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_updateLjava_nio_ByteBuffer() { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = { 1, 2, 3, 4, 5 }; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer byteBuffer = ByteBuffer.wrap(b); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int limit = byteBuffer.limit(); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(byteBuffer); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineUpdate2); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(byteBuffer.limit(), byteBuffer.position()); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(limit, byteBuffer.limit()); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 12444e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#digest() 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_digest() { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("incorrect result", 0, md.digest().length); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineDigest); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 13344e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#digest(byte[]) 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_digestLB$() { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = { 1, 2, 3, 4, 5 }; 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("incorrect result", 0, md.digest(b).length); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(md.runEngineDigest); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 14344e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#digest(byte[], int, int) 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_digestLB$LILI() throws Exception { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = { 1, 2, 3, 4, 5 }; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("incorrect result", 0, md.digest(b, 2, 3)); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("digest failed", md.runEngineDigest); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for Harmony-1148 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = new MyMessageDigest1(); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final byte[] bytes = new byte[] { 2, 4, 1 }; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // buf == null 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.digest(null, 0, 1); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset + len > buf.length 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.digest(bytes, 0, bytes.length + 1); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset + len > Integer.MAX_VALUE 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.digest(bytes, Integer.MAX_VALUE, 1); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IllegalArgumentException"); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset<0 and len<0 are passed to provider 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int offset = -1; 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int len = -1; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final int status = 33; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = new MyMessageDigest1("ABC") { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineDigest(byte[] arg0, int arg1, int arg2) { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertSame("buf", bytes, arg0); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("offset", offset, arg1); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("len", len, arg2); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return status; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("returned status", status, md.digest(bytes, offset, len)); 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MessageDigest digest = MessageDigest.getInstance("TestDigest", new TestProvider()); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project digest.digest(new byte[5], 0, 5); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected DigestException"); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DigestException e) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 19744e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#isEqual(byte[],byte[]) 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isEqualLB$LB$() { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = { 1, 2, 3, 4 }; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b2 = { 1, 2, 3, 4, 5 }; 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b3 = { 1, 3, 3, 4 }; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b4 = { 1, 2, 3, 4 }; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(MessageDigest.isEqual(b1, b4)); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(MessageDigest.isEqual(b1, b2)); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(MessageDigest.isEqual(b1, b3)); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 21144e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#getAlgorithm() 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getAlgorithm() { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("ABC", md.getAlgorithm()); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 21944e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#getProvider() 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getProvider() { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(md.getProvider()); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 22744e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom * java.security.MessageDigest#getDigestLength() 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDigestLength() { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MyMessageDigest1 md = new MyMessageDigest1("ABC"); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, md.getDigestLength()); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests SHA MessageDigest provider 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSHAProvider() { 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MessageDigest md = null; 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = MessageDigest.getInstance("SHA"); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected exception: " + e); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bytes = new byte[] { 1, 1, 1, 1, 1 }; 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-1120 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // testing combination with provider 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset < 0 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.update(bytes, -1, 1); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected IndexOutOfBoundsException"); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IndexOutOfBoundsException e) { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 25444e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom try { 25544e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom md.update(bytes, 1, -1); 25644e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom fail("No expected IndexOutOfBoundsException"); 25744e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom } catch (IndexOutOfBoundsException e) { 25844e4b13e9a75f12b9267a8b563730f3687062aa6Brian Carlstrom } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Regression for Harmony-1148 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = MessageDigest.getInstance("SHA"); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected exception: " + e); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // offset < 0 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.digest(bytes, 0, -1); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected DigestException"); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DigestException e) { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // len < 0 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md.digest(bytes, -1, 0); 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No expected DigestException"); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DigestException e) { 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 279f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project md = MessageDigest.getInstance("UnknownDigest"); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NoSuchAlgorithmException"); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 288f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class TestProvider extends Provider { 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TestProvider() { 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super("TestProvider", 1.0, "info"); 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project put("MessageDigest.TestDigest", TestMessageDigestSpi.class.getName()); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 295f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class TestMessageDigestSpi extends MessageDigestSpi { 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TestMessageDigestSpi() { 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected byte[] engineDigest() { 303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return new byte[]{3,4,5,6,7,8,9,3,45,6,7,}; 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void engineReset() { 308f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void engineUpdate(byte input) { 313f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void engineUpdate(byte[] input, int offset, int len) { 318f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int engineGetDigestLength() { 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 42; 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 327