if (log.isTraceEnabled()) {
log.tracef("Document to be signed={0}", new Object[]{SamlUtils.getDocumentAsString(doc)});
}
PrivateKey signingKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
DOMSignContext dsc = new DOMSignContext(signingKey, doc.getDocumentElement());
dsc.setDefaultNamespacePrefix("dsig");
try {
DigestMethod digestMethodObj = fac.newDigestMethod(DigestMethod.SHA1, null);
Transform transform = fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);
List<Transform> transformList = Collections.singletonList(transform);
String referenceURI = "#" + doc.getDocumentElement().getAttribute("ID");
Reference ref = fac.newReference(referenceURI, digestMethodObj, transformList, null, null);
String canonicalizationMethodType = CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS;
CanonicalizationMethod canonicalizationMethod = fac.newCanonicalizationMethod(canonicalizationMethodType, (C14NMethodParameterSpec) null);
List<Reference> referenceList = Collections.singletonList(ref);
String signatureMethodString = publicKey.getAlgorithm().equalsIgnoreCase("RSA") ? SignatureMethod.RSA_SHA1 : SignatureMethod.DSA_SHA1;
SignatureMethod signatureMethod = fac.newSignatureMethod(signatureMethodString, null);
SignedInfo si = fac.newSignedInfo(canonicalizationMethod, signatureMethod, referenceList);
KeyInfoFactory kif = fac.getKeyInfoFactory();
KeyValue kv = kif.newKeyValue(publicKey);