現在來看看OpenSSL中哪些函數是用來具體實現密鑰協商的。
───────────────────────────────────────
int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *eckey, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen))
功能: 密鑰協商
輸入: pub_key【對方公鑰】,eckey【己方密鑰】,KDF【選取的密鑰導出算法】
輸出: out【協商出的祕密信息】,outlen【祕密信息長度】,
返回: 祕密信息長度outlen
出處: ecdh\ech_key.c
備註: KDF,可爲NULL。在ecdhtest.c中,將KDF定義爲SHA1算法。
return ecdh->meth->compute_key(out, outlen, pub_key, eckey, KDF);
───────────────────────────────────────
在這裏ecdh->meth->compute_key指向的是函數ecdh_compute_key,改函數實現了密鑰協商的全過程。
───────────────────────────────────────
static int ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen))
功能: 密鑰協商
輸入: pub_key【對方公鑰】,ecdh【己方密鑰】,KDF【選取的密鑰導出算法】
輸出: out【協商出的祕密信息】,outlen【祕密信息長度】,
返回: 祕密信息長度outlen
出處: ecdh\ech_ossl.c
───────────────────────────────────────