public static byte[] CreateBlob(IList<X509Certificate2> certificates)
{
if (certificates == null || certificates.Count == 0)
{
throw new CryptographicException("Primary certificate has not been provided.");
}
// copy the primary certificate.
X509Certificate2 certificate = certificates[0];
byte[] blobData = certificate.RawData;
// check for any supporting certificates.
if (certificates.Count > 1)
{
List<byte[]> additionalData = new List<byte[]>(certificates.Count - 1);
int length = blobData.Length;
for (int ii = 1; ii < certificates.Count; ii++)
{
byte[] bytes = certificates[ii].RawData;
length += bytes.Length;
additionalData.Add(bytes);
}
// append the supporting certificates to the raw data.
byte[] rawData = new byte[length];
Array.Copy(blobData, rawData, blobData.Length);
length = blobData.Length;
for (int ii = 0; ii < additionalData.Count; ii++)
{
byte[] bytes = additionalData[ii];
Array.Copy(bytes, 0, rawData, length, bytes.Length);
length += bytes.Length;
}
blobData = rawData;
}
return blobData;
}