X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMono.Security%2FMono.Security.Protocol.Tls.Handshake.Server%2FTlsClientFinished.cs;h=26eaad9a3111c3052f8816a1f83cac8c99ceda07;hb=e946a6cdebde729e1c03ec374184254ab38da184;hp=a3b419ea15d1c0b18713f2c49c2b30dae6a18907;hpb=d4257ef3dc3d8adf23b2744130952b26303f5d33;p=mono.git diff --git a/mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs b/mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs index a3b419ea15d..26eaad9a311 100644 --- a/mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs +++ b/mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs @@ -1,26 +1,26 @@ -/* Transport Security Layer (TLS) - * Copyright (c) 2003-2004 Carlos Guzman Alvarez - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ +// Transport Security Layer (TLS) +// Copyright (c) 2003-2004 Carlos Guzman Alvarez +// Copyright (C) 2006 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// using System; using System.Security.Cryptography; @@ -44,8 +44,6 @@ namespace Mono.Security.Protocol.Tls.Handshake.Server protected override void ProcessAsSsl3() { - bool decryptError = false; - // Compute handshake messages hashes HashAlgorithm hash = new SslHandshakeHash(this.Context.MasterSecret); @@ -61,23 +59,7 @@ namespace Mono.Security.Protocol.Tls.Handshake.Server byte[] serverHash = hash.Hash; // Check client prf against server prf - if (clientHash.Length != serverHash.Length) - { - decryptError = true; - } - else - { - for (int i = 0; i < clientHash.Length; i++) - { - if (clientHash[i] != serverHash[i]) - { - decryptError = true; - break; - } - } - } - - if (decryptError) + if (!Compare (clientHash, serverHash)) { throw new TlsException(AlertDescription.DecryptError, "Decrypt error."); } @@ -87,33 +69,15 @@ namespace Mono.Security.Protocol.Tls.Handshake.Server { byte[] clientPRF = this.ReadBytes((int)this.Length); HashAlgorithm hash = new MD5SHA1(); - bool decryptError = false; - hash.ComputeHash( - this.Context.HandshakeMessages.ToArray(), - 0, - (int)this.Context.HandshakeMessages.Length); + byte[] data = this.Context.HandshakeMessages.ToArray (); + byte[] digest = hash.ComputeHash (data, 0, data.Length); - byte[] serverPRF = this.Context.Cipher.PRF( - this.Context.MasterSecret, "client finished", hash.Hash, 12); + byte[] serverPRF = this.Context.Current.Cipher.PRF( + this.Context.MasterSecret, "client finished", digest, 12); // Check client prf against server prf - if (clientPRF.Length != serverPRF.Length) - { - decryptError = true; - } - else - { - for (int i = 0; i < serverPRF.Length; i++) - { - if (clientPRF[i] != serverPRF[i]) - { - decryptError = true; - } - } - } - - if (decryptError) + if (!Compare (clientPRF, serverPRF)) { throw new TlsException(AlertDescription.DecryptError, "Decrypt error."); }