158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/api/networking_private/networking_private_crypto.h" 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/base64.h" 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/logging.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/stringprintf.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Tests of NetworkingPrivateCrypto support for Networking Private API. 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class NetworkingPrivateCryptoTest : public testing::Test { 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Verify that decryption of |encrypted| data using |private_key_pem| matches 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // |plain| data. 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool VerifyByteString(const std::string& private_key_pem, 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& plain, 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& encrypted) { 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkingPrivateCrypto crypto; 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string decrypted; 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (crypto.DecryptByteString(private_key_pem, encrypted, &decrypted)) 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return decrypted == plain; 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that NetworkingPrivateCrypto::VerifyCredentials behaves as expected. 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(NetworkingPrivateCryptoTest, VerifyCredentials) { 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kCertData[] = 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----BEGIN CERTIFICATE-----" 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MIIDhzCCAm8CBFE2SCMwDQYJKoZIhvcNAQEFBQAwfTELMAkGA1UEBhMCVVMxEzARBgNVBAgM" 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "CkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEzARBgNVBAoMCkdvb2dsZSBJ" 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "bmMxEjAQBgNVBAsMCUdvb2dsZSBUVjEYMBYGA1UEAwwPRXVyZWthIEdlbjEgSUNBMB4XDTEz" 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MDMwNTE5MzE0N1oXDTMzMDIyODE5MzE0N1owgYMxFjAUBgNVBAcTDU1vdW50YWluIFZpZXcx" 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "EjAQBgNVBAsTCUdvb2dsZSBUVjETMBEGA1UEChMKR29vZ2xlIEluYzETMBEGA1UECBMKQ2Fs" 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "aWZvcm5pYTELMAkGA1UEBhMCVVMxHjAcBgNVBAMUFWV2dF9lMTYxIDAwMWExMWZmYWNkZjCC" 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPHGDV0lLoTYK78q13y/2u77YTjgbBlW" 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "AOxgrSNcMmGHx1K0aPyo50p99dGQnjapW6jtGrMzReWV2Wz3VL8rYlqY7oWjeJwsLQwo2tcn" 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "7vIZ/PuvPz9xgnGMUbBOfhCf3Epb1N4Jz82pxxrOFhUawWAglC9C4fUeZLCZpOJsQd4QeAzn" 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "kydl3xbqdSm74kwxE6vkGEzSCDnC7aYx0Rvvr1mZOKdl4AinYrxzWgmVsTnaFT1soSjmC5e/" 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "i6Jcrs4dDFgY6mKy9Qtly2XPSCYljm6L4SgqgJNmlpY0qYJgO++BdofIbU2jsOiCMvIuKkbM" 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "n72NsPQG0QhnVMwk7kYg6kkCAwEAAaMNMAswCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOC" 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "AQEAW0bQl9yjBc7DgMp94i7ZDOUxKQrzthephuwzb3/wWiTHcw6KK6FRPefXn6NPWxKKeQmv" 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/tBxHbVlmYRXUbrhksnD0aUki4InvtL2m0H1fPfMxmJRFE+HoSXu+s0sGON831JaMcYRbAku" 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "5uHnltaGNzOI0KPHFGoCDmjAZD+IuoR2LR4FuuTrECK7KLjkdf//z5d5j7nBDPZS7uTCwC/B" 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "wM9asRj3tJA5VRFbLbsit1VI7IaRCk9rsSKkpBUaVeKbPLz+y/Z6JonXXT6AxsfgUSKDd4B7" 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MYLrTwMQfGuUaaaKko6ldKIrovjrcPloQr1Hxb2bipFcjLmG7nxQLoS6vQ==" 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----END CERTIFICATE-----"; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kName[] = "eureka8997"; 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kSsdpUdn[] = "c5b2a83b-5958-7ce6-b179-e1f44699429b"; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kHotspotBssid[] = "00:1A:11:FF:AC:DF"; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kPublicKey[] = 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MIGJAoGBAK3SXmWZBOhJibv8It05qIbgHXXhnCXxHkW+C6jNMHR5sZgDpFaOY1xwXERjKdJx" 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "cwrEy3VAT5Uv9MgHPBvxxJku76HYh1yVfIw1rhLnHBTHSxwUzJNCrgc3l3t/UACacLjVNIzc" 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "cDpYf2vnOcA+t1t6IXRjzuU2NdwY4dJXNtWPAgMBAAE="; 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kNonce[] = "+6KSGuRu833m1+TP"; 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kSignedData[] = 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "vwMBgANrp5XpCswLyk/OTXT56ORPeIWjH7xAdCk3qgjkwI6+8o56zJS02+tC5hhIHWh7oppT" 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "mWYF4tKvBQ3GeCz7IW9f7HWDMtO7x7yRWxzJyehaJbCfXvLdfs0/WKllzvGVBgNpcIAwU2NS" 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "FUG/jpXclntFzds0EUJG9wHxS6PXXSYRu+PlIFdCDcQJsUlnwO9AGFOJRV/aARGh8YUTWCFI" 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "QPOtPEqT5eegt+TLf01Gq0YcrRwSTKy1I3twOnWiMfIdkJdQKPtBwwbvuAyGuqYFocfjKABb" 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "nH9Tvl04yyO3euKbYlSqaF/l8CXmzDJTyO7tDOFK59bV9auE4KljrQ=="; 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBadSubjectCertData[] = 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----BEGIN CERTIFICATE-----" 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MIIDejCCAmICBFEtN4wwDQYJKoZIhvcNAQEFBQAwfTELMAkGA1UEBhMCVVMxEzARBgNVBAgM" 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "CkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEzARBgNVBAoMCkdvb2dsZSBJ" 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "bmMxEjAQBgNVBAsMCUdvb2dsZSBUVjEYMBYGA1UEAwwPRXVyZWthIEdlbjEgSUNBMB4XDTEz" 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MDIyNjIyMzAzNloXDTMzMDIyMTIyMzAzNlowdzETMBEGA1UECBMKQ2FsaWZvcm5pYTELMAkG" 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "A1UEBhMCVVMxFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxEjAQBgNVBAsTCUdvb2dsZSBUVjET" 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MBEGA1UEChMKR29vZ2xlIEluYzESMBAGA1UEAxQJZXZ0X2UxMjYyMIIBIjANBgkqhkiG9w0B" 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "AQEFAAOCAQ8AMIIBCgKCAQEAo7Uu+bdyCjtiUYpmNU4ZvRjDg6VkEh/g0YPDG2pICBU4XKvs" 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "qHH1i0hbtWp1J79hV9Rqst1yHT02Oeh3o1SOd2zeamYzmvXRVN7AZqfQlzWxwxk/ltpXGwew" 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "m+EIR2bP4kpvyEKvvziTMtTxviOK+A395QyodMhMXClKTus/Gme2r1fBoQqJJR/zrmwXCsl5" 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "kpdhj7FOIII3BCYV0zejjQquzywjsKfCVON28VGgJdaKgmXxkeRYYWVNnuTNna57vXe16FP6" 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "hS1ty1U77ESffLTpNJ/M4tsd2dMVVTDuGeX3q8Ix4TN8cqpqu1AKEf59hygys9j6cHZRKR/d" 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "iv0+uQIDAQABow0wCzAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQAZx6XyEK9SLHE+" 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "rbKCVsLN9+hTEa50aikPmxOZt+lFuB4+VJZ/GCPQCZJIde2tlWUe2YBgoZw2xUKgIsM3Yq42" 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Gawi35/oZ3qycTgYU8KJP9kUMbYNAH90mz9BDH7MmnRID5dFexHyBCG88EJ+ZvxmUVn0EVDc" 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "sSMt11wIAZ/T+/gsE1120d/GxhjYQ9YZz7SZXBQfRdqCdcPNl2+QSHHl+WvYLzdJa2xYj39/" 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "kQu47Vp7X5rZrHSBvzdVymH0Od2D18t+Q6lxbSdyUNhP1MVhdkT1Ct4OmRS3FJ4aannXMhfq" 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Ng7k4Sfif5iktYT4VRKpThe0EGJNfqKJKYtvHEVC" 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----END CERTIFICATE-----"; 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBadCertData[] = "not a certificate"; 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBadNonce[] = "bad nonce"; 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBadHotspotBssid[] = "bad bssid"; 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string unsigned_data = base::StringPrintf( 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "%s,%s,%s,%s,%s", kName, kSsdpUdn, kHotspotBssid, kPublicKey, kNonce); 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string signed_data; 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Base64Decode(kSignedData, &signed_data); 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkingPrivateCrypto crypto; 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking basic verification operation. 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(crypto.VerifyCredentials( 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kCertData, signed_data, unsigned_data, kHotspotBssid)); 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking that verification fails when the certificate is signed, but 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // subject is malformed. 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(crypto.VerifyCredentials( 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kBadSubjectCertData, signed_data, unsigned_data, kHotspotBssid)); 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking that verification fails when certificate has invalid format. 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(crypto.VerifyCredentials( 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kBadCertData, signed_data, unsigned_data, kHotspotBssid)); 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking that verification fails when Hotspot Bssid is invalid. 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(crypto.VerifyCredentials( 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kCertData, signed_data, unsigned_data, kBadHotspotBssid)); 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking that verification fails when there is bad nonce in unsigned_data. 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) unsigned_data = base::StringPrintf( 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "%s,%s,%s,%s,%s", kName, kSsdpUdn, kHotspotBssid, kPublicKey, kBadNonce); 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(crypto.VerifyCredentials( 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kCertData, signed_data, unsigned_data, kHotspotBssid)); 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that NetworkingPrivateCrypto::EncryptByteString behaves as expected. 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(NetworkingPrivateCryptoTest, EncryptByteString) { 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkingPrivateCrypto crypto; 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kPublicKey[] = 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MIGJAoGBANTjeoILNkSKHVkd3my/rSwNi+9t473vPJU0lkM8nn9C7+gmaPvEWg4ZNkMd12aI" 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "XDXVHrjgjcS80bPE0ykhN9J7EYkJ+43oulJMrEnyDy5KQo7U3MKBdjaKFTS+OPyohHpI8GqH" 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "KM8UMkLPVtAKu1BXgGTSDvEaBAuoVT2PM4XNAgMBAAE="; 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kPrivateKey[] = 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----BEGIN PRIVATE KEY-----" 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANTjeoILNkSKHVkd" 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "3my/rSwNi+9t473vPJU0lkM8nn9C7+gmaPvEWg4ZNkMd12aIXDXVHrjgjcS80bPE" 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "0ykhN9J7EYkJ+43oulJMrEnyDy5KQo7U3MKBdjaKFTS+OPyohHpI8GqHKM8UMkLP" 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "VtAKu1BXgGTSDvEaBAuoVT2PM4XNAgMBAAECgYEAt91H/2zjj8qhkkhDxDS/wd5p" 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "T37fRTmMX2ktpiCC23LadOxHm7p39Nk9jjYFxV5cFXpdsFrw1kwl6VdC8LDp3eGu" 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Ku1GCqj5H2fpnkmL2goD01HRkPR3ro4uBHPtTXDbCIz0qp+NGlGG4gPUysMXxHSb" 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "E5FIWeUx6gcPvidwrpkCQQD40FXY46KDJT8JVYJMqY6nFQZvptFl+9BGWfheVVSF" 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "KBlTQBx/QA+XcC/W9Q/I+NEhdGcxLlkEMUpihSpYffKbAkEA2wmFfccdheTtoOuY" 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "8oTurbnFHsS7gLtcR2IbRJKXw80CJxTQA/LMWz0YuFOAYJNl/9ILMfp6MQiI4L9F" 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "l6pbtwJAJqkAXcXo72WvKL0flNfXsYBj0p9h8+2vi+7Y15d8nYAAh13zz5XdllM5" 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "K7ZCMKDwpbkXe53O+QbLnwk/7iYLtwJAERT6AygfJk0HNzCIeglh78x4EgE3uj9i" 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "X/LHu55PFacMTu3xlw09YLQwFFf2wBFeuAeyddBZ7S8ENbrU+5H+mwJBAO2E6gwG" 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "e5ZqY4RmsQmv6K0rn5k+UT4qlPeVp1e6LnvO/PcKWOaUvDK59qFZoX4vN+iFUAbk" 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "IuvhmL9u/uPWWck=" 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "-----END PRIVATE KEY-----"; 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBadKeyData[] = "bad key"; 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kTestData[] = "disco boy"; 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kEmptyData[] = ""; 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string public_key; 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Base64Decode(kPublicKey, &public_key); 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string plain; 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string encrypted_output; 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking basic encryption operation. 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) plain = kTestData; 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(crypto.EncryptByteString(public_key, plain, &encrypted_output)); 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(VerifyByteString(kPrivateKey, plain, encrypted_output)); 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking that we can encrypt the empty string. 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) plain = kEmptyData; 15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(crypto.EncryptByteString(public_key, plain, &encrypted_output)); 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking graceful fail for too much data to encrypt. 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE( 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) crypto.EncryptByteString(public_key, 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string(500, 'x'), 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &encrypted_output)); 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checking graceful fail for a bad key format. 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE( 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) crypto.EncryptByteString(kBadKeyData, kTestData, &encrypted_output)); 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 172