19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.core;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
20929a1c219248b62778807cac8ea256c7ac0fda6aBrian Carlstromimport java.security.MessageDigest;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests SHA1 message digest algorithm.
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Sha1Test extends TestCase {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    class TestData {
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private String input;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private String result;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public TestData(String i, String r) {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            input = i;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = r;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    TestData[] mTestData = new TestData[]{
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new TestData("abc", "a9993e364706816aba3e25717850c26c9cd0d89d"),
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new TestData("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "84983e441c3bd26ebaae4aa1f95129e5e54670f1")
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSha1() throws Exception {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MessageDigest digest = MessageDigest.getInstance("SHA-1");
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int numTests = mTestData.length;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < numTests; i++) {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            digest.update(mTestData[i].input.getBytes());
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            byte[] hash = digest.digest();
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String encodedHash = encodeHex(hash);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(encodedHash, mTestData[i].result);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static String encodeHex(byte[] bytes) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer hex = new StringBuffer(bytes.length * 2);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < bytes.length; i++) {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (((int) bytes[i] & 0xff) < 0x10) {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                hex.append("0");
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            hex.append(Integer.toString((int) bytes[i] & 0xff, 16));
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return hex.toString();
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
70