rsa-asm #4
			
				
			
		
		
		
	
							
								
								
									
										18
									
								
								rsa/bigint.c
								
								
								
								
							
							
						
						
									
										18
									
								
								rsa/bigint.c
								
								
								
								
							| 
						 | 
					@ -79,8 +79,17 @@ int bigint_dif(bigint_t a, bigint_t b) {
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void tool(bigint_t borrow, bigint_t *y, bigint_t zero, bigint_t a) {
 | 
					int is_not_zero(bigint_t n) {
 | 
				
			||||||
	while (bigint_dif(*y, zero)) {
 | 
						for (size_t i = 0; i < n.len; i++) {
 | 
				
			||||||
 | 
							if (n.data[i]) {
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void tool(bigint_t borrow, bigint_t *y, bigint_t a) {
 | 
				
			||||||
 | 
						while (is_not_zero(*y)) {
 | 
				
			||||||
		for (size_t i = 0; i < a.len; i++) {
 | 
							for (size_t i = 0; i < a.len; i++) {
 | 
				
			||||||
			borrow.data[i] = ~a.data[i] & y->data[i];
 | 
								borrow.data[i] = ~a.data[i] & y->data[i];
 | 
				
			||||||
			a.data[i] = a.data[i] ^ y->data[i];
 | 
								a.data[i] = a.data[i] ^ y->data[i];
 | 
				
			||||||
| 
						 | 
					@ -88,18 +97,15 @@ void tool(bigint_t borrow, bigint_t *y, bigint_t zero, bigint_t a) {
 | 
				
			||||||
		bigint_destroy(*y);
 | 
							bigint_destroy(*y);
 | 
				
			||||||
		*y = assignable_bigint_bitwise_left_shift(borrow);
 | 
							*y = assignable_bigint_bitwise_left_shift(borrow);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO check opti
 | 
					// TODO check opti
 | 
				
			||||||
void bigint_substraction(bigint_t a, bigint_t b) {
 | 
					void bigint_substraction(bigint_t a, bigint_t b) {
 | 
				
			||||||
	bigint_t borrow = bigint_clone(b);
 | 
						bigint_t borrow = bigint_clone(b);
 | 
				
			||||||
	bigint_t y = bigint_clone(b);
 | 
						bigint_t y = bigint_clone(b);
 | 
				
			||||||
	bigint_t zero = bigint_zero(a.len);
 | 
						tool(borrow, &y, a);
 | 
				
			||||||
	tool(borrow, &y, zero, a);
 | 
					 | 
				
			||||||
	bigint_destroy(y);
 | 
						bigint_destroy(y);
 | 
				
			||||||
	bigint_destroy(borrow);
 | 
						bigint_destroy(borrow);
 | 
				
			||||||
	bigint_destroy(zero);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO check opti
 | 
					// TODO check opti
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue