private int GetMaxSenderCertificateSize(X509Certificate2 senderCertificate, string securityPolicyUri)
{
int occupiedSize = TcpMessageLimits.BaseHeaderSize //base header size
+ TcpMessageLimits.StringLengthSize; //security policy uri length
if (securityPolicyUri != null)
{
occupiedSize += new UTF8Encoding().GetByteCount(securityPolicyUri); //security policy uri size
}
occupiedSize += TcpMessageLimits.StringLengthSize; //SenderCertificateLength
occupiedSize += TcpMessageLimits.StringLengthSize; //ReceiverCertificateThumbprintLength
occupiedSize += TcpMessageLimits.CertificateThumbprintSize; //ReceiverCertificateThumbprint
occupiedSize += TcpMessageLimits.SequenceHeaderSize; //SequenceHeader size
occupiedSize += TcpMessageLimits.MinBodySize; //Minimum body size
occupiedSize += GetAsymmetricSignatureSize(senderCertificate);
return SendBufferSize - occupiedSize;
}