OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This code implements SPAKE2, a variant of EKE: | 5 // This code implements SPAKE2, a variant of EKE: |
6 // http://www.di.ens.fr/~pointche/pub.php?reference=AbPo04 | 6 // http://www.di.ens.fr/~pointche/pub.php?reference=AbPo04 |
7 | 7 |
8 #include <crypto/p224_spake.h> | 8 #include <crypto/p224_spake.h> |
9 | 9 |
10 #include <base/logging.h> | 10 #include <base/logging.h> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 }; | 92 }; |
93 | 93 |
94 } // anonymous namespace | 94 } // anonymous namespace |
95 | 95 |
96 namespace crypto { | 96 namespace crypto { |
97 | 97 |
98 P224EncryptedKeyExchange::P224EncryptedKeyExchange( | 98 P224EncryptedKeyExchange::P224EncryptedKeyExchange( |
99 PeerType peer_type, const base::StringPiece& password) | 99 PeerType peer_type, const base::StringPiece& password) |
100 : state_(kStateInitial), | 100 : state_(kStateInitial), |
101 is_server_(peer_type == kPeerTypeServer) { | 101 is_server_(peer_type == kPeerTypeServer) { |
| 102 memset(&x_, 0, sizeof(x_)); |
| 103 memset(&expected_authenticator_, 0, sizeof(expected_authenticator_)); |
| 104 |
102 // x_ is a random scalar. | 105 // x_ is a random scalar. |
103 base::RandBytes(x_, sizeof(x_)); | 106 base::RandBytes(x_, sizeof(x_)); |
104 | 107 |
105 // X = g**x_ | 108 // X = g**x_ |
106 p224::Point X; | 109 p224::Point X; |
107 p224::ScalarBaseMult(x_, &X); | 110 p224::ScalarBaseMult(x_, &X); |
108 | 111 |
109 // Calculate |password| hash to get SPAKE password value. | 112 // Calculate |password| hash to get SPAKE password value. |
110 SHA256HashString(std::string(password.data(), password.length()), | 113 SHA256HashString(std::string(password.data(), password.length()), |
111 pw_, sizeof(pw_)); | 114 pw_, sizeof(pw_)); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 const std::string& P224EncryptedKeyExchange::error() const { | 239 const std::string& P224EncryptedKeyExchange::error() const { |
237 return error_; | 240 return error_; |
238 } | 241 } |
239 | 242 |
240 const std::string& P224EncryptedKeyExchange::GetKey() { | 243 const std::string& P224EncryptedKeyExchange::GetKey() { |
241 DCHECK_EQ(state_, kStateDone); | 244 DCHECK_EQ(state_, kStateDone); |
242 return key_; | 245 return key_; |
243 } | 246 } |
244 | 247 |
245 } // namespace crypto | 248 } // namespace crypto |
OLD | NEW |