long encode(
GenericResponse& genericResponse,
- xmltooling::XMLObject* xmlObject,
+ XMLObject* xmlObject,
const char* destination,
const char* recipientID=NULL,
const char* relayState=NULL,
- const xmltooling::CredentialResolver* credResolver=NULL,
+ const Credential* credential=NULL,
const XMLCh* sigAlgorithm=NULL
) const;
private:
- std::string m_template;
+ string m_template;
};
MessageEncoder* SAML_DLLLOCAL SAML2ArtifactEncoderFactory(const DOMElement* const & e)
long SAML2ArtifactEncoder::encode(
GenericResponse& genericResponse,
- xmltooling::XMLObject* xmlObject,
+ XMLObject* xmlObject,
const char* destination,
const char* recipientID,
const char* relayState,
- const CredentialResolver* credResolver,
+ const Credential* credential,
const XMLCh* sigAlgorithm
) const
{
log.debug("obtaining new artifact for relying party (%s)", recipientID ? recipientID : "unknown");
auto_ptr<SAMLArtifact> artifact(m_artifactGenerator->generateSAML2Artifact(recipientID));
- if (credResolver) {
+ if (credential) {
// Signature based on native XML signing.
if (request ? request->getSignature() : response->getSignature()) {
log.debug("message already signed, skipping signature operation");
log.debug("signing the message");
// Build a Signature.
- Signature* sig = buildSignature(credResolver, sigAlgorithm);
-
- // Append Signature.
+ Signature* sig = SignatureBuilder::buildSignature();
request ? request->setSignature(sig) : response->setSignature(sig);
-
+ if (sigAlgorithm)
+ sig->setSignatureAlgorithm(sigAlgorithm);
+
// Sign response while marshalling.
vector<Signature*> sigs(1,sig);
- xmlObject->marshall((DOMDocument*)NULL,&sigs);
+ xmlObject->marshall((DOMDocument*)NULL,&sigs,credential);
}
}