blob: e7e7932456de641a4621f34a484dd5a65a697316 [file] [log] [blame]
Logan75cc8a52011-01-07 06:06:52 +08001/*
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
Logan75cc8a52011-01-07 06:06:52 +080017#include "Sha1Helper.h"
18
Logan35849002011-01-15 07:30:43 +080019#include "Config.h"
20
Logan4dcd6792011-02-28 05:12:00 +080021#include "DebugHelper.h"
Logan75cc8a52011-01-07 06:06:52 +080022#include "FileHandle.h"
23
24#include <string.h>
25
Logane1323992011-01-12 04:47:13 +080026#include <utils/StopWatch.h>
27
Logan75cc8a52011-01-07 06:06:52 +080028#include <sha1.h>
29
30namespace bcc {
31
Joseph Wen2ca6e572011-06-24 14:12:23 -070032unsigned char sha1LibBCC_SHA1[20];
33char const *pathLibBCC_SHA1 = "/system/lib/libbcc_sha1.so";
Logan75cc8a52011-01-07 06:06:52 +080034
35void calcSHA1(unsigned char *result, char const *data, size_t size) {
36 SHA1_CTX hashContext;
37
38 SHA1Init(&hashContext);
39 SHA1Update(&hashContext,
40 reinterpret_cast<const unsigned char *>(data),
41 static_cast<unsigned long>(size));
42
43 SHA1Final(result, &hashContext);
44}
45
46
47void calcFileSHA1(unsigned char *result, char const *filename) {
Logane1323992011-01-12 04:47:13 +080048#if defined(__arm__)
49 android::StopWatch calcFileSHA1Timer("calcFileSHA1 time");
50#endif
51
Logan75cc8a52011-01-07 06:06:52 +080052 FileHandle file;
53
54 if (file.open(filename, OpenMode::Read) < 0) {
55 LOGE("Unable to calculate the sha1 checksum of %s\n", filename);
56 memset(result, '\0', 20);
57 return;
58 }
59
60 SHA1_CTX hashContext;
61 SHA1Init(&hashContext);
62
63 char buf[256];
64 while (true) {
65 ssize_t nread = file.read(buf, sizeof(buf));
Shih-wei Liaof7cfc022011-01-07 06:39:53 -080066
Logan75cc8a52011-01-07 06:06:52 +080067 if (nread < 0) {
68 break;
69 }
70
71 SHA1Update(&hashContext,
72 reinterpret_cast<unsigned char *>(buf),
73 static_cast<unsigned long>(nread));
74
75 if ((size_t)nread < sizeof(buf)) {
76 // finished.
77 break;
78 }
79 }
80
81 SHA1Final(result, &hashContext);
82}
83
84} // namespace bcc