コード例 #1
0
        public string FLM(DCinemaSecurityMessageType value)
        {
            string outputFilename = "WCF_FacilityListMessage." + value.AuthenticatedPublic.MessageId.Replace("urn:uuid:", "") + ".xml";

            XmlSerializer xmlSerializer   = new XmlSerializer(typeof(DCinemaSecurityMessageType));
            TextWriter    WriteFileStream = new StreamWriter(@"E:\Source_SMPTE\Output\" + outputFilename);

            xmlSerializer.Serialize(WriteFileStream, value);
            WriteFileStream.Close();

            return(string.Format("Received FLM: {0}", value.AuthenticatedPublic.MessageId));
        }
コード例 #2
0
        public DCinemaSecurityMessageType GetFLM(string parameters)
        {
            DCinemaSecurityMessageType dCinemaSecurityMessage = null;

            string[] paramList = parameters.Split(':');
            if (paramList[0].ToUpper().CompareTo("URN") != 0)
            {
                throw new NotSupportedException(String.Format("'{0}' is not a valid parameter.", parameters));
            }

            if (paramList[1].ToUpper().CompareTo("PUBLICID") != 0)
            {
                throw new NotSupportedException(String.Format("'{0}' is not a valid parameter.", parameters));
            }

            if (paramList[2].ToUpper().CompareTo("FACILITY") != 0)
            {
                throw new NotSupportedException(String.Format("'{0}' is not a valid parameter.", parameters));
            }

            string exhibitorURI = paramList[3];

            int  siteCode    = 0;
            bool isValidSite = int.TryParse(paramList[4], out siteCode);

            if (!isValidSite)
            {
                throw new InvalidCastException("Invalid site code provided.");
            }

            string certificateSerialNumber = "0EFB7EEBDCDA4F64A718DB3FF908B085";

            SiteDataContext siteData  = new SiteDataContext();
            var             siteQuery =
                from site in siteData.Sites
                where ((site.Site_Code == siteCode) && (site.Exhibitor.URI_Mapping.ToUpper().CompareTo(exhibitorURI.ToUpper()) == 0))
                select site;

            if (siteQuery.Count() < 1)
            {
                throw new NotSupportedException("Site not found.");
            }

            dCinemaSecurityMessage = FacilityListMessageUtilities.FLM_Create(siteQuery.First().Site_Id, certificateSerialNumber, StoreLocation.CurrentUser, siteData.Connection.ConnectionString);
            return(dCinemaSecurityMessage);
        }
コード例 #3
0
        static DCinemaSecurityMessageType AppendFLMRequiredExtension(DCinemaSecurityMessageType extraTheatreMessage, FLMRequiredExtensionsType flmRequiredExtention)
        {
            DCinemaSecurityMessageType facilityListMessage = extraTheatreMessage;

            StringWriter  stringWriter  = new StringWriter();
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(FLMRequiredExtensionsType));

            xmlSerializer.Serialize(stringWriter, flmRequiredExtention);
            string      serializedXML           = stringWriter.ToString();
            XmlDocument docFlmRequiredExtention = new XmlDocument();

            docFlmRequiredExtention.LoadXml(serializedXML);

            facilityListMessage.AuthenticatedPublic.RequiredExtensions = docFlmRequiredExtention.DocumentElement;

            extraTheatreMessage.AuthenticatedPublic.MessageType          = "http://www.smpte-ra.org/schemas/430-7/2008/FLM";
            extraTheatreMessage.AuthenticatedPublic.AnnotationText.Value = "Test Facility List Message";

            return(facilityListMessage);
        }
