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 14 matching lines...) Expand all Loading... |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
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 "WebCryptoKey.h" |
35 | 36 |
36 namespace WebKit { | 37 namespace WebKit { |
37 | 38 |
38 class WebArrayBuffer; | 39 class WebArrayBuffer; |
39 class WebCryptoAlgorithm; | 40 class WebCryptoKeyOperation; |
40 class WebCryptoKey; | 41 class WebCryptoKeyOperationResult; |
41 class WebCryptoOperation; | 42 class WebCryptoOperation; |
42 class WebCryptoOperationResult; | 43 class WebCryptoOperationResult; |
43 | 44 |
44 class WebCrypto { | 45 class WebCrypto { |
45 public: | 46 public: |
46 // FIXME: Deprecated, delete once chromium side is updated. | 47 // FIXME: Deprecated, delete once chromium side is updated. |
47 virtual WebCryptoOperation* digest(const WebCryptoAlgorithm&) { return 0; } | 48 virtual WebCryptoOperation* digest(const WebCryptoAlgorithm&) { return 0; } |
48 | 49 |
49 // The following methods begin an asynchronous multi-part cryptographic | 50 // The following methods begin an asynchronous multi-part cryptographic |
50 // operation. | 51 // operation. |
51 // | 52 // |
52 // Let the WebCryptoOperationResult* be called "result". | 53 // Let the WebCryptoOperationResult* be called "result". |
53 // | 54 // |
54 // Implementations can either: | 55 // Before returning, implementations can either: |
55 // | 56 // |
56 // * Synchronously fail initialization by calling: | 57 // * Synchronously fail initialization by calling: |
57 // result->initializationFailed(errorDetails) | 58 // result->initializationFailed(errorDetails) |
58 // | 59 // |
59 // OR | 60 // OR |
60 // | 61 // |
61 // * Create a new WebCryptoOperation* and return it by calling: | 62 // * Create a new WebCryptoOperation* and return it by calling: |
62 // result->initializationSucceeded(cryptoOperation) | 63 // result->initializationSucceeded(cryptoOperation) |
63 // | 64 // |
64 // If initialization succeeds, then Blink will subsequently call | 65 // If initialization succeeds, then Blink will subsequently call |
(...skipping 14 matching lines...) Expand all Loading... |
79 // | 80 // |
80 // - Blink calls cryptoOperation->abort() | 81 // - Blink calls cryptoOperation->abort() |
81 // OR | 82 // OR |
82 // - Embedder calls result->completeWithXXX() | 83 // - Embedder calls result->completeWithXXX() |
83 // | 84 // |
84 // Once the cryptoOperation is no longer "in progress" the "result" pointer | 85 // Once the cryptoOperation is no longer "in progress" the "result" pointer |
85 // is no longer valid. At this time the embedder is responsible for freeing | 86 // is no longer valid. At this time the embedder is responsible for freeing |
86 // the cryptoOperation. | 87 // the cryptoOperation. |
87 virtual void digest(const WebCryptoAlgorithm&, WebCryptoOperationResult*) {
} | 88 virtual void digest(const WebCryptoAlgorithm&, WebCryptoOperationResult*) {
} |
88 | 89 |
| 90 // The following methods begin an asynchronous single-part key operation. |
| 91 // |
| 92 // Let the WebCryptoKeyOperationResult* be called "result". |
| 93 // |
| 94 // Before returning, implementations can either: |
| 95 // |
| 96 // (a) Synchronously fail initialization by calling: |
| 97 // result->initializationFailed(errorDetails) |
| 98 // (this results in throwing a Javascript exception) |
| 99 // |
| 100 // (b) Synchronously complete the request (success or error) by calling: |
| 101 // result->completeWithXXX() |
| 102 // |
| 103 // (c) Defer completion by calling |
| 104 // result->initializationSucceeded(keyOperation) |
| 105 // |
| 106 // If asynchronous completion (c) was chosen, then the embedder can notify |
| 107 // completion after returning by calling result->completeWithXXX(). |
| 108 // |
| 109 // The keyOperation pointer MUST remain valid while it is "in progress". |
| 110 // The keyOperation is said to be "in progress" from the time after |
| 111 // result->initializationSucceded() has been called, up until either: |
| 112 // |
| 113 // - Blink calls keyOperation->abort() |
| 114 // OR |
| 115 // - Embedder calls result->completeWithXXX() |
| 116 // |
| 117 // Once the keyOperation is no longer "in progress" the "result" pointer |
| 118 // is no longer valid. At this time the embedder is responsible for freeing |
| 119 // the cryptoOperation. |
| 120 virtual void importKey(WebCryptoKeyFormat, const unsigned char* keyData, siz
e_t keyDataSize, const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageM
ask, WebCryptoKeyOperationResult*) { } |
| 121 |
89 protected: | 122 protected: |
90 virtual ~WebCrypto() { } | 123 virtual ~WebCrypto() { } |
91 }; | 124 }; |
92 | 125 |
93 class WebCryptoOperation { | 126 class WebCryptoOperation { |
94 public: | 127 public: |
95 // Feeds data (bytes, size) to the operation. | 128 // Feeds data (bytes, size) to the operation. |
96 // - |bytes| may be 0 if |size| is 0 | 129 // - |bytes| may be 0 if |size| is 0 |
97 // - |bytes| is valid only until process() returns | 130 // - |bytes| is valid only until process() returns |
98 // - process() will not be called after abort() or finish() | 131 // - process() will not be called after abort() or finish() |
(...skipping 18 matching lines...) Expand all Loading... |
117 virtual void initializationSucceded(WebCryptoOperation*) = 0; | 150 virtual void initializationSucceded(WebCryptoOperation*) = 0; |
118 | 151 |
119 // Only one of these should be called to set the result. | 152 // Only one of these should be called to set the result. |
120 virtual void completeWithError() = 0; | 153 virtual void completeWithError() = 0; |
121 virtual void completeWithArrayBuffer(const WebArrayBuffer&) = 0; | 154 virtual void completeWithArrayBuffer(const WebArrayBuffer&) = 0; |
122 | 155 |
123 protected: | 156 protected: |
124 virtual ~WebCryptoOperationResult() { } | 157 virtual ~WebCryptoOperationResult() { } |
125 }; | 158 }; |
126 | 159 |
| 160 class WebCryptoKeyOperation { |
| 161 public: |
| 162 // Cancels the in-progress operation. |
| 163 // * Implementations should delete |this| after aborting. |
| 164 virtual void abort() = 0; |
| 165 |
| 166 protected: |
| 167 virtual ~WebCryptoKeyOperation() { } |
| 168 }; |
| 169 |
| 170 class WebCryptoKeyOperationResult { |
| 171 public: |
| 172 virtual void initializationFailed() = 0; |
| 173 virtual void initializationSucceeded(WebCryptoKeyOperation*) = 0; |
| 174 |
| 175 virtual void completeWithError() = 0; |
| 176 virtual void completeWithKey(const WebCryptoKey&) = 0; |
| 177 |
| 178 protected: |
| 179 virtual ~WebCryptoKeyOperationResult() { } |
| 180 }; |
| 181 |
127 } // namespace WebKit | 182 } // namespace WebKit |
128 | 183 |
129 #endif | 184 #endif |
OLD | NEW |