1 /* 2 * copyright 2010, the android open source project 3 * 4 * licensed under the apache license, version 2.0 (the "license"); 5 * you may not use this file except in compliance with the license. 6 * you may obtain a copy of the license at 7 * 8 * http://www.apache.org/licenses/license-2.0 9 * 10 * unless required by applicable law or agreed to in writing, software 11 * distributed under the license is distributed on an "as is" basis, 12 * without warranties or conditions of any kind, either express or implied. 13 * see the license for the specific language governing permissions and 14 * limitations under the license. 15 */ 16 17 #include "Sha1Helper.h" 18 19 #include "Config.h" 20 21 #include "DebugHelper.h" 22 #include "FileHandle.h" 23 24 #include <string.h> 25 26 #include <utils/StopWatch.h> 27 28 #include <sha1.h> 29 30 namespace bcc { 31 32 unsigned char sha1LibBCC_SHA1[20]; 33 char const *pathLibBCC_SHA1 = "/system/lib/libbcc.so.sha1"; 34 35 unsigned char sha1LibRS[20]; 36 char const *pathLibRS = "/system/lib/libRS.so"; 37 38 void calcSHA1(unsigned char *result, char const *data, size_t size) { 39 SHA1_CTX hashContext; 40 41 SHA1Init(&hashContext); 42 SHA1Update(&hashContext, 43 reinterpret_cast<const unsigned char *>(data), 44 static_cast<unsigned long>(size)); 45 46 SHA1Final(result, &hashContext); 47 } 48 49 50 void calcFileSHA1(unsigned char *result, char const *filename) { 51 android::StopWatch calcFileSHA1Timer("calcFileSHA1 time"); 52 53 FileHandle file; 54 55 if (file.open(filename, OpenMode::Read) < 0) { 56 LOGE("Unable to calculate the sha1 checksum of %s\n", filename); 57 memset(result, '\0', 20); 58 return; 59 } 60 61 SHA1_CTX hashContext; 62 SHA1Init(&hashContext); 63 64 char buf[256]; 65 while (true) { 66 ssize_t nread = file.read(buf, sizeof(buf)); 67 68 if (nread < 0) { 69 break; 70 } 71 72 SHA1Update(&hashContext, 73 reinterpret_cast<unsigned char *>(buf), 74 static_cast<unsigned long>(nread)); 75 76 if ((size_t)nread < sizeof(buf)) { 77 // finished. 78 break; 79 } 80 } 81 82 SHA1Final(result, &hashContext); 83 } 84 85 void readSHA1(unsigned char *result, int result_size, char const *filename) { 86 FileHandle file; 87 if (file.open(filename, OpenMode::Read) < 0) { 88 LOGE("Unable to read binary sha1 file %s\n", filename); 89 memset(result, '\0', result_size); 90 return; 91 } 92 file.read((char *)result, result_size); 93 } 94 95 } // namespace bcc 96