| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef CONTENT_CHILD_WEBCRYPTO_STATUS_H_ | 5 #ifndef CONTENT_CHILD_WEBCRYPTO_STATUS_H_ |
| 6 #define CONTENT_CHILD_WEBCRYPTO_STATUS_H_ | 6 #define CONTENT_CHILD_WEBCRYPTO_STATUS_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include "content/common/content_export.h" | 9 #include "content/common/content_export.h" |
| 10 #include "third_party/WebKit/public/platform/WebCrypto.h" |
| 11 |
| 12 #if !defined(WEBCRYPTO_HAS_ERROR_TYPE) |
| 13 |
| 14 // TODO(eroman): Delete once Blink changes have rolled into Chromium. |
| 15 namespace blink { |
| 16 |
| 17 enum WebCryptoErrorType { |
| 18 WebCryptoErrorTypeType, |
| 19 WebCryptoErrorTypeNotSupported, |
| 20 WebCryptoErrorTypeSyntax, |
| 21 WebCryptoErrorTypeInvalidState, |
| 22 WebCryptoErrorTypeInvalidAccess, |
| 23 WebCryptoErrorTypeUnknown, |
| 24 WebCryptoErrorTypeData, |
| 25 WebCryptoErrorTypeOperation, |
| 26 }; |
| 27 |
| 28 } // namespace blink |
| 29 |
| 30 #endif |
| 10 | 31 |
| 11 namespace content { | 32 namespace content { |
| 12 | 33 |
| 13 namespace webcrypto { | 34 namespace webcrypto { |
| 14 | 35 |
| 15 // Status indicates whether an operation completed successfully, or with an | 36 // Status indicates whether an operation completed successfully, or with an |
| 16 // error. The error is used for verification in unit-tests, as well as for | 37 // error. The error is used for verification in unit-tests, as well as for |
| 17 // display to the user. | 38 // display to the user. |
| 18 // | 39 // |
| 19 // As such, it is important that errors DO NOT reveal any sensitive material | 40 // As such, it is important that errors DO NOT reveal any sensitive material |
| 20 // (like key bytes). | 41 // (like key bytes). |
| 21 // | 42 // |
| 22 // Care must be taken with what errors are reported back to blink when doing | 43 // Care must be taken with what errors are reported back to blink when doing |
| 23 // compound operations like unwrapping a JWK key. In this case, errors | 44 // compound operations like unwrapping a JWK key. In this case, errors |
| 24 // generated by the JWK import are not appropriate to report since the wrapped | 45 // generated by the JWK import are not appropriate to report since the wrapped |
| 25 // JWK is not visible to the caller. | 46 // JWK is not visible to the caller. |
| 26 class CONTENT_EXPORT Status { | 47 class CONTENT_EXPORT Status { |
| 27 public: | 48 public: |
| 28 // Returns true if the Status represents an error (any one of them). | 49 // Returns true if the Status represents an error (any one of them). |
| 29 bool IsError() const; | 50 bool IsError() const; |
| 30 | 51 |
| 31 // Returns true if the Status represent success. | 52 // Returns true if the Status represent success. |
| 32 bool IsSuccess() const; | 53 bool IsSuccess() const; |
| 33 | 54 |
| 34 // Returns true if the Status contains a non-empty error message. | 55 // Returns a UTF-8 error message (non-localized) describing the error. |
| 35 bool HasErrorDetails() const; | 56 const std::string& error_details() const { return error_details_; } |
| 36 | 57 |
| 37 // Returns a UTF-8 error message (non-localized) describing the error. This | 58 blink::WebCryptoErrorType error_type() const { return error_type_; } |
| 38 // message is intended to be displayed in the dev tools console. | |
| 39 std::string ToString() const; | |
| 40 | 59 |
| 41 // Constructs a status representing success. | 60 // Constructs a status representing success. |
| 42 static Status Success(); | 61 static Status Success(); |
| 43 | 62 |
| 44 // Constructs a status representing a generic error. It contains no extra | 63 // Constructs a status representing a generic operation error. It contains no |
| 45 // details. | 64 // extra details. |
| 46 static Status Error(); | 65 static Status OperationError(); |
| 66 |
| 67 // Constructs a status representing a generic data error. It contains no |
| 68 // extra details. |
| 69 static Status DataError(); |
| 47 | 70 |
| 48 // ------------------------------------ | 71 // ------------------------------------ |
| 49 // Errors when importing a JWK formatted key | 72 // Errors when importing a JWK formatted key |
| 50 // ------------------------------------ | 73 // ------------------------------------ |
| 51 | 74 |
| 52 // The key bytes could not parsed as JSON dictionary. This either | 75 // The key bytes could not parsed as JSON dictionary. This either |
| 53 // means there was a parsing error, or the JSON object was not | 76 // means there was a parsing error, or the JSON object was not |
| 54 // convertable to a dictionary. | 77 // convertable to a dictionary. |
| 55 static Status ErrorJwkNotDictionary(); | 78 static Status ErrorJwkNotDictionary(); |
| 56 | 79 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 135 |
| 113 // ------------------------------------ | 136 // ------------------------------------ |
| 114 // Other errors | 137 // Other errors |
| 115 // ------------------------------------ | 138 // ------------------------------------ |
| 116 | 139 |
| 117 // No key data was provided when importing an spki, pkcs8, or jwk formatted | 140 // No key data was provided when importing an spki, pkcs8, or jwk formatted |
| 118 // key. This does not apply to raw format, since it is possible to have empty | 141 // key. This does not apply to raw format, since it is possible to have empty |
| 119 // key data there. | 142 // key data there. |
| 120 static Status ErrorImportEmptyKeyData(); | 143 static Status ErrorImportEmptyKeyData(); |
| 121 | 144 |
| 145 // The key data buffer provided for importKey() is an incorrect length for |
| 146 // AES. |
| 147 static Status ErrorImportAesKeyLength(); |
| 148 |
| 122 // The wrong key was used for the operation. For instance, a public key was | 149 // The wrong key was used for the operation. For instance, a public key was |
| 123 // used to verify a RsaSsaPkcs1v1_5 signature, or tried exporting a private | 150 // used to verify a RsaSsaPkcs1v1_5 signature, or tried exporting a private |
| 124 // key using spki format. | 151 // key using spki format. |
| 125 static Status ErrorUnexpectedKeyType(); | 152 static Status ErrorUnexpectedKeyType(); |
| 126 | 153 |
| 127 // When doing an AES-CBC encryption/decryption, the "iv" parameter was not 16 | 154 // When doing an AES-CBC encryption/decryption, the "iv" parameter was not 16 |
| 128 // bytes. | 155 // bytes. |
| 129 static Status ErrorIncorrectSizeAesCbcIv(); | 156 static Status ErrorIncorrectSizeAesCbcIv(); |
| 130 | 157 |
| 131 // The data provided to an encrypt/decrypt/sign/verify operation was too | 158 // The data provided to an encrypt/decrypt/sign/verify operation was too |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 // An unextractable key was used by an operation which exports the key data. | 202 // An unextractable key was used by an operation which exports the key data. |
| 176 static Status ErrorKeyNotExtractable(); | 203 static Status ErrorKeyNotExtractable(); |
| 177 | 204 |
| 178 // The key length specified when generating a key was invalid. Either it was | 205 // The key length specified when generating a key was invalid. Either it was |
| 179 // zero, or it was not a multiple of 8 bits. | 206 // zero, or it was not a multiple of 8 bits. |
| 180 static Status ErrorGenerateKeyLength(); | 207 static Status ErrorGenerateKeyLength(); |
| 181 | 208 |
| 182 private: | 209 private: |
| 183 enum Type { TYPE_ERROR, TYPE_SUCCESS }; | 210 enum Type { TYPE_ERROR, TYPE_SUCCESS }; |
| 184 | 211 |
| 185 // Constructs an error with the specified message. | 212 // Constructs an error with the specified error type and message. |
| 186 explicit Status(const std::string& error_details_utf8); | 213 Status(blink::WebCryptoErrorType error_type, |
| 214 const std::string& error_details_utf8); |
| 187 | 215 |
| 188 // Constructs a success or error without any details. | 216 // Constructs a success or error without any details. |
| 189 explicit Status(Type type); | 217 explicit Status(Type type); |
| 190 | 218 |
| 191 Type type_; | 219 Type type_; |
| 220 blink::WebCryptoErrorType error_type_; |
| 192 std::string error_details_; | 221 std::string error_details_; |
| 193 }; | 222 }; |
| 194 | 223 |
| 195 } // namespace webcrypto | 224 } // namespace webcrypto |
| 196 | 225 |
| 197 } // namespace content | 226 } // namespace content |
| 198 | 227 |
| 199 #endif // CONTENT_CHILD_WEBCRYPTO_STATUS_H_ | 228 #endif // CONTENT_CHILD_WEBCRYPTO_STATUS_H_ |
| OLD | NEW |