Chromium Code Reviews| Index: chrome/browser/extensions/api/networking_private/networking_private_crypto_unittest.cc |
| diff --git a/chrome/browser/extensions/api/networking_private/networking_private_crypto_unittest.cc b/chrome/browser/extensions/api/networking_private/networking_private_crypto_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c742a7b544508f11d082180860cc90f735427534 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/networking_private/networking_private_crypto_unittest.cc |
| @@ -0,0 +1,133 @@ |
| +// Copyright 2013 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. |
| + |
| +//#include "base/callback.h" |
| +//#include "base/command_line.h" |
| + |
| +#include "base/base64.h" |
| +#include "base/logging.h" |
| +#include "base/strings/stringprintf.h" |
| +#include "chrome/browser/extensions/api/networking_private/networking_private_crypto.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
| + |
| +TEST(NetworkingPrivateCryptoTest, VerifyCredentials) { |
| + |
|
Ryan Sleevi
2013/08/28 19:02:37
nit: unnecessary line break
|
| + const char* cert_data = |
| + "-----BEGIN " |
| + "CERTIFICATE-----" |
|
Ryan Sleevi
2013/08/28 19:02:37
why this line break?
mef
2013/08/28 21:28:58
Done. Clang format. I think it tries to break at n
|
| + "\nMIIDhzCCAm8CBFE2SCMwDQYJKoZIhvcNAQEFBQAwfTELMAkGA1UEBhMCVVMxEzAR\nBgNV" |
| + "BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEzARBgNV\nBAoMCkdvb2" |
| + "dsZSBJbmMxEjAQBgNVBAsMCUdvb2dsZSBUVjEYMBYGA1UEAwwPRXVy\nZWthIEdlbjEgSUNB" |
| + "MB4XDTEzMDMwNTE5MzE0N1oXDTMzMDIyODE5MzE0N1owgYMx\nFjAUBgNVBAcTDU1vdW50YW" |
| + "luIFZpZXcxEjAQBgNVBAsTCUdvb2dsZSBUVjETMBEG\nA1UEChMKR29vZ2xlIEluYzETMBEG" |
| + "A1UECBMKQ2FsaWZvcm5pYTELMAkGA1UEBhMC\nVVMxHjAcBgNVBAMUFWV2dF9lMTYxIDAwMW" |
| + "ExMWZmYWNkZjCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBAPHGDV0lLoTYK78q" |
| + "13y/" |
|
Ryan Sleevi
2013/08/28 19:02:37
or this, etc
mef
2013/08/28 21:28:58
Same as above. Is there an easy way to re-align?
|
| + "2u77YTjgbBlWAOxgrSNc\nMmGHx1K0aPyo50p99dGQnjapW6jtGrMzReWV2Wz3VL8rYlqY7o" |
| + "WjeJwsLQwo2tcn\n7vIZ/" |
| + "PuvPz9xgnGMUbBOfhCf3Epb1N4Jz82pxxrOFhUawWAglC9C4fUeZLCZpOJs\nQd4QeAznkyd" |
| + "l3xbqdSm74kwxE6vkGEzSCDnC7aYx0Rvvr1mZOKdl4AinYrxzWgmV\nsTnaFT1soSjmC5e/" |
| + "i6Jcrs4dDFgY6mKy9Qtly2XPSCYljm6L4SgqgJNmlpY0qYJg\nO++" |
| + "BdofIbU2jsOiCMvIuKkbMn72NsPQG0QhnVMwk7kYg6kkCAwEAAaMNMAswCQYD\nVR0TBAIwA" |
| + "DANBgkqhkiG9w0BAQUFAAOCAQEAW0bQl9yjBc7DgMp94i7ZDOUxKQrz\nthephuwzb3/" |
| + "wWiTHcw6KK6FRPefXn6NPWxKKeQmv/" |
| + "tBxHbVlmYRXUbrhksnD0aUk\ni4InvtL2m0H1fPfMxmJRFE+HoSXu+" |
| + "s0sGON831JaMcYRbAku5uHnltaGNzOI0KPH\nFGoCDmjAZD+IuoR2LR4FuuTrECK7KLjkdf/" |
| + "/z5d5j7nBDPZS7uTCwC/" |
| + "BwM9asRj3\ntJA5VRFbLbsit1VI7IaRCk9rsSKkpBUaVeKbPLz+y/" |
| + "Z6JonXXT6AxsfgUSKDd4B7\nMYLrTwMQfGuUaaaKko6ldKIrovjrcPloQr1Hxb2bipFcjLmG" |
| + "7nxQLoS6vQ==\n-----END CERTIFICATE-----\n"; |
| + /* |
| + unsigned_data = '%s,%s,%s,%s,%s' % (test_data['name'], |
| + test_data['ssdp_udn'], |
| + test_data['hotspot_bssid'], |
| + test_data['public_key'], |
| + sign_bundle['nonce']) |
| + */ |
| + // const char* mac_address = "4C:AA:16:A5:AC:DF"; |
| + const char* name = "eureka8997"; |
|
Ryan Sleevi
2013/08/28 19:02:37
All of these should be:
"static const char kFoo[]
mef
2013/08/28 21:28:58
Done.
|
| + const char* ssdp_udn = "c5b2a83b-5958-7ce6-b179-e1f44699429b"; |
| + const char* hotspot_bssid = "00:1A:11:FF:AC:DF"; |
| + const char* public_key = |
| + "MIGJAoGBAK3SXmWZBOhJibv8It05qIbgHXXhnCXxHkW+" |
| + "C6jNMHR5sZgDpFaOY1xwXERjKdJxcwrEy3VAT5Uv9MgHPBvxxJku76HYh1yVfIw1rhLnHBTH" |
| + "SxwUzJNCrgc3l3t/" |
| + "UACacLjVNIzccDpYf2vnOcA+t1t6IXRjzuU2NdwY4dJXNtWPAgMBAAE="; |
| + const char* nonce = "+6KSGuRu833m1+TP"; |
| + |
| + std::string unsigned_data = base::StringPrintf( |
| + "%s,%s,%s,%s,%s", name, ssdp_udn, hotspot_bssid, public_key, nonce); |
| + std::string signed_data; |
| + base::Base64Decode( |
| + "vwMBgANrp5XpCswLyk/" |
| + "OTXT56ORPeIWjH7xAdCk3qgjkwI6+8o56zJS02+" |
| + "tC5hhIHWh7oppTmWYF4tKvBQ3GeCz7IW9f7HWDMtO7x7yRWxzJyehaJbCfXvLdfs0/" |
| + "WKllzvGVBgNpcIAwU2NSFUG/" |
| + "jpXclntFzds0EUJG9wHxS6PXXSYRu+PlIFdCDcQJsUlnwO9AGFOJRV/" |
| + "aARGh8YUTWCFIQPOtPEqT5eegt+" |
| + "TLf01Gq0YcrRwSTKy1I3twOnWiMfIdkJdQKPtBwwbvuAyGuqYFocfjKABbnH9Tvl04yyO3eu" |
| + "KbYlSqaF/l8CXmzDJTyO7tDOFK59bV9auE4KljrQ==", |
|
Ryan Sleevi
2013/08/28 19:02:37
Give these strings meaningful symbolic names in th
mef
2013/08/28 21:28:58
Done.
|
| + &signed_data); |
| + |
| + NetworkingPrivateCrypto crypto; |
| + EXPECT_TRUE(crypto.VerifyCredentials( |
| + cert_data, signed_data, unsigned_data, hotspot_bssid)); |
| +} |
| + |
| +TEST(NetworkingPrivateCryptoTest, EncryptString) { |
| + NetworkingPrivateCrypto crypto; |
| + std::string public_key; |
| + base::Base64Decode( |
| + "MIGJAoGBANTjeoILNkSKHVkd3my/" |
| + "rSwNi+9t473vPJU0lkM8nn9C7+" |
| + "gmaPvEWg4ZNkMd12aIXDXVHrjgjcS80bPE0ykhN9J7EYkJ+" |
| + "43oulJMrEnyDy5KQo7U3MKBdjaKFTS+" |
| + "OPyohHpI8GqHKM8UMkLPVtAKu1BXgGTSDvEaBAuoVT2PM4XNAgMBAAE=", |
| + &public_key); |
| + std::string private_key = |
| + "-----BEGIN RSA PRIVATE KEY-----\n" |
| + "MIICXQIBAAKBgQDU43qCCzZEih1ZHd5sv60sDYvvbeO97zyVNJZDPJ5/Qu/oJmj7\n" |
| + "xFoOGTZDHddmiFw11R644I3EvNGzxNMpITfSexGJCfuN6LpSTKxJ8g8uSkKO1NzC\n" |
| + "gXY2ihU0vjj8qIR6SPBqhyjPFDJCz1bQCrtQV4Bk0g7xGgQLqFU9jzOFzQIDAQAB\n" |
| + "AoGBALfdR/9s44/KoZJIQ8Q0v8HeaU9+30U5jF9pLaYggtty2nTsR5u6d/TZPY42\n" |
| + "BcVeXBV6XbBa8NZMJelXQvCw6d3hrirtRgqo+R9n6Z5Ji9oKA9NR0ZD0d66OLgRz\n" |
| + "7U1w2wiM9KqfjRpRhuID1MrDF8R0mxORSFnlMeoHD74ncK6ZAkEA+NBV2OOigyU/\n" |
| + "CVWCTKmOpxUGb6bRZfvQRln4XlVUhSgZU0Acf0APl3Av1vUPyPjRIXRnMS5ZBDFK\n" |
| + "YoUqWH3ymwJBANsJhX3HHYXk7aDrmPKE7q25xR7Eu4C7XEdiG0SSl8PNAicU0APy\n" |
| + "zFs9GLhTgGCTZf/SCzH6ejEIiOC/RZeqW7cCQCapAF3F6O9lryi9H5TX17GAY9Kf\n" |
| + "YfPtr4vu2NeXfJ2AAIdd88+V3ZZTOSu2QjCg8KW5F3udzvkGy58JP+4mC7cCQBEU\n" |
| + "+gMoHyZNBzcwiHoJYe/MeBIBN7o/Yl/yx7ueTxWnDE7t8ZcNPWC0MBRX9sARXrgH\n" |
| + "snXQWe0vBDW61PuR/psCQQDthOoMBnuWamOEZrEJr+itK5+ZPlE+KpT3ladXui57\n" |
| + "zvz3CljmlLwyufahWaF+LzfohVAG5CLr4Zi/bv7j1lnJ\n" |
| + "-----END RSA PRIVATE KEY-----"; |
| + |
| + std::string encrypted_output; |
| + std::string plain = "disco boy"; |
| + |
| + EXPECT_TRUE(crypto.EncryptByteString(public_key, plain, &encrypted_output)); |
| + |
| +// TODO(mef): figure out a correct way to import private_key. |
| +#if 0 |
| + scoped_ptr<crypto::RSAPrivateKey> key(crypto::RSAPrivateKey::Create(1024)); |
| + std::vector<uint8> pubkey_data; |
| + std::vector<uint8> privkey_data; |
| + EXPECT_TRUE(key->ExportPublicKey(&pubkey_data)); |
|
mef
2013/08/28 18:05:59
The exported pubkey_data isn't liked by SECKEY_Imp
|
| + EXPECT_TRUE(key->ExportPrivateKey(&privkey_data)); |
| + public_key = std::string(reinterpret_cast<char*>(&pubkey_data.front()), |
| + pubkey_data.size()); |
| + EXPECT_TRUE(crypto.EncryptByteString(public_key, plain, &encrypted_output)); |
| + |
| + std::string decrypted; |
| + EXPECT_TRUE( |
| + crypto.DecryptByteString(private_key, encrypted_output, &decrypted)); |
| + EXPECT_TRUE(decrypted == plain); |
| +#endif |
| + |
| + EXPECT_FALSE( |
| + crypto.EncryptByteString("bad key", "disco boy", &encrypted_output)); |
| +} |
| + |
| +} // namespace |