コード例 #4
0
        static void Main(string[] args)
        {
            //X509Certificate2 x509Certificate2 = GetCertificate("990B25F50DC7E2B548BE75AFED579448", StoreLocation.CurrentUser);
            //X509Certificate2 x509Certificate2 = GetCertificate("23B0B092F414B89745B443F2B3700039", StoreLocation.LocalMachine);
            //X509Certificate2 x509Certificate2 = GetCertificate("0efb7eebdcda4f64a718db3ff908b085", StoreLocation.LocalMachine);
            X509Certificate2 x509Certificate2 = GetCertificate("0EFB7EEBDCDA4F64A718DB3FF908B085", StoreLocation.CurrentUser); // *.dcipllc.com

            DCinemaSecurityMessageType extraTheatreMessage = BuildDCinemaSecurityMessage(x509Certificate2);
            TextWriter    WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\ExtraTheatreMessage.xml");
            XmlSerializer xmlSerializer   = new XmlSerializer(typeof(DCinemaSecurityMessageType));

            xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage);
            WriteFileStream.Close();

            FLMRequiredExtensionsType flmRequiredExtention = BuildFlmRequiredExtention(x509Certificate2);

            WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FacilityListMessageRequiredExtention.xml");
            xmlSerializer   = new XmlSerializer(typeof(FLMRequiredExtensionsType));
            xmlSerializer.Serialize(WriteFileStream, flmRequiredExtention);
            WriteFileStream.Close();

            AppendFLMRequiredExtension(extraTheatreMessage, flmRequiredExtention);
            WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FaciltyListMessage.xml");
            xmlSerializer   = new XmlSerializer(typeof(DCinemaSecurityMessageType));
            xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage);
            WriteFileStream.Close();

            SignETM(extraTheatreMessage, x509Certificate2);
            WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\FaciltyListMessage_Signed.xml");
            xmlSerializer   = new XmlSerializer(typeof(DCinemaSecurityMessageType));
            xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage);
            WriteFileStream.Close();

            ServiceFacilityListMessageClient client = new ServiceFacilityListMessageClient();

            System.Console.WriteLine("Sending FLM: " + extraTheatreMessage.AuthenticatedPublic.MessageId);
            string result = client.FLM(extraTheatreMessage);

            System.Console.WriteLine(result);
        }
コード例 #5
0
        static DCinemaSecurityMessageType BuildDCinemaSecurityMessage(X509Certificate2 x509Certificate2)
        {
            DCinemaSecurityMessageType dCinemaSecurityMessageType = new DCinemaSecurityMessageType();

            dCinemaSecurityMessageType.AuthenticatedPublic                         = new AuthenticatedPublicType();
            dCinemaSecurityMessageType.AuthenticatedPublic.Id                      = "AuthenticatedPublic.Id." + Guid.NewGuid().ToString();
            dCinemaSecurityMessageType.AuthenticatedPublic.MessageId               = "urn:uuid:" + Guid.NewGuid().ToString();
            dCinemaSecurityMessageType.AuthenticatedPublic.MessageType             = "http://www.smpte-ra.org/schemas/430-3/2006/ETM";
            dCinemaSecurityMessageType.AuthenticatedPublic.AnnotationText          = new UserText();
            dCinemaSecurityMessageType.AuthenticatedPublic.AnnotationText.Value    = "Empty Extra-Theatre Message";
            dCinemaSecurityMessageType.AuthenticatedPublic.AnnotationText.language = "en-us";
            dCinemaSecurityMessageType.AuthenticatedPublic.IssueDate               = DateTime.Now;

            X509IssuerSerial issuerSerial = new X509IssuerSerial();

            issuerSerial.IssuerName   = x509Certificate2.IssuerName.Name;
            issuerSerial.SerialNumber = x509Certificate2.SerialNumber;
            dCinemaSecurityMessageType.AuthenticatedPublic.Signer = issuerSerial;

            dCinemaSecurityMessageType.AuthenticatedPrivate    = new AuthenticatedPrivateType();
            dCinemaSecurityMessageType.AuthenticatedPrivate.Id = "AuthenticatedPrivate.Id." + Guid.NewGuid().ToString();

            return(dCinemaSecurityMessageType);
        }
