internal Sender(LocalParty local, TrustedParty audience, ISignAlgorithm a, KeyBase?k, DateTime expires)
 {
     Debug.Assert((a.AlgorithmId == SignatureAlgorithmId.None) == (k == null));
     _algo          = a;
     _key           = k;
     _local         = local;
     Audience       = audience;
     DataExpiration = expires;
 }
 private protected TrustedParty(LocalParty local,
                                string partyName,
                                RemoteIdentityOptions?identityOptions,
                                TrustedPartyConfiguration?configuration)
 {
     PartyName  = partyName;
     LocalParty = local;
     Identity   = BuildPath(identityOptions?.RemoteDomainNameOverride ?? local.DomainName,
                            identityOptions?.RemoteEnvironmentNameOverride ?? local.EnvironmentName,
                            identityOptions?.RemotePartyNameOverride ?? partyName);
     _configuration = configuration ?? TrustedPartyConfiguration.Standard;
     _symmetricKeys = new SymmetricKeyList(this);
 }
 internal RemoteParty(LocalParty local,
                      string partyName,
                      RemotePartyKeyScope keyScope,
                      Uri?uri,
                      RemoteIdentityOptions?identityOptions,
                      TrustedPartyConfiguration?partyConfiguration = null)
     : base(local, partyName, identityOptions, partyConfiguration)
 {
     KeyScope           = keyScope;
     Uri                = uri;
     _keyExchangeFailed = new PerfectEventSender <KeyExchangeFailedEventArgs>();
     IdentityOptions    = identityOptions;
 }