#if MYSQL_6_9 // Copyright © 2013, Oracle and/or its affiliates. All rights reserved. // // MySQL Connector/NET is licensed under the terms of the GPLv2 // , like most // MySQL Connectors. There are special exceptions to the terms and // conditions of the GPLv2 as it is applied to this software, see the // FLOSS License Exception // . // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 2 of the License. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //#define BOUNCY_CASTLE_INCLUDED using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; using Externals.MySql.Data.Common; using Externals.MySql.Data.MySqlClient.Properties; namespace Externals.MySql.Data.MySqlClient.Authentication { /// /// The implementation of the sha256_password authentication plugin. /// internal class Sha256AuthenticationPlugin : MySqlAuthenticationPlugin { private byte[] rawPubkey; public override string PluginName { get { return "sha256_password"; } } protected override byte[] MoreData(byte[] data) { rawPubkey = data; byte[] buffer = GetPassword() as byte[]; return buffer; } public override object GetPassword() { if (Settings.SslMode != MySqlSslMode.None) { // send as clear text, since the channel is already encrypted byte[] passBytes = this.Encoding.GetBytes(Settings.Password); byte[] buffer = new byte[passBytes.Length + 1]; Array.Copy(passBytes, 0, buffer, 0, passBytes.Length); buffer[passBytes.Length] = 0; return buffer; } else { throw new NotImplementedException( "You can use sha256 plugin only in SSL connections in this implementation." ); } } } } #endif