Поделиться через


XmlLicenseTransform Класс

Определение

Представляет алгоритм преобразования лицензий, который используется для нормализации лицензий XrML для сигнатур.

public ref class XmlLicenseTransform : System::Security::Cryptography::Xml::Transform
public class XmlLicenseTransform : System.Security.Cryptography.Xml.Transform
type XmlLicenseTransform = class
    inherit Transform
Public Class XmlLicenseTransform
Inherits Transform
Наследование
XmlLicenseTransform

Примеры

В следующем примере кода показано, как проверить цифровую подпись XML с помощью IRelDecryptor интерфейса и XmlLicenseTransform класса .

void CheckSignatureWithEncryptedGrant(
    String^ fileName, IRelDecryptor^ decryptor)
{
    // Create a new XML document.
    XmlDocument^ sourceDocument = gcnew XmlDocument();
    XmlNamespaceManager^ namespaceManager =
        gcnew XmlNamespaceManager(sourceDocument->NameTable);

    // Format using white spaces.
    sourceDocument->PreserveWhitespace = true;

    // Load the passed XML file into the document.
    sourceDocument->Load(fileName);
    namespaceManager->AddNamespace("dsig",
        SignedXml::XmlDsigNamespaceUrl);

    // Find the "Signature" node and create a new
    // XmlNodeList object.
    XmlNodeList^ nodeList = 
        sourceDocument->SelectNodes("//dsig:Signature", namespaceManager);

    for (int i = 0, count = nodeList->Count; i < count; i++)
    {
        XmlDocument^ clone = (XmlDocument^) sourceDocument->Clone();
        XmlNodeList^ signatures =
            clone->SelectNodes("//dsig:Signature", namespaceManager);

        // Create a new SignedXml object and pass into it the
        // XML document clone.
        SignedXml^ signedDocument = gcnew SignedXml(clone);

        // Load the signature node.
        signedDocument->LoadXml((XmlElement^)signatures[i]);

        // Set the context for license transform
        Transform^ licenseTransform = ((Reference^)signedDocument->
            SignedInfo->References[0])->TransformChain[0];

        if ((licenseTransform::typeid == XmlLicenseTransform::typeid) 
            && (decryptor != nullptr))
        {
            // Decryptor is used to decrypt encryptedGrant
            // elements.
            ((XmlLicenseTransform^) licenseTransform)->Decryptor = decryptor;
        }

        // Check the signature and display the result.
        if (signedDocument->CheckSignature())
        {
            Console::WriteLine("SUCCESS: " +
                "CheckSignatureWithEncryptedGrant - issuer index #" + i);
        }
        else
        {
            Console::WriteLine("FAILURE: " +
                "CheckSignatureWithEncryptedGrant - issuer index #" + i);
        }
    }
}
public static void CheckSignatureWithEncryptedGrant(string fileName, IRelDecryptor decryptor)
{
    // Create a new XML document.
    XmlDocument xmlDocument = new XmlDocument();
    XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDocument.NameTable);

    // Format using white spaces.
    xmlDocument.PreserveWhitespace = true;

    // Load the passed XML file into the document.
    xmlDocument.Load(fileName);
    nsManager.AddNamespace("dsig", SignedXml.XmlDsigNamespaceUrl);

    // Find the "Signature" node and create a new XmlNodeList object.
    XmlNodeList nodeList = xmlDocument.SelectNodes("//dsig:Signature", nsManager);

    for (int i = 0, count = nodeList.Count; i < count; i++)
    {
        XmlDocument clone = xmlDocument.Clone() as XmlDocument;
        XmlNodeList signatures = clone.SelectNodes("//dsig:Signature", nsManager);

        // Create a new SignedXml object and pass into it the XML document clone.
        SignedXml signedXml = new SignedXml(clone);

        // Load the signature node.
        signedXml.LoadXml((XmlElement)signatures[i]);

        // Set the context for license transform
        Transform trans = ((Reference)signedXml.SignedInfo.References[0]).TransformChain[0];

        if (trans is XmlLicenseTransform)
        {

            // Decryptor is used to decrypt encryptedGrant elements.
            if (decryptor != null)
                (trans as XmlLicenseTransform).Decryptor = decryptor;
        }

        // Check the signature and display the result.
        bool result = signedXml.CheckSignature();

        if (result)
            Console.WriteLine("SUCCESS: CheckSignatureWithEncryptedGrant - issuer index #" +
                                            i.ToString());
        else
            Console.WriteLine("FAILURE: CheckSignatureWithEncryptedGrant - issuer index #" +
                                            i.ToString());
    }
}
    Public Shared Sub CheckSignatureWithEncryptedGrant(ByVal fileName As String, ByVal decryptor As IRelDecryptor)
        ' Create a new XML document.
        Dim xmlDocument As New XmlDocument()
        Dim nsManager As New XmlNamespaceManager(xmlDocument.NameTable)

        ' Format using white spaces.
        xmlDocument.PreserveWhitespace = True

        ' Load the passed XML file into the document. 
        xmlDocument.Load(fileName)
        nsManager.AddNamespace("dsig", SignedXml.XmlDsigNamespaceUrl)

        ' Find the "Signature" node and create a new XmlNodeList object.
        Dim nodeList As XmlNodeList = xmlDocument.SelectNodes("//dsig:Signature", nsManager)

        Dim count = nodeList.Count

        For i As Integer = 0 To count - 1
            Dim clone As XmlDocument = xmlDocument.Clone()
           
            Dim signatures As XmlNodeList = clone.SelectNodes("//dsig:Signature", nsManager)

            ' Create a new SignedXml object and pass into it the XML document clone.
            Dim signedXml As New SignedXml(clone)

            ' Load the signature node.
            signedXml.LoadXml(CType(signatures(i), XmlElement))

            ' Set the context for license transform
            Dim trans As Transform = CType(signedXml.SignedInfo.References(0), Reference).TransformChain(0)

            If TypeOf trans Is XmlLicenseTransform Then

                ' Decryptor is used to decrypt encryptedGrant elements.
                If Not (decryptor Is Nothing) Then
                    CType(trans, XmlLicenseTransform).Decryptor = decryptor
                End If

            End If

            ' Check the signature and display the result.
            Dim result As Boolean = signedXml.CheckSignature()

            If result Then
                Console.WriteLine("SUCCESS: CheckSignatureWithEncryptedGrant - issuer index #" + i.ToString())
            Else
                Console.WriteLine("FAILURE: CheckSignatureWithEncryptedGrant - issuer index #" + i.ToString())
            End If
        Next i

    End Sub
