13e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan/* 23e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * Copyright (C) 2009 The Android Open Source Project 33e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * 43e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * Licensed under the Apache License, Version 2.0 (the "License"); 53e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * you may not use this file except in compliance with the License. 63e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * You may obtain a copy of the License at 73e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * 83e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * http://www.apache.org/licenses/LICENSE-2.0 93e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * 103e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * Unless required by applicable law or agreed to in writing, software 113e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * distributed under the License is distributed on an "AS IS" BASIS, 123e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * See the License for the specific language governing permissions and 143e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan * limitations under the License. 153e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan */ 163e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 173e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanpackage com.android.certinstaller; 183e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 193e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport android.util.Log; 203e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 213e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ByteArrayInputStream; 223e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ByteArrayOutputStream; 233e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.File; 243e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.FileInputStream; 253e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ObjectInputStream; 263e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ObjectOutputStream; 273e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.security.MessageDigest; 283e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.security.NoSuchAlgorithmException; 293e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 303e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanclass Util { 313e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private static final String TAG = "certinstaller.Util"; 323e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 3338856d6bd1acc648b18aceb9af4d68e25f314fb6Victor Chang public static final String SETTINGS_PACKAGE = "com.android.settings"; 3438856d6bd1acc648b18aceb9af4d68e25f314fb6Victor Chang 353e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static byte[] toBytes(Object object) { 363e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ByteArrayOutputStream baos = new ByteArrayOutputStream(); 373e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 383e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ObjectOutputStream os = new ObjectOutputStream(baos); 393e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.writeObject(object); 403e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.close(); 413e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 423e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "toBytes(): " + e + ": " + object); 433e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 443e17f9f04b9f7d153757bfd2f34a5fe60698adcbMohammad Shamsi return baos.toByteArray(); 453e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 463e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 473e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static <T> T fromBytes(byte[] bytes) { 483e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan if (bytes == null) return null; 493e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 503e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ObjectInputStream is = 513e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan new ObjectInputStream(new ByteArrayInputStream(bytes)); 523e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return (T) is.readObject(); 533e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 543e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "fromBytes(): " + e); 553e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return null; 563e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 573e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 583e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 593e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static String toMd5(byte[] bytes) { 603e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 613e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan MessageDigest algorithm = MessageDigest.getInstance("MD5"); 623e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan algorithm.reset(); 633e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan algorithm.update(bytes); 643e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return toHexString(algorithm.digest(), ""); 653e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch(NoSuchAlgorithmException e){ 663e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan // should not occur 673e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "toMd5(): " + e); 683e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan throw new RuntimeException(e); 693e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 703e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 713e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 723e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private static String toHexString(byte[] bytes, String separator) { 733e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan StringBuilder hexString = new StringBuilder(); 743e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan for (byte b : bytes) { 753e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan hexString.append(Integer.toHexString(0xFF & b)).append(separator); 763e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 773e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return hexString.toString(); 783e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 793e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 803e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static byte[] readFile(File file) { 813e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 823e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan byte[] data = new byte[(int) file.length()]; 833e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan FileInputStream fis = new FileInputStream(file); 843e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan fis.read(data); 853e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan fis.close(); 863e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return data; 873e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 883e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "cert file read error: " + e); 893e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return null; 903e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 913e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 923e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 93d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan static boolean deleteFile(File file) { 943e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan if ((file != null) && !file.delete()) { 953e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "cannot delete cert: " + file); 96d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan return false; 97d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan } else { 98d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan return true; 993e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 1003e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 1013e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 1023e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private Util() { 1033e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 1043e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan} 105