text: /* LibTomCrypt, modular cryptographic library -- Tom St Denis
   *
   * LibTomCrypt is a library that provides various cryptographic
   * algorithms in a highly modular and flexible manner.
   *
   * The library is free for all purposes without any express
   * guarantee it works.
   *
   * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
   */
  #include "tomcrypt.h"
  
  /**
     @file der_length_short_integer.c
     ASN.1 DER, get length of encoding, Tom St Denis
   */
  
  
  #ifdef LTC_DER
  
  /**
     Gets length of DER encoding of num
     @param num    The integer to get the size of
     @param outlen [out] The length of the DER encoding for the given integer
     @return CRYPT_OK if successful
   */
  int der_length_short_integer(unsigned long num, unsigned long *outlen) {
      unsigned long z, y, len;
  
      LTC_ARGCHK(outlen != NULL);
  
      /* force to 32 bits */
      num &= 0xFFFFFFFFUL;
  
      /* get the number of bytes */
      z = 0;
      y = num;
      while (y) {
          ++z;
          y >>= 8;
      }
  
      /* handle zero */
      if (z == 0) {
          z = 1;
      }
  
      /* we need a 0x02 to indicate it's INTEGER */
      len = 1;
  
      /* length byte */
      ++len;
  
      /* bytes in value */
      len += z;
  
      /* see if msb is set */
      len += (num & (1UL << ((z << 3) - 1))) ? 1 : 0;
  
      /* return length */
      *outlen = len;
  
      return CRYPT_OK;
  }
  #endif
  
  /* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c,v $ */
  /* $Revision: 1.6 $ */
  /* $Date: 2006/12/28 01:27:24 $ */
  