// signature public static string CreateSignature(string email, string password, RSAParameters key) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(key); SHA1 sha1 = SHA1.Create(); byte[] prefix = { 0x00 }; byte[] hash = sha1.ComputeHash(GoogleKeyUtils.KeyToStruct(key)).Take(4).ToArray(); byte[] encrypted = rsa.Encrypt(Encoding.UTF8.GetBytes(email + "\x00" + password), true); return(DataTypeUtils.UrlSafeBase64(DataTypeUtils.CombineBytes(prefix, hash, encrypted))); }
// perform_oauth public async Task <Dictionary <string, string> > PerformOAuth(string email, string masterToken, string service, string app, string clientSig, string deviceCountry = "us", string operatorCountry = "us", string lang = "en", int sdkVersion = 21) { var dict = new Dictionary <string, string> { { "accountType", "HOSTED_OR_GOOGLE" }, { "Email", email }, { "has_permission", 1.ToString() }, { "EncryptedPasswd", masterToken }, { "service", service }, { "source", "android" }, { "app", app }, { "client_sig", clientSig }, { "device_country", deviceCountry }, { "operatorCountry", operatorCountry }, { "lang", lang }, { "sdk_version", sdkVersion.ToString() } }; string result = await PerformAuthRequest(dict); return(GoogleKeyUtils.ParseAuthResponse(result)); }
// perform_master_login public async Task <Dictionary <string, string> > PerformMasterLogin(string email, string password, string service = "ac2dm", string deviceCountry = "us", string operatorCountry = "us", string lang = "en", int sdkVersion = 21) { string signature = GoogleKeyUtils.CreateSignature(email, password, androidKey); var dict = new Dictionary <string, string> { { "accountType", "HOSTED_OR_GOOGLE" }, { "Email", email }, { "has_permission", 1.ToString() }, { "add_account", 1.ToString() }, { "EncryptedPasswd", signature }, { "service", service }, { "source", "android" }, { "device_country", deviceCountry }, { "operatorCountry", operatorCountry }, { "lang", lang }, { "sdk_version", sdkVersion.ToString() } }; string result = await PerformAuthRequest(dict); return(GoogleKeyUtils.ParseAuthResponse(result)); }