/// <summary>
        /// Sign given hashes. Returns uni-signatures.
        /// </summary>
        public IEnumerable <IKsiSignature> Sign()
        {
            _canAddItems = false;

            if (_leafNodes.Count == 0)
            {
                return(new List <IKsiSignature>());
            }

            TreeNode root = _treeBuilder.GetTreeRoot();

            if (root.Left == null && root.Right == null)
            {
                Logger.Debug("Only one node in the tree. Signing the hash. Level: {0}; Hash: {1}", root.Level, root.Hash);
                return(new List <IKsiSignature>()
                {
                    _ksiService.Sign(root.Hash, root.Level)
                });
            }

            Logger.Debug("Signing root node hash. Level: {0}; Hash: {1}", root.Level, root.Hash);
            SignRequestResponsePayload signResponsePayload = _ksiService.GetSignResponsePayload(_ksiService.BeginSign(root.Hash, root.Level, null, null));

            return(CreateUniSignatures(new KsiSignature(false, false, signResponsePayload.GetSignatureChildTags())));
        }
 /// <summary>
 /// End sub-service signing request.
 /// </summary>
 /// <param name="service">sub-service</param>
 /// <param name="asyncResult">async result</param>
 protected override object SubServiceEndRequest(IKsiService service, IAsyncResult asyncResult)
 {
     if (_returnResponsePayload)
     {
         return(service.GetSignResponsePayload(asyncResult));
     }
     return(service.EndSign(asyncResult));
 }