grazie della parentesi di allegria
Qualcosa sono riuscito a combinare, e lascio a posteri una soluzione un po' grezza ma funzionale, con l'impressione che il framework 2.0 cambierà molte cose.

Ho usato il namespace CAPICOM
codice:
CAPICOM.SignedData signedData = new CAPICOM.SignedDataClass();
CAPICOM.EnvelopedDataClass envData = new EnvelopedDataClass();
CAPICOM.Utilities utility = new CAPICOM.UtilitiesClass();

//Content has to be UTF8 as our Java friend expects in this format 
CAPICOM.Signer signer = new CAPICOM.Signer();
signer.Certificate = myClientCertificate;
		
signedData.Content = utility.ByteArrayToBinaryString(
			System.Text.Encoding.UTF8.GetBytes(sr.ReadToEnd()));

Byte[] decoded = (Byte[])utility.BinaryStringToByteArray(
			signedData.Sign(signer, false,CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY));