Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #ifndef WebCrypto_h | 31 #ifndef WebCrypto_h |
| 32 #define WebCrypto_h | 32 #define WebCrypto_h |
| 33 | 33 |
| 34 #include "WebCommon.h" | 34 #include "WebCommon.h" |
| 35 #include "WebCryptoAlgorithm.h" | 35 #include "WebCryptoAlgorithm.h" |
| 36 #include "WebCryptoKey.h" | 36 #include "WebCryptoKey.h" |
| 37 #include "WebPrivatePtr.h" | 37 #include "WebPrivatePtr.h" |
| 38 #include "WebVector.h" | |
| 38 | 39 |
| 39 // FIXME: Remove this once chromium side is updated. | 40 // FIXME: Remove this once chromium side is updated. |
| 40 #define WEBCRYPTO_HMAC_BITS 1 | 41 #define WEBCRYPTO_HMAC_BITS 1 |
| 41 | 42 |
| 42 namespace WebCore { class CryptoResult; } | 43 namespace WebCore { class CryptoResult; } |
| 43 | 44 |
| 44 #if INSIDE_BLINK | 45 #if INSIDE_BLINK |
| 45 namespace WTF { template <typename T> class PassRefPtr; } | 46 namespace WTF { template <typename T> class PassRefPtr; } |
| 46 #endif | 47 #endif |
| 47 | 48 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 // It is possible that unwrappedKeyAlgorithm.isNull() | 183 // It is possible that unwrappedKeyAlgorithm.isNull() |
| 183 virtual void unwrapKey(WebCryptoKeyFormat, const unsigned char* wrappedKey, unsigned wrappedKeySize, const WebCryptoKey&, const WebCryptoAlgorithm& unwrapAl gorithm, const WebCryptoAlgorithm& unwrappedKeyAlgorithm, bool extractable, WebC ryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); } | 184 virtual void unwrapKey(WebCryptoKeyFormat, const unsigned char* wrappedKey, unsigned wrappedKeySize, const WebCryptoKey&, const WebCryptoAlgorithm& unwrapAl gorithm, const WebCryptoAlgorithm& unwrappedKeyAlgorithm, bool extractable, WebC ryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); } |
| 184 | 185 |
| 185 // This is the one exception to the "Completing the request" guarantees | 186 // This is the one exception to the "Completing the request" guarantees |
| 186 // outlined above. digestSynchronous must provide the result into result | 187 // outlined above. digestSynchronous must provide the result into result |
| 187 // synchronously. It must return |true| on successful calculation of the | 188 // synchronously. It must return |true| on successful calculation of the |
| 188 // digest and |false| otherwise. This is useful for Blink internal crypto | 189 // digest and |false| otherwise. This is useful for Blink internal crypto |
| 189 // and is not part of the WebCrypto standard. | 190 // and is not part of the WebCrypto standard. |
| 190 virtual bool digestSynchronous(const WebCryptoAlgorithmId algorithmId, const unsigned char* data, unsigned dataSize, WebArrayBuffer& result) { return false; } | 191 virtual bool digestSynchronous(const WebCryptoAlgorithmId algorithmId, const unsigned char* data, unsigned dataSize, WebArrayBuffer& result) { return false; } |
| 191 | 192 |
| 193 // ----------------------- | |
| 194 // Structured clone | |
| 195 // ----------------------- | |
| 196 // | |
| 197 // deserializeKeyForClone() and serializeKeyForClone() are used for | |
| 198 // implementing structured cloning of WebCryptoKey. | |
| 199 // | |
| 200 // Blink is responsible for saving and restoring all of the attributes of | |
| 201 // WebCryptoKey EXCEPT for the actual key data: | |
| 202 // | |
| 203 // In other words, Blink takes care of serializing: | |
| 204 // * Key usages | |
| 205 // * Key extractability | |
| 206 // * Key algorithm | |
| 207 // * Key type (public, private, secret) | |
| 208 // | |
| 209 // The embedder is responsible for saving the key data itself. | |
| 210 // | |
| 211 // For instance, an implementation might implement | |
| 212 // serializing/deserializing of the key data by reusing | |
| 213 // exportKey()/importKey() with an appropriate key format (raw, spki, | |
| 214 // pkcs8) | |
| 215 // | |
| 216 // Visibility of the serialized key data: | |
| 217 // | |
| 218 // The serialized key data will NOT be visible to web pages. So if the | |
| 219 // serialized format were to include key bytes as plain text, this wouldn't | |
| 220 // make it available to web pages. | |
| 221 // | |
| 222 // Longevity of the key data: | |
| 223 // | |
| 224 // The serialized key data is intended to be long lived (years) and MUST | |
| 225 // be using a stable format. For instance a key might be persisted to | |
| 226 // IndexedDB and should be able to be deserialized correctly in the | |
| 227 // future. | |
| 228 // | |
| 229 // Error handling and asynchronous completion: | |
| 230 // | |
| 231 // Serialization/deserialization must complete synchronously, and will | |
| 232 // block the JavaScript thread. | |
| 233 // | |
| 234 // The only reasons for failing serialization/deserialization should be: | |
| 235 // * Key serialization not yet implemented | |
| 236 // * The bytes to deserialize were corrupted | |
| 237 | |
| 238 // Creates a new key given key data which was written using | |
| 239 // serializeKeyForClone(). Returns true on success. | |
| 240 virtual bool deserializeKeyForClone(const WebCryptoKeyAlgorithm&, WebCryptoK eyType, bool extractable, WebCryptoKeyUsageMask, const unsigned char* keyData, u nsigned keyDataSize, WebCryptoKey&) | |
| 241 { | |
| 242 return false; | |
|
jsbell
2014/03/13 20:16:07
This default impl. can all be on one (very long) l
eroman
2014/03/14 05:24:33
Done (am using clang-format and it put it on a new
| |
| 243 } | |
| 244 | |
| 245 // Writes the key data into the given WebVector. | |
| 246 // Returns true on success. | |
| 247 virtual bool serializeKeyForClone(const WebCryptoKey&, WebVector<unsigned ch ar>&) | |
| 248 { | |
| 249 return false; | |
|
jsbell
2014/03/13 20:16:07
This default impl. can all be on one (very long) l
eroman
2014/03/14 05:24:33
Done.
| |
| 250 } | |
| 251 | |
| 192 protected: | 252 protected: |
| 193 virtual ~WebCrypto() { } | 253 virtual ~WebCrypto() { } |
| 194 }; | 254 }; |
| 195 | 255 |
| 196 } // namespace blink | 256 } // namespace blink |
| 197 | 257 |
| 198 #endif | 258 #endif |
| OLD | NEW |