private byte[][] ComputeRecipientsField(byte[] seed)
        {
            byte[][] recipientsField = new byte[policy.NumberOfRecipients][];
            var      it = policy.RecipientsIterator;
            int      i  = 0;

            while (it.MoveNext())
            {
                PublicKeyRecipient recipient   = it.Current;
                X509Certificate    certificate = recipient.X509;
                int permission = recipient.Permission.PermissionBytesForPublicKey;

                byte[] pkcs7input = new byte[24];
                byte   one        = (byte)(permission);
                byte   two        = (byte)((uint)permission >> 8);
                byte   three      = (byte)((uint)permission >> 16);
                byte   four       = (byte)((uint)permission >> 24);

                // put this seed in the pkcs7 input
                Array.Copy(seed, 0, pkcs7input, 0, 20);

                pkcs7input[20] = four;
                pkcs7input[21] = three;
                pkcs7input[22] = two;
                pkcs7input[23] = one;

                var obj = CreateDERForRecipient(pkcs7input, certificate);
                recipientsField[i] = obj.GetDerEncoded();

                i++;
            }
            return(recipientsField);
        }
 /**
  * Removes a recipient from the recipients list.
  * @param recipient The recipient to remove.
  * @return true If a recipient was found and removed.
  */
 public bool RemoveRecipient(PublicKeyRecipient recipient)
 {
     return(recipients.Remove(recipient));
 }
 /**
  * Adds a new recipient to the recipients list.
  * @param recipient A new recipient.
  */
 public void AddRecipient(PublicKeyRecipient recipient)
 {
     recipients.Add(recipient);
 }