Patch for GnuTLS 2.10.2
| Newsgroups | gmane.comp.encryption.gpg.gnutls.cvs |
|---|---|
| Message-ID | <5339305745501B43BA62C95698C4746B0128573F@bs-hermes.int.bardenheuer.de> |
Dear all at the list, Dear Simon, On behalf of our client and in the name of my colleague who did the job I would like to contribute a modification of the GnuTLS 2.10.2 where we added a RSA-PSK key exchange. Find attached the new source files auth_rsa.h and auth_rsa_psk.c, the gnutls.diff and the log files from validation. See also the info from below. The diff must be performed with patch -p1 -c -l -R < gnutls.diff Hopefully someone will pick up our work and will find the right place for it. Feedback is welcome... Best regards, Alexander von Klinski Alexander von Klinski Geschäftsstellenleiter Berlin Vice President - Mobile Computing & eID Bardenheuer GmbH (ALTEN Group) Am Borsigturm 11 D - 13507 Berlin Tel: +49 (0)30 - 43 09 45 9 - 0 Fax: +49 (0)30 - 43 09 45 9 - 9 Mobil: +49 (0)172- 388 75 06 E-Mail: [email protected] <mailto:[email protected]> Web: http://www.bardenheuer.de <http://www.bardenheuer.de/> Geschäftsführer: Reiner Bardenheuer und Yves-Antoine Brun Registergericht: München Registriernummer: HRB 107560 Umsatzsteuer-Identifikationsnummer: DE 1670 1468 5 --- Intention to extend GnuTLS 2.10.2 was the need for RSA-PSK key exchange. The implementation is based on the descriptions in RFC 5246 and RFC 4279 respectively. To implement the new functionality the following files were added: - .../lib/auth_rsa.h - .../lib/auth_rsa_psk.c To integrate the new functionality into the existing GnuTLS the following files were modified: - .../lib/Makefile.am - .../lib/Makefile.in - .../lib/auth_psk.c - .../lib/auth_psk.h - .../lib/auth_rsa.c - .../lib/gnutls_algorithms.c - .../lib/gnutls_priority.c - .../lib/gnutls_state.c - .../lib/includes/gnutls/gnutls.h.in For testing purposes client and server were used as they are built in the context of the GnuTLS build process. The client was called this way: gnutls-cli 127.0.0.1 -p 5556 -d 9 --priority NORMAL:+RSA-PSK:-RSA:-DHE-RSA:-DHE-PSK:-PSK:-DHE-DSS --pskusername <user> --pskkey <key> --insecure The server was called this way: gnutls-serv --echo -p 5556 -d 9 --priority NORMAL:+RSA-PSK:-RSA:-DHE-RSA:-DHE-PSK:-PSK:-DHE-DSS --x509cafile <file1> --x509keyfile <file2> --x509certfile <file3> --pskpasswd <file4> In the client respectively server logs (see attachments) it can be seen that the correct key exchange algorithm and cipher suite were used. --------------------------------------------------------------------------------------------------- *** new/lib/Makefile.am 2011-10-21 16:22:54.000000000 +0200 --- old/lib/Makefile.am 2010-08-01 22:37:50.000000000 +0200 *************** *** 60,66 **** auth_srp_sb64.c auth_srp_rsa.c PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c OPRFI_COBJECTS = ext_oprfi.c --- 60,66 ---- auth_srp_sb64.c auth_srp_rsa.c PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c OPRFI_COBJECTS = ext_oprfi.c *************** *** 103,109 **** gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h auth_rsa.h # Separate so we can create the documentation --- 103,109 ---- gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h # Separate so we can create the documentation *** new/lib/Makefile.in 2011-10-31 11:12:46.000000000 +0100 --- old/lib/Makefile.in 2010-09-30 08:43:01.000000000 +0200 *************** *** 180,192 **** gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h auth_rsa.h gnutls_record.c \ ! gnutls_compress.c debug.c gnutls_cipher.c gnutls_buffers.c \ ! gnutls_handshake.c gnutls_num.c gnutls_errors.c \ ! gnutls_algorithms.c gnutls_dh.c gnutls_kx.c gnutls_priority.c \ ! gnutls_hash_int.c gnutls_cipher_int.c gnutls_session.c \ ! gnutls_db.c x509_b64.c auth_anon.c gnutls_extensions.c \ ! gnutls_auth.c gnutls_v2_compat.c gnutls_datum.c auth_rsa.c \ gnutls_session_pack.c gnutls_mpi.c gnutls_pk.c gnutls_cert.c \ gnutls_global.c gnutls_constate.c gnutls_anon_cred.c \ pkix_asn1_tab.c gnutls_asn1_tab.c gnutls_mem.c auth_cert.c \ --- 180,192 ---- gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h gnutls_record.c gnutls_compress.c \ ! debug.c gnutls_cipher.c gnutls_buffers.c gnutls_handshake.c \ ! gnutls_num.c gnutls_errors.c gnutls_algorithms.c gnutls_dh.c \ ! gnutls_kx.c gnutls_priority.c gnutls_hash_int.c \ ! gnutls_cipher_int.c gnutls_session.c gnutls_db.c x509_b64.c \ ! auth_anon.c gnutls_extensions.c gnutls_auth.c \ ! gnutls_v2_compat.c gnutls_datum.c auth_rsa.c \ gnutls_session_pack.c gnutls_mpi.c gnutls_pk.c gnutls_cert.c \ gnutls_global.c gnutls_constate.c gnutls_anon_cred.c \ pkix_asn1_tab.c gnutls_asn1_tab.c gnutls_mem.c auth_cert.c \ *************** *** 200,207 **** crypto-api.c ext_safe_renegotiation.c ext_oprfi.c ext_srp.c \ gnutls_srp.c auth_srp.c auth_srp_passwd.c auth_srp_sb64.c \ auth_srp_rsa.c auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c \ ! ext_session_ticket.c gnutls.asn pkix.asn libgnutls.map am__objects_1 = am__objects_2 = ext_oprfi.lo @ENABLE_OPRFI_TRUE@am__objects_3 = $(am__objects_2) --- 200,207 ---- crypto-api.c ext_safe_renegotiation.c ext_oprfi.c ext_srp.c \ gnutls_srp.c auth_srp.c auth_srp_passwd.c auth_srp_sb64.c \ auth_srp_rsa.c auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c ext_session_ticket.c \ ! gnutls.asn pkix.asn libgnutls.map am__objects_1 = am__objects_2 = ext_oprfi.lo @ENABLE_OPRFI_TRUE@am__objects_3 = $(am__objects_2) *************** *** 227,233 **** am__objects_5 = ext_srp.lo gnutls_srp.lo auth_srp.lo \ auth_srp_passwd.lo auth_srp_sb64.lo auth_srp_rsa.lo am__objects_6 = auth_psk.lo auth_psk_passwd.lo gnutls_psk.lo \ ! auth_dhe_psk.lo gnutls_psk_netconf.lo auth_rsa_psk.lo am__objects_7 = ext_session_ticket.lo am_libgnutls_la_OBJECTS = $(am__objects_1) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) --- 227,233 ---- am__objects_5 = ext_srp.lo gnutls_srp.lo auth_srp.lo \ auth_srp_passwd.lo auth_srp_sb64.lo auth_srp_rsa.lo am__objects_6 = auth_psk.lo auth_psk_passwd.lo gnutls_psk.lo \ ! auth_dhe_psk.lo gnutls_psk_netconf.lo am__objects_7 = ext_session_ticket.lo am_libgnutls_la_OBJECTS = $(am__objects_1) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) *************** *** 995,1001 **** auth_srp_sb64.c auth_srp_rsa.c PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c OPRFI_COBJECTS = ext_oprfi.c SESSION_TICKET_COBJECTS = ext_session_ticket.c --- 995,1001 ---- auth_srp_sb64.c auth_srp_rsa.c PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \ ! auth_dhe_psk.c gnutls_psk_netconf.c OPRFI_COBJECTS = ext_oprfi.c SESSION_TICKET_COBJECTS = ext_session_ticket.c *************** *** 1032,1038 **** gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h auth_rsa.h # Separate so we can create the documentation --- 1032,1038 ---- gnutls_helper.h auth_psk.h auth_psk_passwd.h \ gnutls_supplemental.h ext_oprfi.h crypto.h random.h \ ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \ ! ext_safe_renegotiation.h # Separate so we can create the documentation *************** *** 1168,1174 **** @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_psk_passwd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa_export.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa_psk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp_passwd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp_rsa.Plo@am__quote@ --- 1168,1173 ---- *** new/lib/auth_psk.c 2011-10-21 16:22:54.000000000 +0200 --- old/lib/auth_psk.c 2010-08-01 22:37:50.000000000 +0200 *************** *** 38,45 **** --- 38,49 ---- int _gnutls_gen_psk_server_kx (gnutls_session_t session, opaque ** data); int _gnutls_gen_psk_client_kx (gnutls_session_t, opaque **); + int _gnutls_proc_psk_client_kx (gnutls_session_t, opaque *, size_t); + int _gnutls_proc_psk_server_kx (gnutls_session_t session, opaque * data, + size_t _data_size); + const mod_auth_st psk_auth_struct = { "PSK", NULL, *** new/lib/auth_psk.h 2011-10-21 16:22:54.000000000 +0200 --- old/lib/auth_psk.h 2010-08-01 22:37:50.000000000 +0200 *************** *** 69,80 **** int _gnutls_set_psk_session_key (gnutls_session_t session, gnutls_datum_t * psk2); - int - _gnutls_gen_psk_server_kx (gnutls_session_t session, opaque ** data); - int - _gnutls_gen_psk_client_kx (gnutls_session_t session, opaque ** data); - int - _gnutls_proc_psk_server_kx (gnutls_session_t session, opaque * data, size_t _data_size); #else # define _gnutls_set_psk_session_key(x,y) GNUTLS_E_INTERNAL_ERROR #endif /* ENABLE_PSK */ --- 69,74 ---- *** new/lib/auth_rsa.c 2011-10-21 16:22:54.000000000 +0200 --- old/lib/auth_rsa.c 2010-08-01 22:37:50.000000000 +0200 *************** *** 42,48 **** #include <gnutls_x509.h> #include <random.h> #include <gnutls_mpi.h> - #include <auth_rsa.h> int _gnutls_gen_rsa_client_kx (gnutls_session_t, opaque **); int _gnutls_proc_rsa_client_kx (gnutls_session_t, opaque *, size_t); --- 42,47 ---- *************** *** 66,72 **** /* This function reads the RSA parameters from peer's certificate; */ ! int _gnutls_get_public_rsa_params (gnutls_session_t session, bigint_t params[MAX_PUBLIC_PARAMS_SIZE], int *params_len) --- 65,71 ---- /* This function reads the RSA parameters from peer's certificate; */ ! static int _gnutls_get_public_rsa_params (gnutls_session_t session, bigint_t params[MAX_PUBLIC_PARAMS_SIZE], int *params_len) *************** *** 147,153 **** /* This function reads the RSA parameters from the private key */ ! int _gnutls_get_private_rsa_params (gnutls_session_t session, bigint_t ** params, int *params_size) { --- 146,152 ---- /* This function reads the RSA parameters from the private key */ ! static int _gnutls_get_private_rsa_params (gnutls_session_t session, bigint_t ** params, int *params_size) { *** new/lib/gnutls_algorithms.c 2011-10-21 16:22:54.000000000 +0200 --- old/lib/gnutls_algorithms.c 2010-08-01 22:37:50.000000000 +0200 *************** *** 51,57 **** {GNUTLS_KX_DHE_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, {GNUTLS_KX_DHE_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, - {GNUTLS_KX_RSA_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_SRP, GNUTLS_CRD_SRP, GNUTLS_CRD_SRP}, {GNUTLS_KX_SRP_RSA, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_SRP_DSS, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE}, --- 51,56 ---- *************** *** 91,97 **** {GNUTLS_KX_SRP_RSA, GNUTLS_PK_RSA, CIPHER_SIGN}, {GNUTLS_KX_DHE_DSS, GNUTLS_PK_DSA, CIPHER_SIGN}, {GNUTLS_KX_SRP_DSS, GNUTLS_PK_DSA, CIPHER_SIGN}, - {GNUTLS_KX_RSA_PSK, GNUTLS_PK_RSA, CIPHER_ENCRYPT}, {0, 0, 0} }; --- 90,95 ---- *************** *** 273,279 **** extern mod_auth_st srp_auth_struct; extern mod_auth_st psk_auth_struct; extern mod_auth_st dhe_psk_auth_struct; - extern mod_auth_st rsa_psk_auth_struct; extern mod_auth_st srp_rsa_auth_struct; extern mod_auth_st srp_dss_auth_struct; --- 271,276 ---- *************** *** 306,312 **** {"PSK", GNUTLS_KX_PSK, &psk_auth_struct, 0, 0}, {"DHE-PSK", GNUTLS_KX_DHE_PSK, &dhe_psk_auth_struct, 1 /* needs DHE params */ , 0}, - {"RSA-PSK", GNUTLS_KX_RSA_PSK, &rsa_psk_auth_struct, 0, 0}, #endif {0, 0, 0, 0, 0} }; --- 303,308 ---- *************** *** 328,334 **** #ifdef ENABLE_PSK GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK, - GNUTLS_KX_RSA_PSK, #endif 0 }; --- 324,329 ---- *************** *** 397,406 **** #define GNUTLS_DHE_PSK_SHA_AES_128_CBC_SHA1 { 0x00, 0x90 } #define GNUTLS_DHE_PSK_SHA_AES_256_CBC_SHA1 { 0x00, 0x91 } - #define GNUTLS_RSA_PSK_SHA_ARCFOUR_SHA1 { 0x00, 0x92 } - #define GNUTLS_RSA_PSK_SHA_3DES_EDE_CBC_SHA1 { 0x00, 0x93 } - #define GNUTLS_RSA_PSK_SHA_AES_128_CBC_SHA1 { 0x00, 0x94 } - #define GNUTLS_RSA_PSK_SHA_AES_256_CBC_SHA1 { 0x00, 0x95 } /* SRP (rfc5054) */ --- 392,397 ---- *************** *** 562,585 **** GNUTLS_MAC_SHA1, GNUTLS_TLS1, GNUTLS_VERSION_MAX), - /* RSA-PSK */ - GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_ARCFOUR_SHA1, - GNUTLS_CIPHER_ARCFOUR, GNUTLS_KX_RSA_PSK, - GNUTLS_MAC_SHA1, GNUTLS_TLS1, - GNUTLS_VERSION_MAX), - GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_3DES_EDE_CBC_SHA1, - GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_RSA_PSK, - GNUTLS_MAC_SHA1, GNUTLS_TLS1, - GNUTLS_VERSION_MAX), - GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_AES_128_CBC_SHA1, - GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_RSA_PSK, - GNUTLS_MAC_SHA1, GNUTLS_TLS1, - GNUTLS_VERSION_MAX), - GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_AES_256_CBC_SHA1, - GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA_PSK, - GNUTLS_MAC_SHA1, GNUTLS_TLS1, - GNUTLS_VERSION_MAX), - /* SRP */ GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_SRP_SHA_3DES_EDE_CBC_SHA1, GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_SRP, --- 553,558 ---- *** new/lib/gnutls_priority.c 2011-10-21 16:22:54.000000000 +0200 --- old/lib/gnutls_priority.c 2010-09-26 15:34:09.000000000 +0200 *************** *** 221,227 **** GNUTLS_KX_DHE_DSS, GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK, - GNUTLS_KX_RSA_PSK, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP, --- 221,226 ---- *************** *** 237,243 **** GNUTLS_KX_DHE_DSS, GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK, - GNUTLS_KX_RSA_PSK, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP, --- 236,241 ---- *************** *** 254,260 **** GNUTLS_KX_DHE_PSK, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS, - GNUTLS_KX_RSA_PSK, GNUTLS_KX_RSA, GNUTLS_KX_PSK, GNUTLS_KX_SRP, --- 252,257 ---- *** new/lib/gnutls_state.c 2011-10-21 16:22:54.000000000 +0200 --- old/lib/gnutls_state.c 2010-08-01 22:37:50.000000000 +0200 *************** *** 1240,1247 **** kx = _gnutls_cipher_suite_get_kx_algo (&session-> security_parameters.current_cipher_suite); ! if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK ! || kx == GNUTLS_KX_RSA_PSK) return 1; return 0; --- 1240,1246 ---- kx = _gnutls_cipher_suite_get_kx_algo (&session-> security_parameters.current_cipher_suite); ! if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK) return 1; return 0; *** new/lib/includes/gnutls/gnutls.h.in 2011-10-21 16:22:52.000000000 +0200 --- old/lib/includes/gnutls/gnutls.h.in 2010-08-01 22:37:50.000000000 +0200 *************** *** 134,140 **** * @GNUTLS_KX_SRP_DSS: SRP-DSS key-exchange algorithm. * @GNUTLS_KX_PSK: PSK key-exchange algorithm. * @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm. - * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm. * * Enumeration of different key exchange algorithms. */ --- 134,139 ---- *************** *** 150,157 **** GNUTLS_KX_SRP_RSA = 7, GNUTLS_KX_SRP_DSS = 8, GNUTLS_KX_PSK = 9, ! GNUTLS_KX_DHE_PSK = 10, ! GNUTLS_KX_RSA_PSK = 11 } gnutls_kx_algorithm_t; /** --- 149,155 ---- GNUTLS_KX_SRP_RSA = 7, GNUTLS_KX_SRP_DSS = 8, GNUTLS_KX_PSK = 9, ! GNUTLS_KX_DHE_PSK = 10 } gnutls_kx_algorithm_t; /**
serv.log
(application/octet-stream, 6.5 KB)
|<2>| ASSERT: x509_b64.c:452 |<2>| Could not find '-----BEGIN RSA PRIVATE KEY' |<2>| ASSERT: x509_b64.c:452 |<2>| Could not find '-----BEGIN DSA PRIVATE KEY' |<2>| ASSERT: privkey.c:374 |<2>| Falling back to PKCS #8 key decoding Echo Server listening on IPv4 0.0.0.0 port 5556...done Echo Server listening on IPv6 :: port 5556...done |<4>| REC[0x100804e00]: Expected Packet[0] Handshake(22) with length: 1 |<4>| REC[0x100804e00]: Received Packet[0] Handshake(22) with length: 103 |<4>| REC[0x100804e00]: Decrypted Packet[0] Handshake(22) with length: 103 |<3>| HSK[0x100804e00]: CLIENT HELLO was received [103 bytes] |<3>| HSK[0x100804e00]: Client's version: 3.3 |<2>| ASSERT: gnutls_db.c:326 |<2>| ASSERT: gnutls_db.c:246 |<2>| EXT[0x100804e00]: Found extension 'CERT_TYPE/9' |<2>| EXT[0x100804e00]: Found extension 'SERVER_NAME/0' |<2>| EXT[0x100804e00]: Found extension 'SAFE_RENEGOTIATION/65281' |<2>| EXT[0x100804e00]: Found extension 'SESSION_TICKET/35' |<2>| EXT[0x100804e00]: Found extension 'SIGNATURE_ALGORITHMS/13' |<2>| EXT[0x100804e00]: Found extension 'CERT_TYPE/9' |<2>| EXT[0x100804e00]: Found extension 'SERVER_NAME/0' |<2>| EXT[0x100804e00]: Found extension 'SAFE_RENEGOTIATION/65281' |<2>| EXT[0x100804e00]: Found extension 'SESSION_TICKET/35' |<2>| EXT[0x100804e00]: Found extension 'SIGNATURE_ALGORITHMS/13' |<2>| EXT[0x100804e00]: Found extension 'CERT_TYPE/9' |<2>| EXT[0x100804e00]: Found extension 'SERVER_NAME/0' |<2>| EXT[0x100804e00]: Found extension 'SAFE_RENEGOTIATION/65281' |<2>| EXT[0x100804e00]: Found extension 'SESSION_TICKET/35' |<2>| EXT[0x100804e00]: Found extension 'SIGNATURE_ALGORITHMS/13' |<3>| HSK[0x100804e00]: Keeping ciphersuite: RSA_PSK_SHA_ARCFOUR_SHA1 |<3>| HSK[0x100804e00]: Keeping ciphersuite: RSA_PSK_SHA_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100804e00]: Keeping ciphersuite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Keeping ciphersuite: RSA_PSK_SHA_AES_256_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_AES_256_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_DSS_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_RSA_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_DSS_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_RSA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_DSS_AES_256_CBC_SHA1 |<3>| HSK[0x100804e00]: Removing ciphersuite: SRP_SHA_RSA_AES_256_CBC_SHA1 |<3>| HSK[0x100804e00]: Selected cipher suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Selected Compression Method: NULL |<3>| HSK[0x100804e00]: Safe renegotiation succeeded |<2>| EXT[0x100804e00]: Sending extension SAFE_RENEGOTIATION |<2>| EXT[0x100804e00]: Sending extension SESSION_TICKET |<3>| HSK[0x100804e00]: SessionID: eb852b85f090f5fabdb87fec5ec17ef4c730db3e14b36350dc878046bb47d068 |<3>| HSK[0x100804e00]: SERVER HELLO was sent [85 bytes] |<4>| REC[0x100804e00]: Sending Packet[0] Handshake(22) with length: 85 |<4>| REC[0x100804e00]: Sent Packet[1] Handshake(22) with length: 90 |<3>| HSK[0x100804e00]: CERTIFICATE was sent [961 bytes] |<4>| REC[0x100804e00]: Sending Packet[1] Handshake(22) with length: 961 |<4>| REC[0x100804e00]: Sent Packet[2] Handshake(22) with length: 966 |<2>| ASSERT: auth_psk.c:316 |<2>| ASSERT: gnutls_kx.c:212 |<3>| HSK[0x100804e00]: SERVER HELLO DONE was sent [4 bytes] |<4>| REC[0x100804e00]: Sending Packet[2] Handshake(22) with length: 4 |<4>| REC[0x100804e00]: Sent Packet[3] Handshake(22) with length: 9 |<4>| REC[0x100804e00]: Expected Packet[1] Handshake(22) with length: 1 |<4>| REC[0x100804e00]: Received Packet[1] Handshake(22) with length: 141 |<4>| REC[0x100804e00]: Decrypted Packet[1] Handshake(22) with length: 141 |<3>| HSK[0x100804e00]: CLIENT KEY EXCHANGE was received [141 bytes] |<4>| REC[0x100804e00]: Expected Packet[2] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100804e00]: Received Packet[2] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100804e00]: ChangeCipherSpec Packet was received |<9>| INT: PREMASTER SECRET[72]: 00300303866ef43ff46c5b65b2db9d95b868a7730cf955ae3d0d989b7be49aed5f4f7d7c85a84cfab405f09088ae929581be0014b4d49e3f370f0aebd1b0adf4f1663eac28e4fd82 |<9>| INT: CLIENT RANDOM[32]: 4eaeb2cb9c78b78af1f3d3d89eb6339b4fb7a65bbe8eaaf07a2e4330000c63b2 |<9>| INT: SERVER RANDOM[32]: 4eaeb2cbfc1b43214a3e4a3d2400b69ac2622411c6665e7858e71a884e918992 |<9>| INT: MASTER SECRET: 6620482b1445b2930bd90399022f72f4539793bcd1e095eaa9a24576a0293a5286ad838103c315a92bba8d8f5af35d6a |<9>| INT: KEY BLOCK[104]: 62cce3ab6f93bffa1158122f6db53c98520f7b7ff4b7cc7ce26dfea36fcac444 |<9>| INT: CLIENT WRITE KEY [16]: 0eef76f584451b0604f06ea5942fee57 |<9>| INT: SERVER WRITE KEY [16]: df77ff636d3dbcdcb957b1a14426e318 |<3>| HSK[0x100804e00]: Cipher Suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Initializing internal [read] cipher sessions |<4>| REC[0x100804e00]: Expected Packet[0] Handshake(22) with length: 1 |<4>| REC[0x100804e00]: Received Packet[0] Handshake(22) with length: 256 |<4>| REC[0x100804e00]: Decrypted Packet[0] Handshake(22) with length: 16 |<3>| HSK[0x100804e00]: FINISHED was received [16 bytes] |<3>| HSK[0x100804e00]: NEW SESSION TICKET was sent [316 bytes] |<4>| REC[0x100804e00]: Sending Packet[3] Handshake(22) with length: 316 |<4>| REC[0x100804e00]: Sent Packet[4] Handshake(22) with length: 321 |<3>| REC[0x100804e00]: Sent ChangeCipherSpec |<4>| REC[0x100804e00]: Sending Packet[4] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100804e00]: Sent Packet[5] Change Cipher Spec(20) with length: 6 |<3>| HSK[0x100804e00]: Cipher Suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100804e00]: Initializing internal [write] cipher sessions |<3>| HSK[0x100804e00]: FINISHED was sent [16 bytes] |<4>| REC[0x100804e00]: Sending Packet[0] Handshake(22) with length: 16 |<4>| REC[0x100804e00]: Sent Packet[1] Handshake(22) with length: 117 Set static Diffie-Hellman parameters, consider --dhparams. Processed 1 CA certificate(s). * Accepted connection from IPv4 127.0.0.1 port 51733 on Mon Oct 31 15:38:03 2011 * Successful handshake from IPv4 127.0.0.1 port 51733 - PSK authentication. Connected as 'user1' - Version: TLS1.2 - Key Exchange: RSA-PSK - Cipher: AES-128-CBC - MAC: SHA1 - Compression: NULL |<2>| ASSERT: gnutls_buffers.c:601 |<2>| ASSERT: gnutls_record.c:918 |<4>| REC: Sending Alert[1|0] - Close notify |<4>| REC[0x100804e00]: Sending Packet[1] Alert(21) with length: 2 |<4>| REC[0x100804e00]: Sent Packet[2] Alert(21) with length: 117 Exiting via signal 2
cli.log
(application/octet-stream, 6 KB)
|<3>| HSK[0x100803e00]: Keeping ciphersuite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Keeping ciphersuite: RSA_PSK_SHA_AES_256_CBC_SHA1 |<3>| HSK[0x100803e00]: Keeping ciphersuite: RSA_PSK_SHA_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100803e00]: Keeping ciphersuite: RSA_PSK_SHA_ARCFOUR_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_DSS_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_DSS_AES_256_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_DSS_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_AES_256_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_3DES_EDE_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_RSA_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_RSA_AES_256_CBC_SHA1 |<3>| HSK[0x100803e00]: Removing ciphersuite: SRP_SHA_RSA_3DES_EDE_CBC_SHA1 |<2>| EXT[0x100803e00]: Sending extension CERT_TYPE |<2>| EXT[0x100803e00]: Sending extension SERVER_NAME |<2>| EXT[0x100803e00]: Sending extension SAFE_RENEGOTIATION |<2>| EXT[0x100803e00]: Sending extension SESSION_TICKET |<2>| EXT[0x100803e00]: Sending extension SIGNATURE_ALGORITHMS |<3>| HSK[0x100803e00]: CLIENT HELLO was sent [103 bytes] |<4>| REC[0x100803e00]: Sending Packet[0] Handshake(22) with length: 103 |<4>| REC[0x100803e00]: Sent Packet[1] Handshake(22) with length: 108 |<4>| REC[0x100803e00]: Expected Packet[0] Handshake(22) with length: 1 |<4>| REC[0x100803e00]: Received Packet[0] Handshake(22) with length: 85 |<4>| REC[0x100803e00]: Decrypted Packet[0] Handshake(22) with length: 85 |<3>| HSK[0x100803e00]: SERVER HELLO was received [85 bytes] |<3>| HSK[0x100803e00]: Server's version: 3.3 |<3>| HSK[0x100803e00]: SessionID length: 32 |<3>| HSK[0x100803e00]: SessionID: eb852b85f090f5fabdb87fec5ec17ef4c730db3e14b36350dc878046bb47d068 |<3>| HSK[0x100803e00]: Selected cipher suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<2>| EXT[0x100803e00]: Found extension 'SAFE_RENEGOTIATION/65281' |<2>| EXT[0x100803e00]: Found extension 'SESSION_TICKET/35' |<3>| HSK[0x100803e00]: Safe renegotiation succeeded |<4>| REC[0x100803e00]: Expected Packet[1] Handshake(22) with length: 1 |<4>| REC[0x100803e00]: Received Packet[1] Handshake(22) with length: 961 |<4>| REC[0x100803e00]: Decrypted Packet[1] Handshake(22) with length: 961 |<3>| HSK[0x100803e00]: CERTIFICATE was received [961 bytes] |<4>| REC[0x100803e00]: Expected Packet[2] Handshake(22) with length: 1 |<4>| REC[0x100803e00]: Received Packet[2] Handshake(22) with length: 4 |<4>| REC[0x100803e00]: Decrypted Packet[2] Handshake(22) with length: 4 |<3>| HSK[0x100803e00]: SERVER HELLO DONE was received [4 bytes] |<2>| ASSERT: gnutls_handshake.c:1332 |<2>| ASSERT: auth_psk.c:365 |<3>| HSK[0x100803e00]: CLIENT KEY EXCHANGE was sent [141 bytes] |<4>| REC[0x100803e00]: Sending Packet[1] Handshake(22) with length: 141 |<4>| REC[0x100803e00]: Sent Packet[2] Handshake(22) with length: 146 |<3>| REC[0x100803e00]: Sent ChangeCipherSpec |<4>| REC[0x100803e00]: Sending Packet[2] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100803e00]: Sent Packet[3] Change Cipher Spec(20) with length: 6 |<9>| INT: PREMASTER SECRET[72]: 00300303866ef43ff46c5b65b2db9d95b868a7730cf955ae3d0d989b7be49aed5f4f7d7c85a84cfab405f09088ae929581be0014b4d49e3f370f0aebd1b0adf4f1663eac28e4fd82 |<9>| INT: CLIENT RANDOM[32]: 4eaeb2cb9c78b78af1f3d3d89eb6339b4fb7a65bbe8eaaf07a2e4330000c63b2 |<9>| INT: SERVER RANDOM[32]: 4eaeb2cbfc1b43214a3e4a3d2400b69ac2622411c6665e7858e71a884e918992 |<9>| INT: MASTER SECRET: 6620482b1445b2930bd90399022f72f4539793bcd1e095eaa9a24576a0293a5286ad838103c315a92bba8d8f5af35d6a |<9>| INT: KEY BLOCK[104]: 62cce3ab6f93bffa1158122f6db53c98520f7b7ff4b7cc7ce26dfea36fcac444 |<9>| INT: CLIENT WRITE KEY [16]: 0eef76f584451b0604f06ea5942fee57 |<9>| INT: SERVER WRITE KEY [16]: df77ff636d3dbcdcb957b1a14426e318 |<3>| HSK[0x100803e00]: Cipher Suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Initializing internal [write] cipher sessions |<3>| HSK[0x100803e00]: FINISHED was sent [16 bytes] |<4>| REC[0x100803e00]: Sending Packet[0] Handshake(22) with length: 16 |<4>| REC[0x100803e00]: Sent Packet[1] Handshake(22) with length: 261 |<4>| REC[0x100803e00]: Expected Packet[3] Handshake(22) with length: 1 |<4>| REC[0x100803e00]: Received Packet[3] Handshake(22) with length: 316 |<4>| REC[0x100803e00]: Decrypted Packet[3] Handshake(22) with length: 316 |<3>| HSK[0x100803e00]: NEW SESSION TICKET was received [316 bytes] |<4>| REC[0x100803e00]: Expected Packet[4] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100803e00]: Received Packet[4] Change Cipher Spec(20) with length: 1 |<4>| REC[0x100803e00]: ChangeCipherSpec Packet was received |<3>| HSK[0x100803e00]: Cipher Suite: RSA_PSK_SHA_AES_128_CBC_SHA1 |<3>| HSK[0x100803e00]: Initializing internal [read] cipher sessions |<4>| REC[0x100803e00]: Expected Packet[0] Handshake(22) with length: 1 |<4>| REC[0x100803e00]: Received Packet[0] Handshake(22) with length: 112 |<4>| REC[0x100803e00]: Decrypted Packet[0] Handshake(22) with length: 16 |<3>| HSK[0x100803e00]: FINISHED was received [16 bytes] |<2>| ASSERT: ext_server_name.c:263 |<2>| ASSERT: dn.c:304 |<2>| ASSERT: dn.c:304 |<2>| ASSERT: verify.c:286 |<2>| ASSERT: verify.c:526 Resolving '127.0.0.1'... Connecting to '127.0.0.1:5556'... - Certificate type: X.509 - Got a certificate list of 1 certificates. - Certificate[0] info: - subject `C=DE,ST=Berlin,L=Berlin,O=Bardenheuer GmbH,OU=Bardenheuer Trust Center,CN=localhost,[email protected]', issuer `C=DE,ST=Berlin,L=Berlin,O=Bardenheuer GmbH,OU=Bardenheuer Trust Center,CN=BA-GROBI,[email protected]', RSA key 1024 bits, signed using RSA-SHA1, activated `2010-11-17 14:05:00 UTC', expires `2011-11-17 14:05:00 UTC', SHA-1 fingerprint `34aea6648dbd6f4c07434eb02776c66b04ee7f14' - The hostname in the certificate does NOT match '127.0.0.1' - Peer's certificate issuer is unknown - Peer's certificate is NOT trusted - Version: TLS1.2 - Key Exchange: RSA-PSK - Cipher: AES-128-CBC - MAC: SHA1 - Compression: NULL - Handshake was completed - Simple Client Mode:
gnutls.diff
(application/octet-stream, 14.2 KB)
*** new/lib/Makefile.am 2011-10-21 16:22:54.000000000 +0200
--- old/lib/Makefile.am 2010-08-01 22:37:50.000000000 +0200
***************
*** 60,66 ****
auth_srp_sb64.c auth_srp_rsa.c
PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c
OPRFI_COBJECTS = ext_oprfi.c
--- 60,66 ----
auth_srp_sb64.c auth_srp_rsa.c
PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c
OPRFI_COBJECTS = ext_oprfi.c
***************
*** 103,109 ****
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h auth_rsa.h
# Separate so we can create the documentation
--- 103,109 ----
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h
# Separate so we can create the documentation
*** new/lib/Makefile.in 2011-10-31 11:12:46.000000000 +0100
--- old/lib/Makefile.in 2010-09-30 08:43:01.000000000 +0200
***************
*** 180,192 ****
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h auth_rsa.h gnutls_record.c \
! gnutls_compress.c debug.c gnutls_cipher.c gnutls_buffers.c \
! gnutls_handshake.c gnutls_num.c gnutls_errors.c \
! gnutls_algorithms.c gnutls_dh.c gnutls_kx.c gnutls_priority.c \
! gnutls_hash_int.c gnutls_cipher_int.c gnutls_session.c \
! gnutls_db.c x509_b64.c auth_anon.c gnutls_extensions.c \
! gnutls_auth.c gnutls_v2_compat.c gnutls_datum.c auth_rsa.c \
gnutls_session_pack.c gnutls_mpi.c gnutls_pk.c gnutls_cert.c \
gnutls_global.c gnutls_constate.c gnutls_anon_cred.c \
pkix_asn1_tab.c gnutls_asn1_tab.c gnutls_mem.c auth_cert.c \
--- 180,192 ----
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h gnutls_record.c gnutls_compress.c \
! debug.c gnutls_cipher.c gnutls_buffers.c gnutls_handshake.c \
! gnutls_num.c gnutls_errors.c gnutls_algorithms.c gnutls_dh.c \
! gnutls_kx.c gnutls_priority.c gnutls_hash_int.c \
! gnutls_cipher_int.c gnutls_session.c gnutls_db.c x509_b64.c \
! auth_anon.c gnutls_extensions.c gnutls_auth.c \
! gnutls_v2_compat.c gnutls_datum.c auth_rsa.c \
gnutls_session_pack.c gnutls_mpi.c gnutls_pk.c gnutls_cert.c \
gnutls_global.c gnutls_constate.c gnutls_anon_cred.c \
pkix_asn1_tab.c gnutls_asn1_tab.c gnutls_mem.c auth_cert.c \
***************
*** 200,207 ****
crypto-api.c ext_safe_renegotiation.c ext_oprfi.c ext_srp.c \
gnutls_srp.c auth_srp.c auth_srp_passwd.c auth_srp_sb64.c \
auth_srp_rsa.c auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c \
! ext_session_ticket.c gnutls.asn pkix.asn libgnutls.map
am__objects_1 =
am__objects_2 = ext_oprfi.lo
@ENABLE_OPRFI_TRUE@am__objects_3 = $(am__objects_2)
--- 200,207 ----
crypto-api.c ext_safe_renegotiation.c ext_oprfi.c ext_srp.c \
gnutls_srp.c auth_srp.c auth_srp_passwd.c auth_srp_sb64.c \
auth_srp_rsa.c auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c ext_session_ticket.c \
! gnutls.asn pkix.asn libgnutls.map
am__objects_1 =
am__objects_2 = ext_oprfi.lo
@ENABLE_OPRFI_TRUE@am__objects_3 = $(am__objects_2)
***************
*** 227,233 ****
am__objects_5 = ext_srp.lo gnutls_srp.lo auth_srp.lo \
auth_srp_passwd.lo auth_srp_sb64.lo auth_srp_rsa.lo
am__objects_6 = auth_psk.lo auth_psk_passwd.lo gnutls_psk.lo \
! auth_dhe_psk.lo gnutls_psk_netconf.lo auth_rsa_psk.lo
am__objects_7 = ext_session_ticket.lo
am_libgnutls_la_OBJECTS = $(am__objects_1) $(am__objects_4) \
$(am__objects_5) $(am__objects_6) $(am__objects_7)
--- 227,233 ----
am__objects_5 = ext_srp.lo gnutls_srp.lo auth_srp.lo \
auth_srp_passwd.lo auth_srp_sb64.lo auth_srp_rsa.lo
am__objects_6 = auth_psk.lo auth_psk_passwd.lo gnutls_psk.lo \
! auth_dhe_psk.lo gnutls_psk_netconf.lo
am__objects_7 = ext_session_ticket.lo
am_libgnutls_la_OBJECTS = $(am__objects_1) $(am__objects_4) \
$(am__objects_5) $(am__objects_6) $(am__objects_7)
***************
*** 995,1001 ****
auth_srp_sb64.c auth_srp_rsa.c
PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c auth_rsa_psk.c
OPRFI_COBJECTS = ext_oprfi.c
SESSION_TICKET_COBJECTS = ext_session_ticket.c
--- 995,1001 ----
auth_srp_sb64.c auth_srp_rsa.c
PSK_COBJECTS = auth_psk.c auth_psk_passwd.c gnutls_psk.c \
! auth_dhe_psk.c gnutls_psk_netconf.c
OPRFI_COBJECTS = ext_oprfi.c
SESSION_TICKET_COBJECTS = ext_session_ticket.c
***************
*** 1032,1038 ****
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h auth_rsa.h
# Separate so we can create the documentation
--- 1032,1038 ----
gnutls_helper.h auth_psk.h auth_psk_passwd.h \
gnutls_supplemental.h ext_oprfi.h crypto.h random.h \
ext_session_ticket.h ext_signature.h gnutls_cryptodev.h \
! ext_safe_renegotiation.h
# Separate so we can create the documentation
***************
*** 1168,1174 ****
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_psk_passwd.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa_export.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_rsa_psk.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp_passwd.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_srp_rsa.Plo@am__quote@
--- 1168,1173 ----
*** new/lib/auth_psk.c 2011-10-21 16:22:54.000000000 +0200
--- old/lib/auth_psk.c 2010-08-01 22:37:50.000000000 +0200
***************
*** 38,45 ****
--- 38,49 ----
int _gnutls_gen_psk_server_kx (gnutls_session_t session, opaque ** data);
int _gnutls_gen_psk_client_kx (gnutls_session_t, opaque **);
+
int _gnutls_proc_psk_client_kx (gnutls_session_t, opaque *, size_t);
+ int _gnutls_proc_psk_server_kx (gnutls_session_t session, opaque * data,
+ size_t _data_size);
+
const mod_auth_st psk_auth_struct = {
"PSK",
NULL,
*** new/lib/auth_psk.h 2011-10-21 16:22:54.000000000 +0200
--- old/lib/auth_psk.h 2010-08-01 22:37:50.000000000 +0200
***************
*** 69,80 ****
int
_gnutls_set_psk_session_key (gnutls_session_t session, gnutls_datum_t * psk2);
- int
- _gnutls_gen_psk_server_kx (gnutls_session_t session, opaque ** data);
- int
- _gnutls_gen_psk_client_kx (gnutls_session_t session, opaque ** data);
- int
- _gnutls_proc_psk_server_kx (gnutls_session_t session, opaque * data, size_t _data_size);
#else
# define _gnutls_set_psk_session_key(x,y) GNUTLS_E_INTERNAL_ERROR
#endif /* ENABLE_PSK */
--- 69,74 ----
*** new/lib/auth_rsa.c 2011-10-21 16:22:54.000000000 +0200
--- old/lib/auth_rsa.c 2010-08-01 22:37:50.000000000 +0200
***************
*** 42,48 ****
#include <gnutls_x509.h>
#include <random.h>
#include <gnutls_mpi.h>
- #include <auth_rsa.h>
int _gnutls_gen_rsa_client_kx (gnutls_session_t, opaque **);
int _gnutls_proc_rsa_client_kx (gnutls_session_t, opaque *, size_t);
--- 42,47 ----
***************
*** 66,72 ****
/* This function reads the RSA parameters from peer's certificate;
*/
! int
_gnutls_get_public_rsa_params (gnutls_session_t session,
bigint_t params[MAX_PUBLIC_PARAMS_SIZE],
int *params_len)
--- 65,71 ----
/* This function reads the RSA parameters from peer's certificate;
*/
! static int
_gnutls_get_public_rsa_params (gnutls_session_t session,
bigint_t params[MAX_PUBLIC_PARAMS_SIZE],
int *params_len)
***************
*** 147,153 ****
/* This function reads the RSA parameters from the private key
*/
! int
_gnutls_get_private_rsa_params (gnutls_session_t session,
bigint_t ** params, int *params_size)
{
--- 146,152 ----
/* This function reads the RSA parameters from the private key
*/
! static int
_gnutls_get_private_rsa_params (gnutls_session_t session,
bigint_t ** params, int *params_size)
{
*** new/lib/gnutls_algorithms.c 2011-10-21 16:22:54.000000000 +0200
--- old/lib/gnutls_algorithms.c 2010-08-01 22:37:50.000000000 +0200
***************
*** 51,57 ****
{GNUTLS_KX_DHE_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE},
{GNUTLS_KX_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK},
{GNUTLS_KX_DHE_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK},
- {GNUTLS_KX_RSA_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_CERTIFICATE},
{GNUTLS_KX_SRP, GNUTLS_CRD_SRP, GNUTLS_CRD_SRP},
{GNUTLS_KX_SRP_RSA, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE},
{GNUTLS_KX_SRP_DSS, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE},
--- 51,56 ----
***************
*** 91,97 ****
{GNUTLS_KX_SRP_RSA, GNUTLS_PK_RSA, CIPHER_SIGN},
{GNUTLS_KX_DHE_DSS, GNUTLS_PK_DSA, CIPHER_SIGN},
{GNUTLS_KX_SRP_DSS, GNUTLS_PK_DSA, CIPHER_SIGN},
- {GNUTLS_KX_RSA_PSK, GNUTLS_PK_RSA, CIPHER_ENCRYPT},
{0, 0, 0}
};
--- 90,95 ----
***************
*** 273,279 ****
extern mod_auth_st srp_auth_struct;
extern mod_auth_st psk_auth_struct;
extern mod_auth_st dhe_psk_auth_struct;
- extern mod_auth_st rsa_psk_auth_struct;
extern mod_auth_st srp_rsa_auth_struct;
extern mod_auth_st srp_dss_auth_struct;
--- 271,276 ----
***************
*** 306,312 ****
{"PSK", GNUTLS_KX_PSK, &psk_auth_struct, 0, 0},
{"DHE-PSK", GNUTLS_KX_DHE_PSK, &dhe_psk_auth_struct,
1 /* needs DHE params */ , 0},
- {"RSA-PSK", GNUTLS_KX_RSA_PSK, &rsa_psk_auth_struct, 0, 0},
#endif
{0, 0, 0, 0, 0}
};
--- 303,308 ----
***************
*** 328,334 ****
#ifdef ENABLE_PSK
GNUTLS_KX_PSK,
GNUTLS_KX_DHE_PSK,
- GNUTLS_KX_RSA_PSK,
#endif
0
};
--- 324,329 ----
***************
*** 397,406 ****
#define GNUTLS_DHE_PSK_SHA_AES_128_CBC_SHA1 { 0x00, 0x90 }
#define GNUTLS_DHE_PSK_SHA_AES_256_CBC_SHA1 { 0x00, 0x91 }
- #define GNUTLS_RSA_PSK_SHA_ARCFOUR_SHA1 { 0x00, 0x92 }
- #define GNUTLS_RSA_PSK_SHA_3DES_EDE_CBC_SHA1 { 0x00, 0x93 }
- #define GNUTLS_RSA_PSK_SHA_AES_128_CBC_SHA1 { 0x00, 0x94 }
- #define GNUTLS_RSA_PSK_SHA_AES_256_CBC_SHA1 { 0x00, 0x95 }
/* SRP (rfc5054)
*/
--- 392,397 ----
***************
*** 562,585 ****
GNUTLS_MAC_SHA1, GNUTLS_TLS1,
GNUTLS_VERSION_MAX),
- /* RSA-PSK */
- GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_ARCFOUR_SHA1,
- GNUTLS_CIPHER_ARCFOUR, GNUTLS_KX_RSA_PSK,
- GNUTLS_MAC_SHA1, GNUTLS_TLS1,
- GNUTLS_VERSION_MAX),
- GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_3DES_EDE_CBC_SHA1,
- GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_RSA_PSK,
- GNUTLS_MAC_SHA1, GNUTLS_TLS1,
- GNUTLS_VERSION_MAX),
- GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_AES_128_CBC_SHA1,
- GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_RSA_PSK,
- GNUTLS_MAC_SHA1, GNUTLS_TLS1,
- GNUTLS_VERSION_MAX),
- GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_RSA_PSK_SHA_AES_256_CBC_SHA1,
- GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA_PSK,
- GNUTLS_MAC_SHA1, GNUTLS_TLS1,
- GNUTLS_VERSION_MAX),
-
/* SRP */
GNUTLS_CIPHER_SUITE_ENTRY (GNUTLS_SRP_SHA_3DES_EDE_CBC_SHA1,
GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_SRP,
--- 553,558 ----
*** new/lib/gnutls_priority.c 2011-10-21 16:22:54.000000000 +0200
--- old/lib/gnutls_priority.c 2010-09-26 15:34:09.000000000 +0200
***************
*** 221,227 ****
GNUTLS_KX_DHE_DSS,
GNUTLS_KX_PSK,
GNUTLS_KX_DHE_PSK,
- GNUTLS_KX_RSA_PSK,
GNUTLS_KX_SRP_RSA,
GNUTLS_KX_SRP_DSS,
GNUTLS_KX_SRP,
--- 221,226 ----
***************
*** 237,243 ****
GNUTLS_KX_DHE_DSS,
GNUTLS_KX_PSK,
GNUTLS_KX_DHE_PSK,
- GNUTLS_KX_RSA_PSK,
GNUTLS_KX_SRP_RSA,
GNUTLS_KX_SRP_DSS,
GNUTLS_KX_SRP,
--- 236,241 ----
***************
*** 254,260 ****
GNUTLS_KX_DHE_PSK,
GNUTLS_KX_SRP_RSA,
GNUTLS_KX_SRP_DSS,
- GNUTLS_KX_RSA_PSK,
GNUTLS_KX_RSA,
GNUTLS_KX_PSK,
GNUTLS_KX_SRP,
--- 252,257 ----
*** new/lib/gnutls_state.c 2011-10-21 16:22:54.000000000 +0200
--- old/lib/gnutls_state.c 2010-08-01 22:37:50.000000000 +0200
***************
*** 1240,1247 ****
kx =
_gnutls_cipher_suite_get_kx_algo (&session->
security_parameters.current_cipher_suite);
! if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK
! || kx == GNUTLS_KX_RSA_PSK)
return 1;
return 0;
--- 1240,1246 ----
kx =
_gnutls_cipher_suite_get_kx_algo (&session->
security_parameters.current_cipher_suite);
! if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK)
return 1;
return 0;
*** new/lib/includes/gnutls/gnutls.h.in 2011-10-21 16:22:52.000000000 +0200
--- old/lib/includes/gnutls/gnutls.h.in 2010-08-01 22:37:50.000000000 +0200
***************
*** 134,140 ****
* @GNUTLS_KX_SRP_DSS: SRP-DSS key-exchange algorithm.
* @GNUTLS_KX_PSK: PSK key-exchange algorithm.
* @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm.
- * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm.
*
* Enumeration of different key exchange algorithms.
*/
--- 134,139 ----
***************
*** 150,157 ****
GNUTLS_KX_SRP_RSA = 7,
GNUTLS_KX_SRP_DSS = 8,
GNUTLS_KX_PSK = 9,
! GNUTLS_KX_DHE_PSK = 10,
! GNUTLS_KX_RSA_PSK = 11
} gnutls_kx_algorithm_t;
/**
--- 149,155 ----
GNUTLS_KX_SRP_RSA = 7,
GNUTLS_KX_SRP_DSS = 8,
GNUTLS_KX_PSK = 9,
! GNUTLS_KX_DHE_PSK = 10
} gnutls_kx_algorithm_t;
/**
auth_rsa.h
(application/octet-stream, 1.2 KB)
/* * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010 * Free Software Foundation, Inc. * * Author: Nikos Mavrogiannopoulos * * This file is part of GnuTLS. * * The GnuTLS is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA * */ #ifndef AUTH_RSA_H # define AUTH_RSA_H #include <gnutls_auth.h> int _gnutls_get_public_rsa_params (gnutls_session_t session, bigint_t params[MAX_PUBLIC_PARAMS_SIZE], int *params_len); int _gnutls_get_private_rsa_params (gnutls_session_t session, bigint_t ** params, int *params_size); #endif /* AUTH_RSA_H */
auth_rsa_psk.c
(application/octet-stream, 12 KB)
/*
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010
* Free Software Foundation, Inc.
*
* Author: Nikos Mavrogiannopoulos
*
* This file is part of GnuTLS.
*
* The GnuTLS is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA
*
*/
#include <gnutls_int.h>
#ifdef ENABLE_PSK
#include "gnutls_auth.h"
#include "gnutls_errors.h"
#include "gnutls_dh.h"
#include "gnutls_num.h"
#include "gnutls_mpi.h"
#include <gnutls_state.h>
#include <auth_psk.h>
#include <auth_dh_common.h>
#include <gnutls_datum.h>
#include <auth_cert.h>
#include <auth_rsa.h>
static int gen_rsa_psk_client_kx (gnutls_session_t, opaque **);
static int proc_rsa_psk_client_kx (gnutls_session_t, opaque *, size_t);
static int proc_rsa_psk_server_kx (gnutls_session_t, opaque *, size_t);
const mod_auth_st rsa_psk_auth_struct = {
"RSA PSK",
_gnutls_gen_cert_server_certificate,
NULL, /* generate_client_certificate */
_gnutls_gen_psk_server_kx,
gen_rsa_psk_client_kx,
NULL, /* generate_client_cert_vrfy */
NULL, /* generate_server_certificate_request */
_gnutls_proc_cert_server_certificate,
NULL, /* process_client_certificate */
_gnutls_proc_psk_server_kx,
proc_rsa_psk_client_kx,
NULL, /* process_client_cert_vrfy */
NULL /* process_server_certificate_reuqest */
};
/* Set the PSK premaster secret.
*/
int
set_rsa_psk_session_key (gnutls_session_t session,
gnutls_datum_t * rsa_secret)
{
gnutls_datum_t pwd_psk = { NULL, 0 };
gnutls_datum_t *ppsk;
size_t rsa_secret_size;
int ret;
if (session->security_parameters.entity == GNUTLS_CLIENT)
{
gnutls_psk_client_credentials_t cred;
cred = (gnutls_psk_client_credentials_t)
_gnutls_get_cred (session->key, GNUTLS_CRD_PSK, NULL);
if (cred == NULL)
{
gnutls_assert ();
return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
}
ppsk = &cred->key;
}
else
{ /* SERVER side */
psk_auth_info_t info;
info = _gnutls_get_auth_info (session);
/* find the key of this username
*/
ret = _gnutls_psk_pwd_find_entry (session, info->username, &pwd_psk);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
ppsk = &pwd_psk;
}
rsa_secret_size = rsa_secret->size;
/* set the session key
*/
session->key->key.size = 4 + rsa_secret_size + ppsk->size;
session->key->key.data = gnutls_malloc (session->key->key.size);
if (session->key->key.data == NULL)
{
gnutls_assert ();
ret = GNUTLS_E_MEMORY_ERROR;
goto error;
}
/* format of the premaster secret:
* (uint16_t) other_secret size (48)
* other_secret: 2 byte version + 46 byte random
* (uint16_t) psk_size
* the psk
*/
_gnutls_write_uint16 (rsa_secret_size, session->key->key.data);
memcpy (&session->key->key.data[2], rsa_secret->data, rsa_secret->size);
_gnutls_write_datum16 (&session->key->key.data[rsa_secret_size + 2], *ppsk);
ret = 0;
error:
_gnutls_free_datum (&pwd_psk);
return ret;
}
/* Generate client key exchange message
*
*
* struct {
* select (KeyExchangeAlgorithm) {
* opaque psk_identity<0..2^16-1>;
* EncryptedPreMasterSecret;
* } exchange_keys;
* } ClientKeyExchange;
*/
static int
gen_rsa_psk_client_kx (gnutls_session_t session, opaque ** data)
{
cert_auth_info_t auth = session->key->auth_info;
gnutls_datum_t sdata; /* data to send */
bigint_t params[MAX_PUBLIC_PARAMS_SIZE];
int params_len = MAX_PUBLIC_PARAMS_SIZE;
int ret, i;
gnutls_protocol_t ver;
if (auth == NULL)
{
/* this shouldn't have happened. The proc_certificate
* function should have detected that.
*/
gnutls_assert ();
return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
}
gnutls_datum_t premaster_secret;
premaster_secret.size = GNUTLS_MASTER_SIZE;
premaster_secret.data = gnutls_secure_malloc (premaster_secret.size);
if (premaster_secret.data == NULL)
{
gnutls_assert ();
return GNUTLS_E_MEMORY_ERROR;
}
/* Generate random */
ret = _gnutls_rnd (GNUTLS_RND_RANDOM, premaster_secret.data,
premaster_secret.size);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
/* Get version */
ver = _gnutls_get_adv_version (session);
/* Set version */
if (session->internals.rsa_pms_version[0] == 0)
{
premaster_secret.data[0] = _gnutls_version_get_major (ver);
premaster_secret.data[1] = _gnutls_version_get_minor (ver);
}
else
{ /* use the version provided */
premaster_secret.data[0] = session->internals.rsa_pms_version[0];
premaster_secret.data[1] = session->internals.rsa_pms_version[1];
}
/* move RSA parameters to key (session).
*/
if ((ret =
_gnutls_get_public_rsa_params (session, params, ¶ms_len)) < 0)
{
gnutls_assert ();
return ret;
}
/* Encrypt premaster secret */
if ((ret =
_gnutls_pkcs1_rsa_encrypt (&sdata, &premaster_secret,
params, params_len, 2)) < 0)
{
gnutls_assert ();
return ret;
}
for (i = 0; i < params_len; i++)
_gnutls_mpi_release (¶ms[i]);
/* retrieve PSK credentials */
gnutls_psk_client_credentials_t cred;
cred = (gnutls_psk_client_credentials_t)
_gnutls_get_cred (session->key, GNUTLS_CRD_PSK, NULL);
if (cred == NULL)
{
gnutls_assert ();
return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
}
/* TODO: Bei dhe_psk wird keine PSK aufgerufen, wenn die Parameter
leer sind. Die Funktion wird an dieser Stelle dann abgebrochen.
Können diese womöglich an anderer Stelle übergeben werden? */
if (cred->username.data == NULL && cred->key.data == NULL &&
cred->get_function != NULL)
{
char *username;
gnutls_datum_t key;
ret = cred->get_function (session, &username, &key);
if (ret)
{
gnutls_assert ();
return ret;
}
ret = _gnutls_set_datum (&cred->username, username, strlen (username));
gnutls_free (username);
if (ret < 0)
{
gnutls_assert ();
_gnutls_free_datum (&key);
return ret;
}
ret = _gnutls_set_datum (&cred->key, key.data, key.size);
_gnutls_free_datum (&key);
if (ret < 0)
{
gnutls_assert ();
return GNUTLS_E_MEMORY_ERROR;
}
}
else if (cred->username.data == NULL || cred->key.data == NULL)
{
gnutls_assert ();
return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
}
/* Here we set the PSK key */
ret = set_rsa_psk_session_key (session, &premaster_secret);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
/* Create message for client key exchange
*
* struct {
* opaque psk_identity<0..2^16-1>;
* EncryptedPreMasterSecret;
* }
*/
int message_size = 2 + cred->username.size + 2 + sdata.size;
*data = gnutls_malloc (message_size);
if (*data == NULL)
{
_gnutls_free_datum (&sdata);
return GNUTLS_E_MEMORY_ERROR;
}
/* Write psk_identity and EncryptedPreMasterSecret into data stream
*/
_gnutls_write_datum16 (*data, cred->username);
_gnutls_write_datum16 (&(*data)[cred->username.size + 2], sdata);
_gnutls_free_datum (&sdata);
_gnutls_free_datum (&premaster_secret);
return message_size;
}
/*
Process the client key exchange message
*/
static int
proc_rsa_psk_client_kx (gnutls_session_t session, opaque * data,
size_t _data_size)
{
gnutls_datum_t username;
psk_auth_info_t info;
gnutls_datum_t plaintext;
gnutls_datum_t ciphertext;
int ret, dsize;
bigint_t *params;
int params_len;
int randomize_key = 0;
ssize_t data_size = _data_size;
gnutls_psk_server_credentials_t cred;
cred = (gnutls_psk_server_credentials_t)
_gnutls_get_cred (session->key, GNUTLS_CRD_PSK, NULL);
if (cred == NULL)
{
gnutls_assert ();
return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
}
ret = _gnutls_auth_info_set (session, GNUTLS_CRD_PSK,
sizeof (psk_auth_info_st), 1);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
/*** 1. Extract user psk_identity ***/
DECR_LEN (data_size, 2);
username.size = _gnutls_read_uint16 (&data[0]);
DECR_LEN(data_size, username.size);
username.data = &data[2];
/* copy the username to the auth info structures
*/
info = _gnutls_get_auth_info (session);
if (username.size > MAX_SRP_USERNAME)
{
gnutls_assert();
return GNUTLS_E_ILLEGAL_SRP_USERNAME;
}
memcpy (info->username, username.data, username.size);
info->username[username.size] = 0;
/* Adjust data so it points to EncryptedPreMasterSecret */
data += username.size + 2;
/*** 2. Decrypt and extract EncryptedPreMasterSecret ***/
DECR_LEN (data_size, 2);
ciphertext.data = &data[2];
dsize = _gnutls_read_uint16 (data);
if (dsize != data_size)
{
gnutls_assert ();
return GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
}
ciphertext.size = dsize;
ret = _gnutls_get_private_rsa_params (session, ¶ms, ¶ms_len);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
ret = _gnutls_pkcs1_rsa_decrypt (&plaintext, &ciphertext, params, params_len, 2); /* btype==2 */
if (ret < 0 || plaintext.size != GNUTLS_MASTER_SIZE)
{
/* In case decryption fails then don't inform
* the peer. Just use a random key. (in order to avoid
* attack against pkcs-1 formating).
*/
gnutls_assert ();
_gnutls_x509_log ("auth_rsa: Possible PKCS #1 format attack\n");
randomize_key = 1;
}
else
{
/* If the secret was properly formatted, then
* check the version number.
*/
if (_gnutls_get_adv_version_major (session) != plaintext.data[0]
|| _gnutls_get_adv_version_minor (session) != plaintext.data[1])
{
/* No error is returned here, if the version number check
* fails. We proceed normally.
* That is to defend against the attack described in the paper
* "Attacking RSA-based sessions in SSL/TLS" by Vlastimil Klima,
* Ondej Pokorny and Tomas Rosa.
*/
gnutls_assert ();
_gnutls_x509_log
("auth_rsa: Possible PKCS #1 version check format attack\n");
}
}
gnutls_datum_t premaster_secret;
if (randomize_key != 0)
{
premaster_secret.size = GNUTLS_MASTER_SIZE;
premaster_secret.data = gnutls_malloc (premaster_secret.size);
if (premaster_secret.data == NULL)
{
gnutls_assert ();
return GNUTLS_E_MEMORY_ERROR;
}
/* we do not need strong random numbers here.
*/
ret = _gnutls_rnd (GNUTLS_RND_NONCE, premaster_secret.data,
premaster_secret.size);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
}
else
{
premaster_secret.data = plaintext.data;
premaster_secret.size = plaintext.size;
}
/* This is here to avoid the version check attack
* discussed above.
*/
premaster_secret.data[0] = _gnutls_get_adv_version_major (session);
premaster_secret.data[1] = _gnutls_get_adv_version_minor (session);
ret = set_rsa_psk_session_key (session, &premaster_secret);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
_gnutls_free_datum (&premaster_secret);
return 0;
}
/*
Process the server key exchange message
*/
int
proc_rsa_psk_server_kx (gnutls_session_t session, opaque * data,
size_t _data_size)
{
int ret;
/* read hint from server key exchange */
ret = _gnutls_proc_psk_server_kx(session, data, _data_size);
if (ret < 0)
{
gnutls_assert ();
return ret;
}
return 0;
}
#endif /* ENABLE_PSK */