Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: components/gcm_driver/crypto/gcm_message_cryptographer_openssl.cc

Issue 1453503002: [NOT FOR REVIEW] Ensure contributory behaviour for Web Push encryption. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@push-renames
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/gcm_driver/crypto/gcm_message_cryptographer.h" 5 #include "components/gcm_driver/crypto/gcm_message_cryptographer.h"
6 6
7 #include <openssl/aead.h> 7 #include <openssl/aead.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/numerics/safe_math.h" 10 #include "base/numerics/safe_math.h"
(...skipping 19 matching lines...) Expand all
30 const base::StringPiece& nonce, 30 const base::StringPiece& nonce,
31 std::string* output) const { 31 std::string* output) const {
32 DCHECK(output); 32 DCHECK(output);
33 33
34 const EVP_AEAD* aead = EVP_aead_aes_128_gcm(); 34 const EVP_AEAD* aead = EVP_aead_aes_128_gcm();
35 35
36 EVP_AEAD_CTX context; 36 EVP_AEAD_CTX context;
37 if (!EVP_AEAD_CTX_init(&context, aead, 37 if (!EVP_AEAD_CTX_init(&context, aead,
38 reinterpret_cast<const uint8_t*>(key.data()), 38 reinterpret_cast<const uint8_t*>(key.data()),
39 key.size(), EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr)) { 39 key.size(), EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr)) {
40 LOG(INFO) << "--b1";
40 return false; 41 return false;
41 } 42 }
42 43
43 base::CheckedNumeric<size_t> maximum_output_length(input.size()); 44 base::CheckedNumeric<size_t> maximum_output_length(input.size());
44 if (mode == ENCRYPT) 45 if (mode == ENCRYPT)
45 maximum_output_length += kAuthenticationTagBytes; 46 maximum_output_length += kAuthenticationTagBytes;
46 47
47 // WriteInto requires the buffer to finish with a NULL-byte. 48 // WriteInto requires the buffer to finish with a NULL-byte.
48 maximum_output_length += 1; 49 maximum_output_length += 1;
49 50
50 size_t output_length = 0; 51 size_t output_length = 0;
51 uint8_t* raw_output = reinterpret_cast<uint8_t*>( 52 uint8_t* raw_output = reinterpret_cast<uint8_t*>(
52 base::WriteInto(output, maximum_output_length.ValueOrDie())); 53 base::WriteInto(output, maximum_output_length.ValueOrDie()));
53 54
54 EVP_AEAD_CTX_TransformFunction* transform_function = 55 EVP_AEAD_CTX_TransformFunction* transform_function =
55 mode == ENCRYPT ? EVP_AEAD_CTX_seal : EVP_AEAD_CTX_open; 56 mode == ENCRYPT ? EVP_AEAD_CTX_seal : EVP_AEAD_CTX_open;
56 57
57 if (!transform_function( 58 if (!transform_function(
58 &context, raw_output, &output_length, output->size(), 59 &context, raw_output, &output_length, output->size(),
59 reinterpret_cast<const uint8_t*>(nonce.data()), nonce.size(), 60 reinterpret_cast<const uint8_t*>(nonce.data()), nonce.size(),
60 reinterpret_cast<const uint8_t*>(input.data()), input.size(), 61 reinterpret_cast<const uint8_t*>(input.data()), input.size(),
61 nullptr, 0)) { 62 nullptr, 0)) {
63 LOG(INFO) << "--b2";
62 EVP_AEAD_CTX_cleanup(&context); 64 EVP_AEAD_CTX_cleanup(&context);
63 return false; 65 return false;
64 } 66 }
65 67
66 EVP_AEAD_CTX_cleanup(&context); 68 EVP_AEAD_CTX_cleanup(&context);
67 69
68 base::CheckedNumeric<size_t> expected_output_length(input.size()); 70 base::CheckedNumeric<size_t> expected_output_length(input.size());
69 if (mode == ENCRYPT) 71 if (mode == ENCRYPT)
70 expected_output_length += kAuthenticationTagBytes; 72 expected_output_length += kAuthenticationTagBytes;
71 else 73 else
72 expected_output_length -= kAuthenticationTagBytes; 74 expected_output_length -= kAuthenticationTagBytes;
73 75
74 DCHECK_EQ(expected_output_length.ValueOrDie(), output_length); 76 DCHECK_EQ(expected_output_length.ValueOrDie(), output_length);
75 77
76 output->resize(output_length); 78 output->resize(output_length);
77 return true; 79 return true;
78 } 80 }
79 81
80 } // namespace gcm 82 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698