/// <summary> /// Reads an SecurityKeyIdentifier from a XML stream. /// </summary> /// <param name="reader">An XML reader positioned at an SecurityKeyIdentifier (ds: KeyInfo) as defined in 'http://www.w3.org/TR/xmldsig-core'.</param> /// <returns>SecurityKeyIdentifier.</returns> /// <exception cref="ArgumentNullException">The <paramref name="reader"/> is null.</exception> /// <exception cref="InvalidOperationException">If the <paramref name="reader"/> is not positioned at KeyInfo element.</exception> protected override SecurityKeyIdentifier ReadKeyIdentifierCore(XmlReader reader) { if (reader == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader"); } if (reader.IsStartElement(XmlSignatureConstants.Elements.KeyInfo, XmlSignatureConstants.Namespace)) { KeyInfo keyInfo = new KeyInfo(this); keyInfo.ReadXml(XmlDictionaryReader.CreateDictionaryReader(reader)); return(keyInfo.KeyIdentifier); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperXml(reader, SR.GetString(SR.ID4192)); } }
/// <summary> /// Deserializes the SAML Signing KeyInfo /// </summary> /// <param name="reader">A <see cref="XmlReader"/> positioned at a than can be positioned at a ds:KeyInfo element.</param> /// <param name="assertion">The <see cref="Saml2Assertion"/> that is having the signature checked.</param> /// <returns>The <see cref="SecurityKeyIdentifier"/> that defines the key to use to check the signature.</returns> /// <exception cref="ArgumentNullException">Input parameter 'reader' is null.</exception> protected virtual SecurityKeyIdentifier ReadSigningKeyInfo(XmlReader reader, Saml2Assertion assertion) { if (null == reader) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader"); } SecurityKeyIdentifier ski; if (this.KeyInfoSerializer.CanReadKeyIdentifier(reader)) { ski = this.KeyInfoSerializer.ReadKeyIdentifier(reader); } else { KeyInfo keyInfo = new KeyInfo(this.KeyInfoSerializer); keyInfo.ReadXml(XmlDictionaryReader.CreateDictionaryReader(reader)); ski = keyInfo.KeyIdentifier; } // no key info if (ski.Count == 0) { return new SecurityKeyIdentifier(new Saml2SecurityKeyIdentifierClause(assertion)); } return ski; }