summaryrefslogtreecommitdiff
path: root/chromium/components/gcm_driver/crypto/gcm_decryption_result.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/gcm_driver/crypto/gcm_decryption_result.h')
-rw-r--r--chromium/components/gcm_driver/crypto/gcm_decryption_result.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/chromium/components/gcm_driver/crypto/gcm_decryption_result.h b/chromium/components/gcm_driver/crypto/gcm_decryption_result.h
new file mode 100644
index 00000000000..5f073aa9312
--- /dev/null
+++ b/chromium/components/gcm_driver/crypto/gcm_decryption_result.h
@@ -0,0 +1,71 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_GCM_DRIVER_CRYPTO_GCM_DECRYPTION_RESULT_H_
+#define COMPONENTS_GCM_DRIVER_CRYPTO_GCM_DECRYPTION_RESULT_H_
+
+#include <string>
+
+namespace gcm {
+
+// Result of decrypting an incoming message. The values of these reasons must
+// not be changed as they are being recorded using UMA. When adding a value,
+// please update GCMDecryptionResult in //tools/metrics/histograms/enums.xml.
+enum class GCMDecryptionResult {
+ // The message had not been encrypted by the sender.
+ UNENCRYPTED = 0,
+
+ // The message had been encrypted by the sender, and could successfully be
+ // decrypted for the registration it has been received for. The encryption
+ // scheme used for the message was draft-ietf-webpush-encryption-03.
+ DECRYPTED_DRAFT_03 = 1,
+
+ // The contents of the Encryption HTTP header could not be parsed.
+ INVALID_ENCRYPTION_HEADER = 2,
+
+ // The contents of the Crypto-Key HTTP header could not be parsed.
+ INVALID_CRYPTO_KEY_HEADER = 3,
+
+ // No public/private key-pair was associated with the app_id.
+ NO_KEYS = 4,
+
+ // The shared secret cannot be derived from the keying material.
+ INVALID_SHARED_SECRET = 5,
+
+ // The payload could not be decrypted as AES-128-GCM.
+ INVALID_PAYLOAD = 6,
+
+ // Removed in favour of the more detailed reasons below (values 9-13).
+ // INVALID_BINARY_HEADER = 7,
+
+ // The message had been encrypted by the sender, and could successfully be
+ // decrypted for the registration it has been received for. The encryption
+ // scheme used for the message was draft-ietf-webpush-encryption-08.
+ DECRYPTED_DRAFT_08 = 8,
+
+ // The payload's length is smaller than the smallest valid message.
+ INVALID_BINARY_HEADER_PAYLOAD_LENGTH = 9,
+
+ // The payload's record size is smaller than the smallest valid record + 1.
+ INVALID_BINARY_HEADER_RECORD_SIZE = 10,
+
+ // The public key included in the payload does not have the length
+ // corresponding to an uncompressed P-256 ECDH key (65 bytes).
+ INVALID_BINARY_HEADER_PUBLIC_KEY_LENGTH = 11,
+
+ // The public key included in the message does not adhere to the format of
+ // an uncompressed P-256 ECDH key. (I.e. it must start with 0x04.)
+ INVALID_BINARY_HEADER_PUBLIC_KEY_FORMAT = 12,
+
+ // Should be one more than the otherwise highest value in this enumeration.
+ ENUM_SIZE = INVALID_BINARY_HEADER_PUBLIC_KEY_FORMAT + 1
+};
+
+// Converts the GCMDecryptionResult value to a string that can be used to
+// explain the issue on chrome://gcm-internals/.
+std::string ToGCMDecryptionResultDetailsString(GCMDecryptionResult result);
+
+} // namespace gcm
+
+#endif // COMPONENTS_GCM_DRIVER_CRYPTO_GCM_DECRYPTION_RESULT_H_