10cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/**
20cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Copyright (C) 2012 The Android Open Source Project
30cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
40cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); you may not
50cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * use this file except in compliance with the License. You may obtain a copy of
60cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License at
70cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
80cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * http://www.apache.org/licenses/LICENSE-2.0
90cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
100cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Unless required by applicable law or agreed to in writing, software
110cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
120cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
130cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * License for the specific language governing permissions and limitations under
140cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License.
150cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
160cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
170cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpackage com.android.inputmethod.dictionarypack;
180cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
190cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.io.InputStream;
200cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.io.IOException;
210cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.security.MessageDigest;
220cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
239087d19fc03ac16d8e64ff35c07d4e88343141cfJean Chalardpublic final class MD5Calculator {
240cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private MD5Calculator() {} // This helper class is not instantiable
250cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
260cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public static String checksum(final InputStream in) throws IOException {
270cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        // This code from the Android documentation for MessageDigest. Nearly verbatim.
280cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        MessageDigest digester;
290cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        try {
300cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            digester = MessageDigest.getInstance("MD5");
310cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        } catch (java.security.NoSuchAlgorithmException e) {
320cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            return null; // Platform does not support MD5 : can't check, so return null
330cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
340cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final byte[] bytes = new byte[8192];
350cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        int byteCount;
360cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        while ((byteCount = in.read(bytes)) > 0) {
370cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            digester.update(bytes, 0, byteCount);
380cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
390cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final byte[] digest = digester.digest();
400cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        final StringBuilder s = new StringBuilder();
410cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        for (int i = 0; i < digest.length; ++i) {
420cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            s.append(String.format("%1$02x", digest[i]));
430cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
440cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        return s.toString();
450cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
460cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard}
47