コード例 #6
0
        static DCinemaSecurityMessageType SignETM(DCinemaSecurityMessageType extraTheatreMessage, X509Certificate2 x509Certificate2)
        {
            SignedXml signedXml = null;

            try
            {
                signedXml            = new SignedXml();
                signedXml.SigningKey = x509Certificate2.PrivateKey;
                //signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/ 2001/04/xmldsig-more#rsasha256";
                //signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmlenc#sha256";
                signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments";

                StringWriter  stringWriter  = new StringWriter();
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(DCinemaSecurityMessageType));
                xmlSerializer.Serialize(stringWriter, extraTheatreMessage);
                string serializedXML = stringWriter.ToString();

                #region Build the AuthenticatedPublic DataObject & Reference

                string      xmlAuthenticatedPublic = GetCleanElement(serializedXML, "AuthenticatedPublic");
                XmlDocument docAuthenticatedPublic = new XmlDocument();
                docAuthenticatedPublic.LoadXml(xmlAuthenticatedPublic.ToString());

                //XmlAttribute attrAuthenticatedPublic = docAuthenticatedPublic.CreateAttribute("xmlns");
                //attrAuthenticatedPublic.Value = "http://www.smpte-ra.org/schemas/430-3/2006/ETM";
                //docAuthenticatedPublic.DocumentElement.Attributes.Append(attrAuthenticatedPublic);

                DataObject dataObjectAuthenticatedPublic = new DataObject("AuthenticatedPublic", "", "", docAuthenticatedPublic.DocumentElement);
                //DataObject dataObjectAuthenticatedPublic = new DataObject();
                dataObjectAuthenticatedPublic.Data = docAuthenticatedPublic.ChildNodes;
                dataObjectAuthenticatedPublic.Id   = "AuthenticatedPublic";

                signedXml.AddObject(dataObjectAuthenticatedPublic);

                Reference referenceAuthenticatedPublic = new Reference();
                referenceAuthenticatedPublic.Uri          = "#AuthenticatedPublic";
                referenceAuthenticatedPublic.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";

                signedXml.AddReference(referenceAuthenticatedPublic);

                #endregion

                #region Build the AuthenticatedPublic DataObject & Reference

                string      xmlAuthenticatedPrivate = GetCleanElement(serializedXML, "AuthenticatedPrivate");
                XmlDocument docAuthenticatedPrivate = new XmlDocument();
                docAuthenticatedPrivate.LoadXml(xmlAuthenticatedPrivate.ToString());

                //XmlAttribute attrAuthenticatedPrivate = docAuthenticatedPrivate.CreateAttribute("xmlns");
                //attrAuthenticatedPrivate.Value = "http://www.smpte-ra.org/schemas/430-3/2006/FLM";
                //docAuthenticatedPrivate.DocumentElement.Attributes.Append(attrAuthenticatedPrivate);

                DataObject dataObjectAuthenticatedPrivate = new DataObject("AuthenticatedPrivate", "", "", docAuthenticatedPrivate.DocumentElement);
                //DataObject dataObjectAuthenticatedPrivate = new DataObject("AuthenticatedPrivate", "", "", docAuthenticatedPrivate.DocumentElement);
                //dataObjectAuthenticatedPrivate.Data = docAuthenticatedPrivate.ChildNodes;
                //dataObjectAuthenticatedPrivate.Id = "AuthenticatedPrivate";

                signedXml.AddObject(dataObjectAuthenticatedPrivate);

                Reference referenceAuthenticatedPrivate = new Reference();
                referenceAuthenticatedPrivate.Uri          = "#AuthenticatedPrivate";
                referenceAuthenticatedPrivate.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";

                // Add the reference to the message.
                signedXml.AddReference(referenceAuthenticatedPrivate);

                #endregion

                // Add a KeyInfo.
                KeyInfo keyInfo = new KeyInfo();
                keyInfo.AddClause(new KeyInfoX509Data(x509Certificate2, X509IncludeOption.WholeChain));
                signedXml.KeyInfo = keyInfo;

                // Compute the signature.
                signedXml.ComputeSignature();

                XmlElement    singedElement    = signedXml.GetXml();
                XmlSerializer signedSerializer = new XmlSerializer(singedElement.GetType());
                StreamWriter  signedWriter     = new StreamWriter(@"\SOURCE_SMPTE\Output\signedSerializer.Test.xml");
                signedSerializer.Serialize(signedWriter, singedElement);
                signedWriter.Close();
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
            }

            extraTheatreMessage.Signature = signedXml.Signature.GetXml();

            return(extraTheatreMessage);
        }
