| 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 #include "config.h" | 31 #include "config.h" |
| 32 #include "modules/crypto/SubtleCrypto.h" | 32 #include "modules/crypto/SubtleCrypto.h" |
| 33 | 33 |
| 34 #include "bindings/core/v8/Dictionary.h" | 34 #include "bindings/core/v8/Dictionary.h" |
| 35 #include "bindings/core/v8/DictionaryHelper.h" |
| 35 #include "core/dom/ExecutionContext.h" | 36 #include "core/dom/ExecutionContext.h" |
| 36 #include "modules/crypto/CryptoKey.h" | 37 #include "modules/crypto/CryptoKey.h" |
| 37 #include "modules/crypto/CryptoResultImpl.h" | 38 #include "modules/crypto/CryptoResultImpl.h" |
| 38 #include "modules/crypto/NormalizeAlgorithm.h" | 39 #include "modules/crypto/NormalizeAlgorithm.h" |
| 39 #include "platform/JSONValues.h" | 40 #include "platform/JSONValues.h" |
| 40 #include "public/platform/Platform.h" | 41 #include "public/platform/Platform.h" |
| 41 #include "public/platform/WebCrypto.h" | 42 #include "public/platform/WebCrypto.h" |
| 42 #include "public/platform/WebCryptoAlgorithm.h" | 43 #include "public/platform/WebCryptoAlgorithm.h" |
| 43 #include "wtf/ArrayBufferView.h" | 44 #include "wtf/ArrayBufferView.h" |
| 44 | 45 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 ASSERT_NOT_REACHED(); | 134 ASSERT_NOT_REACHED(); |
| 134 return ScriptPromise(); | 135 return ScriptPromise(); |
| 135 } | 136 } |
| 136 | 137 |
| 137 return promise; | 138 return promise; |
| 138 } | 139 } |
| 139 | 140 |
| 140 static bool copyStringProperty(const char* property, const Dictionary& source, J
SONObject* destination) | 141 static bool copyStringProperty(const char* property, const Dictionary& source, J
SONObject* destination) |
| 141 { | 142 { |
| 142 String value; | 143 String value; |
| 143 if (!source.get(property, value)) | 144 if (!DictionaryHelper::get(source, property, value)) |
| 144 return false; | 145 return false; |
| 145 destination->setString(property, value); | 146 destination->setString(property, value); |
| 146 return true; | 147 return true; |
| 147 } | 148 } |
| 148 | 149 |
| 149 static bool copySequenceOfStringProperty(const char* property, const Dictionary&
source, JSONObject* destination) | 150 static bool copySequenceOfStringProperty(const char* property, const Dictionary&
source, JSONObject* destination) |
| 150 { | 151 { |
| 151 Vector<String> value; | 152 Vector<String> value; |
| 152 if (!source.get(property, value)) | 153 if (!DictionaryHelper::get(source, property, value)) |
| 153 return false; | 154 return false; |
| 154 RefPtr<JSONArray> jsonArray = JSONArray::create(); | 155 RefPtr<JSONArray> jsonArray = JSONArray::create(); |
| 155 for (unsigned i = 0; i < value.size(); ++i) | 156 for (unsigned i = 0; i < value.size(); ++i) |
| 156 jsonArray->pushString(value[i]); | 157 jsonArray->pushString(value[i]); |
| 157 destination->setArray(property, jsonArray.release()); | 158 destination->setArray(property, jsonArray.release()); |
| 158 return true; | 159 return true; |
| 159 } | 160 } |
| 160 | 161 |
| 161 // FIXME: At the time of writing this is not a part of the spec. It is based an | 162 // FIXME: At the time of writing this is not a part of the spec. It is based an |
| 162 // an unpublished editor's draft for: | 163 // an unpublished editor's draft for: |
| 163 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24963 | 164 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24963 |
| 164 // See http://crbug.com/373917. | 165 // See http://crbug.com/373917. |
| 165 static bool copyJwkDictionaryToJson(const Dictionary& dict, CString& jsonUtf8, C
ryptoResult* result) | 166 static bool copyJwkDictionaryToJson(const Dictionary& dict, CString& jsonUtf8, C
ryptoResult* result) |
| 166 { | 167 { |
| 167 RefPtr<JSONObject> jsonObject = JSONObject::create(); | 168 RefPtr<JSONObject> jsonObject = JSONObject::create(); |
| 168 | 169 |
| 169 if (!copyStringProperty("kty", dict, jsonObject.get())) { | 170 if (!copyStringProperty("kty", dict, jsonObject.get())) { |
| 170 result->completeWithError(blink::WebCryptoErrorTypeData, "The required J
WK property \"kty\" was missing"); | 171 result->completeWithError(blink::WebCryptoErrorTypeData, "The required J
WK property \"kty\" was missing"); |
| 171 return false; | 172 return false; |
| 172 } | 173 } |
| 173 | 174 |
| 174 copyStringProperty("use", dict, jsonObject.get()); | 175 copyStringProperty("use", dict, jsonObject.get()); |
| 175 copySequenceOfStringProperty("key_ops", dict, jsonObject.get()); | 176 copySequenceOfStringProperty("key_ops", dict, jsonObject.get()); |
| 176 copyStringProperty("alg", dict, jsonObject.get()); | 177 copyStringProperty("alg", dict, jsonObject.get()); |
| 177 | 178 |
| 178 bool ext; | 179 bool ext; |
| 179 if (dict.get("ext", ext)) | 180 if (DictionaryHelper::get(dict, "ext", ext)) |
| 180 jsonObject->setBoolean("ext", ext); | 181 jsonObject->setBoolean("ext", ext); |
| 181 | 182 |
| 182 const char* const propertyNames[] = { "d", "n", "e", "p", "q", "dp", "dq", "
qi", "k" }; | 183 const char* const propertyNames[] = { "d", "n", "e", "p", "q", "dp", "dq", "
qi", "k" }; |
| 183 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(propertyNames); ++i) | 184 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(propertyNames); ++i) |
| 184 copyStringProperty(propertyNames[i], dict, jsonObject.get()); | 185 copyStringProperty(propertyNames[i], dict, jsonObject.get()); |
| 185 | 186 |
| 186 String json = jsonObject->toJSONString(); | 187 String json = jsonObject->toJSONString(); |
| 187 jsonUtf8 = json.utf8(); | 188 jsonUtf8 = json.utf8(); |
| 188 return true; | 189 return true; |
| 189 } | 190 } |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 return promise; | 392 return promise; |
| 392 | 393 |
| 393 if (!unwrappingKey->canBeUsedForAlgorithm(unwrapAlgorithm, blink::WebCryptoO
perationUnwrapKey, result.get())) | 394 if (!unwrappingKey->canBeUsedForAlgorithm(unwrapAlgorithm, blink::WebCryptoO
perationUnwrapKey, result.get())) |
| 394 return promise; | 395 return promise; |
| 395 | 396 |
| 396 blink::Platform::current()->crypto()->unwrapKey(format, wrappedKey.bytes(),
wrappedKey.byteLength(), unwrappingKey->key(), unwrapAlgorithm, unwrappedKeyAlgo
rithm, extractable, keyUsages, result->result()); | 397 blink::Platform::current()->crypto()->unwrapKey(format, wrappedKey.bytes(),
wrappedKey.byteLength(), unwrappingKey->key(), unwrapAlgorithm, unwrappedKeyAlgo
rithm, extractable, keyUsages, result->result()); |
| 397 return promise; | 398 return promise; |
| 398 } | 399 } |
| 399 | 400 |
| 400 } // namespace WebCore | 401 } // namespace WebCore |
| OLD | NEW |