Bueno, al final he optado por generar la firma de manera manual, siguiendo una serie de pasos, y he conseguido generar los XML firmados. Cuando consiga hacerlo de otra manera, ampliaré el hilo. Yo uso os componentes de Devart Securebridge, pero este caso concreto no lo he conseguido hacer, por eso opto por generación "artesana".
Os cuento los pasos que he seguido, por si a alguien le sirve, o si incluso se le ocurre alguna mejora. A mi, de esta manera, me funciona.
- Generamos valor para el elemento <ds

igestValue>, hash SHA-256 del XML completo (lógicamente sin la firma)
- Con eso ya tenemos el nodo <ds:SignedInfo>
- Ese nodo <ds:SignedInfo>, lo firmamos. En mi caso, lo hago con openssl, utilizando el certificado (de momento el de pruebas proporcionado por la AEAT)
- El resultado lo paso a Base64 (1).
- Pasamos a Base64, el certificado, para tener el elemento <ds:X509Certificate> del nodo <ds:SignatureValue> (2).
- Para terminar, con la firma en base64 (1) y el certificado, montamos el nodo <ds:SignatureValue>
- Ya teniendo los nodos <ds:SignedInfo> y <ds:SignatureValue>, se monta el nodo <ds:Signature> que se incrusta en el XML inicial y ya está listo para el envio.
Un poco artesanal, pero a mi al menos me funciona perfectamente.
El nodo <ds:RSAKeyValue> que aparece en la documentación, no lo envío ya que parece que es opcional y no se suele usar.