1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/common/safe_browsing/binary_feature_extractor.h"
7 #include "base/files/file.h"
8 #include "base/files/file_path.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "chrome/common/safe_browsing/csd.pb.h"
11 #include "crypto/secure_hash.h"
12 #include "crypto/sha2.h"
14 namespace safe_browsing
{
16 void BinaryFeatureExtractor::ExtractDigest(
17 const base::FilePath
& file_path
,
18 ClientDownloadRequest_Digests
* digests
) {
19 base::File
file(file_path
, base::File::FLAG_OPEN
| base::File::FLAG_READ
);
21 const int kBufferSize
= 1 << 12;
22 scoped_ptr
<char[]> buf(new char[kBufferSize
]);
23 scoped_ptr
<crypto::SecureHash
> ctx(
24 crypto::SecureHash::Create(crypto::SecureHash::SHA256
));
27 len
= file
.ReadAtCurrentPos(buf
.get(), kBufferSize
);
30 ctx
->Update(buf
.get(), len
);
33 uint8_t hash
[crypto::kSHA256Length
];
34 ctx
->Finish(hash
, sizeof(hash
));
35 digests
->set_sha256(hash
, sizeof(hash
));
40 } // namespace safe_browsing