@fails-components/webtransport 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/readme.md +1 -3
- package/src/http3eventloop.cc +83 -9
- package/src/http3eventloop.h +13 -3
- package/src/http3server.cc +22 -22
- package/src/http3server.h +7 -20
- package/src/http3wtstreamvisitor.cc +31 -10
- package/src/http3wtstreamvisitor.h +38 -11
- package/src/webtransport.js +91 -23
- package/test/echoserver.js +29 -5
- package/test/testsuite.js +242 -220
- package/third_party/boringssl/src/CMakeLists.txt +2 -0
- package/third_party/boringssl/src/crypto/CMakeLists.txt +1 -0
- package/third_party/boringssl/src/crypto/asn1/a_bitstr.c +174 -177
- package/third_party/boringssl/src/crypto/asn1/a_bool.c +46 -48
- package/third_party/boringssl/src/crypto/asn1/a_d2i_fp.c +21 -23
- package/third_party/boringssl/src/crypto/asn1/a_dup.c +21 -23
- package/third_party/boringssl/src/crypto/asn1/a_gentm.c +84 -187
- package/third_party/boringssl/src/crypto/asn1/a_i2d_fp.c +19 -21
- package/third_party/boringssl/src/crypto/asn1/a_int.c +305 -329
- package/third_party/boringssl/src/crypto/asn1/a_mbstr.c +190 -195
- package/third_party/boringssl/src/crypto/asn1/a_object.c +182 -189
- package/third_party/boringssl/src/crypto/asn1/a_octet.c +6 -9
- package/third_party/boringssl/src/crypto/asn1/a_print.c +15 -16
- package/third_party/boringssl/src/crypto/asn1/a_strex.c +386 -399
- package/third_party/boringssl/src/crypto/asn1/a_strnid.c +110 -131
- package/third_party/boringssl/src/crypto/asn1/a_time.c +118 -111
- package/third_party/boringssl/src/crypto/asn1/a_type.c +59 -60
- package/third_party/boringssl/src/crypto/asn1/a_utctm.c +114 -186
- package/third_party/boringssl/src/crypto/asn1/a_utf8.c +171 -159
- package/third_party/boringssl/src/crypto/asn1/asn1_lib.c +245 -260
- package/third_party/boringssl/src/crypto/asn1/asn1_par.c +41 -40
- package/third_party/boringssl/src/crypto/asn1/asn1_test.cc +31 -0
- package/third_party/boringssl/src/crypto/asn1/asn_pack.c +31 -33
- package/third_party/boringssl/src/crypto/asn1/f_int.c +36 -33
- package/third_party/boringssl/src/crypto/asn1/f_string.c +29 -26
- package/third_party/boringssl/src/crypto/asn1/internal.h +62 -61
- package/third_party/boringssl/src/crypto/asn1/tasn_dec.c +706 -702
- package/third_party/boringssl/src/crypto/asn1/tasn_enc.c +507 -524
- package/third_party/boringssl/src/crypto/asn1/tasn_fre.c +141 -133
- package/third_party/boringssl/src/crypto/asn1/tasn_new.c +207 -199
- package/third_party/boringssl/src/crypto/asn1/tasn_typ.c +19 -22
- package/third_party/boringssl/src/crypto/asn1/tasn_utl.c +24 -24
- package/third_party/boringssl/src/crypto/asn1/time_support.c +13 -13
- package/third_party/boringssl/src/crypto/bio/connect.c +9 -3
- package/third_party/boringssl/src/crypto/bytestring/bytestring_test.cc +125 -1
- package/third_party/boringssl/src/crypto/bytestring/cbb.c +4 -7
- package/third_party/boringssl/src/crypto/bytestring/cbs.c +167 -9
- package/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.c +0 -2
- package/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c +23 -54
- package/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.c +0 -2
- package/third_party/boringssl/src/crypto/cipher_extra/e_tls.c +0 -2
- package/third_party/boringssl/src/crypto/curve25519/curve25519.c +6 -8
- package/third_party/boringssl/src/crypto/evp/evp_ctx.c +25 -22
- package/third_party/boringssl/src/crypto/evp/internal.h +15 -9
- package/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_ec_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_ed25519.c +3 -3
- package/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.c +10 -7
- package/third_party/boringssl/src/crypto/evp/p_hkdf.c +241 -0
- package/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_x25519_asn1.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.c +9 -10
- package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +2 -6
- package/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.c +5 -11
- package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +1 -1
- package/third_party/boringssl/src/crypto/fipsmodule/bn/prime.c +2 -0
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +10 -26
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.c +2 -3
- package/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +44 -43
- package/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.c +5 -9
- package/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c +14 -21
- package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +8 -8
- package/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h +1 -4
- package/third_party/boringssl/src/crypto/hkdf/hkdf_test.cc +104 -0
- package/third_party/boringssl/src/crypto/internal.h +18 -4
- package/third_party/boringssl/src/crypto/lhash/internal.h +13 -1
- package/third_party/boringssl/src/crypto/obj/obj_dat.h +4 -1
- package/third_party/boringssl/src/crypto/obj/obj_mac.num +1 -0
- package/third_party/boringssl/src/crypto/obj/objects.txt +2 -0
- package/third_party/boringssl/src/crypto/pem/pem_all.c +77 -86
- package/third_party/boringssl/src/crypto/pem/pem_info.c +221 -233
- package/third_party/boringssl/src/crypto/pem/pem_lib.c +639 -608
- package/third_party/boringssl/src/crypto/pem/pem_oth.c +17 -16
- package/third_party/boringssl/src/crypto/pem/pem_pk8.c +133 -142
- package/third_party/boringssl/src/crypto/pem/pem_pkey.c +96 -92
- package/third_party/boringssl/src/crypto/poly1305/poly1305_vec.c +12 -28
- package/third_party/boringssl/src/crypto/siphash/siphash.c +8 -11
- package/third_party/boringssl/src/crypto/siphash/siphash_test.cc +5 -7
- package/third_party/boringssl/src/crypto/stack/stack.c +33 -16
- package/third_party/boringssl/src/crypto/thread_pthread.c +0 -2
- package/third_party/boringssl/src/crypto/thread_win.c +0 -2
- package/third_party/boringssl/src/crypto/trust_token/internal.h +14 -0
- package/third_party/boringssl/src/crypto/trust_token/pmbtoken.c +127 -30
- package/third_party/boringssl/src/crypto/trust_token/trust_token.c +40 -0
- package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +165 -0
- package/third_party/boringssl/src/crypto/trust_token/voprf.c +55 -6
- package/third_party/boringssl/src/crypto/x509/a_digest.c +23 -24
- package/third_party/boringssl/src/crypto/x509/a_sign.c +52 -55
- package/third_party/boringssl/src/crypto/x509/a_verify.c +33 -34
- package/third_party/boringssl/src/crypto/x509/algorithm.c +17 -18
- package/third_party/boringssl/src/crypto/x509/asn1_gen.c +618 -612
- package/third_party/boringssl/src/crypto/x509/by_dir.c +320 -337
- package/third_party/boringssl/src/crypto/x509/by_file.c +186 -186
- package/third_party/boringssl/src/crypto/x509/i2d_pr.c +11 -14
- package/third_party/boringssl/src/crypto/x509/internal.h +22 -22
- package/third_party/boringssl/src/crypto/x509/name_print.c +155 -150
- package/third_party/boringssl/src/crypto/x509/rsa_pss.c +27 -29
- package/third_party/boringssl/src/crypto/x509/t_crl.c +67 -70
- package/third_party/boringssl/src/crypto/x509/t_req.c +3 -5
- package/third_party/boringssl/src/crypto/x509/t_x509.c +280 -251
- package/third_party/boringssl/src/crypto/x509/t_x509a.c +52 -47
- package/third_party/boringssl/src/crypto/x509/x509.c +3 -4
- package/third_party/boringssl/src/crypto/x509/x509_att.c +234 -223
- package/third_party/boringssl/src/crypto/x509/x509_cmp.c +286 -296
- package/third_party/boringssl/src/crypto/x509/x509_d2.c +37 -32
- package/third_party/boringssl/src/crypto/x509/x509_def.c +14 -30
- package/third_party/boringssl/src/crypto/x509/x509_ext.c +55 -84
- package/third_party/boringssl/src/crypto/x509/x509_lu.c +545 -581
- package/third_party/boringssl/src/crypto/x509/x509_obj.c +131 -121
- package/third_party/boringssl/src/crypto/x509/x509_req.c +120 -139
- package/third_party/boringssl/src/crypto/x509/x509_set.c +128 -142
- package/third_party/boringssl/src/crypto/x509/x509_trs.c +185 -193
- package/third_party/boringssl/src/crypto/x509/x509_txt.c +70 -72
- package/third_party/boringssl/src/crypto/x509/x509_v3.c +172 -161
- package/third_party/boringssl/src/crypto/x509/x509_vfy.c +2041 -2053
- package/third_party/boringssl/src/crypto/x509/x509_vpm.c +441 -461
- package/third_party/boringssl/src/crypto/x509/x509cset.c +152 -170
- package/third_party/boringssl/src/crypto/x509/x509name.c +274 -260
- package/third_party/boringssl/src/crypto/x509/x509rset.c +43 -20
- package/third_party/boringssl/src/crypto/x509/x509spki.c +62 -63
- package/third_party/boringssl/src/crypto/x509/x_algor.c +64 -62
- package/third_party/boringssl/src/crypto/x509/x_all.c +103 -133
- package/third_party/boringssl/src/crypto/x509/x_attrib.c +23 -24
- package/third_party/boringssl/src/crypto/x509/x_crl.c +310 -321
- package/third_party/boringssl/src/crypto/x509/x_exten.c +6 -5
- package/third_party/boringssl/src/crypto/x509/x_info.c +31 -28
- package/third_party/boringssl/src/crypto/x509/x_name.c +361 -365
- package/third_party/boringssl/src/crypto/x509/x_pkey.c +38 -32
- package/third_party/boringssl/src/crypto/x509/x_pubkey.c +114 -117
- package/third_party/boringssl/src/crypto/x509/x_req.c +27 -29
- package/third_party/boringssl/src/crypto/x509/x_sig.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_spki.c +8 -10
- package/third_party/boringssl/src/crypto/x509/x_val.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_x509.c +212 -226
- package/third_party/boringssl/src/crypto/x509/x_x509a.c +112 -109
- package/third_party/boringssl/src/crypto/x509v3/ext_dat.h +10 -13
- package/third_party/boringssl/src/crypto/x509v3/internal.h +72 -87
- package/third_party/boringssl/src/crypto/x509v3/pcy_cache.c +184 -176
- package/third_party/boringssl/src/crypto/x509v3/pcy_data.c +58 -56
- package/third_party/boringssl/src/crypto/x509v3/pcy_lib.c +71 -70
- package/third_party/boringssl/src/crypto/x509v3/pcy_map.c +56 -58
- package/third_party/boringssl/src/crypto/x509v3/pcy_node.c +89 -91
- package/third_party/boringssl/src/crypto/x509v3/pcy_tree.c +585 -590
- package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +118 -112
- package/third_party/boringssl/src/crypto/x509v3/v3_akeya.c +3 -3
- package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +447 -451
- package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +44 -38
- package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +39 -43
- package/third_party/boringssl/src/crypto/x509v3/v3_conf.c +321 -320
- package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +352 -327
- package/third_party/boringssl/src/crypto/x509v3/v3_crld.c +437 -383
- package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +23 -16
- package/third_party/boringssl/src/crypto/x509v3/v3_extku.c +62 -53
- package/third_party/boringssl/src/crypto/x509v3/v3_genn.c +118 -115
- package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +30 -31
- package/third_party/boringssl/src/crypto/x509v3/v3_info.c +112 -98
- package/third_party/boringssl/src/crypto/x509v3/v3_int.c +40 -15
- package/third_party/boringssl/src/crypto/x509v3/v3_lib.c +248 -252
- package/third_party/boringssl/src/crypto/x509v3/v3_ncons.c +390 -386
- package/third_party/boringssl/src/crypto/x509v3/v3_ocsp.c +45 -32
- package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +206 -209
- package/third_party/boringssl/src/crypto/x509v3/v3_pcia.c +6 -8
- package/third_party/boringssl/src/crypto/x509v3/v3_pcons.c +54 -50
- package/third_party/boringssl/src/crypto/x509v3/v3_pmaps.c +66 -65
- package/third_party/boringssl/src/crypto/x509v3/v3_prn.c +144 -133
- package/third_party/boringssl/src/crypto/x509v3/v3_purp.c +695 -709
- package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +75 -69
- package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +1102 -1082
- package/third_party/boringssl/src/include/openssl/base.h +3 -1
- package/third_party/boringssl/src/include/openssl/bn.h +3 -0
- package/third_party/boringssl/src/include/openssl/bytestring.h +20 -0
- package/third_party/boringssl/src/include/openssl/evp.h +6 -5
- package/third_party/boringssl/src/include/openssl/kdf.h +91 -0
- package/third_party/boringssl/src/include/openssl/nid.h +4 -0
- package/third_party/boringssl/src/include/openssl/ssl.h +6 -1
- package/third_party/boringssl/src/include/openssl/stack.h +47 -32
- package/third_party/boringssl/src/include/openssl/trust_token.h +18 -3
- package/third_party/boringssl/src/include/openssl/x509.h +18 -0
- package/third_party/boringssl/src/ssl/ssl_file.cc +61 -99
- package/third_party/boringssl/src/ssl/ssl_test.cc +101 -0
- package/third_party/boringssl/src/util/doc.config +2 -1
- package/third_party/boringssl/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go +8 -0
- package/third_party/googleurl/AUTHORS +16 -2
- package/third_party/googleurl/base/BUILD +1 -0
- package/third_party/googleurl/base/compiler_specific.h +16 -17
- package/third_party/googleurl/base/containers/contiguous_iterator.h +13 -9
- package/third_party/googleurl/base/containers/span.h +23 -8
- package/third_party/googleurl/base/memory/raw_ptr.h +17 -25
- package/third_party/googleurl/base/memory/raw_ptr_exclusion.h +21 -0
- package/third_party/googleurl/base/strings/escape.cc +14 -2
- package/third_party/googleurl/base/strings/safe_sprintf.h +1 -1
- package/third_party/googleurl/base/strings/string_number_conversions.cc +5 -3
- package/third_party/googleurl/base/strings/string_number_conversions_internal.h +5 -5
- package/third_party/googleurl/base/strings/string_piece.h +3 -3
- package/third_party/googleurl/base/strings/string_util.cc +4 -27
- package/third_party/googleurl/base/strings/string_util.h +43 -8
- package/third_party/googleurl/base/strings/string_util_internal.h +11 -12
- package/third_party/googleurl/base/strings/string_util_unittest.cc +33 -0
- package/third_party/googleurl/base/strings/string_util_win.cc +0 -5
- package/third_party/googleurl/base/strings/string_util_win.h +9 -1
- package/third_party/googleurl/base/strings/utf_offset_string_conversions.cc +1 -1
- package/third_party/googleurl/base/strings/utf_string_conversion_utils.cc +5 -8
- package/third_party/googleurl/base/strings/utf_string_conversion_utils.h +13 -10
- package/third_party/googleurl/base/strings/utf_string_conversions.cc +32 -25
- package/third_party/googleurl/base/template_util.h +23 -35
- package/third_party/googleurl/build/build_config.h +14 -3
- package/third_party/googleurl/copy.bara.sky +1 -1
- package/third_party/googleurl/url/gurl.cc +8 -4
- package/third_party/googleurl/url/gurl.h +1 -0
- package/third_party/googleurl/url/gurl_unittest.cc +1 -0
- package/third_party/googleurl/url/origin.h +36 -26
- package/third_party/googleurl/url/scheme_host_port.h +4 -1
- package/third_party/googleurl/url/url_canon.h +2 -1
- package/third_party/googleurl/url/url_canon_internal.cc +9 -7
- package/third_party/googleurl/url/url_canon_internal.h +16 -16
- package/third_party/googleurl/url/url_canon_stdstring.h +2 -1
- package/third_party/googleurl/url/url_util.cc +9 -8
- package/third_party/quiche/build/source_list.bzl +7 -0
- package/third_party/quiche/build/source_list.gni +7 -0
- package/third_party/quiche/build/source_list.json +7 -0
- package/third_party/quiche/quiche/common/platform/api/quiche_mem_slice.h +7 -3
- package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +86 -2
- package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +104 -2
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +23 -0
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +6 -1
- package/third_party/quiche/quiche/quic/core/congestion_control/send_algorithm_test.cc +0 -16
- package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -1
- package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +56 -2
- package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -0
- package/third_party/quiche/quiche/quic/core/http/http_constants.h +1 -0
- package/third_party/quiche/quiche/quic/core/http/http_encoder.cc +28 -17
- package/third_party/quiche/quiche/quic/core/http/http_encoder.h +5 -0
- package/third_party/quiche/quiche/quic/core/http/http_encoder_test.cc +26 -30
- package/third_party/quiche/quiche/quic/core/http/http_frames.h +1 -0
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.cc +4 -4
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base_test.cc +1 -1
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_client_session.cc +5 -1
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +6 -33
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +0 -17
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +5 -20
- package/third_party/quiche/quiche/quic/core/io/quic_event_loop.h +81 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.cc +265 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.h +152 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop_test.cc +341 -0
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.cc +3 -1
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.h +7 -7
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store_test.cc +4 -3
- package/third_party/quiche/quiche/quic/core/quic_connection.cc +69 -19
- package/third_party/quiche/quiche/quic/core/quic_connection.h +9 -3
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.cc +29 -10
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.h +5 -3
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +85 -22
- package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +186 -30
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +2 -1
- package/third_party/quiche/quiche/quic/core/quic_default_clock.cc +31 -0
- package/third_party/quiche/quiche/quic/core/quic_default_clock.h +34 -0
- package/third_party/quiche/quiche/quic/core/quic_default_connection_helper.h +49 -0
- package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +53 -37
- package/third_party/quiche/quiche/quic/core/quic_dispatcher.h +19 -11
- package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +15 -2
- package/third_party/quiche/quiche/quic/core/quic_flags_list.h +10 -4
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector_test.cc +4 -4
- package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +14 -3
- package/third_party/quiche/quiche/quic/core/quic_packet_creator_test.cc +145 -2
- package/third_party/quiche/quiche/quic/core/quic_packets.cc +3 -1
- package/third_party/quiche/quiche/quic/core/quic_packets.h +4 -0
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.cc +13 -11
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.h +9 -0
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager_test.cc +6 -0
- package/third_party/quiche/quiche/quic/core/quic_session.cc +3 -2
- package/third_party/quiche/quiche/quic/core/quic_session.h +8 -3
- package/third_party/quiche/quiche/quic/core/quic_types.cc +18 -0
- package/third_party/quiche/quiche/quic/core/quic_types.h +3 -0
- package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.cc +3 -0
- package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.h +10 -0
- package/third_party/quiche/quiche/quic/test_tools/mock_quic_session_visitor.h +1 -1
- package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +1 -1
- package/third_party/quiche/quiche/quic/test_tools/server_thread.cc +3 -2
- package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.cc +7 -1
- package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.h +3 -0
- package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.h +4 -2
- package/certs/ca.cnf +0 -69
- package/certs/generate_certs.sh +0 -53
- package/certs/generate_certs_leaf.sh +0 -53
- package/certs/leaf.cnf +0 -24
- package/certs/readme.txt +0 -2
- package/third_party/quiche/build/BUILD.bazel +0 -7
|
@@ -74,17 +74,14 @@
|
|
|
74
74
|
typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY;
|
|
75
75
|
DEFINE_STACK_OF(STACK_OF_X509_NAME_ENTRY)
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* ever see in practice.
|
|
80
|
-
*/
|
|
77
|
+
// Maximum length of X509_NAME: much larger than anything we should
|
|
78
|
+
// ever see in practice.
|
|
81
79
|
|
|
82
80
|
#define X509_NAME_MAX (1024 * 1024)
|
|
83
81
|
|
|
84
|
-
static int x509_name_ex_d2i(ASN1_VALUE **val,
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
int tag, int aclass, char opt, ASN1_TLC *ctx);
|
|
82
|
+
static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
|
|
83
|
+
long len, const ASN1_ITEM *it, int tag, int aclass,
|
|
84
|
+
char opt, ASN1_TLC *ctx);
|
|
88
85
|
|
|
89
86
|
static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out,
|
|
90
87
|
const ASN1_ITEM *it, int tag, int aclass);
|
|
@@ -94,42 +91,39 @@ static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it);
|
|
|
94
91
|
static int x509_name_encode(X509_NAME *a);
|
|
95
92
|
static int x509_name_canon(X509_NAME *a);
|
|
96
93
|
static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in);
|
|
97
|
-
static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *
|
|
94
|
+
static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname,
|
|
98
95
|
unsigned char **in);
|
|
99
96
|
|
|
100
97
|
ASN1_SEQUENCE(X509_NAME_ENTRY) = {
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT),
|
|
99
|
+
ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE),
|
|
103
100
|
} ASN1_SEQUENCE_END(X509_NAME_ENTRY)
|
|
104
101
|
|
|
105
102
|
IMPLEMENT_ASN1_FUNCTIONS(X509_NAME_ENTRY)
|
|
106
103
|
IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)
|
|
107
104
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
* declare two template wrappers for this
|
|
111
|
-
*/
|
|
105
|
+
// For the "Name" type we need a SEQUENCE OF { SET OF X509_NAME_ENTRY } so
|
|
106
|
+
// declare two template wrappers for this
|
|
112
107
|
|
|
113
|
-
ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) =
|
|
114
|
-
|
|
108
|
+
ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF,
|
|
109
|
+
0, RDNS,
|
|
110
|
+
X509_NAME_ENTRY)
|
|
115
111
|
ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES)
|
|
116
112
|
|
|
117
113
|
ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) =
|
|
118
|
-
|
|
114
|
+
ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES)
|
|
119
115
|
ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL)
|
|
120
116
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
* convert to the external form.
|
|
126
|
-
*/
|
|
117
|
+
// Normally that's where it would end: we'd have two nested STACK structures
|
|
118
|
+
// representing the ASN1. Unfortunately X509_NAME uses a completely different
|
|
119
|
+
// form and caches encodings so we have to process the internal form and
|
|
120
|
+
// convert to the external form.
|
|
127
121
|
|
|
128
122
|
static const ASN1_EXTERN_FUNCS x509_name_ff = {
|
|
129
123
|
NULL,
|
|
130
124
|
x509_name_ex_new,
|
|
131
125
|
x509_name_ex_free,
|
|
132
|
-
0,
|
|
126
|
+
0, // Default clear behaviour is OK
|
|
133
127
|
x509_name_ex_d2i,
|
|
134
128
|
x509_name_ex_i2d,
|
|
135
129
|
NULL,
|
|
@@ -141,404 +135,406 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_NAME)
|
|
|
141
135
|
|
|
142
136
|
IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME)
|
|
143
137
|
|
|
144
|
-
static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
138
|
+
static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) {
|
|
139
|
+
X509_NAME *ret = NULL;
|
|
140
|
+
ret = OPENSSL_malloc(sizeof(X509_NAME));
|
|
141
|
+
if (!ret) {
|
|
142
|
+
goto memerr;
|
|
143
|
+
}
|
|
144
|
+
if ((ret->entries = sk_X509_NAME_ENTRY_new_null()) == NULL) {
|
|
145
|
+
goto memerr;
|
|
146
|
+
}
|
|
147
|
+
if ((ret->bytes = BUF_MEM_new()) == NULL) {
|
|
148
|
+
goto memerr;
|
|
149
|
+
}
|
|
150
|
+
ret->canon_enc = NULL;
|
|
151
|
+
ret->canon_enclen = 0;
|
|
152
|
+
ret->modified = 1;
|
|
153
|
+
*val = (ASN1_VALUE *)ret;
|
|
154
|
+
return 1;
|
|
155
|
+
|
|
156
|
+
memerr:
|
|
157
|
+
OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
|
|
158
|
+
if (ret) {
|
|
159
|
+
if (ret->entries) {
|
|
160
|
+
sk_X509_NAME_ENTRY_free(ret->entries);
|
|
166
161
|
}
|
|
167
|
-
|
|
162
|
+
OPENSSL_free(ret);
|
|
163
|
+
}
|
|
164
|
+
return 0;
|
|
168
165
|
}
|
|
169
166
|
|
|
170
|
-
static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
167
|
+
static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) {
|
|
168
|
+
X509_NAME *a;
|
|
169
|
+
if (!pval || !*pval) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
a = (X509_NAME *)*pval;
|
|
173
|
+
|
|
174
|
+
BUF_MEM_free(a->bytes);
|
|
175
|
+
sk_X509_NAME_ENTRY_pop_free(a->entries, X509_NAME_ENTRY_free);
|
|
176
|
+
if (a->canon_enc) {
|
|
177
|
+
OPENSSL_free(a->canon_enc);
|
|
178
|
+
}
|
|
179
|
+
OPENSSL_free(a);
|
|
180
|
+
*pval = NULL;
|
|
183
181
|
}
|
|
184
182
|
|
|
185
|
-
static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne)
|
|
186
|
-
|
|
187
|
-
sk_X509_NAME_ENTRY_free(ne);
|
|
183
|
+
static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) {
|
|
184
|
+
sk_X509_NAME_ENTRY_free(ne);
|
|
188
185
|
}
|
|
189
186
|
|
|
190
|
-
static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne)
|
|
191
|
-
|
|
192
|
-
sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free);
|
|
187
|
+
static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) {
|
|
188
|
+
sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free);
|
|
193
189
|
}
|
|
194
190
|
|
|
195
|
-
static int x509_name_ex_d2i(ASN1_VALUE **val,
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
191
|
+
static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
|
|
192
|
+
long len, const ASN1_ITEM *it, int tag, int aclass,
|
|
193
|
+
char opt, ASN1_TLC *ctx) {
|
|
194
|
+
const unsigned char *p = *in, *q;
|
|
195
|
+
STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
|
|
196
|
+
X509_NAME *nm = NULL;
|
|
197
|
+
size_t i, j;
|
|
198
|
+
int ret;
|
|
199
|
+
STACK_OF(X509_NAME_ENTRY) *entries;
|
|
200
|
+
X509_NAME_ENTRY *entry;
|
|
201
|
+
// Bound the size of an X509_NAME we are willing to parse.
|
|
202
|
+
if (len > X509_NAME_MAX) {
|
|
203
|
+
len = X509_NAME_MAX;
|
|
204
|
+
}
|
|
205
|
+
q = p;
|
|
206
|
+
|
|
207
|
+
// Get internal representation of Name
|
|
208
|
+
ASN1_VALUE *intname_val = NULL;
|
|
209
|
+
ret = ASN1_item_ex_d2i(&intname_val, &p, len,
|
|
210
|
+
ASN1_ITEM_rptr(X509_NAME_INTERNAL), tag, aclass, opt,
|
|
211
|
+
ctx);
|
|
212
|
+
if (ret <= 0) {
|
|
213
|
+
return ret;
|
|
214
|
+
}
|
|
215
|
+
intname = (STACK_OF(STACK_OF_X509_NAME_ENTRY) *)intname_val;
|
|
216
|
+
|
|
217
|
+
if (*val) {
|
|
218
|
+
x509_name_ex_free(val, NULL);
|
|
219
|
+
}
|
|
220
|
+
ASN1_VALUE *nm_val = NULL;
|
|
221
|
+
if (!x509_name_ex_new(&nm_val, NULL)) {
|
|
222
|
+
goto err;
|
|
223
|
+
}
|
|
224
|
+
nm = (X509_NAME *)nm_val;
|
|
225
|
+
// We've decoded it: now cache encoding
|
|
226
|
+
if (!BUF_MEM_grow(nm->bytes, p - q)) {
|
|
227
|
+
goto err;
|
|
228
|
+
}
|
|
229
|
+
OPENSSL_memcpy(nm->bytes->data, q, p - q);
|
|
230
|
+
|
|
231
|
+
// Convert internal representation to X509_NAME structure
|
|
232
|
+
for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname); i++) {
|
|
233
|
+
entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname, i);
|
|
234
|
+
for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
|
|
235
|
+
entry = sk_X509_NAME_ENTRY_value(entries, j);
|
|
236
|
+
entry->set = i;
|
|
237
|
+
if (!sk_X509_NAME_ENTRY_push(nm->entries, entry)) {
|
|
230
238
|
goto err;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
/* Convert internal representation to X509_NAME structure */
|
|
234
|
-
for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname); i++) {
|
|
235
|
-
entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname, i);
|
|
236
|
-
for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
|
|
237
|
-
entry = sk_X509_NAME_ENTRY_value(entries, j);
|
|
238
|
-
entry->set = i;
|
|
239
|
-
if (!sk_X509_NAME_ENTRY_push(nm->entries, entry))
|
|
240
|
-
goto err;
|
|
241
|
-
(void)sk_X509_NAME_ENTRY_set(entries, j, NULL);
|
|
242
|
-
}
|
|
239
|
+
}
|
|
240
|
+
(void)sk_X509_NAME_ENTRY_set(entries, j, NULL);
|
|
243
241
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
242
|
+
}
|
|
243
|
+
ret = x509_name_canon(nm);
|
|
244
|
+
if (!ret) {
|
|
245
|
+
goto err;
|
|
246
|
+
}
|
|
247
|
+
sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
|
|
248
|
+
nm->modified = 0;
|
|
249
|
+
*val = (ASN1_VALUE *)nm;
|
|
250
|
+
*in = p;
|
|
251
|
+
return ret;
|
|
252
|
+
err:
|
|
253
|
+
X509_NAME_free(nm);
|
|
254
|
+
sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
|
|
255
|
+
local_sk_X509_NAME_ENTRY_pop_free);
|
|
256
|
+
OPENSSL_PUT_ERROR(X509, ERR_R_ASN1_LIB);
|
|
257
|
+
return 0;
|
|
259
258
|
}
|
|
260
259
|
|
|
261
260
|
static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out,
|
|
262
|
-
const ASN1_ITEM *it, int tag, int aclass)
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
*out += ret;
|
|
274
|
-
}
|
|
275
|
-
return ret;
|
|
261
|
+
const ASN1_ITEM *it, int tag, int aclass) {
|
|
262
|
+
X509_NAME *a = (X509_NAME *)*val;
|
|
263
|
+
if (a->modified && (!x509_name_encode(a) || !x509_name_canon(a))) {
|
|
264
|
+
return -1;
|
|
265
|
+
}
|
|
266
|
+
int ret = a->bytes->length;
|
|
267
|
+
if (out != NULL) {
|
|
268
|
+
OPENSSL_memcpy(*out, a->bytes->data, ret);
|
|
269
|
+
*out += ret;
|
|
270
|
+
}
|
|
271
|
+
return ret;
|
|
276
272
|
}
|
|
277
273
|
|
|
278
|
-
static int x509_name_encode(X509_NAME *a)
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
274
|
+
static int x509_name_encode(X509_NAME *a) {
|
|
275
|
+
int len;
|
|
276
|
+
unsigned char *p;
|
|
277
|
+
STACK_OF(X509_NAME_ENTRY) *entries = NULL;
|
|
278
|
+
X509_NAME_ENTRY *entry;
|
|
279
|
+
int set = -1;
|
|
280
|
+
size_t i;
|
|
281
|
+
STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname =
|
|
282
|
+
sk_STACK_OF_X509_NAME_ENTRY_new_null();
|
|
283
|
+
if (!intname) {
|
|
284
|
+
goto memerr;
|
|
285
|
+
}
|
|
286
|
+
for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
|
|
287
|
+
entry = sk_X509_NAME_ENTRY_value(a->entries, i);
|
|
288
|
+
if (entry->set != set) {
|
|
289
|
+
entries = sk_X509_NAME_ENTRY_new_null();
|
|
290
|
+
if (!entries) {
|
|
289
291
|
goto memerr;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
entries = sk_X509_NAME_ENTRY_new_null();
|
|
294
|
-
if (!entries)
|
|
295
|
-
goto memerr;
|
|
296
|
-
if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
|
|
297
|
-
sk_X509_NAME_ENTRY_free(entries);
|
|
298
|
-
goto memerr;
|
|
299
|
-
}
|
|
300
|
-
set = entry->set;
|
|
301
|
-
}
|
|
302
|
-
if (!sk_X509_NAME_ENTRY_push(entries, entry))
|
|
303
|
-
goto memerr;
|
|
304
|
-
}
|
|
305
|
-
ASN1_VALUE *intname_val = (ASN1_VALUE *)intname;
|
|
306
|
-
len =
|
|
307
|
-
ASN1_item_ex_i2d(&intname_val, NULL, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
|
|
308
|
-
/*tag=*/-1, /*aclass=*/0);
|
|
309
|
-
if (len <= 0) {
|
|
310
|
-
goto err;
|
|
311
|
-
}
|
|
312
|
-
if (!BUF_MEM_grow(a->bytes, len))
|
|
292
|
+
}
|
|
293
|
+
if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
|
|
294
|
+
sk_X509_NAME_ENTRY_free(entries);
|
|
313
295
|
goto memerr;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
/*tag=*/-1, /*aclass=*/0) <= 0) {
|
|
317
|
-
goto err;
|
|
296
|
+
}
|
|
297
|
+
set = entry->set;
|
|
318
298
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
299
|
+
if (!sk_X509_NAME_ENTRY_push(entries, entry)) {
|
|
300
|
+
goto memerr;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
ASN1_VALUE *intname_val = (ASN1_VALUE *)intname;
|
|
304
|
+
len = ASN1_item_ex_i2d(&intname_val, NULL, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
|
|
305
|
+
/*tag=*/-1, /*aclass=*/0);
|
|
306
|
+
if (len <= 0) {
|
|
307
|
+
goto err;
|
|
308
|
+
}
|
|
309
|
+
if (!BUF_MEM_grow(a->bytes, len)) {
|
|
310
|
+
goto memerr;
|
|
311
|
+
}
|
|
312
|
+
p = (unsigned char *)a->bytes->data;
|
|
313
|
+
if (ASN1_item_ex_i2d(&intname_val, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
|
|
314
|
+
/*tag=*/-1, /*aclass=*/0) <= 0) {
|
|
315
|
+
goto err;
|
|
316
|
+
}
|
|
317
|
+
sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
|
|
318
|
+
a->modified = 0;
|
|
319
|
+
return 1;
|
|
320
|
+
memerr:
|
|
321
|
+
OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
|
|
325
322
|
err:
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
return 0;
|
|
323
|
+
sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
|
|
324
|
+
return 0;
|
|
329
325
|
}
|
|
330
326
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
327
|
+
// This function generates the canonical encoding of the Name structure. In
|
|
328
|
+
// it all strings are converted to UTF8, leading, trailing and multiple
|
|
329
|
+
// spaces collapsed, converted to lower case and the leading SEQUENCE header
|
|
330
|
+
// removed. In future we could also normalize the UTF8 too. By doing this
|
|
331
|
+
// comparison of Name structures can be rapidly perfomed by just using
|
|
332
|
+
// OPENSSL_memcmp() of the canonical encoding. By omitting the leading SEQUENCE
|
|
333
|
+
// name constraints of type dirName can also be checked with a simple
|
|
334
|
+
// OPENSSL_memcmp().
|
|
335
|
+
|
|
336
|
+
static int x509_name_canon(X509_NAME *a) {
|
|
337
|
+
unsigned char *p;
|
|
338
|
+
STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
|
|
339
|
+
STACK_OF(X509_NAME_ENTRY) *entries = NULL;
|
|
340
|
+
X509_NAME_ENTRY *entry, *tmpentry = NULL;
|
|
341
|
+
int set = -1, ret = 0, len;
|
|
342
|
+
size_t i;
|
|
343
|
+
|
|
344
|
+
if (a->canon_enc) {
|
|
345
|
+
OPENSSL_free(a->canon_enc);
|
|
346
|
+
a->canon_enc = NULL;
|
|
347
|
+
}
|
|
348
|
+
// Special case: empty X509_NAME => null encoding
|
|
349
|
+
if (sk_X509_NAME_ENTRY_num(a->entries) == 0) {
|
|
350
|
+
a->canon_enclen = 0;
|
|
351
|
+
return 1;
|
|
352
|
+
}
|
|
353
|
+
intname = sk_STACK_OF_X509_NAME_ENTRY_new_null();
|
|
354
|
+
if (!intname) {
|
|
355
|
+
goto err;
|
|
356
|
+
}
|
|
357
|
+
for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
|
|
358
|
+
entry = sk_X509_NAME_ENTRY_value(a->entries, i);
|
|
359
|
+
if (entry->set != set) {
|
|
360
|
+
entries = sk_X509_NAME_ENTRY_new_null();
|
|
361
|
+
if (!entries) {
|
|
362
|
+
goto err;
|
|
363
|
+
}
|
|
364
|
+
if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
|
|
365
|
+
sk_X509_NAME_ENTRY_free(entries);
|
|
366
|
+
goto err;
|
|
367
|
+
}
|
|
368
|
+
set = entry->set;
|
|
369
|
+
}
|
|
370
|
+
tmpentry = X509_NAME_ENTRY_new();
|
|
371
|
+
if (tmpentry == NULL) {
|
|
372
|
+
goto err;
|
|
353
373
|
}
|
|
354
|
-
|
|
355
|
-
if (
|
|
356
|
-
|
|
357
|
-
return 1;
|
|
374
|
+
tmpentry->object = OBJ_dup(entry->object);
|
|
375
|
+
if (!asn1_string_canon(tmpentry->value, entry->value)) {
|
|
376
|
+
goto err;
|
|
358
377
|
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
goto err;
|
|
362
|
-
for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
|
|
363
|
-
entry = sk_X509_NAME_ENTRY_value(a->entries, i);
|
|
364
|
-
if (entry->set != set) {
|
|
365
|
-
entries = sk_X509_NAME_ENTRY_new_null();
|
|
366
|
-
if (!entries)
|
|
367
|
-
goto err;
|
|
368
|
-
if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
|
|
369
|
-
sk_X509_NAME_ENTRY_free(entries);
|
|
370
|
-
goto err;
|
|
371
|
-
}
|
|
372
|
-
set = entry->set;
|
|
373
|
-
}
|
|
374
|
-
tmpentry = X509_NAME_ENTRY_new();
|
|
375
|
-
if (tmpentry == NULL)
|
|
376
|
-
goto err;
|
|
377
|
-
tmpentry->object = OBJ_dup(entry->object);
|
|
378
|
-
if (!asn1_string_canon(tmpentry->value, entry->value))
|
|
379
|
-
goto err;
|
|
380
|
-
if (!sk_X509_NAME_ENTRY_push(entries, tmpentry))
|
|
381
|
-
goto err;
|
|
382
|
-
tmpentry = NULL;
|
|
378
|
+
if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) {
|
|
379
|
+
goto err;
|
|
383
380
|
}
|
|
381
|
+
tmpentry = NULL;
|
|
382
|
+
}
|
|
384
383
|
|
|
385
|
-
|
|
384
|
+
// Finally generate encoding
|
|
386
385
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
386
|
+
len = i2d_name_canon(intname, NULL);
|
|
387
|
+
if (len < 0) {
|
|
388
|
+
goto err;
|
|
389
|
+
}
|
|
390
|
+
a->canon_enclen = len;
|
|
392
391
|
|
|
393
|
-
|
|
392
|
+
p = OPENSSL_malloc(a->canon_enclen);
|
|
394
393
|
|
|
395
|
-
|
|
396
|
-
|
|
394
|
+
if (!p) {
|
|
395
|
+
goto err;
|
|
396
|
+
}
|
|
397
397
|
|
|
398
|
-
|
|
398
|
+
a->canon_enc = p;
|
|
399
399
|
|
|
400
|
-
|
|
400
|
+
i2d_name_canon(intname, &p);
|
|
401
401
|
|
|
402
|
-
|
|
402
|
+
ret = 1;
|
|
403
403
|
|
|
404
|
-
|
|
404
|
+
err:
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
406
|
+
if (tmpentry) {
|
|
407
|
+
X509_NAME_ENTRY_free(tmpentry);
|
|
408
|
+
}
|
|
409
|
+
if (intname) {
|
|
410
|
+
sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
|
|
411
|
+
local_sk_X509_NAME_ENTRY_pop_free);
|
|
412
|
+
}
|
|
413
|
+
return ret;
|
|
412
414
|
}
|
|
413
415
|
|
|
414
|
-
|
|
416
|
+
// Bitmap of all the types of string that will be canonicalized.
|
|
415
417
|
|
|
416
|
-
#define ASN1_MASK_CANON
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
418
|
+
#define ASN1_MASK_CANON \
|
|
419
|
+
(B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING | \
|
|
420
|
+
B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING | \
|
|
421
|
+
B_ASN1_VISIBLESTRING)
|
|
420
422
|
|
|
421
|
-
static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in)
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
int len, i;
|
|
423
|
+
static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) {
|
|
424
|
+
unsigned char *to, *from;
|
|
425
|
+
int len, i;
|
|
425
426
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
return 1;
|
|
427
|
+
// If type not in bitmask just copy string across
|
|
428
|
+
if (!(ASN1_tag2bit(in->type) & ASN1_MASK_CANON)) {
|
|
429
|
+
if (!ASN1_STRING_copy(out, in)) {
|
|
430
|
+
return 0;
|
|
431
431
|
}
|
|
432
|
+
return 1;
|
|
433
|
+
}
|
|
432
434
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
435
|
+
out->type = V_ASN1_UTF8STRING;
|
|
436
|
+
out->length = ASN1_STRING_to_UTF8(&out->data, in);
|
|
437
|
+
if (out->length == -1) {
|
|
438
|
+
return 0;
|
|
439
|
+
}
|
|
437
440
|
|
|
438
|
-
|
|
439
|
-
|
|
441
|
+
to = out->data;
|
|
442
|
+
from = to;
|
|
440
443
|
|
|
441
|
-
|
|
444
|
+
len = out->length;
|
|
442
445
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
* MSB set and rely on the isspace() and tolower() functions.
|
|
447
|
-
*/
|
|
446
|
+
// Convert string in place to canonical form. Ultimately we may need to
|
|
447
|
+
// handle a wider range of characters but for now ignore anything with
|
|
448
|
+
// MSB set and rely on the isspace() and tolower() functions.
|
|
448
449
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
450
|
+
// Ignore leading spaces
|
|
451
|
+
while ((len > 0) && !(*from & 0x80) && isspace(*from)) {
|
|
452
|
+
from++;
|
|
453
|
+
len--;
|
|
454
|
+
}
|
|
454
455
|
|
|
455
|
-
|
|
456
|
+
to = from + len;
|
|
456
457
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
458
|
+
// Ignore trailing spaces
|
|
459
|
+
while ((len > 0) && !(to[-1] & 0x80) && isspace(to[-1])) {
|
|
460
|
+
to--;
|
|
461
|
+
len--;
|
|
462
|
+
}
|
|
462
463
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
i = 0;
|
|
466
|
-
while (i < len) {
|
|
467
|
-
/* If MSB set just copy across */
|
|
468
|
-
if (*from & 0x80) {
|
|
469
|
-
*to++ = *from++;
|
|
470
|
-
i++;
|
|
471
|
-
}
|
|
472
|
-
/* Collapse multiple spaces */
|
|
473
|
-
else if (isspace(*from)) {
|
|
474
|
-
/* Copy one space across */
|
|
475
|
-
*to++ = ' ';
|
|
476
|
-
/*
|
|
477
|
-
* Ignore subsequent spaces. Note: don't need to check len here
|
|
478
|
-
* because we know the last character is a non-space so we can't
|
|
479
|
-
* overflow.
|
|
480
|
-
*/
|
|
481
|
-
do {
|
|
482
|
-
from++;
|
|
483
|
-
i++;
|
|
484
|
-
}
|
|
485
|
-
while (!(*from & 0x80) && isspace(*from));
|
|
486
|
-
} else {
|
|
487
|
-
*to++ = OPENSSL_tolower(*from);
|
|
488
|
-
from++;
|
|
489
|
-
i++;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
464
|
+
to = out->data;
|
|
492
465
|
|
|
493
|
-
|
|
466
|
+
i = 0;
|
|
467
|
+
while (i < len) {
|
|
468
|
+
// If MSB set just copy across
|
|
469
|
+
if (*from & 0x80) {
|
|
470
|
+
*to++ = *from++;
|
|
471
|
+
i++;
|
|
472
|
+
}
|
|
473
|
+
// Collapse multiple spaces
|
|
474
|
+
else if (isspace(*from)) {
|
|
475
|
+
// Copy one space across
|
|
476
|
+
*to++ = ' ';
|
|
477
|
+
// Ignore subsequent spaces. Note: don't need to check len here
|
|
478
|
+
// because we know the last character is a non-space so we can't
|
|
479
|
+
// overflow.
|
|
480
|
+
do {
|
|
481
|
+
from++;
|
|
482
|
+
i++;
|
|
483
|
+
} while (!(*from & 0x80) && isspace(*from));
|
|
484
|
+
} else {
|
|
485
|
+
*to++ = OPENSSL_tolower(*from);
|
|
486
|
+
from++;
|
|
487
|
+
i++;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
494
490
|
|
|
495
|
-
|
|
491
|
+
out->length = to - out->data;
|
|
496
492
|
|
|
493
|
+
return 1;
|
|
497
494
|
}
|
|
498
495
|
|
|
499
|
-
static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *
|
|
500
|
-
unsigned char **in)
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
return ltmp;
|
|
514
|
-
len += ltmp;
|
|
496
|
+
static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname,
|
|
497
|
+
unsigned char **in) {
|
|
498
|
+
int len, ltmp;
|
|
499
|
+
size_t i;
|
|
500
|
+
ASN1_VALUE *v;
|
|
501
|
+
STACK_OF(ASN1_VALUE) *intname = (STACK_OF(ASN1_VALUE) *)_intname;
|
|
502
|
+
|
|
503
|
+
len = 0;
|
|
504
|
+
for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) {
|
|
505
|
+
v = sk_ASN1_VALUE_value(intname, i);
|
|
506
|
+
ltmp = ASN1_item_ex_i2d(&v, in, ASN1_ITEM_rptr(X509_NAME_ENTRIES),
|
|
507
|
+
/*tag=*/-1, /*aclass=*/0);
|
|
508
|
+
if (ltmp < 0) {
|
|
509
|
+
return ltmp;
|
|
515
510
|
}
|
|
516
|
-
|
|
511
|
+
len += ltmp;
|
|
512
|
+
}
|
|
513
|
+
return len;
|
|
517
514
|
}
|
|
518
515
|
|
|
519
|
-
int X509_NAME_set(X509_NAME **xn, X509_NAME *name)
|
|
520
|
-
{
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
516
|
+
int X509_NAME_set(X509_NAME **xn, X509_NAME *name) {
|
|
517
|
+
if ((name = X509_NAME_dup(name)) == NULL) {
|
|
518
|
+
return 0;
|
|
519
|
+
}
|
|
520
|
+
X509_NAME_free(*xn);
|
|
521
|
+
*xn = name;
|
|
522
|
+
return 1;
|
|
526
523
|
}
|
|
527
524
|
|
|
528
|
-
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne)
|
|
529
|
-
{
|
|
530
|
-
return ne->set;
|
|
531
|
-
}
|
|
525
|
+
int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) { return ne->set; }
|
|
532
526
|
|
|
533
527
|
int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder,
|
|
534
|
-
size_t *pderlen)
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
528
|
+
size_t *pderlen) {
|
|
529
|
+
// Make sure encoding is valid
|
|
530
|
+
if (i2d_X509_NAME(nm, NULL) <= 0) {
|
|
531
|
+
return 0;
|
|
532
|
+
}
|
|
533
|
+
if (pder != NULL) {
|
|
534
|
+
*pder = (unsigned char *)nm->bytes->data;
|
|
535
|
+
}
|
|
536
|
+
if (pderlen != NULL) {
|
|
537
|
+
*pderlen = nm->bytes->length;
|
|
538
|
+
}
|
|
539
|
+
return 1;
|
|
544
540
|
}
|