| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | #ifndef SECP256K1_ECDH_H
 | 
					
						
							|  |  |  | #define SECP256K1_ECDH_H
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | #include "secp256k1.h"
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | extern "C" { | 
					
						
							| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  | /** A pointer to a function that hashes an EC point to obtain an ECDH secret
 | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  |  *  Returns: 1 if the point was successfully hashed. | 
					
						
							|  |  |  |  *           0 will cause secp256k1_ecdh to fail and return 0. | 
					
						
							|  |  |  |  *           Other return values are not allowed, and the behaviour of | 
					
						
							|  |  |  |  *           secp256k1_ecdh is undefined for other return values. | 
					
						
							|  |  |  |  *  Out:     output:     pointer to an array to be filled by the function | 
					
						
							|  |  |  |  *  In:      x32:        pointer to a 32-byte x coordinate | 
					
						
							|  |  |  |  *           y32:        pointer to a 32-byte y coordinate | 
					
						
							|  |  |  |  *           data:       arbitrary data pointer that is passed through | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  |  */ | 
					
						
							|  |  |  | typedef int (*secp256k1_ecdh_hash_function)( | 
					
						
							|  |  |  |   unsigned char *output, | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  |   const unsigned char *x32, | 
					
						
							|  |  |  |   const unsigned char *y32, | 
					
						
							| 
									
										
										
										
											2018-05-17 00:12:46 +03:00
										 |  |  |   void *data | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-10 11:11:11 +10:30
										 |  |  | /** An implementation of SHA256 hash function that applies to compressed public key.
 | 
					
						
							|  |  |  |  * Populates the output parameter with 32 bytes. */ | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  | SECP256K1_API extern const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_sha256; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  | /** A default ECDH hash function (currently equal to secp256k1_ecdh_hash_function_sha256).
 | 
					
						
							| 
									
										
										
										
											2020-02-10 11:11:11 +10:30
										 |  |  |  * Populates the output parameter with 32 bytes. */ | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  | SECP256K1_API extern const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_default; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | /** Compute an EC Diffie-Hellman secret in constant time
 | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  |  *  Returns: 1: exponentiation was successful | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  |  *           0: scalar was invalid (zero or overflow) or hashfp returned 0 | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:    ctx:        pointer to a context object. | 
					
						
							|  |  |  |  *  Out:     output:     pointer to an array to be filled by hashfp. | 
					
						
							|  |  |  |  *  In:      pubkey:     a pointer to a secp256k1_pubkey containing an initialized public key. | 
					
						
							|  |  |  |  *           seckey:     a 32-byte scalar with which to multiply the point. | 
					
						
							|  |  |  |  *           hashfp:     pointer to a hash function. If NULL, | 
					
						
							|  |  |  |  *                       secp256k1_ecdh_hash_function_sha256 is used | 
					
						
							|  |  |  |  *                       (in which case, 32 bytes will be written to output). | 
					
						
							| 
									
										
										
										
											2020-02-10 12:55:30 +01:00
										 |  |  |  *           data:       arbitrary data pointer that is passed through to hashfp | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *                       (can be NULL for secp256k1_ecdh_hash_function_sha256). | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-09-20 19:36:37 +00:00
										 |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh( | 
					
						
							| 
									
										
										
										
											2015-09-21 20:57:54 +02:00
										 |  |  |   const secp256k1_context* ctx, | 
					
						
							| 
									
										
										
										
											2015-11-12 11:43:06 +03:00
										 |  |  |   unsigned char *output, | 
					
						
							| 
									
										
										
										
											2015-10-05 12:50:11 +02:00
										 |  |  |   const secp256k1_pubkey *pubkey, | 
					
						
							| 
									
										
										
										
											2019-12-17 17:10:11 +00:00
										 |  |  |   const unsigned char *seckey, | 
					
						
							| 
									
										
										
										
											2018-05-17 00:12:46 +03:00
										 |  |  |   secp256k1_ecdh_hash_function hashfp, | 
					
						
							|  |  |  |   void *data | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							| 
									
										
										
										
											2015-06-29 15:06:28 -05:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-08-26 18:44:21 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* SECP256K1_ECDH_H */
 |