blob: 07a995f5d7eb48b25474bc7f2082453700f03b12 [file] [log] [blame]
Stephen Hines6975a662012-05-03 12:26:44 -07001/*
Stephen Hines2f6a4932012-05-03 12:27:13 -07002 * copyright 2010, the android open source project
Stephen Hines6975a662012-05-03 12:26:44 -07003 *
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
Stephen Hines2f6a4932012-05-03 12:27:13 -070017#include "Sha1Helper.h"
Stephen Hines6975a662012-05-03 12:26:44 -070018
Stephen Hines2f6a4932012-05-03 12:27:13 -070019#include "Config.h"
20
21#include "DebugHelper.h"
22#include "InputFile.h"
23
24#include <string.h>
Stephen Hines6975a662012-05-03 12:26:44 -070025
26#include <utils/StopWatch.h>
27
Stephen Hines2f6a4932012-05-03 12:27:13 -070028#include <sha1.h>
Stephen Hines6975a662012-05-03 12:26:44 -070029
30namespace bcc {
31
32unsigned char sha1LibBCC_SHA1[20];
33char const *pathLibBCC_SHA1 = "/system/lib/libbcc.so.sha1";
34
35unsigned char sha1LibRS[20];
36char const *pathLibRS = "/system/lib/libRS.so";
37
38void 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
50void calcFileSHA1(unsigned char *result, char const *filename) {
51 android::StopWatch calcFileSHA1Timer("calcFileSHA1 time");
52
53 InputFile file(filename);
54
55 if (file.hasError()) {
56 ALOGE("Unable to open the file %s before SHA-1 checksum "
57 "calculation! (%s)", filename, file.getErrorMessage().c_str());
58 memset(result, '\0', 20);
59 return;
60 }
61
62 SHA1_CTX hashContext;
63 SHA1Init(&hashContext);
64
65 char buf[256];
66 while (true) {
67 ssize_t nread = file.read(buf, sizeof(buf));
68
69 if (nread < 0) {
70 break;
71 }
72
73 SHA1Update(&hashContext,
74 reinterpret_cast<unsigned char *>(buf),
75 static_cast<unsigned long>(nread));
76
77 if ((size_t)nread < sizeof(buf)) {
78 // finished.
79 break;
80 }
81 }
82
83 SHA1Final(result, &hashContext);
84}
85
86void readSHA1(unsigned char *result, int result_size, char const *filename) {
87 InputFile file(filename);
88 if (file.hasError()) {
89 ALOGE("Unable to open the binary sha1 file %s! (%s)", filename,
90 file.getErrorMessage().c_str());
91 memset(result, '\0', result_size);
92 return;
93 }
94 file.read((char *)result, result_size);
95}
96
97} // namespace bcc