// Returns the signed digest
byte[] IBlockResult.Collect()
{
// The collected array contains the document digest and parameters
// to be signed but it needs to be further digested by the indended
// hashing algorithm
byte[] toDigest = m_stream.ToArray();
IDigest digester = DigestUtilities.GetDigest(m_digestAlgorithm.GetName());
digester.BlockUpdate(toDigest, 0, toDigest.Length);
byte[] digestValue = DigestUtilities.DoFinal(digester);
// Wrap digest value in DER encoding (should be RFC3770 compliant)
DigestInfo digestInfo = new DigestInfo(m_digestAlgorithm.GetAlgorithmIdentifier(), digestValue);
byte[] wrapped = digestInfo.GetDerEncoded();
return(signer(wrapped));
}