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 |