Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(540)

Side by Side Diff: components/webcrypto/jwk.cc

Issue 1355873002: [refactor] More post-NSS WebCrypto cleanups (utility functions). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix bug Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "components/webcrypto/jwk.h" 5 #include "components/webcrypto/jwk.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 reinterpret_cast<const char*>(value.bytes()), 361 reinterpret_cast<const char*>(value.bytes()),
362 value.byte_length()))); 362 value.byte_length())));
363 } 363 }
364 364
365 void JwkWriter::ToJson(std::vector<uint8_t>* utf8_bytes) const { 365 void JwkWriter::ToJson(std::vector<uint8_t>* utf8_bytes) const {
366 std::string json; 366 std::string json;
367 base::JSONWriter::Write(dict_, &json); 367 base::JSONWriter::Write(dict_, &json);
368 utf8_bytes->assign(json.begin(), json.end()); 368 utf8_bytes->assign(json.begin(), json.end());
369 } 369 }
370 370
371 Status ReadSecretKeyNoExpectedAlg(const CryptoData& key_data,
372 bool expected_extractable,
373 blink::WebCryptoKeyUsageMask expected_usages,
374 std::vector<uint8_t>* raw_key_data,
375 JwkReader* jwk) {
376 Status status = jwk->Init(key_data, expected_extractable, expected_usages,
377 "oct", std::string());
378 if (status.IsError())
379 return status;
380
381 std::string jwk_k_value;
382 status = jwk->GetBytes("k", &jwk_k_value);
383 if (status.IsError())
384 return status;
385 raw_key_data->assign(jwk_k_value.begin(), jwk_k_value.end());
386
387 return Status::Success();
388 }
389
390 void WriteSecretKeyJwk(const CryptoData& raw_key_data,
391 const std::string& algorithm,
392 bool extractable,
393 blink::WebCryptoKeyUsageMask usages,
394 std::vector<uint8_t>* jwk_key_data) {
395 JwkWriter writer(algorithm, extractable, usages, "oct");
396 writer.SetBytes("k", raw_key_data);
397 writer.ToJson(jwk_key_data);
398 }
399
400 bool Base64DecodeUrlSafe(const std::string& input, std::string* output) { 371 bool Base64DecodeUrlSafe(const std::string& input, std::string* output) {
401 // The JSON web signature spec specifically says that padding is omitted. 372 // The JSON web signature spec specifically says that padding is omitted.
402 if (input.find_first_of("+/=") != std::string::npos) 373 if (input.find_first_of("+/=") != std::string::npos)
403 return false; 374 return false;
404 375
405 std::string base64_encoded_text(input); 376 std::string base64_encoded_text(input);
406 std::replace(base64_encoded_text.begin(), base64_encoded_text.end(), '-', 377 std::replace(base64_encoded_text.begin(), base64_encoded_text.end(), '-',
407 '+'); 378 '+');
408 std::replace(base64_encoded_text.begin(), base64_encoded_text.end(), '_', 379 std::replace(base64_encoded_text.begin(), base64_encoded_text.end(), '_',
409 '/'); 380 '/');
(...skipping 16 matching lines...) Expand all
426 return Base64EncodeUrlSafe(string_piece); 397 return Base64EncodeUrlSafe(string_piece);
427 } 398 }
428 399
429 Status GetWebCryptoUsagesFromJwkKeyOpsForTest( 400 Status GetWebCryptoUsagesFromJwkKeyOpsForTest(
430 const base::ListValue* key_ops, 401 const base::ListValue* key_ops,
431 blink::WebCryptoKeyUsageMask* usages) { 402 blink::WebCryptoKeyUsageMask* usages) {
432 return GetWebCryptoUsagesFromJwkKeyOps(key_ops, usages); 403 return GetWebCryptoUsagesFromJwkKeyOps(key_ops, usages);
433 } 404 }
434 405
435 } // namespace webcrypto 406 } // namespace webcrypto
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698