Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / public / platform / WebCryptoKeyAlgorithmParams.h
1 /*
2  * Copyright (C) 2014 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef WebCryptoKeyAlgorithmParams_h
32 #define WebCryptoKeyAlgorithmParams_h
33
34 #include "WebCommon.h"
35 #include "WebCryptoAlgorithm.h"
36 #include "WebVector.h"
37
38 // FIXME: Delete this once the chromium side has picked up the API change.
39 #define WEBCRYPTO_HMAC_KEY_HAS_LENGTH 1
40
41 namespace blink {
42
43 enum WebCryptoKeyAlgorithmParamsType {
44     WebCryptoKeyAlgorithmParamsTypeNone,
45     WebCryptoKeyAlgorithmParamsTypeHmac,
46     WebCryptoKeyAlgorithmParamsTypeAes,
47     WebCryptoKeyAlgorithmParamsTypeRsa,
48     WebCryptoKeyAlgorithmParamsTypeRsaHashed
49 };
50
51 class WebCryptoKeyAlgorithmParams {
52 public:
53     virtual ~WebCryptoKeyAlgorithmParams() { }
54     virtual WebCryptoKeyAlgorithmParamsType type() const
55     {
56         return WebCryptoKeyAlgorithmParamsTypeNone;
57     }
58 };
59
60 class WebCryptoAesKeyAlgorithmParams : public WebCryptoKeyAlgorithmParams {
61 public:
62     explicit WebCryptoAesKeyAlgorithmParams(unsigned short lengthBits)
63         : m_lengthBits(lengthBits)
64     {
65     }
66
67     unsigned short lengthBits() const
68     {
69         return m_lengthBits;
70     }
71
72     virtual WebCryptoKeyAlgorithmParamsType type() const
73     {
74         return WebCryptoKeyAlgorithmParamsTypeAes;
75     }
76
77 private:
78     unsigned short m_lengthBits;
79 };
80
81 class WebCryptoHmacKeyAlgorithmParams : public WebCryptoKeyAlgorithmParams {
82 public:
83     WebCryptoHmacKeyAlgorithmParams(const WebCryptoAlgorithm& hash, unsigned lengthBits)
84         : m_hash(hash)
85         , m_lengthBits(lengthBits)
86     {
87     }
88
89     const WebCryptoAlgorithm& hash() const
90     {
91         return m_hash;
92     }
93
94     unsigned lengthBits() const
95     {
96         return m_lengthBits;
97     }
98
99     virtual WebCryptoKeyAlgorithmParamsType type() const
100     {
101         return WebCryptoKeyAlgorithmParamsTypeHmac;
102     }
103
104 private:
105     WebCryptoAlgorithm m_hash;
106     unsigned m_lengthBits;
107 };
108
109 class WebCryptoRsaKeyAlgorithmParams : public WebCryptoKeyAlgorithmParams {
110 public:
111     WebCryptoRsaKeyAlgorithmParams(unsigned modulusLengthBits, const unsigned char* publicExponent, unsigned publicExponentSize)
112         : m_modulusLengthBits(modulusLengthBits)
113         , m_publicExponent(publicExponent, publicExponentSize)
114     {
115     }
116
117     unsigned modulusLengthBits() const
118     {
119         return m_modulusLengthBits;
120     }
121
122     const WebVector<unsigned char>& publicExponent() const
123     {
124         return m_publicExponent;
125     }
126
127     virtual WebCryptoKeyAlgorithmParamsType type() const
128     {
129         return WebCryptoKeyAlgorithmParamsTypeRsa;
130     }
131
132 private:
133     unsigned m_modulusLengthBits;
134     WebVector<unsigned char> m_publicExponent;
135 };
136
137 class WebCryptoRsaHashedKeyAlgorithmParams : public WebCryptoRsaKeyAlgorithmParams {
138 public:
139     WebCryptoRsaHashedKeyAlgorithmParams(unsigned modulusLengthBits, const unsigned char* publicExponent, unsigned publicExponentSize, const WebCryptoAlgorithm& hash)
140         : WebCryptoRsaKeyAlgorithmParams(modulusLengthBits, publicExponent, publicExponentSize)
141         , m_hash(hash)
142     {
143     }
144
145     const WebCryptoAlgorithm& hash() const
146     {
147         return m_hash;
148     }
149
150     virtual WebCryptoKeyAlgorithmParamsType type() const
151     {
152         return WebCryptoKeyAlgorithmParamsTypeRsaHashed;
153     }
154
155 private:
156     WebCryptoAlgorithm m_hash;
157 };
158
159 } // namespace blink
160
161 #endif