Util.java revision 3e722cadf66802194267460fe5de77e6c18530eb
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.IOException; 263e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ObjectInputStream; 273e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.io.ObjectOutputStream; 283e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.security.MessageDigest; 293e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanimport java.security.NoSuchAlgorithmException; 303e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 313e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyanclass Util { 323e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private static final String TAG = "certinstaller.Util"; 333e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 343e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static byte[] toBytes(Object object) { 353e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ByteArrayOutputStream baos = new ByteArrayOutputStream(); 363e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan try { 373e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan ObjectOutputStream os = new ObjectOutputStream(baos); 383e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.writeObject(object); 393e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan os.close(); 403e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } catch (Exception e) { 413e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "toBytes(): " + e + ": " + object); 423e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } finally { 433e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan return baos.toByteArray(); 443e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 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 933e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan static void deleteFile(File file) { 943e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan if ((file != null) && !file.delete()) { 953e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan Log.w(TAG, "cannot delete cert: " + file); 963e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 973e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 983e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan 993e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan private Util() { 1003e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan } 1013e722cadf66802194267460fe5de77e6c18530ebHung-ying Tyan} 102