End Class

Комментарии

Класс XmlLicenseTransform представляет алгоритм преобразования лицензий, как определено в MPEG Rights Extension Language (MPEG REL).

Используйте класс для XmlLicenseTransform преобразования лицензий XrML для подписей.

Универсальный код ресурса (URI), описывающий XmlLicenseTransform класс, определяется полем XmlLicenseTransformUrl .

Конструкторы

XmlLicenseTransform()

Инициализирует новый экземпляр класса XmlLicenseTransform.

Свойства

Algorithm

Получает или задает универсальный код ресурса (URI), который определяет алгоритм, выполняемый текущим преобразованием.

(Унаследовано от Transform)
Context

Получает или задает объект XmlElement, представляющий контекст документа, в котором выполняется текущий объект Transform.

(Унаследовано от Transform)
Decryptor

Получает или задает дешифратор текущего объекта XmlLicenseTransform.

InputTypes

Возвращает массив типов, которые являются допустимыми входными значениями для метода OutputTypes текущего объекта XmlLicenseTransform.

OutputTypes

Получает массив типов, которые являются допустимыми выходными значениями для метода OutputTypes текущего объекта XmlLicenseTransform.

PropagatedNamespaces

Получает или задает объект Hashtable, содержащий пространства имен, которые передаются в подпись.

(Унаследовано от Transform)
Resolver

Задает текущий объект XmlResolver.

(Унаследовано от Transform)

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetDigestedOutput(HashAlgorithm)

При переопределении в производном классе возвращает дайджест, связанный с объектом Transform.

(Унаследовано от Transform)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetInnerXml()

Возвращает XML-представление параметров объекта XmlLicenseTransform, которые подходят для включения в качестве подэлементов элемента <Transform> подписи XMLDSIG.

GetOutput()

Возвращает выходные данные объекта XmlLicenseTransform.

GetOutput(Type)

Возвращает выходные данные объекта XmlLicenseTransform.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetXml()

Возвращает XML-представление текущего объекта Transform.

(Унаследовано от Transform)
LoadInnerXml(XmlNodeList)

Выполняет анализ указанного объекта XmlNodeList ка связанного с преобразованием содержимого элемента <Transform>; данный метод не поддерживается, поскольку объект XmlLicenseTransform не содержит внутренних XML-элементов.

LoadInput(Object)

Загружает указанные входные данные в текущий объект XmlLicenseTransform.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к