OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "platform/Crypto.h" | 6 #include "platform/Crypto.h" |
7 | 7 |
8 #include "public/platform/Platform.h" | 8 #include "public/platform/Platform.h" |
9 #include "public/platform/WebArrayBuffer.h" | 9 #include "public/platform/WebArrayBuffer.h" |
10 #include "public/platform/WebCrypto.h" | 10 #include "public/platform/WebCrypto.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 case HashAlgorithmSha384: | 24 case HashAlgorithmSha384: |
25 return blink::WebCryptoAlgorithmIdSha384; | 25 return blink::WebCryptoAlgorithmIdSha384; |
26 case HashAlgorithmSha512: | 26 case HashAlgorithmSha512: |
27 return blink::WebCryptoAlgorithmIdSha512; | 27 return blink::WebCryptoAlgorithmIdSha512; |
28 }; | 28 }; |
29 | 29 |
30 ASSERT_NOT_REACHED(); | 30 ASSERT_NOT_REACHED(); |
31 return blink::WebCryptoAlgorithmIdSha256; | 31 return blink::WebCryptoAlgorithmIdSha256; |
32 } | 32 } |
33 | 33 |
34 void computeDigest(HashAlgorithm algorithm, const char* digestable, size_t lengt
h, DigestValue& digestResult) | 34 bool computeDigest(HashAlgorithm algorithm, const char* digestable, size_t lengt
h, DigestValue& digestResult) |
35 { | 35 { |
36 blink::WebCryptoAlgorithmId algorithmId = toWebCryptoAlgorithmId(algorithm); | 36 blink::WebCryptoAlgorithmId algorithmId = toWebCryptoAlgorithmId(algorithm); |
37 blink::WebCrypto* crypto = blink::Platform::current()->crypto(); | 37 blink::WebCrypto* crypto = blink::Platform::current()->crypto(); |
38 blink::WebArrayBuffer result; | 38 unsigned char* result; |
| 39 unsigned resultSize; |
39 | 40 |
40 ASSERT(crypto); | 41 ASSERT(crypto); |
41 | 42 |
42 crypto->digestSynchronous(algorithmId, reinterpret_cast<const unsigned char*
>(digestable), length, result); | 43 OwnPtr<blink::WebCryptoDigestor> digestor = adoptPtr(crypto->createDigestor(
algorithmId)); |
| 44 if (!digestor.get() || !digestor->consume(reinterpret_cast<const unsigned ch
ar*>(digestable), length) || !digestor->finish(result, resultSize)) |
| 45 return false; |
43 | 46 |
44 ASSERT(!result.isNull()); | 47 digestResult.append(static_cast<uint8_t*>(result), resultSize); |
45 | 48 return true; |
46 digestResult.append(static_cast<uint8_t*>(result.data()), result.byteLength(
)); | |
47 } | 49 } |
48 | 50 |
49 PassOwnPtr<blink::WebCryptoDigestor> createDigestor(HashAlgorithm algorithm) | 51 PassOwnPtr<blink::WebCryptoDigestor> createDigestor(HashAlgorithm algorithm) |
50 { | 52 { |
51 return adoptPtr(blink::Platform::current()->crypto()->createDigestor(toWebCr
yptoAlgorithmId(algorithm))); | 53 return adoptPtr(blink::Platform::current()->crypto()->createDigestor(toWebCr
yptoAlgorithmId(algorithm))); |
52 } | 54 } |
53 | 55 |
54 void finishDigestor(blink::WebCryptoDigestor* digestor, DigestValue& digestResul
t) | 56 void finishDigestor(blink::WebCryptoDigestor* digestor, DigestValue& digestResul
t) |
55 { | 57 { |
56 unsigned char* result = 0; | 58 unsigned char* result = 0; |
57 unsigned resultSize = 0; | 59 unsigned resultSize = 0; |
58 | 60 |
59 if (!digestor->finish(result, resultSize)) | 61 if (!digestor->finish(result, resultSize)) |
60 return; | 62 return; |
61 | 63 |
62 ASSERT(result); | 64 ASSERT(result); |
63 | 65 |
64 digestResult.append(static_cast<uint8_t*>(result), resultSize); | 66 digestResult.append(static_cast<uint8_t*>(result), resultSize); |
65 } | 67 } |
66 | 68 |
67 } // namespace WebCore | 69 } // namespace WebCore |
OLD | NEW |