| OLD | NEW |
| 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_encryption_provider.h" | 5 #include "components/gcm_driver/crypto/gcm_encryption_provider.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 std::string shared_secret; | 240 std::string shared_secret; |
| 241 if (!ComputeSharedP256Secret(pair.private_key(), pair.public_key_x509(), dh, | 241 if (!ComputeSharedP256Secret(pair.private_key(), pair.public_key_x509(), dh, |
| 242 &shared_secret)) { | 242 &shared_secret)) { |
| 243 DLOG(ERROR) << "Unable to calculate the shared secret."; | 243 DLOG(ERROR) << "Unable to calculate the shared secret."; |
| 244 callback.Run(DECRYPTION_RESULT_INVALID_SHARED_SECRET, IncomingMessage()); | 244 callback.Run(DECRYPTION_RESULT_INVALID_SHARED_SECRET, IncomingMessage()); |
| 245 return; | 245 return; |
| 246 } | 246 } |
| 247 | 247 |
| 248 std::string plaintext; | 248 std::string plaintext; |
| 249 | 249 |
| 250 GCMMessageCryptographer cryptographer(GCMMessageCryptographer::Label::P256, | 250 GCMMessageCryptographer cryptographer(pair.public_key(), dh, auth_secret); |
| 251 pair.public_key(), dh, auth_secret); | |
| 252 if (!cryptographer.Decrypt(message.raw_data, shared_secret, salt, rs, | 251 if (!cryptographer.Decrypt(message.raw_data, shared_secret, salt, rs, |
| 253 &plaintext)) { | 252 &plaintext)) { |
| 254 DLOG(ERROR) << "Unable to decrypt the incoming data."; | 253 DLOG(ERROR) << "Unable to decrypt the incoming data."; |
| 255 callback.Run(DECRYPTION_RESULT_INVALID_PAYLOAD, IncomingMessage()); | 254 callback.Run(DECRYPTION_RESULT_INVALID_PAYLOAD, IncomingMessage()); |
| 256 return; | 255 return; |
| 257 } | 256 } |
| 258 | 257 |
| 259 IncomingMessage decrypted_message; | 258 IncomingMessage decrypted_message; |
| 260 decrypted_message.collapse_key = message.collapse_key; | 259 decrypted_message.collapse_key = message.collapse_key; |
| 261 decrypted_message.sender_id = message.sender_id; | 260 decrypted_message.sender_id = message.sender_id; |
| 262 decrypted_message.raw_data.swap(plaintext); | 261 decrypted_message.raw_data.swap(plaintext); |
| 263 decrypted_message.decrypted = true; | 262 decrypted_message.decrypted = true; |
| 264 | 263 |
| 265 // There must be no data associated with the decrypted message at this point, | 264 // There must be no data associated with the decrypted message at this point, |
| 266 // to make sure that we don't end up in an infinite decryption loop. | 265 // to make sure that we don't end up in an infinite decryption loop. |
| 267 DCHECK_EQ(0u, decrypted_message.data.size()); | 266 DCHECK_EQ(0u, decrypted_message.data.size()); |
| 268 | 267 |
| 269 callback.Run(DECRYPTION_RESULT_DECRYPTED, decrypted_message); | 268 callback.Run(DECRYPTION_RESULT_DECRYPTED, decrypted_message); |
| 270 } | 269 } |
| 271 | 270 |
| 272 } // namespace gcm | 271 } // namespace gcm |
| OLD | NEW |