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 24 matching lines...) Expand all Loading... |
35 #include "WebCryptoAlgorithm.h" | 35 #include "WebCryptoAlgorithm.h" |
36 #include "WebVector.h" | 36 #include "WebVector.h" |
37 | 37 |
38 namespace blink { | 38 namespace blink { |
39 | 39 |
40 // NOTE: For documentation on the meaning of each of the parameters see the | 40 // NOTE: For documentation on the meaning of each of the parameters see the |
41 // Web crypto spec: | 41 // Web crypto spec: |
42 // | 42 // |
43 // http://www.w3.org/TR/WebCryptoAPI | 43 // http://www.w3.org/TR/WebCryptoAPI |
44 // | 44 // |
45 // The parameters in the spec have the same name, minus the "WebCrypto" pr
efix. | 45 // For the most part, the parameters in the spec have the same name, |
| 46 // except that in the blink code: |
| 47 // |
| 48 // - Structure names are prefixed by "WebCrypto" |
| 49 // - Optional fields are prefixed by "optional" |
| 50 // - Data length properties are suffixed by either "Bits" or "Bytes" |
46 | 51 |
47 class WebCryptoAlgorithmParams { | 52 class WebCryptoAlgorithmParams { |
48 public: | 53 public: |
49 explicit WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsType type) | 54 explicit WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsType type) |
50 : m_type(type) | 55 : m_type(type) |
51 { | 56 { |
52 } | 57 } |
53 | 58 |
54 virtual ~WebCryptoAlgorithmParams() { } | 59 virtual ~WebCryptoAlgorithmParams() { } |
55 | 60 |
(...skipping 12 matching lines...) Expand all Loading... |
68 } | 73 } |
69 | 74 |
70 const WebVector<unsigned char>& iv() const { return m_iv; } | 75 const WebVector<unsigned char>& iv() const { return m_iv; } |
71 | 76 |
72 private: | 77 private: |
73 const WebVector<unsigned char> m_iv; | 78 const WebVector<unsigned char> m_iv; |
74 }; | 79 }; |
75 | 80 |
76 class WebCryptoAesCtrParams : public WebCryptoAlgorithmParams { | 81 class WebCryptoAesCtrParams : public WebCryptoAlgorithmParams { |
77 public: | 82 public: |
78 WebCryptoAesCtrParams(unsigned char length, const unsigned char* counter, un
signed counterSize) | 83 WebCryptoAesCtrParams(unsigned char lengthBits, const unsigned char* counter
, unsigned counterSize) |
79 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesCtrParams) | 84 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesCtrParams) |
80 , m_counter(counter, counterSize) | 85 , m_counter(counter, counterSize) |
81 , m_length(length) | 86 , m_lengthBits(lengthBits) |
82 { | 87 { |
83 } | 88 } |
84 | 89 |
85 const WebVector<unsigned char>& counter() const { return m_counter; } | 90 const WebVector<unsigned char>& counter() const { return m_counter; } |
86 unsigned char length() const { return m_length; } | 91 unsigned char lengthBits() const { return m_lengthBits; } |
87 | 92 |
88 private: | 93 private: |
89 const WebVector<unsigned char> m_counter; | 94 const WebVector<unsigned char> m_counter; |
90 const unsigned char m_length; | 95 const unsigned char m_lengthBits; |
91 }; | 96 }; |
92 | 97 |
93 class WebCryptoAesKeyGenParams : public WebCryptoAlgorithmParams { | 98 class WebCryptoAesKeyGenParams : public WebCryptoAlgorithmParams { |
94 public: | 99 public: |
95 explicit WebCryptoAesKeyGenParams(unsigned short length) | 100 explicit WebCryptoAesKeyGenParams(unsigned short lengthBits) |
96 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesKeyGenParams) | 101 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesKeyGenParams) |
97 , m_length(length) | 102 , m_lengthBits(lengthBits) |
98 { | 103 { |
99 } | 104 } |
100 | 105 |
101 unsigned short length() const { return m_length; } | 106 // FIXME: Delete once no longer referenced by chromium. |
| 107 unsigned short length() const { return m_lengthBits; } |
| 108 |
| 109 unsigned short lengthBits() const { return m_lengthBits; } |
102 | 110 |
103 private: | 111 private: |
104 const unsigned short m_length; | 112 const unsigned short m_lengthBits; |
105 }; | 113 }; |
106 | 114 |
107 class WebCryptoHmacParams : public WebCryptoAlgorithmParams { | 115 class WebCryptoHmacParams : public WebCryptoAlgorithmParams { |
108 public: | 116 public: |
109 explicit WebCryptoHmacParams(const WebCryptoAlgorithm& hash) | 117 explicit WebCryptoHmacParams(const WebCryptoAlgorithm& hash) |
110 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeHmacParams) | 118 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeHmacParams) |
111 , m_hash(hash) | 119 , m_hash(hash) |
112 { | 120 { |
113 BLINK_ASSERT(!hash.isNull()); | 121 BLINK_ASSERT(!hash.isNull()); |
114 } | 122 } |
115 | 123 |
116 const WebCryptoAlgorithm& hash() const { return m_hash; } | 124 const WebCryptoAlgorithm& hash() const { return m_hash; } |
117 | 125 |
118 private: | 126 private: |
119 const WebCryptoAlgorithm m_hash; | 127 const WebCryptoAlgorithm m_hash; |
120 }; | 128 }; |
121 | 129 |
122 class WebCryptoHmacKeyParams : public WebCryptoAlgorithmParams { | 130 class WebCryptoHmacKeyParams : public WebCryptoAlgorithmParams { |
123 public: | 131 public: |
124 WebCryptoHmacKeyParams(const WebCryptoAlgorithm& hash, bool hasLength, unsig
ned length) | 132 WebCryptoHmacKeyParams(const WebCryptoAlgorithm& hash, bool hasLengthBytes,
unsigned lengthBytes) |
125 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeHmacKeyParams) | 133 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeHmacKeyParams) |
126 , m_hash(hash) | 134 , m_hash(hash) |
127 , m_hasLength(hasLength) | 135 , m_hasLengthBytes(hasLengthBytes) |
128 , m_length(length) | 136 , m_optionalLengthBytes(lengthBytes) |
129 { | 137 { |
130 BLINK_ASSERT(!hash.isNull()); | 138 BLINK_ASSERT(!hash.isNull()); |
| 139 BLINK_ASSERT(hasLengthBytes || !lengthBytes); |
131 } | 140 } |
132 | 141 |
133 const WebCryptoAlgorithm& hash() const { return m_hash; } | 142 const WebCryptoAlgorithm& hash() const { return m_hash; } |
134 | 143 |
135 bool hasLength() const { return m_hasLength; } | 144 bool hasLengthBytes() const { return m_hasLengthBytes; } |
136 | 145 |
| 146 // FIXME: Delete once no longer referenced by chromium. |
137 bool getLength(unsigned& length) const | 147 bool getLength(unsigned& length) const |
138 { | 148 { |
139 if (!m_hasLength) | 149 if (!m_hasLengthBytes) |
140 return false; | 150 return false; |
141 length = m_length; | 151 length = m_optionalLengthBytes; |
142 return true; | 152 return true; |
143 } | 153 } |
144 | 154 |
| 155 unsigned optionalLengthBytes() const { return m_optionalLengthBytes; } |
| 156 |
145 private: | 157 private: |
146 const WebCryptoAlgorithm m_hash; | 158 const WebCryptoAlgorithm m_hash; |
147 const bool m_hasLength; | 159 const bool m_hasLengthBytes; |
148 const unsigned m_length; | 160 const unsigned m_optionalLengthBytes; |
149 }; | 161 }; |
150 | 162 |
151 class WebCryptoRsaSsaParams : public WebCryptoAlgorithmParams { | 163 class WebCryptoRsaSsaParams : public WebCryptoAlgorithmParams { |
152 public: | 164 public: |
153 explicit WebCryptoRsaSsaParams(const WebCryptoAlgorithm& hash) | 165 explicit WebCryptoRsaSsaParams(const WebCryptoAlgorithm& hash) |
154 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaSsaParams) | 166 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaSsaParams) |
155 , m_hash(hash) | 167 , m_hash(hash) |
156 { | 168 { |
157 BLINK_ASSERT(!hash.isNull()); | 169 BLINK_ASSERT(!hash.isNull()); |
158 } | 170 } |
159 | 171 |
160 const WebCryptoAlgorithm& hash() const { return m_hash; } | 172 const WebCryptoAlgorithm& hash() const { return m_hash; } |
161 | 173 |
162 private: | 174 private: |
163 const WebCryptoAlgorithm m_hash; | 175 const WebCryptoAlgorithm m_hash; |
164 }; | 176 }; |
165 | 177 |
166 class WebCryptoRsaKeyGenParams : public WebCryptoAlgorithmParams { | 178 class WebCryptoRsaKeyGenParams : public WebCryptoAlgorithmParams { |
167 public: | 179 public: |
168 WebCryptoRsaKeyGenParams(unsigned modulusLength, const unsigned char* public
Exponent, unsigned publicExponentSize) | 180 WebCryptoRsaKeyGenParams(unsigned modulusLengthBits, const unsigned char* pu
blicExponent, unsigned publicExponentSize) |
169 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaKeyGenParams) | 181 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaKeyGenParams) |
170 , m_modulusLength(modulusLength) | 182 , m_modulusLengthBits(modulusLengthBits) |
171 , m_publicExponent(publicExponent, publicExponentSize) | 183 , m_publicExponent(publicExponent, publicExponentSize) |
172 { | 184 { |
173 } | 185 } |
174 | 186 |
175 unsigned modulusLength() const { return m_modulusLength; } | 187 // FIXME: Delete once no longer referenced by chromium. |
| 188 unsigned modulusLength() const { return m_modulusLengthBits; } |
| 189 |
| 190 unsigned modulusLengthBits() const { return m_modulusLengthBits; } |
176 const WebVector<unsigned char>& publicExponent() const { return m_publicExpo
nent; } | 191 const WebVector<unsigned char>& publicExponent() const { return m_publicExpo
nent; } |
177 | 192 |
178 private: | 193 private: |
179 const unsigned m_modulusLength; | 194 const unsigned m_modulusLengthBits; |
180 const WebVector<unsigned char> m_publicExponent; | 195 const WebVector<unsigned char> m_publicExponent; |
181 }; | 196 }; |
182 | 197 |
183 class WebCryptoAesGcmParams : public WebCryptoAlgorithmParams { | 198 class WebCryptoAesGcmParams : public WebCryptoAlgorithmParams { |
184 public: | 199 public: |
185 WebCryptoAesGcmParams(const unsigned char* iv, unsigned ivSize, bool hasAddi
tionalData, const unsigned char* additionalData, unsigned additionalDataSize, bo
ol hasTagLength, unsigned char tagLength) | 200 WebCryptoAesGcmParams(const unsigned char* iv, unsigned ivSize, bool hasAddi
tionalData, const unsigned char* additionalData, unsigned additionalDataSize, bo
ol hasTagLengthBits, unsigned char tagLengthBits) |
186 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesGcmParams) | 201 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeAesGcmParams) |
187 , m_iv(iv, ivSize) | 202 , m_iv(iv, ivSize) |
188 , m_hasAdditionalData(hasAdditionalData) | 203 , m_hasAdditionalData(hasAdditionalData) |
189 , m_additionalData(additionalData, additionalDataSize) | 204 , m_optionalAdditionalData(additionalData, additionalDataSize) |
190 , m_hasTagLength(hasTagLength) | 205 , m_hasTagLengthBits(hasTagLengthBits) |
191 , m_tagLength(tagLength) | 206 , m_optionalTagLengthBits(tagLengthBits) |
192 { | 207 { |
| 208 BLINK_ASSERT(hasAdditionalData || !additionalDataSize); |
| 209 BLINK_ASSERT(hasTagLengthBits || !tagLengthBits); |
193 } | 210 } |
194 | 211 |
195 const WebVector<unsigned char>& iv() const { return m_iv; } | 212 const WebVector<unsigned char>& iv() const { return m_iv; } |
196 | 213 |
197 bool hasAdditionalData() const { return m_hasAdditionalData; } | 214 bool hasAdditionalData() const { return m_hasAdditionalData; } |
198 bool getAdditionalData(const WebVector<unsigned char>*& additionalData) cons
t | 215 const WebVector<unsigned char>& optionalAdditionalData() const { return m_op
tionalAdditionalData; } |
199 { | |
200 if (!m_hasAdditionalData) | |
201 return false; | |
202 additionalData = &m_additionalData; | |
203 return true; | |
204 } | |
205 | 216 |
206 bool hasTagLength() const { return m_hasTagLength; } | 217 bool hasTagLengthBits() const { return m_hasTagLengthBits; } |
207 bool getTagLength(unsigned& tagLength) const | 218 unsigned optionalTagLengthBits() const { return m_optionalTagLengthBits; } |
208 { | |
209 if (!m_hasTagLength) | |
210 return false; | |
211 tagLength = m_tagLength; | |
212 return true; | |
213 } | |
214 | 219 |
215 private: | 220 private: |
216 const WebVector<unsigned char> m_iv; | 221 const WebVector<unsigned char> m_iv; |
217 const bool m_hasAdditionalData; | 222 const bool m_hasAdditionalData; |
218 const WebVector<unsigned char> m_additionalData; | 223 const WebVector<unsigned char> m_optionalAdditionalData; |
219 const bool m_hasTagLength; | 224 const bool m_hasTagLengthBits; |
220 const unsigned char m_tagLength; | 225 const unsigned char m_optionalTagLengthBits; |
221 }; | 226 }; |
222 | 227 |
223 class WebCryptoRsaOaepParams : public WebCryptoAlgorithmParams { | 228 class WebCryptoRsaOaepParams : public WebCryptoAlgorithmParams { |
224 public: | 229 public: |
225 WebCryptoRsaOaepParams(const WebCryptoAlgorithm& hash, bool hasLabel, const
unsigned char* label, unsigned labelSize) | 230 WebCryptoRsaOaepParams(const WebCryptoAlgorithm& hash, bool hasLabel, const
unsigned char* label, unsigned labelSize) |
226 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaOaepParams) | 231 : WebCryptoAlgorithmParams(WebCryptoAlgorithmParamsTypeRsaOaepParams) |
227 , m_hash(hash) | 232 , m_hash(hash) |
228 , m_hasLabel(hasLabel) | 233 , m_hasLabel(hasLabel) |
229 , m_label(label, labelSize) | 234 , m_optionalLabel(label, labelSize) |
230 { | 235 { |
231 BLINK_ASSERT(!hash.isNull()); | 236 BLINK_ASSERT(!hash.isNull()); |
| 237 BLINK_ASSERT(hasLabel || !labelSize); |
232 } | 238 } |
233 | 239 |
234 const WebCryptoAlgorithm& hash() const { return m_hash; } | 240 const WebCryptoAlgorithm& hash() const { return m_hash; } |
235 | 241 |
236 bool hasLabel() const { return m_hasLabel; } | 242 bool hasLabel() const { return m_hasLabel; } |
237 bool getLabel(const WebVector<unsigned char>*& label) const | 243 const WebVector<unsigned char>& optionalLabel() const { return m_optionalLab
el; } |
238 { | |
239 if (!m_hasLabel) | |
240 return false; | |
241 label = &m_label; | |
242 return true; | |
243 } | |
244 | 244 |
245 private: | 245 private: |
246 const WebCryptoAlgorithm m_hash; | 246 const WebCryptoAlgorithm m_hash; |
247 const bool m_hasLabel; | 247 const bool m_hasLabel; |
248 const WebVector<unsigned char> m_label; | 248 const WebVector<unsigned char> m_optionalLabel; |
249 }; | 249 }; |
250 | 250 |
251 } // namespace blink | 251 } // namespace blink |
252 | 252 |
253 #endif | 253 #endif |
OLD | NEW |