protected int GetAsymmetricHeaderSize(
string securityPolicyUri,
X509Certificate2 senderCertificate)
{
int headerSize = 0;
headerSize += TcpMessageLimits.BaseHeaderSize;
headerSize += TcpMessageLimits.StringLengthSize;
if (securityPolicyUri != null)
{
headerSize += new UTF8Encoding().GetByteCount(securityPolicyUri);
}
headerSize += TcpMessageLimits.StringLengthSize;
headerSize += TcpMessageLimits.StringLengthSize;
if (SecurityMode != MessageSecurityMode.None)
{
headerSize += senderCertificate.RawData.Length;
headerSize += TcpMessageLimits.CertificateThumbprintSize;
}
if (headerSize >= SendBufferSize - TcpMessageLimits.SequenceHeaderSize - GetAsymmetricSignatureSize(senderCertificate) - 1)
{
throw ServiceResultException.Create(
StatusCodes.BadInternalError,
"AsymmetricSecurityHeader is {0} bytes which is too large for the send buffer size of {1} bytes.",
headerSize,
SendBufferSize);
}
return headerSize;
}