Back to index

lightning-sunbird  0.9+nobinonly
Functions
secplcy.c File Reference
#include "secplcy.h"
#include "prmem.h"

Go to the source code of this file.

Functions

SECCipherFind * sec_CipherFindInit (PRBool onlyAllowed, secCPStruct *policy, long *ciphers)
long sec_CipherFindNext (SECCipherFind *find)
char sec_IsCipherAllowed (long cipher, secCPStruct *policies, long *ciphers)
void sec_CipherFindEnd (SECCipherFind *find)

Function Documentation

void sec_CipherFindEnd ( SECCipherFind *  find)

Definition at line 114 of file secplcy.c.

{
  PR_FREEIF(find);
}
SECCipherFind* sec_CipherFindInit ( PRBool  onlyAllowed,
secCPStruct policy,
long ciphers 
)

Definition at line 40 of file secplcy.c.

{
  SECCipherFind *find = PR_NEWZAP(SECCipherFind);
  if (find)
    {
      find->policy = policy;
      find->ciphers = ciphers;
      find->onlyAllowed = onlyAllowed;
      find->index = -1;
    }
  return find;
}
long sec_CipherFindNext ( SECCipherFind *  find)

Definition at line 55 of file secplcy.c.

{
  char *policy;
  long rv = -1;
  secCPStruct *policies = (secCPStruct *) find->policy;
  long *ciphers = (long *) find->ciphers;
  long numCiphers = policies->num_ciphers;

  find->index++;
  while((find->index < numCiphers) && (rv == -1))
    {
      /* Translate index to cipher. */
      rv = ciphers[find->index];

      /* If we're only looking for allowed ciphers, and if this
        cipher isn't allowed, loop around.*/
      if (find->onlyAllowed)
       {
         /* Find the appropriate policy flag. */
         policy = (&(policies->begin_ciphers)) + find->index + 1;

         /* If this cipher isn't allowed by policy, continue. */
         if (! (*policy))
           {
             rv = -1;
             find->index++;
           }
       }
    }

  return rv;
}
char sec_IsCipherAllowed ( long  cipher,
secCPStruct policies,
long ciphers 
)

Definition at line 88 of file secplcy.c.

{
  char result = SEC_CIPHER_NOT_ALLOWED; /* our default answer */
  long numCiphers = policies->num_ciphers;
  char *policy;
  int i;
  
  /* Convert the cipher number into a policy flag location. */
  for (i=0, policy=(&(policies->begin_ciphers) + 1);
       i<numCiphers;
       i++, policy++)
    {
      if (cipher == ciphers[i])
       break;
    }

  if (i < numCiphers)
    {
      /* Found the cipher, get the policy value. */
      result = *policy;
    }

  return result;
}