private DeferredHash(Int16 prfHashAlgorithm, IDigest prfHash) { this.buf = null; this.hashes = new Dictionary <Int32, IDigest>(); this.prfHashAlgorithm = prfHashAlgorithm; hashes[prfHashAlgorithm] = prfHash; }
public byte[] GenerateServerKeyExchange() { if (this.mDHParameters == null) { throw new TlsFatalAlert(AlertDescription.internal_error); } DigestInputBuffer buf = new DigestInputBuffer(); this.mDHAgreePrivateKey = TlsDHUtilities.GenerateEphemeralServerKeyExchange(mContext.SecureRandom, this.mDHParameters, buf); /* * RFC 5246 4.7. digitally-signed element needs SignatureAndHashAlgorithm from TLS 1.2 */ SignatureAndHashAlgorithm signatureAndHashAlgorithm = TlsUtilities.GetSignatureAndHashAlgorithm( mContext, mServerCredentials); IDigest d = TlsUtilities.CreateHash(signatureAndHashAlgorithm); SecurityParameters securityParameters = mContext.SecurityParameters; d.BlockUpdate(securityParameters.ClientRandom, 0, securityParameters.ClientRandom.Length); d.BlockUpdate(securityParameters.ServerRandom, 0, securityParameters.ServerRandom.Length); buf.UpdateDigest(d); byte[] hash = DigestUtilities.DoFinal(d); byte[] signature = mServerCredentials.GenerateCertificateSignature(hash); DigitallySigned signed_params = new DigitallySigned(signatureAndHashAlgorithm, signature); signed_params.Encode(buf); return(buf.ToArray()); }
public override byte[] GenerateServerKeyExchange() { DigestInputBuffer buf = new DigestInputBuffer(); this.mECAgreePrivateKey = GenerateEphemeralServerKeyExchange(mContext.SecureRandom, mNamedCurves, mClientECPointFormats, buf); /* * RFC 5246 4.7. digitally-signed element needs SignatureAndHashAlgorithm from TLS 1.2 */ SignatureAndHashAlgorithm signatureAndHashAlgorithm = TlsUtilities.GetSignatureAndHashAlgorithm( mContext, mServerCredentials); IDigest d = TlsUtilities.CreateHash(signatureAndHashAlgorithm); SecurityParameters securityParameters = mContext.SecurityParameters; d.BlockUpdate(securityParameters.ClientRandom, 0, securityParameters.ClientRandom.Length); d.BlockUpdate(securityParameters.ServerRandom, 0, securityParameters.ServerRandom.Length); buf.UpdateDigest(d); byte[] hash = DigestUtilities.DoFinal(d); byte[] signature = mServerCredentials.GenerateCertificateSignature(hash); DigitallySigned signed_params = new DigitallySigned(signatureAndHashAlgorithm, signature); signed_params.Encode(buf); return(buf.ToArray()); }
protected void CheckStopBuffering() { if (buf != null && hashes.Count <= BUFFERING_HASH_LIMIT) { foreach (Int16 curr in hashes.Keys) { IDigest hash = (IDigest)hashes[curr]; buf.UpdateDigest(hash); } this.buf = null; } }
public DeferredHash() { this.buf = new DigestInputBuffer(); this.hashes = new Dictionary <Int32, IDigest>(); this.prfHashAlgorithm = null; }