public bool GenerateAndCompareServerVerify(ReadableBuffer buffer) { buffer = buffer.Slice(Unsafe.SizeOf <HandshakeHeader>()); var hashResult = new byte[_state.HandshakeHash.HashSize]; _state.HandshakeHash.FinishHash(hashResult); _cryptoProvider.HashProvider.Tls12Prf(_state.CipherSuite.HashType, _masterSecret.Span, Tls12.Label_ServerFinished, hashResult, _serverVerify.Span); return(CompareFunctions.ConstantTimeEquals(_serverVerify.Span, buffer.ToSpan())); }
public ILBuilder(ILGenerator il) { this.il = il; this.arguments = new ArgumentFunctions(this); this.compare = new CompareFunctions(this); this.convert = new ConvertFunctions(this); this.math = new MathFunctions(this); }
public void CompareClientFinishedGenerateServerFinished(ReadableBuffer buffer) { _state.HandshakeHash.HashData(buffer); buffer = buffer.Slice(4); var result = CompareFunctions.ConstantTimeEquals(_clientSpan, buffer); var hashResult = stackalloc byte[_state.HandshakeHash.HashSize + Tls1_2Consts.ServerFinishedLabelSize]; var seed = new Span <byte>(hashResult, _state.HandshakeHash.HashSize + Tls1_2Consts.ServerFinishedLabelSize); _state.HandshakeHash.InterimHash(hashResult + Tls1_2Consts.ServerFinishedLabelSize, _state.HandshakeHash.HashSize); var finishedLabel = Tls1_2Consts.GetServerFinishedSpan(); finishedLabel.CopyTo(seed); PrfFunctions.P_Hash12(_state.CryptoProvider.HashProvider, _state.CipherSuite.HashType, _serverSpan, _masterSecret, Tls1_2Consts.MASTER_SECRET_LENGTH, seed); }