public override void Decrypt(X509Certificate2 certificate, byte[] senderNonce, string securityPolicyUri)
{
// handle no encryption.
if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None)
{
m_decryptedTokenData = m_tokenData;
return;
}
EncryptedData encryptedData = new EncryptedData();
encryptedData.Data = m_tokenData;
encryptedData.Algorithm = m_encryptionAlgorithm;
byte[] decryptedTokenData = SecurityPolicies.Decrypt(
certificate,
securityPolicyUri,
encryptedData);
// verify the sender's nonce.
int startOfNonce = decryptedTokenData.Length;
if (senderNonce != null)
{
startOfNonce -= senderNonce.Length;
for (int ii = 0; ii < senderNonce.Length; ii++)
{
if (senderNonce[ii] != decryptedTokenData[ii+startOfNonce])
{
throw new ServiceResultException(StatusCodes.BadIdentityTokenRejected);
}
}
}
// copy results.
m_decryptedTokenData = new byte[startOfNonce];
Array.Copy(decryptedTokenData, m_decryptedTokenData, startOfNonce);
}