1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis 2 * 3 * LibTomCrypt is a library that provides various cryptographic 4 * algorithms in a highly modular and flexible manner. 5 * 6 * The library is free for all purposes without any express 7 * guarantee it works. 8 * 9 * Tom St Denis, tomstdenis (at) gmail.com, http://libtomcrypt.com 10 */ 11 #include "tomcrypt.h" 12 13 /** 14 @file der_length_short_integer.c 15 ASN.1 DER, get length of encoding, Tom St Denis 16 */ 17 18 19 #ifdef LTC_DER 20 /** 21 Gets length of DER encoding of num 22 @param num The integer to get the size of 23 @param outlen [out] The length of the DER encoding for the given integer 24 @return CRYPT_OK if successful 25 */ 26 int der_length_short_integer(unsigned long num, unsigned long *outlen) 27 { 28 unsigned long z, y, len; 29 30 LTC_ARGCHK(outlen != NULL); 31 32 /* force to 32 bits */ 33 num &= 0xFFFFFFFFUL; 34 35 /* get the number of bytes */ 36 z = 0; 37 y = num; 38 while (y) { 39 ++z; 40 y >>= 8; 41 } 42 43 /* handle zero */ 44 if (z == 0) { 45 z = 1; 46 } 47 48 /* we need a 0x02 to indicate it's INTEGER */ 49 len = 1; 50 51 /* length byte */ 52 ++len; 53 54 /* bytes in value */ 55 len += z; 56 57 /* see if msb is set */ 58 len += (num&(1UL<<((z<<3) - 1))) ? 1 : 0; 59 60 /* return length */ 61 *outlen = len; 62 63 return CRYPT_OK; 64 } 65 66 #endif 67 68 /* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c,v $ */ 69 /* $Revision: 1.5 $ */ 70 /* $Date: 2006/03/31 14:15:35 $ */ 71