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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_CHILD_WEBCRYPTO_NSS_AES_NSS_H_ 6 #define CONTENT_CHILD_WEBCRYPTO_NSS_AES_NSS_H_ 7 8 #include <pkcs11t.h> 9 10 #include "content/child/webcrypto/algorithm_implementation.h" 11 12 namespace content { 13 14 namespace webcrypto { 15 16 // Base class for AES algorithms that provides the implementation for key 17 // creation and export. 18 class AesAlgorithm : public AlgorithmImplementation { 19 public: 20 // Constructs an AES algorithm whose keys will be imported using the NSS 21 // mechanism |import_mechanism| and NSS flags |import_flags|. 22 // |all_key_usages| is the set of all WebCrypto key usages that are 23 // allowed for imported or generated keys. |jwk_suffix| is the suffix 24 // used when constructing JWK names for the algorithm. For instance A128CBC 25 // is the JWK name for 128-bit AES-CBC. The |jwk_suffix| in this case would 26 // be "CBC". 27 AesAlgorithm(CK_MECHANISM_TYPE import_mechanism, 28 CK_FLAGS import_flags, 29 blink::WebCryptoKeyUsageMask all_key_usages, 30 const std::string& jwk_suffix); 31 32 // This is the same as the other AesAlgorithm constructor, however 33 // |import_flags| and |all_key_usages| are pre-filled to values for 34 // encryption/decryption algorithms (supports usages for: encrypt, decrypt, 35 // wrap, unwrap). 36 AesAlgorithm(CK_MECHANISM_TYPE import_mechanism, 37 const std::string& jwk_suffix); 38 39 virtual Status VerifyKeyUsagesBeforeGenerateKey( 40 blink::WebCryptoKeyUsageMask usage_mask) const OVERRIDE; 41 42 virtual Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm, 43 bool extractable, 44 blink::WebCryptoKeyUsageMask usage_mask, 45 blink::WebCryptoKey* key) const OVERRIDE; 46 47 virtual Status VerifyKeyUsagesBeforeImportKey( 48 blink::WebCryptoKeyFormat format, 49 blink::WebCryptoKeyUsageMask usage_mask) const OVERRIDE; 50 51 virtual Status ImportKeyRaw(const CryptoData& key_data, 52 const blink::WebCryptoAlgorithm& algorithm, 53 bool extractable, 54 blink::WebCryptoKeyUsageMask usage_mask, 55 blink::WebCryptoKey* key) const OVERRIDE; 56 57 virtual Status ImportKeyJwk(const CryptoData& key_data, 58 const blink::WebCryptoAlgorithm& algorithm, 59 bool extractable, 60 blink::WebCryptoKeyUsageMask usage_mask, 61 blink::WebCryptoKey* key) const OVERRIDE; 62 63 virtual Status ExportKeyRaw(const blink::WebCryptoKey& key, 64 std::vector<uint8_t>* buffer) const OVERRIDE; 65 66 virtual Status ExportKeyJwk(const blink::WebCryptoKey& key, 67 std::vector<uint8_t>* buffer) const OVERRIDE; 68 69 private: 70 const CK_MECHANISM_TYPE import_mechanism_; 71 const CK_FLAGS import_flags_; 72 const blink::WebCryptoKeyUsageMask all_key_usages_; 73 const std::string jwk_suffix_; 74 }; 75 76 } // namespace webcrypto 77 78 } // namespace content 79 80 #endif // CONTENT_CHILD_WEBCRYPTO_NSS_AES_NSS_H_ 81