Index: components/autofill/browser/crypto/rc4_decryptor.h |
diff --git a/components/autofill/browser/crypto/rc4_decryptor.h b/components/autofill/browser/crypto/rc4_decryptor.h |
deleted file mode 100644 |
index 1918312e005594da663e40961b681e8a9e5252d2..0000000000000000000000000000000000000000 |
--- a/components/autofill/browser/crypto/rc4_decryptor.h |
+++ /dev/null |
@@ -1,110 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef COMPONENTS_AUTOFILL_BROWSER_CRYPTO_RC4_DECRYPTOR_H_ |
-#define COMPONENTS_AUTOFILL_BROWSER_CRYPTO_RC4_DECRYPTOR_H_ |
- |
-#include <string> |
-#include "base/basictypes.h" |
-#include "base/memory/scoped_ptr.h" |
- |
-namespace autofill { |
- |
-// This is modified RC4 decryption used for import of Toolbar autofill data |
-// only. The difference from the Crypto Api implementation is twofold: |
-// First, it uses a non-standard key size (160 bit), not supported by Microsoft |
-// (it supports only 40 and 128 bit for RC4). Second, it codes 128 words with |
-// value 0x0020 at the beginning of the code to enhance security. |
-// |
-// This class used in |
-// components/autofill/browser/autofill_ie_toolbar_import_win.cc. |
-// |
-// This class should not be used anywhere else!!! |
-class RC4Decryptor { |
- public: |
- explicit RC4Decryptor(wchar_t const* password) { |
- PrepareKey(reinterpret_cast<const uint8 *>(password), |
- wcslen(password) * sizeof(wchar_t)); |
- std::wstring data; |
- // First 128 bytes should be spaces. |
- data.resize(128, L' '); |
- Run(data.c_str()); |
- } |
- |
- // Run the algorithm |
- std::wstring Run(const std::wstring& data) { |
- int data_size = data.length() * sizeof(wchar_t); |
- |
- scoped_ptr<wchar_t[]> buffer(new wchar_t[data.length() + 1]); |
- memset(buffer.get(), 0, (data.length() + 1) * sizeof(wchar_t)); |
- memcpy(buffer.get(), data.c_str(), data_size); |
- |
- RunInternal(reinterpret_cast<uint8 *>(buffer.get()), data_size); |
- |
- std::wstring result(buffer.get()); |
- |
- // Clear the memory |
- memset(buffer.get(), 0, data_size); |
- return result; |
- } |
- |
- private: |
- static const int kKeyDataSize = 256; |
- struct Rc4Key { |
- uint8 state[kKeyDataSize]; |
- uint8 x; |
- uint8 y; |
- }; |
- |
- void SwapByte(uint8* byte1, uint8* byte2) { |
- uint8 temp = *byte1; |
- *byte1 = *byte2; |
- *byte2 = temp; |
- } |
- |
- void PrepareKey(const uint8 *key_data, int key_data_len) { |
- uint8 index1 = 0; |
- uint8 index2 = 0; |
- uint8* state; |
- short counter; |
- |
- state = &key_.state[0]; |
- for (counter = 0; counter < kKeyDataSize; ++counter) |
- state[counter] = static_cast<uint8>(counter); |
- |
- key_.x = key_.y = 0; |
- |
- for (counter = 0; counter < kKeyDataSize; counter++) { |
- index2 = (key_data[index1] + state[counter] + index2) % kKeyDataSize; |
- SwapByte(&state[counter], &state[index2]); |
- index1 = (index1 + 1) % key_data_len; |
- } |
- } |
- |
- void RunInternal(uint8 *buffer, int buffer_len) { |
- uint8 x, y; |
- uint8 xor_index = 0; |
- uint8* state; |
- int counter; |
- |
- x = key_.x; |
- y = key_.y; |
- state = &key_.state[0]; |
- for (counter = 0; counter < buffer_len; ++counter) { |
- x = (x + 1) % kKeyDataSize; |
- y = (state[x] + y) % kKeyDataSize; |
- SwapByte(&state[x], &state[y]); |
- xor_index = (state[x] + state[y]) % kKeyDataSize; |
- buffer[counter] ^= state[xor_index]; |
- } |
- key_.x = x; |
- key_.y = y; |
- } |
- |
- Rc4Key key_; |
-}; |
- |
-} // namespace autofill |
- |
-#endif // COMPONENTS_AUTOFILL_BROWSER_CRYPTO_RC4_DECRYPTOR_H_ |