public void VerifyExtendedSignatureUsingPublicationsCodeAutoExtend() { // Read signature, assume to be not extended IKsiSignature signature = LoadUnextendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM"); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), UserPublication = publicationData, IsExtendingAllowed = true, KsiService = GetKsiService(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature verification failed with error > " + verificationResult.VerificationError); } }
public void PublicationDataFromPublicationStringTest() { PublicationData pub = new PublicationData("AAAAAA-CVZ2AQ-AANGVK-SV7GJL-36LN65-AVJYZR-6XRZSL-HIMRH3-6GU7WR-YNRY7C-X2XECY-WFQXRB"); Assert.AreEqual(new DataHash(Base16.Decode("01A6AAA55F992BDF96DF74154E331F5E3992CE8644FBF1A9FB470D8E3E2BEAE416")), pub.PublicationHash, "Unexpected publication hash."); Assert.AreEqual(1439596800, pub.PublicationTime, "Unexpected publication time."); }
public void VerifyExtendedSignatureUsingPublicationsCode() { // Read the existing signature, assume it is extended IKsiSignature signature = LoadExtendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); // The trust anchor in this example is the publication code in Financial Times or on Twitter PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM"); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), UserPublication = publicationData }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature verification failed with error > " + verificationResult.VerificationError); } }
/// <summary> /// Initializes a new instance of the <see cref="Publication"/> class. /// </summary> /// <param name="client"><see cref="T:TcmCoreService.Client" /></param> /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param> protected Publication(Client client, PublicationData publicationData) : base(client, publicationData) { if (publicationData == null) throw new ArgumentNullException("publicationData"); mPublicationData = publicationData; }
public void PublicationDataContentTest() { PublicationData publicationData = new PublicationData(1455494400, new DataHash(Base16.Decode("018D982C6911831201C5CF15E937514686A2169E2AD57BA36FD92CBEBD99A67E34"))); Assert.AreEqual(new DateTime(2016, 2, 15), publicationData.GetPublicationDate(), "Publication date is invalid."); Assert.AreEqual(new DataHash(Base16.Decode("018D982C6911831201C5CF15E937514686A2169E2AD57BA36FD92CBEBD99A67E34")), publicationData.PublicationHash, "Unexpected publication hash."); }
public ActionResult GetPublicationById(int id) { var results = PublicationData.GetPublicationById(id); var jsonResult = SerializeObjectToJson(results); return(jsonResult); }
public ActionResult GetAllPublicationsForEstimate(int id) { var results = PublicationData.GetAllPublicationsForEstimate(id); var jsonResult = SerializeObjectToJson(results); return(jsonResult); }
public ActionResult GetAllPublications() { var results = PublicationData.GetAllPublications(); var jsonResult = SerializeObjectToJson(results); return(jsonResult); }
public TestingRow(string row, int index) { string[] args = row.Split(';'); FileName = args[0]; ActionName = args[1]; ErrorCode = args[2]; ErrorMessage = args[3]; InputHashLevel = !string.IsNullOrEmpty(args[4]) ? uint.Parse(args[4]) : 0; string s = args[5]; if (!string.IsNullOrEmpty(s)) { InputHash = new DataHash(Base16.Decode(s)); } s = args[6]; if (!string.IsNullOrEmpty(s)) { CalendarHashChainInput = new DataHash(Base16.Decode(s)); } s = args[7]; if (!string.IsNullOrEmpty(s)) { CalendarHashChainOutput = new DataHash(Base16.Decode(s)); } s = args[8]; if (!string.IsNullOrEmpty(s)) { AggregationTime = ulong.Parse(s); } s = args[9]; if (!string.IsNullOrEmpty(s)) { PublicationTime = ulong.Parse(s); } s = args[10]; if (!string.IsNullOrEmpty(s)) { PublicationData = new PublicationData(s); } s = args[11]; if (!string.IsNullOrEmpty(s) && s.ToUpper() == "TRUE") { IsExtendingAllowed = true; } ResourceFile = args[12]; PublicationsFilePath = args[13]; CertFilePath = args[14]; TestIndex = index; }
/// <summary> /// Extend signature to publication. /// </summary> /// <param name="signature">KSI signature</param> /// <param name="publicationData">publication data</param> /// <returns>extended KSI signature</returns> public IKsiSignature Extend(IKsiSignature signature, PublicationData publicationData) { if (publicationData == null) { throw new ArgumentNullException(nameof(publicationData)); } return(Extend(signature, new PublicationRecordInSignature(false, false, publicationData))); }
/// <see cref="VerificationRule.Verify" /> public override VerificationResult Verify(IVerificationContext context) { PublicationData userPublication = GetUserPublication(context); CalendarHashChain extendedCalendarHashChain = GetExtendedCalendarHashChain(context, userPublication.PublicationTime); return(extendedCalendarHashChain.PublicationData.PublicationHash != userPublication.PublicationHash ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub01) : new VerificationResult(GetRuleName(), VerificationResultCode.Ok)); }
/// <summary> /// Initializes a new instance of the <see cref="Publication"/> class. /// </summary> /// <param name="client"><see cref="T:TcmCoreService.Client" /></param> /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param> protected Publication(Client client, PublicationData publicationData) : base(client, publicationData) { if (publicationData == null) { throw new ArgumentNullException("publicationData"); } mPublicationData = publicationData; }
public void PublicationDataFromPublicationStringTooShortTest() { TlvException ex = Assert.Throws <TlvException>(delegate { PublicationData pub = new PublicationData("AAAAAA"); }); Assert.That(ex.Message.StartsWith("Publication string base 32 decode failed"), "Unexpected exception message: " + ex.Message); }
public void PublicationDataFromPublicationStringNullTest() { ArgumentNullException ex = Assert.Throws <ArgumentNullException>(delegate { PublicationData pub = new PublicationData((string)null); }); Assert.AreEqual("publicationString", ex.ParamName, "Unexpected exception message: " + ex.Message); }
public void PublicationDataFromPublicationStringInvalidCrc32Test() { TlvException ex = Assert.Throws <TlvException>(delegate { PublicationData pub = new PublicationData("AAAAAA-CVZ2AQ-AANGVK-SV7GJL-36LN65-AVJYZR-6XRZSL-HIMRH3-6GU7WR-YNRY7C-X2XECY-WFQXRA"); }); Assert.That(ex.Message.StartsWith("Publication string CRC 32 check failed"), "Unexpected exception message: " + ex.Message); }
public void InvalidExtendAndVerifyToUserProvidedPublicationFromTestCoreTest(Ksi ksi) { // publication data from Test core, not included in publications file. Time: 2016-07-12 00:00:00 UTC PublicationData publicationData = new PublicationData("AAAAAA-CXQQZQ-AAOSZH-ONCB4K-TFGPBW-R6S6TF-6EW4DU-4QMP7X-GI2VCO-TNGAZM-EV6AZR-464IOA"); KsiSignatureInvalidContentException ex = Assert.Throws <KsiSignatureInvalidContentException>(delegate { ksi.Extend(TestUtil.GetSignature(), publicationData); }); Assert.AreEqual(VerificationError.Int09.Code, ex.VerificationResult.VerificationError.Code, "Invalid result code"); }
public void InvalidExtendToUserProvidedPublicationTest(Ksi ksi) { // publication data with modified hash PublicationData publicationData = new PublicationData("AAAAAA-CW45II-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCA-ZP3ZLX"); KsiSignatureInvalidContentException ex = Assert.Throws <KsiSignatureInvalidContentException>(delegate { ksi.Extend(TestUtil.GetSignature(), publicationData); }); Assert.AreEqual(VerificationError.Int09.Code, ex.VerificationResult.VerificationError.Code, "Unexpected result code"); }
/// <summary> /// Get user publication from verification context /// </summary> /// <param name="context">verification context</param> /// <returns>user publication</returns> public static PublicationData GetUserPublication(IVerificationContext context) { CheckVerificationContext(context); PublicationData userPublication = context.UserPublication; if (context.UserPublication == null) { throw new KsiVerificationException("Invalid user publication in context: null."); } return(userPublication); }
public ActionResult SavePublication(PublicationBO publicationEntity) { if (publicationEntity.EST_PUBID != 0 && publicationEntity.EST_PUBID != null) { PublicationData.Update(publicationEntity); return(new HttpStatusCodeResult(201, "Update successful")); } else { PublicationData.Save(publicationEntity); return(new HttpStatusCodeResult(201, "Creation successful")); } }
internal void CreateOrIgnoreRootStructureGroup(string rootStructureGroupTitle, string publicationId) { PublicationData publication = (PublicationData)_client.Read(publicationId, _readOptions); if (publication.RootStructureGroup.IdRef == TcmUri.UriNull) { StructureGroupData structureGroup = //(StructureGroupData)_client.GetDefaultData(ItemType.StructureGroup, publicationId, _readOptions); (StructureGroupData)_client.GetDefaultData(ItemType.StructureGroup, publicationId); structureGroup.Title = rootStructureGroupTitle; _client.Save(structureGroup, null); } }
internal string GetPublication(string publicationTitle, params string[] parentIds) { // Console.WriteLine("Getting Publication " + publicationTitle); Stopwatch watch = new Stopwatch(); watch.Start(); string publicationId = TcmUri.UriNull; PublicationsFilterData publicationsFilter = new PublicationsFilterData(); foreach (XElement pub in _client.GetSystemWideListXml(publicationsFilter).Nodes()) { if (!pub.Attribute("Title").Value.Equals(publicationTitle)) { continue; } publicationId = pub.Attribute("ID").Value; Console.WriteLine("Found publication with ID " + publicationId); break; } if (publicationId.Equals(TcmUri.UriNull) && CreateIfNewItem) { // New Publication PublicationData newPublication = //(PublicationData)_client.GetDefaultData(ItemType.Publication, null, _readOptions); (PublicationData)_client.GetDefaultData(ItemType.Publication, null); newPublication.Title = publicationTitle; newPublication.Key = publicationTitle; if (parentIds.Length > 0) { List <LinkToRepositoryData> parents = new List <LinkToRepositoryData>(); foreach (string parentId in parentIds) { LinkToRepositoryData linkToParent = new LinkToRepositoryData { IdRef = parentId }; parents.Add(linkToParent); } newPublication.Parents = parents.ToArray(); } newPublication = (PublicationData)_client.Save(newPublication, _readOptions); publicationId = newPublication.Id; Console.WriteLine("Created publication with ID " + publicationId); } watch.Stop(); Console.WriteLine("GetPublication finished in " + watch.ElapsedMilliseconds + " milliseconds."); return(publicationId); }
/// <see cref="VerificationRule.Verify" /> public override VerificationResult Verify(IVerificationContext context) { PublicationData userPublication = GetUserPublication(context); CalendarHashChain extendedCalendarHashChain = GetExtendedCalendarHashChain(context, userPublication.PublicationTime); if (userPublication.PublicationTime != extendedCalendarHashChain.PublicationData.PublicationTime) { return(new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub02)); } return(GetSignature(context).AggregationTime != extendedCalendarHashChain.CalculateRegistrationTime() ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub02) : new VerificationResult(GetRuleName(), VerificationResultCode.Ok)); }
public static PublicationResult From(PublicationData item, string currentUserId) { var result = new PublicationResult { Key = TextEntry.From(item.Key, Resources.LabelKey), PublicationPath = TextEntry.From(item.PublicationPath, Resources.LabelPublicationPath), PublicationUrl = TextEntry.From(item.PublicationUrl, Resources.LabelPublicationUrl), MultimediaPath = TextEntry.From(item.MultimediaPath, Resources.LabelMultimediaPath), MultimediaUrl = TextEntry.From(item.MultimediaUrl, Resources.LabelMultimediaUrl), WebDavUrl = TextEntry.From(item.LocationInfo.WebDavUrl, Resources.LabelWebDavUrl) }; AddCommonProperties(item, result); return result; }
public static PublicationResult From(PublicationData item, string currentUserId) { var result = new PublicationResult { Key = TextEntry.From(item.Key, Resources.LabelKey), PublicationPath = TextEntry.From(item.PublicationPath, Resources.LabelPublicationPath), PublicationUrl = TextEntry.From(item.PublicationUrl, Resources.LabelPublicationUrl), MultimediaPath = TextEntry.From(item.MultimediaPath, Resources.LabelMultimediaPath), MultimediaUrl = TextEntry.From(item.MultimediaUrl, Resources.LabelMultimediaUrl), WebDavUrl = TextEntry.From(item.LocationInfo.WebDavUrl, Resources.LabelWebDavUrl) }; AddCommonProperties(item, result); return(result); }
public void ExtendAndVerifyToUserProvidedPublicationTest(Ksi ksi) { PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy(); PublicationData publicationData = new PublicationData("AAAAAA-CW45II-AAKWRK-F7FBNM-KB6FNV-DYYFW7-PJQN6F-JKZWBQ-3OQYZO-HCB7RA-YNYAGA-ODRL2V"); IKsiSignature extendedSignature = ksi.Extend(TestUtil.GetSignature(), publicationData); VerificationContext context = new VerificationContext(extendedSignature) { UserPublication = publicationData }; VerificationResult verificationResult = rule.Verify(context); Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode); }
/// <see cref="VerificationRule.Verify" /> public override VerificationResult Verify(IVerificationContext context) { IKsiSignature signature = GetSignature(context); if (signature.PublicationRecord == null) { return(new VerificationResult(GetRuleName(), VerificationResultCode.Ok)); } PublicationData publicationRecordPublicationData = signature.PublicationRecord.PublicationData; PublicationData calendarHashChainPublicationData = GetCalendarHashChain(signature).PublicationData; return(publicationRecordPublicationData.PublicationHash != calendarHashChainPublicationData.PublicationHash ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Int09) : new VerificationResult(GetRuleName(), VerificationResultCode.Ok)); }
public void ExtendAndVerifyToUserProvidedPublicationNotInPublicationsFileTest(Ksi ksi) { PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy(); // publication data that is not included in publications file. Time: 2016-07-12 00:00:00 UTC PublicationData publicationData = new PublicationData("AAAAAA-CXQQZQ-AAPGJF-HGNMUN-DXEIQW-NJZZOE-J76OK4-BV3FKY-AEAWIP-KSPZPW-EJKVAI-JPOOR7"); IKsiSignature extendedSignature = ksi.Extend(TestUtil.GetSignature(), publicationData); VerificationContext context = new VerificationContext(extendedSignature) { UserPublication = publicationData }; VerificationResult verificationResult = rule.Verify(context); Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode); }
public void ToStringTest() { PublicationData tag = TestUtil.GetCompositeTag <PublicationData>(Constants.PublicationData.TagType, new ITlvTag[] { new IntegerTag(Constants.PublicationData.PublicationTimeTagType, false, false, 1), new ImprintTag(Constants.PublicationData.PublicationHashTagType, false, false, new DataHash(HashAlgorithm.Sha2256, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 })), }); PublicationData tag2 = new PublicationData(new RawTag(tag.Type, tag.NonCritical, tag.Forward, tag.EncodeValue())); Assert.AreEqual(tag.ToString(), tag2.ToString()); }
public void InvalidExtendToUserProvidedPublicationFromTestCoreAllowExtendingTest(KsiService service) { PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy(); // publication data from Test core. not included in publications file. Time: 2016-07-12 00:00:00 UTC PublicationData publicationData = new PublicationData("AAAAAA-CXQQZQ-AAOSZH-ONCB4K-TFGPBW-R6S6TF-6EW4DU-4QMP7X-GI2VCO-TNGAZM-EV6AZR-464IOA"); VerificationContext context = new VerificationContext(TestUtil.GetSignature()) { IsExtendingAllowed = true, UserPublication = publicationData, KsiService = service }; VerificationResult verificationResult = rule.Verify(context); Assert.AreEqual(VerificationResultCode.Fail, verificationResult.ResultCode); Assert.AreEqual(VerificationError.Pub01, verificationResult.VerificationError); }
public void TestCalendarAuthenticationRecordOk() { CalendarAuthenticationRecord calendarAuthenticationRecord = GetCalendarAuthenticationRecordFromFile(Resources.CalendarAuthenticationRecord_Ok); Assert.AreEqual(2, calendarAuthenticationRecord.Count, "Invalid amount of child TLV objects"); PublicationData publicationData = new PublicationData(1398902400, new DataHash(Base16.Decode("01C45A4D73815CBECD5493197513A6C2C9058B0B16B99A64805368A7186D528E8B")), false, true); Assert.IsTrue(calendarAuthenticationRecord.PublicationData.Equals(publicationData)); SignatureData signatureData = new SignatureData(new RawTag(0xb, false, false, Base16.Decode( "0116312E322E3834302E3131333534392E312E312E3131008002010098D9A4D14722BB2C22425AC9112FBF6A2491B7051AD0CBFD8153E669BFCC6CDF20EEC80F7FCC7236985A4F83871DD6E245470BCA323A3902035B78764DDC4C6EB42416A3A7D7E5CEF6ED6AE8FADA668413758CF7DE1E9565EDF646170286D0F43CA30491DD3407B53DEEDDCBD2620057AB6580E3D3E938AE44EABAF3282357EEBB7B2325616755A1F20B3A78DE2F636DE10F7CCD75B6C5BB80EFEBA216F9BF1A302DCB93B9D3E3E9754620E6D8EC8672C5329CBBB00A9A4617242950D68B8A55CBA77E69DECDD49DD96F69FAA6BFBB0EF48A913F5F26AFA01FB08192D62123FC644BA2978CAF147229BD5702663494983A40ED77AA5016EAABC1FE8456DC17D40304C246B139"))); Assert.IsTrue(calendarAuthenticationRecord.SignatureData.Equals(signatureData)); }
public void ExtendAndVerifyTest(Ksi ksi) { PublicationBasedVerificationPolicy policy = new PublicationBasedVerificationPolicy(); IKsiSignature ksiSignature = TestUtil.GetSignature(); IKsiSignature extendedSignature = ksi.Extend(ksiSignature); PublicationData publicationData = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData; VerificationContext context = new VerificationContext(extendedSignature) { UserPublication = publicationData, KsiService = GetHttpKsiService() }; VerificationResult verificationResult = policy.Verify(context); Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode); }
public void ExtendAndVerifySignatureWithAggregationChainsOnly(Ksi ksi) { PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy(); // signature contains only aggregation chains IKsiSignature ksiSignature = TestUtil.GetSignature(Resources.KsiSignature_Ok_Only_Aggregtion_Chains); IKsiSignature extendedSignature = ksi.Extend(ksiSignature); PublicationData publicationData = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData; VerificationContext context = new VerificationContext(extendedSignature) { UserPublication = publicationData }; VerificationResult verificationResult = rule.Verify(context); Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode); }
/// <summary> /// Reload the <see cref="Publication" /> with the specified <see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /> /// </summary> /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param> protected void Reload(PublicationData publicationData) { if (publicationData == null) throw new ArgumentNullException("publicationData"); mPublicationData = publicationData; base.Reload(publicationData); mComponentSnapshotTemplate = null; mComponentTemplateProcess = null; mDefaultComponentTemplate = null; mDefaultPageTemplate = null; mDefaultTemplateBuildingBlock = null; mPageSnapshotTemplate = null; mPageTemplateProcess = null; mTemplateBundleProcess = null; mRootStructureGroup = null; }