/// <summary>
        ///     End create signature (async).
        /// </summary>
        /// <param name="asyncResult">async result</param>
        /// <returns>KSI signature</returns>
        public IKsiSignature EndSign(IAsyncResult asyncResult)
        {
            KsiServiceAsyncResult      serviceAsyncResult = GetKsiServiceAsyncResult(asyncResult);
            SignRequestResponsePayload responsePayload    = GetSignResponsePayload(serviceAsyncResult);

            LegacyAggregationResponsePayload legacyPayload = responsePayload as LegacyAggregationResponsePayload;
            AggregationResponsePayload       payload       = responsePayload as AggregationResponsePayload;

            IKsiSignature signature = legacyPayload != null
                ? _ksiSignatureFactory.Create(legacyPayload, serviceAsyncResult.DocumentHash, serviceAsyncResult.Level)
                : _ksiSignatureFactory.Create(payload, serviceAsyncResult.DocumentHash, serviceAsyncResult.Level);

            Logger.Debug("End sign successful (request id: {0}){1}{2}", serviceAsyncResult.RequestId, Environment.NewLine, signature);

            return(signature);
        }
 /// <summary>
 /// Parse child tag
 /// </summary>
 protected override ITlvTag ParseChild(ITlvTag childTag)
 {
     switch (childTag.Type)
     {
         case Constants.AggregationResponsePayload.TagType:
             AggregationResponsePayload aggregationResponsePayload = childTag as AggregationResponsePayload ?? new AggregationResponsePayload(childTag);
             Payloads.Add(aggregationResponsePayload);
             return aggregationResponsePayload;
         case Constants.ErrorPayload.TagType:
             return ErrorPayload = childTag as AggregationErrorPayload ?? new AggregationErrorPayload(childTag);
         case Constants.AggregatorConfigResponsePayload.TagType:
             AggregatorConfigResponsePayload aggregatorConfigResponsePayload = childTag as AggregatorConfigResponsePayload ?? new AggregatorConfigResponsePayload(childTag);
             Payloads.Add(aggregatorConfigResponsePayload);
             return aggregatorConfigResponsePayload;
         // not implemented yet, so just return the tag
         case Constants.AggregationAcknowledgmentResponsePayload.TagType:
             return childTag;
         default:
             return base.ParseChild(childTag);
     }
 }