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 333e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static byte[] toBytes(Object object) { 343e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ByteArrayOutputStream baos = new ByteArrayOutputStream(); 353e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 363e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ObjectOutputStream os = new ObjectOutputStream(baos); 373e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.writeObject(object); 383e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.close(); 393e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 403e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "toBytes(): " + e + ": " + object); 413e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 423e17f9f04b9f7d153757bfd2f34a5fe60698adcbMohammad Shamsi return baos.toByteArray(); 433e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 443e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 453e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static <T> T fromBytes(byte[] bytes) { 463e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan if (bytes == null) return null; 473e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 483e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ObjectInputStream is = 493e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan new ObjectInputStream(new ByteArrayInputStream(bytes)); 503e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return (T) is.readObject(); 513e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 523e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "fromBytes(): " + e); 533e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return null; 543e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 553e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 563e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 573e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static String toMd5(byte[] bytes) { 583e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 593e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan MessageDigest algorithm = MessageDigest.getInstance("MD5"); 603e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan algorithm.reset(); 613e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan algorithm.update(bytes); 623e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return toHexString(algorithm.digest(), ""); 633e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch(NoSuchAlgorithmException e){ 643e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan // should not occur 653e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "toMd5(): " + e); 663e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan throw new RuntimeException(e); 673e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 683e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 693e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 703e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private static String toHexString(byte[] bytes, String separator) { 713e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan StringBuilder hexString = new StringBuilder(); 723e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan for (byte b : bytes) { 733e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan hexString.append(Integer.toHexString(0xFF & b)).append(separator); 743e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 753e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return hexString.toString(); 763e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 773e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 783e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static byte[] readFile(File file) { 793e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 803e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan byte[] data = new byte[(int) file.length()]; 813e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan FileInputStream fis = new FileInputStream(file); 823e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan fis.read(data); 833e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan fis.close(); 843e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return data; 853e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 863e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "cert file read error: " + e); 873e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return null; 883e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 893e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 903e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 91d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan static boolean deleteFile(File file) { 923e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan if ((file != null) && !file.delete()) { 933e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "cannot delete cert: " + file); 94d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan return false; 95d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan } else { 96d674440a49f278793aa2a2bb01c231f8cea7f8c0Hung-ying Tyan return true; 973e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 983e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 993e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 1003e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private Util() { 1013e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 1023e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan} 103