• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
calcSHA1(unsigned char * result,char const * data,size_t size)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 
calcFileSHA1(unsigned char * result,char const * filename)50 void calcFileSHA1(unsigned char *result, char const *filename) {
51 #if defined(__arm__)
52   android::StopWatch calcFileSHA1Timer("calcFileSHA1 time");
53 #endif
54 
55   FileHandle file;
56 
57   if (file.open(filename, OpenMode::Read) < 0) {
58     LOGE("Unable to calculate the sha1 checksum of %s\n", filename);
59     memset(result, '\0', 20);
60     return;
61   }
62 
63   SHA1_CTX hashContext;
64   SHA1Init(&hashContext);
65 
66   char buf[256];
67   while (true) {
68     ssize_t nread = file.read(buf, sizeof(buf));
69 
70     if (nread < 0) {
71       break;
72     }
73 
74     SHA1Update(&hashContext,
75                reinterpret_cast<unsigned char *>(buf),
76                static_cast<unsigned long>(nread));
77 
78     if ((size_t)nread < sizeof(buf)) {
79       // finished.
80       break;
81     }
82   }
83 
84   SHA1Final(result, &hashContext);
85 }
86 
readSHA1(unsigned char * result,int result_size,char const * filename)87 void readSHA1(unsigned char *result, int result_size, char const *filename) {
88   FileHandle file;
89   if (file.open(filename, OpenMode::Read) < 0) {
90     LOGE("Unable to read binary sha1 file %s\n", filename);
91     memset(result, '\0', result_size);
92     return;
93   }
94   file.read((char *)result, result_size);
95 }
96 
97 } // namespace bcc
98