internal override void WriteTimestampCanonicalForm(Stream stream, SecurityTimestamp timestamp, byte[] workBuffer) { TimestampCanonicalFormWriter.Instance.WriteCanonicalForm( stream, timestamp.Id, timestamp.GetCreationTimeChars(), timestamp.GetExpiryTimeChars(), workBuffer); }
public void AddTimestamp(SecurityTimestamp timestamp) { ThrowIfProcessingStarted(); if (ElementContainer.Timestamp != null) { throw TraceUtility.ThrowHelperError(new InvalidOperationException(SR.TimestampAlreadySetForSecurityHeader), Message); } ElementContainer.Timestamp = timestamp ?? throw TraceUtility.ThrowHelperArgumentNull(nameof(timestamp), Message); }
internal override void WriteTimestamp(XmlDictionaryWriter writer, SecurityTimestamp timestamp) { writer.WriteStartElement(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.Timestamp, XD.UtilityDictionary.Namespace); writer.WriteAttributeString(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace, timestamp.Id); writer.WriteStartElement(XD.UtilityDictionary.CreatedElement, XD.UtilityDictionary.Namespace); char[] creationTime = timestamp.GetCreationTimeChars(); writer.WriteChars(creationTime, 0, creationTime.Length); writer.WriteEndElement(); // wsu:Created writer.WriteStartElement(XD.UtilityDictionary.ExpiresElement, XD.UtilityDictionary.Namespace); char[] expiryTime = timestamp.GetExpiryTimeChars(); writer.WriteChars(expiryTime, 0, expiryTime.Length); writer.WriteEndElement(); // wsu:Expires writer.WriteEndElement(); }
public void AppendTimestamp(SecurityTimestamp timestamp) { AppendElement(ReceiveSecurityHeaderElementCategory.Timestamp, timestamp, ReceiveSecurityHeaderBindingModes.Unknown, timestamp.Id, null); }
internal abstract void WriteTimestampCanonicalForm(Stream stream, SecurityTimestamp timestamp, byte[] buffer);
internal abstract void WriteTimestamp(XmlDictionaryWriter writer, SecurityTimestamp timestamp);
protected override ISignatureValueSecurityElement CompletePrimarySignatureCore( SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeaderElement[] basicTokens, bool isPrimarySignature) { if (_signedXml == null) { return(null); } SecurityTimestamp timestamp = Timestamp; if (timestamp != null) { if (timestamp.Id == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.TimestampToSignHasNoId)); } var buffer = new byte[64]; var ms = new MemoryStream(); StandardsManager.WSUtilitySpecificationVersion.WriteTimestampCanonicalForm( ms, timestamp, buffer); ms.Position = 0; AddReference("#" + timestamp.Id, ms); var reference = new System.Security.Cryptography.Xml.Reference(ms); } if ((ShouldSignToHeader) && (_signingKey != null || _signedXml.SigningKey != null) && (Version.Addressing != AddressingVersion.None)) { if (_toHeaderStream != null) { AddReference("#" + _toHeaderId, _toHeaderStream); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.TransportSecurityRequireToHeader)); } } AddSignatureReference(signatureConfirmations); if (isPrimarySignature && ShouldProtectTokens) { AddPrimaryTokenSignatureReference(ElementContainer.SourceSigningToken, SigningTokenParameters); } if (RequireMessageProtection) { throw new PlatformNotSupportedException(nameof(RequireMessageProtection)); } if (_signedXml.SignedInfo.References.Count == 0) { throw TraceUtility.ThrowHelperError(new MessageSecurityException(SR.NoPartsOfMessageMatchedPartsToSign), Message); } try { if (_signingKey != null) { _signedXml.ComputeSignature(_signingKey); } else { _signedXml.ComputeSignature(); } return(new SignatureValue(_signedXml.Signature)); } finally { _hashStream = null; _signingKey = null; _signedXml = null; _effectiveSignatureParts = null; } }