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

Unified Diff: components/gcm_driver/crypto/gcm_encryption_provider.h

Issue 1707513002: Add various UMA histograms for measuring GCM crypto performance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gcm-remove-info
Patch Set: android fix Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/gcm_driver/crypto/BUILD.gn ('k') | components/gcm_driver/crypto/gcm_encryption_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/gcm_driver/crypto/gcm_encryption_provider.h
diff --git a/components/gcm_driver/crypto/gcm_encryption_provider.h b/components/gcm_driver/crypto/gcm_encryption_provider.h
index 8c2c41b17513d9e1fee47640c384755dd782f183..294dc6ee176902c07814c9d16b24e3612a6fe801 100644
--- a/components/gcm_driver/crypto/gcm_encryption_provider.h
+++ b/components/gcm_driver/crypto/gcm_encryption_provider.h
@@ -28,38 +28,46 @@ class KeyPair;
// and decryption of incoming messages.
class GCMEncryptionProvider {
public:
- // Callback to be invoked when the public key and auth secret are available.
- using EncryptionInfoCallback = base::Callback<void(const std::string&,
- const std::string&)>;
+ // Result of decrypting an incoming message. The values of these reasons must
+ // not be changed, because they are being recorded using UMA.
+ enum DecryptionResult {
+ // The message had not been encrypted by the sender.
+ DECRYPTION_RESULT_UNENCRYPTED = 0,
- // Callback to be invoked when a message has been decrypted.
- using MessageDecryptedCallback = base::Callback<void(const IncomingMessage&)>;
-
- // Reasons why the decryption of an incoming message can fail.
- enum DecryptionFailure {
- DECRYPTION_FAILURE_UNKNOWN,
+ // The message had been encrypted by the sender, and could successfully be
+ // decrypted for the registration it has been received for.
+ DECRYPTION_RESULT_DECRYPTED = 1,
// The contents of the Encryption HTTP header could not be parsed.
- DECRYPTION_FAILURE_INVALID_ENCRYPTION_HEADER,
+ DECRYPTION_RESULT_INVALID_ENCRYPTION_HEADER = 2,
// The contents of the Crypto-Key HTTP header could not be parsed.
- DECRYPTION_FAILURE_INVALID_CRYPTO_KEY_HEADER,
+ DECRYPTION_RESULT_INVALID_CRYPTO_KEY_HEADER = 3,
// No public/private key-pair was associated with the app_id.
- DECRYPTION_FAILURE_NO_KEYS,
+ DECRYPTION_RESULT_NO_KEYS = 4,
- // The public key provided in the Crypto-Key header is invalid.
- DECRYPTION_FAILURE_INVALID_PUBLIC_KEY,
+ // The shared secret cannot be derived from the keying material.
+ DECRYPTION_RESULT_INVALID_SHARED_SECRET = 5,
// The payload could not be decrypted as AES-128-GCM.
- DECRYPTION_FAILURE_INVALID_PAYLOAD
+ DECRYPTION_RESULT_INVALID_PAYLOAD = 6,
+
+ DECRYPTION_RESULT_LAST = DECRYPTION_RESULT_INVALID_PAYLOAD
};
- // Callback to be invoked when a message cannot be decoded.
- using DecryptionFailedCallback = base::Callback<void(DecryptionFailure)>;
+ // Callback to be invoked when the public key and auth secret are available.
+ using EncryptionInfoCallback = base::Callback<void(const std::string&,
+ const std::string&)>;
+
+ // Callback to be invoked when a message may have been decrypted, as indicated
+ // by the |result|. The |message| contains the dispatchable message in success
+ // cases, or will be initialized to an empty, default state for failure.
+ using MessageCallback = base::Callback<void(DecryptionResult result,
+ const IncomingMessage& message)>;
- // Converts |reason| to a string describing the details of said reason.
- static std::string ToDecryptionFailureDetailsString(DecryptionFailure reason);
+ // Converts |result| to a string describing the details of said result.
+ static std::string ToDecryptionResultDetailsString(DecryptionResult result);
GCMEncryptionProvider();
~GCMEncryptionProvider();
@@ -84,14 +92,13 @@ class GCMEncryptionProvider {
// Determines whether |message| contains encrypted content.
bool IsEncryptedMessage(const IncomingMessage& message) const;
- // Asynchronously decrypts |message|. The |success_callback| will be invoked
- // the message could be decrypted successfully, accompanied by the decrypted
- // payload of the message. When decryption failed, the |failure_callback| will
- // be invoked with the reason that encryption failed.
+ // Attempts to decrypt the |message|. If the |message| is not encrypted, the
+ // |callback| will be invoked immediately. Otherwise |callback| will be called
+ // asynchronously when |message| has been decrypted. A dispatchable message
+ // will be used in case of success, an empty message in case of failure.
void DecryptMessage(const std::string& app_id,
const IncomingMessage& message,
- const MessageDecryptedCallback& success_callback,
- const DecryptionFailedCallback& failure_callback);
+ const MessageCallback& callback);
private:
FRIEND_TEST_ALL_PREFIXES(GCMEncryptionProviderTest, EncryptionRoundTrip);
@@ -106,8 +113,7 @@ class GCMEncryptionProvider {
const std::string& auth_secret);
void DecryptMessageWithKey(const IncomingMessage& message,
- const MessageDecryptedCallback& success_callback,
- const DecryptionFailedCallback& failure_callback,
+ const MessageCallback& callback,
const std::string& salt,
const std::string& dh,
uint64_t rs,
« no previous file with comments | « components/gcm_driver/crypto/BUILD.gn ('k') | components/gcm_driver/crypto/gcm_encryption_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698