| 
									
										
										
										
											2015-11-12 01:49:07 +01:00
										 |  |  | #include <tommath_private.h>
 | 
					
						
							| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #ifdef BN_MP_GET_INT_C
 | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  | /* LibTomMath, multiple-precision integer library -- Tom St Denis
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LibTomMath is a library that provides multiple-precision | 
					
						
							|  |  |  |  * integer arithmetic as well as number theoretic functionality. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The library was designed directly after the MPI library by | 
					
						
							|  |  |  |  * Michael Fromberger but has been written from scratch with | 
					
						
							|  |  |  |  * additional optimizations in place. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The library is free for all purposes without any express | 
					
						
							|  |  |  |  * guarantee it works. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2015-10-30 17:55:29 -04:00
										 |  |  |  * Tom St Denis, tstdenis82@gmail.com, http://libtom.org
 | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* get the lower 32-bits of an mp_int */ | 
					
						
							| 
									
										
										
										
											2014-09-02 02:14:38 +02:00
										 |  |  | unsigned long mp_get_int(mp_int * a) | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   int i; | 
					
						
							| 
									
										
										
										
											2014-09-23 22:54:30 +02:00
										 |  |  |   mp_min_u32 res; | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (a->used == 0) { | 
					
						
							|  |  |  |      return 0; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* get number of digits of the lsb we have to read */ | 
					
						
							| 
									
										
										
										
											2015-11-13 10:28:23 +01:00
										 |  |  |   i = MIN(a->used,(int)(((sizeof(unsigned long) * CHAR_BIT) + DIGIT_BIT - 1) / DIGIT_BIT)) - 1; | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /* get most significant digit of result */ | 
					
						
							|  |  |  |   res = DIGIT(a,i); | 
					
						
							| 
									
										
										
										
											2014-09-02 02:14:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-11 20:46:22 +00:00
										 |  |  |   while (--i >= 0) { | 
					
						
							|  |  |  |     res = (res << DIGIT_BIT) | DIGIT(a,i); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* force result to 32-bits always so it is consistent on non 32-bit platforms */ | 
					
						
							|  |  |  |   return res & 0xFFFFFFFFUL; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-08-01 16:37:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* $Source$ */ | 
					
						
							|  |  |  | /* $Revision$ */ | 
					
						
							|  |  |  | /* $Date$ */ |