/* * copyright 2012, the android open source project * * licensed under the apache license, version 2.0 (the "license"); * you may not use this file except in compliance with the license. * you may obtain a copy of the license at * * http://www.apache.org/licenses/license-2.0 * * unless required by applicable law or agreed to in writing, software * distributed under the license is distributed on an "as is" basis, * without warranties or conditions of any kind, either express or implied. * see the license for the specific language governing permissions and * limitations under the license. */ #include "bcc/Support/Sha1Util.h" #include <sha1.h> #include <cstring> #include "bcc/Support/Log.h" #include "bcc/Support/InputFile.h" using namespace bcc; bool Sha1Util::GetSHA1DigestFromFile(uint8_t pResult[SHA1_DIGEST_LENGTH], const char *pFilename) { InputFile file(pFilename); if (file.hasError()) { ALOGE("Unable to open the file %s before SHA-1 checksum " "calculation! (%s)", pFilename, file.getErrorMessage().c_str()); return false; } SHA1_CTX sha1_context; SHA1Init(&sha1_context); char buf[256]; while (true) { ssize_t nread = file.read(buf, sizeof(buf)); if (nread < 0) { // Some errors occurred during file reading. return false; } SHA1Update(&sha1_context, reinterpret_cast<unsigned char *>(buf), static_cast<unsigned long>(nread)); if (static_cast<size_t>(nread) < sizeof(buf)) { break; } } SHA1Final(pResult, &sha1_context); return true; } bool Sha1Util::GetSHA1DigestFromBuffer(uint8_t pResult[SHA1_DIGEST_LENGTH], const uint8_t *pData, size_t pSize) { SHA1_CTX sha1_context; SHA1Init(&sha1_context); SHA1Update(&sha1_context, reinterpret_cast<const unsigned char *>(pData), static_cast<unsigned long>(pSize)); SHA1Final(pResult, &sha1_context); return true; }