internal CallerChainImpl(AnyCredential anyCredential)
     : this()
 {
     Legacy = anyCredential.Legacy;
     if (Legacy)
     {
         core.v2_0.services.access_control.CallChain legacyChain = UnmarshalLegacyCallChain(anyCredential.LegacyChain);
         BusId       = anyCredential.Bus;
         Target      = legacyChain.target;
         Originators = new LoginInfo[legacyChain.originators.Length];
         for (int i = 0; i < legacyChain.originators.Length; i++)
         {
             Originators[i] = new LoginInfo(legacyChain.originators[i].id, legacyChain.originators[i].entity);
         }
         Caller = new LoginInfo(legacyChain.caller.id, legacyChain.caller.entity);
         Signed = new AnySignedChain(anyCredential.LegacyChain);
     }
     else
     {
         CallChain chain = UnmarshalCallChain(anyCredential.Chain);
         BusId       = chain.bus;
         Target      = chain.target;
         Originators = chain.originators;
         Caller      = chain.caller;
         Signed      = new AnySignedChain(anyCredential.Chain);
     }
 }
 internal CallerChainImpl(string busId, LoginInfo caller, string target,
                          LoginInfo[] originators, SignedData signed, SignedCallChain legacySigned)
     : this(busId, target)
 {
     Originators = originators;
     Caller      = caller;
     Signed      = new AnySignedChain(signed, legacySigned);
     Legacy      = false;
 }
 internal CallerChainImpl(string busId,
                          core.v2_0.services.access_control.LoginInfo caller, string target,
                          core.v2_0.services.access_control.LoginInfo[] originators,
                          SignedCallChain signed)
     : this(busId, target)
 {
     Originators = new LoginInfo[originators.Length];
     for (int i = 0; i < originators.Length; i++)
     {
         Originators[i] = new LoginInfo(originators[i].id, originators[i].entity);
     }
     Caller = new LoginInfo(caller.id, caller.entity);
     Signed = new AnySignedChain(signed);
     Legacy = true;
 }