class DefaultSignatureSigningParametersProvider implements SignatureSigningParametersProvider {

    private final SAML2Configuration configuration;

    /**
     * <p>Constructor for DefaultSignatureSigningParametersProvider.</p>
     *
     * @param configuration a {@link SAML2Configuration} object
     */
    public DefaultSignatureSigningParametersProvider(final SAML2Configuration configuration) {
        this.configuration = configuration;
    }

    /** {@inheritDoc} */
    @Override
    public SignatureSigningParameters build(final SSODescriptor descriptor) {<FILL_FUNCTION_BODY>}

    /**
     * <p>getSignatureSigningConfiguration.</p>
     *
     * @return a {@link SignatureSigningConfiguration} object
     */
    protected SignatureSigningConfiguration getSignatureSigningConfiguration() {
        val config =
                DefaultSecurityConfigurationBootstrap.buildDefaultSignatureSigningConfiguration();

        if (this.configuration.getBlackListedSignatureSigningAlgorithms() != null) {
            config.setExcludedAlgorithms(this.configuration.getBlackListedSignatureSigningAlgorithms());
        }
        if (this.configuration.getSignatureAlgorithms() != null){
            config.setSignatureAlgorithms(this.configuration.getSignatureAlgorithms());
        }
        if (this.configuration.getSignatureCanonicalizationAlgorithm() != null) {
            config.setSignatureCanonicalizationAlgorithm(this.configuration.getSignatureCanonicalizationAlgorithm());
        }
        if (this.configuration.getSignatureReferenceDigestMethods() != null) {
            config.setSignatureReferenceDigestMethods(this.configuration.getSignatureReferenceDigestMethods());
        }

        final List<Credential> creds = new ArrayList<>();
        creds.add(configuration.getCredentialProvider().getCredential());
        config.setSigningCredentials(creds);
        return config;
    }

    /**
     * <p>augmentSignatureSigningParameters.</p>
     *
     * @param params a {@link SignatureSigningParameters} object
     * @return a {@link SignatureSigningParameters} object
     */
    protected SignatureSigningParameters augmentSignatureSigningParameters(final SignatureSigningParameters params) {
        return params;
    }
}

        try {
            val criteria = new CriteriaSet();
            criteria.add(new SignatureSigningConfigurationCriterion(
                    getSignatureSigningConfiguration()));
            criteria.add(new RoleDescriptorCriterion(descriptor));
            Resolver<SignatureSigningParameters, CriteriaSet> resolver =
                    new SAMLMetadataSignatureSigningParametersResolver();

            val params = resolver.resolveSingle(criteria);
            augmentSignatureSigningParameters(params);

            if (params == null) {
                throw new SAMLException("Could not determine the signature parameters");
            }

            LOGGER.info("Created signature signing parameters." +
                    "\nSignature algorithm: {}" +
                    "\nSignature canonicalization algorithm: {}" +
                    "\nSignature reference digest methods: {}",
                    params.getSignatureAlgorithm(), params.getSignatureCanonicalizationAlgorithm(),
                    params.getSignatureReferenceDigestMethod());

            return params;
        } catch (final Exception e) {
            throw new SAMLException(e);
        }
    
<no_super_class>