コード例 #7
0
        static void Main(string[] args)
        {
            X509Certificate2 x509Certificate2 = GetCertificate("990B25F50DC7E2B548BE75AFED579448");
            //X509Certificate2 x509Certificate2 = GetCertificate("0efb7eebdcda4f64a718db3ff908b085");
            //X509Certificate2 x509Certificate2 = GetCertificate("2E0A6058EA90DB8C46D1FD3513A877F8");

            DCinemaSecurityMessageType extraTheatreMessage = new DCinemaSecurityMessageType();
            XmlSerializer xmlSerializer = new XmlSerializer(extraTheatreMessage.GetType());

            extraTheatreMessage.AuthenticatedPublic                         = new AuthenticatedPublicType();
            extraTheatreMessage.AuthenticatedPublic.Id                      = "AuthenticatedPublic.Id." + Guid.NewGuid().ToString();
            extraTheatreMessage.AuthenticatedPublic.MessageId               = "urn:uuid:" + Guid.NewGuid().ToString();
            extraTheatreMessage.AuthenticatedPublic.MessageType             = "http://www.smpte-ra.org/schemas/430-3/2006/ETM";
            extraTheatreMessage.AuthenticatedPublic.AnnotationText          = new UserText();
            extraTheatreMessage.AuthenticatedPublic.AnnotationText.Value    = "Empty Extra-Theatre Message";
            extraTheatreMessage.AuthenticatedPublic.AnnotationText.language = "en-us";
            extraTheatreMessage.AuthenticatedPublic.IssueDate               = DateTime.Now;

            X509IssuerSerial issuerSerial = new X509IssuerSerial();

            issuerSerial.IssuerName   = x509Certificate2.IssuerName.Name;
            issuerSerial.SerialNumber = x509Certificate2.SerialNumber;
            extraTheatreMessage.AuthenticatedPublic.Signer = issuerSerial;

            extraTheatreMessage.AuthenticatedPrivate    = new AuthenticatedPrivateType();
            extraTheatreMessage.AuthenticatedPrivate.Id = "AuthenticatedPrivate.Id." + Guid.NewGuid().ToString();

            #region Build the signature elements

            SignedXml signedXml = null;
            try
            {
                signedXml            = new SignedXml();
                signedXml.SigningKey = x509Certificate2.PrivateKey;
                //signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/ 2001/04/xmldsig-more#rsasha256";
                //signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmlenc#sha256";
                signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments";

                StringWriter stringWriter = new StringWriter();
                xmlSerializer.Serialize(stringWriter, extraTheatreMessage);
                string serializedXML = stringWriter.ToString();

                #region Build the AuthenticatedPublic DataObject & Reference

                string      xmlAuthenticatedPublic = GetCleanElement(serializedXML, "AuthenticatedPublic");
                XmlDocument docAuthenticatedPublic = new XmlDocument();
                docAuthenticatedPublic.LoadXml(xmlAuthenticatedPublic.ToString());

                //XmlAttribute attrAuthenticatedPublic = docAuthenticatedPublic.CreateAttribute("xmlns");
                //attrAuthenticatedPublic.Value = "http://www.smpte-ra.org/schemas/430-3/2006/ETM";
                //docAuthenticatedPublic.DocumentElement.Attributes.Append(attrAuthenticatedPublic);

                DataObject dataObjectAuthenticatedPublic = new DataObject("AuthenticatedPublic", "", "", docAuthenticatedPublic.DocumentElement);
                //DataObject dataObjectAuthenticatedPublic = new DataObject();
                dataObjectAuthenticatedPublic.Data = docAuthenticatedPublic.ChildNodes;
                dataObjectAuthenticatedPublic.Id   = "AuthenticatedPublic";

                signedXml.AddObject(dataObjectAuthenticatedPublic);

                Reference referenceAuthenticatedPublic = new Reference();
                referenceAuthenticatedPublic.Uri          = "#AuthenticatedPublic";
                referenceAuthenticatedPublic.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";

                signedXml.AddReference(referenceAuthenticatedPublic);

                #endregion

                #region Build the AuthenticatedPublic DataObject & Reference

                string      xmlAuthenticatedPrivate = GetCleanElement(serializedXML, "AuthenticatedPrivate");
                XmlDocument docAuthenticatedPrivate = new XmlDocument();
                docAuthenticatedPrivate.LoadXml(xmlAuthenticatedPrivate.ToString());

                //XmlAttribute attrAuthenticatedPrivate = docAuthenticatedPrivate.CreateAttribute("xmlns");
                //attrAuthenticatedPrivate.Value = "http://www.smpte-ra.org/schemas/430-3/2006/FLM";
                //docAuthenticatedPrivate.DocumentElement.Attributes.Append(attrAuthenticatedPrivate);

                DataObject dataObjectAuthenticatedPrivate = new DataObject("AuthenticatedPrivate", "", "", docAuthenticatedPrivate.DocumentElement);
                //DataObject dataObjectAuthenticatedPrivate = new DataObject("AuthenticatedPrivate", "", "", docAuthenticatedPrivate.DocumentElement);
                //dataObjectAuthenticatedPrivate.Data = docAuthenticatedPrivate.ChildNodes;
                //dataObjectAuthenticatedPrivate.Id = "AuthenticatedPrivate";

                signedXml.AddObject(dataObjectAuthenticatedPrivate);

                Reference referenceAuthenticatedPrivate = new Reference();
                referenceAuthenticatedPrivate.Uri          = "#AuthenticatedPrivate";
                referenceAuthenticatedPrivate.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";

                // Add the reference to the message.
                signedXml.AddReference(referenceAuthenticatedPrivate);

                #endregion

                // Add a KeyInfo.
                KeyInfo keyInfo = new KeyInfo();
                keyInfo.AddClause(new KeyInfoX509Data(x509Certificate2, X509IncludeOption.WholeChain));
                signedXml.KeyInfo = keyInfo;

                // Compute the signature.
                signedXml.ComputeSignature();

                XmlElement    singedElement    = signedXml.GetXml();
                XmlSerializer signedSerializer = new XmlSerializer(singedElement.GetType());
                StreamWriter  signedWriter     = new StreamWriter("D:\\signedSerializer.Test.xml");
                signedSerializer.Serialize(signedWriter, singedElement);
                signedWriter.Close();
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
            }

            #endregion

            #region Fill in the signature element

            extraTheatreMessage.Signature = signedXml.Signature.GetXml();

            #endregion

            xmlSerializer.Serialize(Console.Out, extraTheatreMessage);
            Console.WriteLine("\r\n");

            TextWriter WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\ExtraTheatreMessage.xml");
            xmlSerializer.Serialize(WriteFileStream, extraTheatreMessage);
            WriteFileStream.Close();

            ServiceExtraTheatreMessageClient client = new ServiceExtraTheatreMessageClient();
            string response = client.ETM(extraTheatreMessage);

            DCinemaSecurityMessageType existingETM = new DCinemaSecurityMessageType();

            TextReader readFileStream = new StreamReader(@"\Source_SMPTE\Input\DCinemaSecurityMessageType_AMC.xml");
            existingETM = (DCinemaSecurityMessageType)xmlSerializer.Deserialize(readFileStream);
            readFileStream.Close();

            existingETM.AuthenticatedPrivate = new AuthenticatedPrivateType();

            existingETM.Signature = signedXml.Signature.GetXml();

            WriteFileStream = new StreamWriter(@"\Source_SMPTE\Output\Read_ExtraTheatreMessage.xml");
            xmlSerializer.Serialize(WriteFileStream, existingETM);
            WriteFileStream.Close();

            response = client.ETM(existingETM);
        }