| 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 {"AES-GCM", 7, blink::WebCryptoAlgorithmIdAesGcm}, | 72 {"AES-GCM", 7, blink::WebCryptoAlgorithmIdAesGcm}, |
| 73 {"AES-CTR", 7, blink::WebCryptoAlgorithmIdAesCtr}, | 73 {"AES-CTR", 7, blink::WebCryptoAlgorithmIdAesCtr}, |
| 74 {"RSA-OAEP", 8, blink::WebCryptoAlgorithmIdRsaOaep}, | 74 {"RSA-OAEP", 8, blink::WebCryptoAlgorithmIdRsaOaep}, |
| 75 {"RSASSA-PKCS1-V1_5", 17, blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5}, | 75 {"RSASSA-PKCS1-V1_5", 17, blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5}, |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 typedef char ParamsTypeOrUndefined; | 78 typedef char ParamsTypeOrUndefined; |
| 79 const ParamsTypeOrUndefined Undefined = -1; | 79 const ParamsTypeOrUndefined Undefined = -1; |
| 80 | 80 |
| 81 struct AlgorithmInfo { | 81 struct AlgorithmInfo { |
| 82 // The canonical (case-sensitive) name for the algorithm. | |
| 83 const char* name; | |
| 84 | |
| 85 // A map from the operation to the expected parameter type of the algorithm. | 82 // A map from the operation to the expected parameter type of the algorithm. |
| 86 // If an operation is not applicable for the algorithm, set to Undefined. | 83 // If an operation is not applicable for the algorithm, set to Undefined. |
| 87 const ParamsTypeOrUndefined operationToParamsType[blink::WebCryptoOperationL
ast + 1]; | 84 const ParamsTypeOrUndefined operationToParamsType[blink::WebCryptoOperationL
ast + 1]; |
| 88 }; | 85 }; |
| 89 | 86 |
| 90 // A mapping from the algorithm ID to information about the algorithm. | 87 // A mapping from the algorithm ID to information about the algorithm. |
| 91 const AlgorithmInfo algorithmIdToInfo[] = { | 88 const AlgorithmInfo algorithmIdToInfo[] = { |
| 92 { // Index 0 | 89 { // Index 0 |
| 93 "AES-CBC", { | 90 { |
| 94 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // Encrypt | 91 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // Encrypt |
| 95 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // Decrypt | 92 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // Decrypt |
| 96 Undefined, // Sign | 93 Undefined, // Sign |
| 97 Undefined, // Verify | 94 Undefined, // Verify |
| 98 Undefined, // Digest | 95 Undefined, // Digest |
| 99 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey | 96 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey |
| 100 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey | 97 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey |
| 101 Undefined, // DeriveKey | 98 Undefined, // DeriveKey |
| 102 Undefined, // DeriveBits | 99 Undefined, // DeriveBits |
| 103 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // WrapKey | 100 blink::WebCryptoAlgorithmParamsTypeAesCbcParams, // WrapKey |
| 104 blink::WebCryptoAlgorithmParamsTypeAesCbcParams // UnwrapKey | 101 blink::WebCryptoAlgorithmParamsTypeAesCbcParams // UnwrapKey |
| 105 } | 102 } |
| 106 }, { // Index 1 | 103 }, { // Index 1 |
| 107 "HMAC", { | 104 { |
| 108 Undefined, // Encrypt | 105 Undefined, // Encrypt |
| 109 Undefined, // Decrypt | 106 Undefined, // Decrypt |
| 110 blink::WebCryptoAlgorithmParamsTypeNone, // Sign | 107 blink::WebCryptoAlgorithmParamsTypeNone, // Sign |
| 111 blink::WebCryptoAlgorithmParamsTypeNone, // Verify | 108 blink::WebCryptoAlgorithmParamsTypeNone, // Verify |
| 112 Undefined, // Digest | 109 Undefined, // Digest |
| 113 blink::WebCryptoAlgorithmParamsTypeHmacKeyGenParams, // GenerateKey | 110 blink::WebCryptoAlgorithmParamsTypeHmacKeyGenParams, // GenerateKey |
| 114 blink::WebCryptoAlgorithmParamsTypeHmacImportParams, // ImportKey | 111 blink::WebCryptoAlgorithmParamsTypeHmacImportParams, // ImportKey |
| 115 Undefined, // DeriveKey | 112 Undefined, // DeriveKey |
| 116 Undefined, // DeriveBits | 113 Undefined, // DeriveBits |
| 117 Undefined, // WrapKey | 114 Undefined, // WrapKey |
| 118 Undefined // UnwrapKey | 115 Undefined // UnwrapKey |
| 119 } | 116 } |
| 120 }, { // Index 2 | 117 }, { // Index 2 |
| 121 "RSASSA-PKCS1-v1_5", { | 118 { |
| 122 Undefined, // Encrypt | 119 Undefined, // Encrypt |
| 123 Undefined, // Decrypt | 120 Undefined, // Decrypt |
| 124 blink::WebCryptoAlgorithmParamsTypeNone, // Sign | 121 blink::WebCryptoAlgorithmParamsTypeNone, // Sign |
| 125 blink::WebCryptoAlgorithmParamsTypeNone, // Verify | 122 blink::WebCryptoAlgorithmParamsTypeNone, // Verify |
| 126 Undefined, // Digest | 123 Undefined, // Digest |
| 127 blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams, // Generat
eKey | 124 blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams, // Generat
eKey |
| 128 blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams, // ImportK
ey | 125 blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams, // ImportK
ey |
| 129 Undefined, // DeriveKey | 126 Undefined, // DeriveKey |
| 130 Undefined, // DeriveBits | 127 Undefined, // DeriveBits |
| 131 Undefined, // WrapKey | 128 Undefined, // WrapKey |
| 132 Undefined // UnwrapKey | 129 Undefined // UnwrapKey |
| 133 } | 130 } |
| 134 }, { // Index 3 | 131 }, { // Index 3 |
| 135 "SHA-1", { | 132 { |
| 136 Undefined, // Encrypt | 133 Undefined, // Encrypt |
| 137 Undefined, // Decrypt | 134 Undefined, // Decrypt |
| 138 Undefined, // Sign | 135 Undefined, // Sign |
| 139 Undefined, // Verify | 136 Undefined, // Verify |
| 140 blink::WebCryptoAlgorithmParamsTypeNone, // Digest | 137 blink::WebCryptoAlgorithmParamsTypeNone, // Digest |
| 141 Undefined, // GenerateKey | 138 Undefined, // GenerateKey |
| 142 Undefined, // ImportKey | 139 Undefined, // ImportKey |
| 143 Undefined, // DeriveKey | 140 Undefined, // DeriveKey |
| 144 Undefined, // DeriveBits | 141 Undefined, // DeriveBits |
| 145 Undefined, // WrapKey | 142 Undefined, // WrapKey |
| 146 Undefined // UnwrapKey | 143 Undefined // UnwrapKey |
| 147 } | 144 } |
| 148 }, { // Index 4 | 145 }, { // Index 4 |
| 149 "SHA-256", { | 146 { |
| 150 Undefined, // Encrypt | 147 Undefined, // Encrypt |
| 151 Undefined, // Decrypt | 148 Undefined, // Decrypt |
| 152 Undefined, // Sign | 149 Undefined, // Sign |
| 153 Undefined, // Verify | 150 Undefined, // Verify |
| 154 blink::WebCryptoAlgorithmParamsTypeNone, // Digest | 151 blink::WebCryptoAlgorithmParamsTypeNone, // Digest |
| 155 Undefined, // GenerateKey | 152 Undefined, // GenerateKey |
| 156 Undefined, // ImportKey | 153 Undefined, // ImportKey |
| 157 Undefined, // DeriveKey | 154 Undefined, // DeriveKey |
| 158 Undefined, // DeriveBits | 155 Undefined, // DeriveBits |
| 159 Undefined, // WrapKey | 156 Undefined, // WrapKey |
| 160 Undefined // UnwrapKey | 157 Undefined // UnwrapKey |
| 161 } | 158 } |
| 162 }, { // Index 5 | 159 }, { // Index 5 |
| 163 "SHA-384", { | 160 { |
| 164 Undefined, // Encrypt | 161 Undefined, // Encrypt |
| 165 Undefined, // Decrypt | 162 Undefined, // Decrypt |
| 166 Undefined, // Sign | 163 Undefined, // Sign |
| 167 Undefined, // Verify | 164 Undefined, // Verify |
| 168 blink::WebCryptoAlgorithmParamsTypeNone, // Digest | 165 blink::WebCryptoAlgorithmParamsTypeNone, // Digest |
| 169 Undefined, // GenerateKey | 166 Undefined, // GenerateKey |
| 170 Undefined, // ImportKey | 167 Undefined, // ImportKey |
| 171 Undefined, // DeriveKey | 168 Undefined, // DeriveKey |
| 172 Undefined, // DeriveBits | 169 Undefined, // DeriveBits |
| 173 Undefined, // WrapKey | 170 Undefined, // WrapKey |
| 174 Undefined // UnwrapKey | 171 Undefined // UnwrapKey |
| 175 } | 172 } |
| 176 }, { // Index 6 | 173 }, { // Index 6 |
| 177 "SHA-512", { | 174 { |
| 178 Undefined, // Encrypt | 175 Undefined, // Encrypt |
| 179 Undefined, // Decrypt | 176 Undefined, // Decrypt |
| 180 Undefined, // Sign | 177 Undefined, // Sign |
| 181 Undefined, // Verify | 178 Undefined, // Verify |
| 182 blink::WebCryptoAlgorithmParamsTypeNone, // Digest | 179 blink::WebCryptoAlgorithmParamsTypeNone, // Digest |
| 183 Undefined, // GenerateKey | 180 Undefined, // GenerateKey |
| 184 Undefined, // ImportKey | 181 Undefined, // ImportKey |
| 185 Undefined, // DeriveKey | 182 Undefined, // DeriveKey |
| 186 Undefined, // DeriveBits | 183 Undefined, // DeriveBits |
| 187 Undefined, // WrapKey | 184 Undefined, // WrapKey |
| 188 Undefined // UnwrapKey | 185 Undefined // UnwrapKey |
| 189 } | 186 } |
| 190 }, { // Index 7 | 187 }, { // Index 7 |
| 191 "AES-GCM", { | 188 { |
| 192 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Encrypt | 189 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Encrypt |
| 193 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Decrypt | 190 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Decrypt |
| 194 Undefined, // Sign | 191 Undefined, // Sign |
| 195 Undefined, // Verify | 192 Undefined, // Verify |
| 196 Undefined, // Digest | 193 Undefined, // Digest |
| 197 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey | 194 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey |
| 198 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey | 195 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey |
| 199 Undefined, // DeriveKey | 196 Undefined, // DeriveKey |
| 200 Undefined, // DeriveBits | 197 Undefined, // DeriveBits |
| 201 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // WrapKey | 198 blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // WrapKey |
| 202 blink::WebCryptoAlgorithmParamsTypeAesGcmParams // UnwrapKey | 199 blink::WebCryptoAlgorithmParamsTypeAesGcmParams // UnwrapKey |
| 203 } | 200 } |
| 204 }, { // Index 8 | 201 }, { // Index 8 |
| 205 "RSA-OAEP", { | 202 { |
| 206 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Encrypt | 203 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Encrypt |
| 207 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Decrypt | 204 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Decrypt |
| 208 Undefined, // Sign | 205 Undefined, // Sign |
| 209 Undefined, // Verify | 206 Undefined, // Verify |
| 210 Undefined, // Digest | 207 Undefined, // Digest |
| 211 blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams, // Generat
eKey | 208 blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams, // Generat
eKey |
| 212 blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams, // ImportK
ey | 209 blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams, // ImportK
ey |
| 213 Undefined, // DeriveKey | 210 Undefined, // DeriveKey |
| 214 Undefined, // DeriveBits | 211 Undefined, // DeriveBits |
| 215 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // WrapKey | 212 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // WrapKey |
| 216 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams // UnwrapKey | 213 blink::WebCryptoAlgorithmParamsTypeRsaOaepParams // UnwrapKey |
| 217 } | 214 } |
| 218 }, { // Index 9 | 215 }, { // Index 9 |
| 219 "AES-CTR", { | 216 { |
| 220 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Encrypt | 217 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Encrypt |
| 221 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Decrypt | 218 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Decrypt |
| 222 Undefined, // Sign | 219 Undefined, // Sign |
| 223 Undefined, // Verify | 220 Undefined, // Verify |
| 224 Undefined, // Digest | 221 Undefined, // Digest |
| 225 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey | 222 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey |
| 226 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey | 223 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey |
| 227 Undefined, // DeriveKey | 224 Undefined, // DeriveKey |
| 228 Undefined, // DeriveBits | 225 Undefined, // DeriveBits |
| 229 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // WrapKey | 226 blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // WrapKey |
| 230 blink::WebCryptoAlgorithmParamsTypeAesCtrParams // UnwrapKey | 227 blink::WebCryptoAlgorithmParamsTypeAesCtrParams // UnwrapKey |
| 231 } | 228 } |
| 232 }, { // Index 10 | 229 }, { // Index 10 |
| 233 "AES-KW", { | 230 { |
| 234 Undefined, // Encrypt | 231 Undefined, // Encrypt |
| 235 Undefined, // Decrypt | 232 Undefined, // Decrypt |
| 236 Undefined, // Sign | 233 Undefined, // Sign |
| 237 Undefined, // Verify | 234 Undefined, // Verify |
| 238 Undefined, // Digest | 235 Undefined, // Digest |
| 239 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey | 236 blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams, // GenerateKey |
| 240 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey | 237 blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey |
| 241 Undefined, // DeriveKey | 238 Undefined, // DeriveKey |
| 242 Undefined, // DeriveBits | 239 Undefined, // DeriveBits |
| 243 blink::WebCryptoAlgorithmParamsTypeNone, // WrapKey | 240 blink::WebCryptoAlgorithmParamsTypeNone, // WrapKey |
| (...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 setNotSupportedError(context.toString("Unrecognized name"), error); | 889 setNotSupportedError(context.toString("Unrecognized name"), error); |
| 893 return false; | 890 return false; |
| 894 } | 891 } |
| 895 | 892 |
| 896 // Remove the "Algorithm:" prefix for all subsequent errors. | 893 // Remove the "Algorithm:" prefix for all subsequent errors. |
| 897 context.removeLast(); | 894 context.removeLast(); |
| 898 | 895 |
| 899 const AlgorithmInfo* algorithmInfo = lookupAlgorithmInfo(algorithmId); | 896 const AlgorithmInfo* algorithmInfo = lookupAlgorithmInfo(algorithmId); |
| 900 | 897 |
| 901 if (algorithmInfo->operationToParamsType[op] == Undefined) { | 898 if (algorithmInfo->operationToParamsType[op] == Undefined) { |
| 902 context.add(algorithmIdToName(algorithmId)); | 899 context.add(blink::WebCryptoAlgorithm::idToName(algorithmId)); |
| 903 setNotSupportedError(context.toString("Unsupported operation", operation
ToString(op)), error); | 900 setNotSupportedError(context.toString("Unsupported operation", operation
ToString(op)), error); |
| 904 return false; | 901 return false; |
| 905 } | 902 } |
| 906 | 903 |
| 907 blink::WebCryptoAlgorithmParamsType paramsType = static_cast<blink::WebCrypt
oAlgorithmParamsType>(algorithmInfo->operationToParamsType[op]); | 904 blink::WebCryptoAlgorithmParamsType paramsType = static_cast<blink::WebCrypt
oAlgorithmParamsType>(algorithmInfo->operationToParamsType[op]); |
| 908 | 905 |
| 909 OwnPtr<blink::WebCryptoAlgorithmParams> params; | 906 OwnPtr<blink::WebCryptoAlgorithmParams> params; |
| 910 if (!parseAlgorithmParams(raw, paramsType, params, context, error)) | 907 if (!parseAlgorithmParams(raw, paramsType, params, context, error)) |
| 911 return false; | 908 return false; |
| 912 | 909 |
| 913 algorithm = blink::WebCryptoAlgorithm(algorithmId, params.release()); | 910 algorithm = blink::WebCryptoAlgorithm(algorithmId, params.release()); |
| 914 return true; | 911 return true; |
| 915 } | 912 } |
| 916 | 913 |
| 917 } // namespace | 914 } // namespace |
| 918 | 915 |
| 919 bool normalizeAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, bli
nk::WebCryptoAlgorithm& algorithm, AlgorithmError* error) | 916 bool normalizeAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, bli
nk::WebCryptoAlgorithm& algorithm, AlgorithmError* error) |
| 920 { | 917 { |
| 921 return parseAlgorithm(raw, op, algorithm, ErrorContext(), error); | 918 return parseAlgorithm(raw, op, algorithm, ErrorContext(), error); |
| 922 } | 919 } |
| 923 | 920 |
| 924 const char* algorithmIdToName(blink::WebCryptoAlgorithmId id) | |
| 925 { | |
| 926 return lookupAlgorithmInfo(id)->name; | |
| 927 } | |
| 928 | |
| 929 } // namespace WebCore | 921 } // namespace WebCore |
| OLD | NEW |