1f290793bc65b8483332ac8b568962395c4a63927Zonr Chang/*
2f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * Copyright 2012, The Android Open Source Project
3f290793bc65b8483332ac8b568962395c4a63927Zonr Chang *
4f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
5f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * you may not use this file except in compliance with the License.
6f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * You may obtain a copy of the License at
7f290793bc65b8483332ac8b568962395c4a63927Zonr Chang *
8f290793bc65b8483332ac8b568962395c4a63927Zonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
9f290793bc65b8483332ac8b568962395c4a63927Zonr Chang *
10f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * Unless required by applicable law or agreed to in writing, software
11f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
12f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * See the License for the specific language governing permissions and
14f290793bc65b8483332ac8b568962395c4a63927Zonr Chang * limitations under the License.
15f290793bc65b8483332ac8b568962395c4a63927Zonr Chang */
16f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
17f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#ifndef BCC_SUPPORT_SHA1_UTIL_H
18f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#define BCC_SUPPORT_SHA1_UTIL_H
19f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
20f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#include <stdint.h>
21f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
22f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#include <cstddef>
23f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
24f290793bc65b8483332ac8b568962395c4a63927Zonr Chang// This guard prevents system sha1.h (such as the one in bionic) has been
25f290793bc65b8483332ac8b568962395c4a63927Zonr Chang// included before this header.
26f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#ifndef SHA1_DIGEST_LENGTH
27f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#define SHA1_DIGEST_LENGTH 20
28f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#endif
29f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
30f290793bc65b8483332ac8b568962395c4a63927Zonr Changnamespace bcc {
31f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
32f290793bc65b8483332ac8b568962395c4a63927Zonr Changclass Sha1Util {
33f290793bc65b8483332ac8b568962395c4a63927Zonr Changprivate:
34f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  Sha1Util(); // DISABLED.
35f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  Sha1Util(Sha1Util &); // DISABLED.
36f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
37f290793bc65b8483332ac8b568962395c4a63927Zonr Changpublic:
38f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  // Return true on success.
39f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  static bool GetSHA1DigestFromFile(uint8_t pResult[SHA1_DIGEST_LENGTH],
40f290793bc65b8483332ac8b568962395c4a63927Zonr Chang                                    const char *pFilename);
41f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
42f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  // Return true on success.
43f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  static bool GetSHA1DigestFromBuffer(uint8_t pResult[SHA1_DIGEST_LENGTH],
44f290793bc65b8483332ac8b568962395c4a63927Zonr Chang                                      const uint8_t *pData, size_t pSize);
45f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
46f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  // Useful function when passing buffer of type  "const char *."
47f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  static bool GetSHA1DigestFromBuffer(uint8_t pResult[SHA1_DIGEST_LENGTH],
48f290793bc65b8483332ac8b568962395c4a63927Zonr Chang                                      const char *pData, size_t pSize) {
49f290793bc65b8483332ac8b568962395c4a63927Zonr Chang    return GetSHA1DigestFromBuffer(pResult,
50f290793bc65b8483332ac8b568962395c4a63927Zonr Chang                                   reinterpret_cast<const uint8_t*>(pData),
51f290793bc65b8483332ac8b568962395c4a63927Zonr Chang                                   pSize);
52f290793bc65b8483332ac8b568962395c4a63927Zonr Chang  }
53f290793bc65b8483332ac8b568962395c4a63927Zonr Chang};
54f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
55f290793bc65b8483332ac8b568962395c4a63927Zonr Chang} // end namespace bcc
56f290793bc65b8483332ac8b568962395c4a63927Zonr Chang
57f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#endif // BCC_SUPPORT_SHA1_UTIL_H
58