trying to fix dh_shared_secret - #119
This commit is contained in:
		
							parent
							
								
									bc4236d90f
								
							
						
					
					
						commit
						114b694735
					
				@ -355,7 +355,7 @@ error:
 | 
				
			|||||||
int dh_shared_secret(dh_key *private_key, dh_key *public_key,
 | 
					int dh_shared_secret(dh_key *private_key, dh_key *public_key,
 | 
				
			||||||
                     unsigned char *out, unsigned long *outlen)
 | 
					                     unsigned char *out, unsigned long *outlen)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
   void *tmp, *p;
 | 
					   void *tmp, *p, *p_minus1;
 | 
				
			||||||
   unsigned long x;
 | 
					   unsigned long x;
 | 
				
			||||||
   int err;
 | 
					   int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -375,26 +375,31 @@ int dh_shared_secret(dh_key *private_key, dh_key *public_key,
 | 
				
			|||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* compute y^x mod p */
 | 
					   /* compute y^x mod p */
 | 
				
			||||||
   if ((err = mp_init_multi(&tmp, &p, NULL)) != CRYPT_OK) {
 | 
					   if ((err = mp_init_multi(&tmp, &p, &p_minus1, NULL)) != CRYPT_OK) {
 | 
				
			||||||
      return err;
 | 
					      return err;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if ((err = mp_read_radix(p, (char *)sets[private_key->idx].prime, 16)) != CRYPT_OK)     { goto error; }
 | 
					   if ((err = mp_read_radix(p, sets[private_key->idx].prime, 16)) != CRYPT_OK)  { goto error; }
 | 
				
			||||||
   if ((err = mp_exptmod(public_key->y, private_key->x, p, tmp)) != CRYPT_OK)           { goto error; }
 | 
					   if ((err = mp_sub_d(p, 1, p_minus1)) != CRYPT_OK)                            { goto error; }
 | 
				
			||||||
 | 
					   if (mp_cmp(public_key->y, p_minus1) != LTC_MP_LT || mp_cmp_d(public_key->y, 1) != LTC_MP_GT) {
 | 
				
			||||||
 | 
					      /* reject public key with: y <= 1 OR y >= p-1 */
 | 
				
			||||||
 | 
					      err = CRYPT_INVALID_ARG;
 | 
				
			||||||
 | 
					      goto error;
 | 
				
			||||||
 | 
					   };
 | 
				
			||||||
 | 
					   if ((err = mp_exptmod(public_key->y, private_key->x, p, tmp)) != CRYPT_OK)   { goto error; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   /* enough space for output? */
 | 
					   /* enough space for output? */
 | 
				
			||||||
   x = (unsigned long)mp_unsigned_bin_size(tmp);
 | 
					   x = (unsigned long)mp_unsigned_bin_size(tmp);
 | 
				
			||||||
   if (*outlen < x) {
 | 
					   if (*outlen < x) {
 | 
				
			||||||
      err = CRYPT_BUFFER_OVERFLOW;
 | 
					      err = CRYPT_BUFFER_OVERFLOW;
 | 
				
			||||||
      goto done;
 | 
					      goto error;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   if ((err = mp_to_unsigned_bin(tmp, out)) != CRYPT_OK)                                   { goto error; }
 | 
					   if ((err = mp_to_unsigned_bin(tmp, out)) != CRYPT_OK)                        { goto error; }
 | 
				
			||||||
   *outlen = x;
 | 
					   *outlen = x;
 | 
				
			||||||
   err = CRYPT_OK;
 | 
					   err = CRYPT_OK;
 | 
				
			||||||
   goto done;
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
done:
 | 
					   mp_clear_multi(p_minus1, p, tmp, NULL);
 | 
				
			||||||
   mp_clear_multi(p, tmp, NULL);
 | 
					 | 
				
			||||||
   return err;
 | 
					   return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user