aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen2014-12-08 22:18:59 +0100
committerLars Magne Ingebrigtsen2014-12-08 22:23:50 +0100
commitad67503f50b8d2c443e63cb16863b39ad8345567 (patch)
tree6f3d5624b782e3620cabe80601a197c9eaeec736 /src
parent8665a748f946dc9a49bb2753373bb39ac72a6bc2 (diff)
downloademacs-ad67503f50b8d2c443e63cb16863b39ad8345567.tar.gz
emacs-ad67503f50b8d2c443e63cb16863b39ad8345567.zip
Make gnutls-peer-status return even more data
* src/gnutls.c (Fgnutls_peer_status): Return the key exchange, cipher and MAC algorithms.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/gnutls.c68
2 files changed, 66 insertions, 7 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8a5f677615e..b65fbb5c1eb 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12014-12-08 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * gnutls.c (Fgnutls_peer_status): Return the key exchange, cipher
4 and MAC algorithms.
5
12014-12-08 Stefan Monnier <monnier@iro.umontreal.ca> 62014-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
2 7
3 * process.c: Whitespace and line-break nitpicks. 8 * process.c: Whitespace and line-break nitpicks.
diff --git a/src/gnutls.c b/src/gnutls.c
index ca82c7aec4a..46ef21137fb 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -186,11 +186,22 @@ DEF_GNUTLS_FN (int, gnutls_x509_crt_get_key_id,
186 (gnutls_x509_crt_t, unsigned int, 186 (gnutls_x509_crt_t, unsigned int,
187 unsigned char *, size_t *_size)); 187 unsigned char *, size_t *_size));
188DEF_GNUTLS_FN (const char*, gnutls_sec_param_get_name, (gnutls_sec_param_t)); 188DEF_GNUTLS_FN (const char*, gnutls_sec_param_get_name, (gnutls_sec_param_t));
189DEF_GNUTLS_FN (const char*, gnutls_sign_get_name, 189DEF_GNUTLS_FN (const char*, gnutls_sign_get_name, (gnutls_sign_algorithm_t));
190 (gnutls_sign_algorithm_t));
191DEF_GNUTLS_FN (int, gnutls_server_name_set, (gnutls_session_t, 190DEF_GNUTLS_FN (int, gnutls_server_name_set, (gnutls_session_t,
192 gnutls_server_name_type_t, 191 gnutls_server_name_type_t,
193 const void *, size_t)); 192 const void *, size_t));
193DEF_GNUTLS_FN (gnutls_kx_algorithm_t, gnutls_kx_get, (gnutls_session_t));
194DEF_GNUTLS_FN (const char*, gnutls_kx_get_name, (gnutls_kx_algorithm_t));
195DEF_GNUTLS_FN (gnutls_protocol_t, gnutls_protocol_get_version,
196 (gnutls_session_t));
197DEF_GNUTLS_FN (const char*, gnutls_protocol_get_version, (gnutls_protocol_t));
198DEF_GNUTLS_FN (gnutls_cipher_algorithm_t, gnutls_cipher_get,
199 (gnutls_session_t));
200DEF_GNUTLS_FN (const char*, gnutls_cipher_get_name,
201 (gnutls_cipher_algorithm_t));
202DEF_GNUTLS_FN (gnutls_mac_algorithm_t, gnutls_mac_get, (gnutls_session_t));
203DEF_GNUTLS_FN (const char*, gnutls_mac_get_name, (gnutls_mac_algorithm_t));
204
194 205
195static bool 206static bool
196init_gnutls_functions (void) 207init_gnutls_functions (void)
@@ -269,6 +280,14 @@ init_gnutls_functions (void)
269 LOAD_GNUTLS_FN (library, gnutls_sec_param_get_name); 280 LOAD_GNUTLS_FN (library, gnutls_sec_param_get_name);
270 LOAD_GNUTLS_FN (library, gnutls_sign_get_name); 281 LOAD_GNUTLS_FN (library, gnutls_sign_get_name);
271 LOAD_GNUTLS_FN (library, gnutls_server_name_set); 282 LOAD_GNUTLS_FN (library, gnutls_server_name_set);
283 LOAD_GNUTLS_FN (library, gnutls_kx_get);
284 LOAD_GNUTLS_FN (library, gnutls_kx_get_name);
285 LOAD_GNUTLS_FN (library, gnutls_protocol_get_version);
286 LOAD_GNUTLS_FN (library, gnutls_protocol_get_name);
287 LOAD_GNUTLS_FN (library, gnutls_cipher_get);
288 LOAD_GNUTLS_FN (library, gnutls_cipher_get_name);
289 LOAD_GNUTLS_FN (library, gnutls_mac_get);
290 LOAD_GNUTLS_FN (library, gnutls_mac_get_name);
272 291
273 max_log_level = global_gnutls_log_level; 292 max_log_level = global_gnutls_log_level;
274 293
@@ -342,7 +361,15 @@ init_gnutls_functions (void)
342#define fn_gnutls_x509_crt_get_key_id gnutls_x509_crt_get_key_id 361#define fn_gnutls_x509_crt_get_key_id gnutls_x509_crt_get_key_id
343#define fn_gnutls_sec_param_get_name gnutls_sec_param_get_name 362#define fn_gnutls_sec_param_get_name gnutls_sec_param_get_name
344#define fn_gnutls_sign_get_name gnutls_sign_get_name 363#define fn_gnutls_sign_get_name gnutls_sign_get_name
345#define fn_gnutls_server_name_set gnutls_server_name_set 364#define fn_gnutls_server_name_set gnutls_server_name_set
365#define fn_gnutls_kx_get gnutls_kx_get
366#define fn_gnutls_kx_get_name gnutls_kx_get_name
367#define fn_gnutls_protocol_get_version gnutls_protocol_get_version
368#define fn_gnutls_protocol_get_name gnutls_protocol_get_name
369#define fn_gnutls_cipher_get gnutls_cipher_get
370#define fn_gnutls_cipher_get_name gnutls_cipher_get_name
371#define fn_gnutls_mac_get gnutls_mac_get
372#define fn_gnutls_mac_get_name gnutls_mac_get_name
346 373
347#endif /* !WINDOWSNT */ 374#endif /* !WINDOWSNT */
348 375
@@ -998,6 +1025,7 @@ The return value is a property list with top-level keys :warnings and
998{ 1025{
999 Lisp_Object warnings = Qnil, result = Qnil; 1026 Lisp_Object warnings = Qnil, result = Qnil;
1000 unsigned int verification; 1027 unsigned int verification;
1028 gnutls_session_t state;
1001 1029
1002 CHECK_PROCESS (proc); 1030 CHECK_PROCESS (proc);
1003 1031
@@ -1042,15 +1070,41 @@ The return value is a property list with top-level keys :warnings and
1042 (intern (":certificate"), 1070 (intern (":certificate"),
1043 gnutls_certificate_details (XPROCESS (proc)->gnutls_certificate))); 1071 gnutls_certificate_details (XPROCESS (proc)->gnutls_certificate)));
1044 1072
1073 state = XPROCESS (proc)->gnutls_state;
1074
1045 /* Diffie-Hellman prime bits. */ 1075 /* Diffie-Hellman prime bits. */
1046 { 1076 {
1047 int bits = fn_gnutls_dh_get_prime_bits (XPROCESS (proc)->gnutls_state); 1077 int bits = fn_gnutls_dh_get_prime_bits (state);
1048 if (bits > 0) 1078 if (bits > 0)
1049 result = nconc2 (result, list2 1079 result = nconc2 (result, list2 (intern (":diffie-hellman-prime-bits"),
1050 (intern (":diffie-hellman-prime-bits"), 1080 make_number (bits)));
1051 make_number (bits)));
1052 } 1081 }
1053 1082
1083 /* Key exchange. */
1084 result = nconc2
1085 (result, list2 (intern (":key-exchange"),
1086 build_string (fn_gnutls_kx_get_name
1087 (fn_gnutls_kx_get (state)))));
1088
1089 /* Protocol name. */
1090 result = nconc2
1091 (result, list2 (intern (":protocol"),
1092 build_string (fn_gnutls_protocol_get_name
1093 (fn_gnutls_protocol_get_version (state)))));
1094
1095 /* Cipler name. */
1096 result = nconc2
1097 (result, list2 (intern (":cipher"),
1098 build_string (fn_gnutls_cipher_get_name
1099 (fn_gnutls_cipher_get (state)))));
1100
1101 /* MAC name. */
1102 result = nconc2
1103 (result, list2 (intern (":mac"),
1104 build_string (fn_gnutls_mac_get_name
1105 (fn_gnutls_mac_get (state)))));
1106
1107
1054 return result; 1108 return result;
1055} 1109}
1056 1110