209
|
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, [email protected], http://libtomcrypt.org |
|
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 return CRYPT_OK; |
|
63 } |
|
64 |
|
65 #endif |
|
66 |
|
67 /* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c,v $ */ |
|
68 /* $Revision: 1.3 $ */ |
|
69 /* $Date: 2005/05/23 01:35:38 $ */ |