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

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

Issue 1243563002: Teach the GCM Driver how to decrypt incoming messages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gcm-push-keys
Patch Set: address comment Created 5 years, 2 months 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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/big_endian.h" 9 #include "base/big_endian.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "crypto/hkdf.h" 11 #include "crypto/hkdf.h"
12 12
13 namespace gcm { 13 namespace gcm {
14 namespace { 14 namespace {
15 15
16 // Size, in bytes, of the nonce for a record. This must be at least the size 16 // Size, in bytes, of the nonce for a record. This must be at least the size
17 // of a uint64_t, which is used to indicate the record sequence number. 17 // of a uint64_t, which is used to indicate the record sequence number.
18 const uint64_t kNonceSize = 12; 18 const uint64_t kNonceSize = 12;
19 19
20 // The default record size as defined by draft-thomson-http-encryption-01. 20 // The default record size as defined by draft-thomson-http-encryption-01.
21 const size_t kDefaultRecordSize = 4096; 21 const size_t kDefaultRecordSize = 4096;
22 22
23 // Key size, in bytes, of a valid AEAD_AES_128_GCM key. 23 // Key size, in bytes, of a valid AEAD_AES_128_GCM key.
24 const size_t kContentEncryptionKeySize = 16; 24 const size_t kContentEncryptionKeySize = 16;
25 25
26 // Salt size, in bytes, that will be used together with the key to create a
27 // unique content encryption key for a given message.
28 const size_t kSaltSize = 16;
29
30 } // namespace 26 } // namespace
31 27
32 const size_t GCMMessageCryptographer::kAuthenticationTagBytes = 16; 28 const size_t GCMMessageCryptographer::kAuthenticationTagBytes = 16;
29 const size_t GCMMessageCryptographer::kSaltSize = 16;
33 30
34 GCMMessageCryptographer::GCMMessageCryptographer() {} 31 GCMMessageCryptographer::GCMMessageCryptographer() {}
35 32
36 GCMMessageCryptographer::~GCMMessageCryptographer() {} 33 GCMMessageCryptographer::~GCMMessageCryptographer() {}
37 34
38 bool GCMMessageCryptographer::Encrypt(const base::StringPiece& plaintext, 35 bool GCMMessageCryptographer::Encrypt(const base::StringPiece& plaintext,
39 const base::StringPiece& key, 36 const base::StringPiece& key,
40 const base::StringPiece& salt, 37 const base::StringPiece& salt,
41 size_t* record_size, 38 size_t* record_size,
42 std::string* ciphertext) const { 39 std::string* ciphertext) const {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 0 /* subkey_secret_bytes_to_generate */); 143 0 /* subkey_secret_bytes_to_generate */);
147 144
148 // draft-thomson-http-encryption-01 defines that the result should be XOR'ed 145 // draft-thomson-http-encryption-01 defines that the result should be XOR'ed
149 // with the record's sequence number, but because Web Push encryption is 146 // with the record's sequence number, but because Web Push encryption is
150 // limited to a single record we do not have to do that. 147 // limited to a single record we do not have to do that.
151 148
152 return hkdf.client_write_key().as_string(); 149 return hkdf.client_write_key().as_string();
153 } 150 }
154 151
155 } // namespace gcm 152 } // namespace gcm
OLDNEW
« no previous file with comments | « components/gcm_driver/crypto/gcm_message_cryptographer.h ('k') | components/gcm_driver/gcm_driver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698