Add set_long and get_long functions
They work on platform-dependent long ints
This commit is contained in:
		
							parent
							
								
									a263647f23
								
							
						
					
					
						commit
						6df187aea4
					
				
							
								
								
									
										39
									
								
								bn_mp_get_long.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								bn_mp_get_long.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| #include <tommath.h> | ||||
| #ifdef BN_MP_GET_INT_C | ||||
| /* 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. | ||||
|  * | ||||
|  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | ||||
|  */ | ||||
| 
 | ||||
| /* get the lower unsigned long of an mp_int, platform dependent */ | ||||
| unsigned long mp_get_long(mp_int * a) | ||||
| { | ||||
|   int i; | ||||
|   unsigned long res; | ||||
| 
 | ||||
|   if (a->used == 0) { | ||||
|      return 0; | ||||
|   } | ||||
| 
 | ||||
|   /* get number of digits of the lsb we have to read */ | ||||
|   i = MIN(a->used,(int)((sizeof(unsigned long)*CHAR_BIT+DIGIT_BIT-1)/DIGIT_BIT))-1; | ||||
| 
 | ||||
|   /* get most significant digit of result */ | ||||
|   res = DIGIT(a,i); | ||||
|     | ||||
|   while (--i >= 0) { | ||||
|     res = (res << DIGIT_BIT) | DIGIT(a,i); | ||||
|   } | ||||
|   return res; | ||||
| } | ||||
| #endif | ||||
							
								
								
									
										48
									
								
								bn_mp_set_long.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								bn_mp_set_long.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| #include <tommath.h> | ||||
| #ifdef BN_MP_SET_INT_C | ||||
| /* 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. | ||||
|  * | ||||
|  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | ||||
|  */ | ||||
| 
 | ||||
| /* set a platform dependent unsigned long int */ | ||||
| int mp_set_long (mp_int * a, unsigned long b) | ||||
| { | ||||
|   int     x, res; | ||||
| 
 | ||||
|   mp_zero (a); | ||||
|    | ||||
|   /* set four bits at a time */ | ||||
|   for (x = 0; x < sizeof(unsigned long) * 2; x++) { | ||||
|     /* shift the number up four bits */ | ||||
|     if ((res = mp_mul_2d (a, 4, a)) != MP_OKAY) { | ||||
|       return res; | ||||
|     } | ||||
| 
 | ||||
|     /* OR in the top four bits of the source */ | ||||
|     a->dp[0] |= (b >> ((sizeof(unsigned long)) * 8 - 4)) & 15; | ||||
| 
 | ||||
|     /* shift the source up to the next four bits */ | ||||
|     b <<= 4; | ||||
| 
 | ||||
|     /* ensure that digits are not clamped off */ | ||||
|     a->used += 1; | ||||
|   } | ||||
|   mp_clamp (a); | ||||
|   return MP_OKAY; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /* $Source$ */ | ||||
| /* $Revision$ */ | ||||
| /* $Date$ */ | ||||
| @ -242,9 +242,15 @@ void mp_set(mp_int *a, mp_digit b); | ||||
| /* set a 32-bit const */ | ||||
| int mp_set_int(mp_int *a, unsigned long b); | ||||
| 
 | ||||
| /* set a platform dependent unsigned long value */ | ||||
| int mp_set_long(mp_int *a, unsigned long b); | ||||
| 
 | ||||
| /* get a 32-bit value */ | ||||
| unsigned long mp_get_int(mp_int * a); | ||||
| 
 | ||||
| /* get a platform dependent unsigned long value */ | ||||
| unsigned long mp_get_long(mp_int * a); | ||||
| 
 | ||||
| /* initialize and set a digit */ | ||||
| int mp_init_set (mp_int * a, mp_digit b); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user