status.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/child/webcrypto/status.h" 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace content { 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace webcrypto { 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool Status::IsError() const { 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return type_ == TYPE_ERROR; 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool Status::IsSuccess() const { 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return type_ == TYPE_SUCCESS; 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus Status::Success() { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(TYPE_SUCCESS); 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus Status::OperationError() { 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeOperation, ""); 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus Status::DataError() { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, ""); 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkNotDictionary() { 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "JWK input could not be parsed to a JSON dictionary"); 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkPropertyMissing(const std::string& property) { 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The required JWK property \"" + property + "\" was missing"); 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkPropertyWrongType(const std::string& property, 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& expected_type) { 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status( 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu blink::WebCryptoErrorTypeData, 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK property \"" + property + "\" must be a " + expected_type); 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkBase64Decode(const std::string& property) { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status( 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu blink::WebCryptoErrorTypeData, 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK property \"" + property + "\" could not be base64 decoded"); 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkExtInconsistent() { 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return Status( 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu blink::WebCryptoErrorTypeData, 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "The \"ext\" property of the JWK dictionary is inconsistent what that " 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "specified by the Web Crypto call"); 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkAlgorithmInconsistent() { 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"alg\" property was inconsistent with that specified " 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "by the Web Crypto call"); 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkUnrecognizedUse() { 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"use\" property could not be parsed"); 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkUnrecognizedKeyop() { 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"key_ops\" property could not be parsed"); 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkUseInconsistent() { 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"use\" property was inconsistent with that specified " 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "by the Web Crypto call. The JWK usage must be a superset of " 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "those requested"); 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkKeyopsInconsistent() { 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"key_ops\" property was inconsistent with that " 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "specified by the Web Crypto call. The JWK usage must be a " 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "superset of those requested"); 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkUseAndKeyopsInconsistent() { 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"use\" and \"key_ops\" properties were both found " 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "but are inconsistent with each other."); 9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorJwkUnexpectedKty(const std::string& expected) { 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "The JWK \"kty\" property was not \"" + expected + "\""); 10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorJwkIncorrectKeyLength() { 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The JWK \"k\" property did not include the right length " 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "of key data for the given algorithm."); 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorJwkEmptyBigInteger(const std::string& property) { 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return Status(blink::WebCryptoErrorTypeData, 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "The JWK \"" + property + "\" property was empty."); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorJwkBigIntegerHasLeadingZero(const std::string& property) { 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Status( 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebCryptoErrorTypeData, 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "The JWK \"" + property + "\" property contained a leading zero."); 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorImportEmptyKeyData() { 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, "No key data was provided"); 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorUnsupportedImportKeyFormat() { 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Status(blink::WebCryptoErrorTypeNotSupported, 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Unsupported import key format for algorithm"); 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorUnsupportedExportKeyFormat() { 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Status(blink::WebCryptoErrorTypeNotSupported, 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Unsupported export key format for algorithm"); 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus Status::ErrorImportAesKeyLength() { 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "AES key data must be 128, 192 or 256 bits"); 13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 13723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)Status Status::ErrorAes192BitUnsupported() { 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return Status(blink::WebCryptoErrorTypeNotSupported, 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "192-bit AES keys are not supported"); 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorUnexpectedKeyType() { 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeInvalidAccess, 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The key is not of the expected type"); 14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 14723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 14823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorIncorrectSizeAesCbcIv() { 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The \"iv\" has an unexpected length -- must be 16 bytes"); 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciStatus Status::ErrorIncorrectSizeAesCtrCounter() { 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Status(blink::WebCryptoErrorTypeData, 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "The \"counter\" has an unexpected length -- must be 16 bytes"); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciStatus Status::ErrorInvalidAesCtrCounterLength() { 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Status(blink::WebCryptoErrorTypeData, 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "The \"length\" property must be >= 1 and <= 128"); 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciStatus Status::ErrorAesCtrInputTooLongCounterRepeated() { 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Status(blink::WebCryptoErrorTypeData, 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "The input is too large for the counter length."); 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 16823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorDataTooLarge() { 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The provided data is too large"); 17123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 17223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorDataTooSmall() { 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 1755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The provided data is too small"); 17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 17723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorUnsupported() { 1796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return ErrorUnsupported("The requested operation is unsupported"); 1806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)Status Status::ErrorUnsupported(const std::string& message) { 1836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return Status(blink::WebCryptoErrorTypeNotSupported, message); 18423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 18523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 18623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorUnexpected() { 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeUnknown, 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Something unexpected happened..."); 18923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 19023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 19123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorInvalidAesGcmTagLength() { 19223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return Status( 1935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu blink::WebCryptoErrorTypeData, 19423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "The tag length is invalid: Must be 32, 64, 96, 104, 112, 120, or 128 " 19523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "bits"); 19623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 19723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 19823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorInvalidAesKwDataLength() { 1995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 2005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "The AES-KW input data length is invalid: not a multiple of 8 " 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "bytes"); 20223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 20323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 20423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorGenerateKeyPublicExponent() { 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "The \"publicExponent\" must be either 3 or 65537"); 20723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 20823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 20923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorImportRsaEmptyModulus() { 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, "The modulus is empty"); 21123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 21223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Status Status::ErrorGenerateRsaUnsupportedModulus() { 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Status(blink::WebCryptoErrorTypeNotSupported, 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "The modulus length must be a multiple of 8 bits and >= 256 " 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "and <= 16384"); 21723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 21823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 21923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorImportRsaEmptyExponent() { 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "No bytes for the exponent were provided"); 22223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 22323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 22423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorKeyNotExtractable() { 2255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeInvalidAccess, 2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "They key is not extractable"); 22723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 22823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 22923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)Status Status::ErrorGenerateKeyLength() { 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return Status(blink::WebCryptoErrorTypeData, 2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Invalid key length: it is either zero or not a multiple of 8 " 2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "bits"); 23323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 23423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)Status Status::ErrorCreateKeyBadUsages() { 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return Status(blink::WebCryptoErrorTypeData, 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Cannot create a key using the specified key usages."); 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus::Status(blink::WebCryptoErrorType error_type, 2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& error_details_utf8) 2425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : type_(TYPE_ERROR), 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu error_type_(error_type), 2445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu error_details_(error_details_utf8) { 2455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 24623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuStatus::Status(Type type) : type_(type) { 2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 24923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace webcrypto 25123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 25223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace content 253