Private/Get-ADFSTkSecureHashAlgorithm.ps1

function Get-ADFSTkSecureHashAlgorithm
{
param (

    [Parameter(Mandatory=$false,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
    [string]$EntityId,
    $CertificateSignatureAlgorithm
)


if ([string]::IsNullOrEmpty($Global:ManualSPSettings))
{
    $Global:ManualSPSettings = Get-ADFSTkManualSPSettings
}

#Default hash algorithm if nothing overrides it
$SignatureAlgorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"

#Check if signing cerificate Signature Algorithm is SHA256
if ($SignatureAlgorithm -eq '1.2.840.113549.1.1.11') 
{
    $SignatureAlgorithm = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
}

#AllSPs
if ($Global:ManualSPSettings.ContainsKey('urn:adfstk:allsps') -and `
    $Global:ManualSPSettings.'urn:adfstk:allsps' -is [System.Collections.Hashtable] -and `
    $Global:ManualSPSettings.'urn:adfstk:allsps'.ContainsKey('HashAlgorithm'))
{
    $SignatureAlgorithm = $Global:ManualSPSettings.'urn:adfstk:allsps'.HashAlgorithm
}

#AllEduSPs

if ($EntityId -ne $null)
{
    
    #First remove http:// or https://
    $entityDNS = $EntityId.ToLower().Replace('http://','').Replace('https://','')

    #Second get rid of all ending sub paths
    $entityDNS = $entityDNS -split '/' | select -First 1

    #Last fetch the last two words and join them with a .
    #$entityDNS = ($entityDNS -split '\.' | select -Last 2) -join '.'

    $settingsDNS = $null

    foreach($setting in $Global:ManualSPSettings.Keys)
    {
        if ($setting.StartsWith('urn:adfstk:entityiddnsendswith:'))
        {
            $settingsDNS = $setting -split ':' | select -Last 1
        }
    }

    if ($entityDNS.EndsWith($settingsDNS) -and `
        $Global:ManualSPSettings."urn:adfstk:entityiddnsendswith:$settingsDNS" -is [System.Collections.Hashtable] -and `
        $Global:ManualSPSettings."urn:adfstk:entityiddnsendswith:$settingsDNS".ContainsKey('HashAlgorithm'))
{
    $SignatureAlgorithm = $Global:ManualSPSettings."urn:adfstk:entityiddnsendswith:$settingsDNS".HashAlgorithm
}

#Manual SP
if ($EntityId -ne $null -and `
    $Global:ManualSPSettings.ContainsKey($EntityId) -and `
    $Global:ManualSPSettings.$EntityId -is [System.Collections.Hashtable] -and `
    $Global:ManualSPSettings.$EntityId.ContainsKey('HashAlgorithm'))
    {
        $SignatureAlgorithm = $Global:ManualSPSettings.$EntityId.HashAlgorithm
    }
}

$SignatureAlgorithm

}