Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / content / child / webcrypto / nss / aes_key_nss.h
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   Status GenerateKey(const blink::WebCryptoAlgorithm& algorithm,
40                      bool extractable,
41                      blink::WebCryptoKeyUsageMask usages,
42                      GenerateKeyResult* result) const override;
43
44   Status VerifyKeyUsagesBeforeImportKey(
45       blink::WebCryptoKeyFormat format,
46       blink::WebCryptoKeyUsageMask usages) const override;
47
48   Status ImportKeyRaw(const CryptoData& key_data,
49                       const blink::WebCryptoAlgorithm& algorithm,
50                       bool extractable,
51                       blink::WebCryptoKeyUsageMask usages,
52                       blink::WebCryptoKey* key) const override;
53
54   Status ImportKeyJwk(const CryptoData& key_data,
55                       const blink::WebCryptoAlgorithm& algorithm,
56                       bool extractable,
57                       blink::WebCryptoKeyUsageMask usages,
58                       blink::WebCryptoKey* key) const override;
59
60   Status ExportKeyRaw(const blink::WebCryptoKey& key,
61                       std::vector<uint8_t>* buffer) const override;
62
63   Status ExportKeyJwk(const blink::WebCryptoKey& key,
64                       std::vector<uint8_t>* buffer) const override;
65
66  private:
67   const CK_MECHANISM_TYPE import_mechanism_;
68   const CK_FLAGS import_flags_;
69   const blink::WebCryptoKeyUsageMask all_key_usages_;
70   const std::string jwk_suffix_;
71 };
72
73 }  // namespace webcrypto
74
75 }  // namespace content
76
77 #endif  // CONTENT_CHILD_WEBCRYPTO_NSS_AES_NSS_H_