@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,68 +74,55 @@ DEFINE_LHASH_OF(ASN1_STRING_TABLE)
|
|
|
74
74
|
static LHASH_OF(ASN1_STRING_TABLE) *string_tables = NULL;
|
|
75
75
|
static struct CRYPTO_STATIC_MUTEX string_tables_lock = CRYPTO_STATIC_MUTEX_INIT;
|
|
76
76
|
|
|
77
|
-
void ASN1_STRING_set_default_mask(unsigned long mask)
|
|
78
|
-
{
|
|
79
|
-
}
|
|
77
|
+
void ASN1_STRING_set_default_mask(unsigned long mask) {}
|
|
80
78
|
|
|
81
|
-
unsigned long ASN1_STRING_get_default_mask(void)
|
|
82
|
-
{
|
|
83
|
-
return B_ASN1_UTF8STRING;
|
|
84
|
-
}
|
|
79
|
+
unsigned long ASN1_STRING_get_default_mask(void) { return B_ASN1_UTF8STRING; }
|
|
85
80
|
|
|
86
|
-
int ASN1_STRING_set_default_mask_asc(const char *p)
|
|
87
|
-
{
|
|
88
|
-
return 1;
|
|
89
|
-
}
|
|
81
|
+
int ASN1_STRING_set_default_mask_asc(const char *p) { return 1; }
|
|
90
82
|
|
|
91
83
|
static const ASN1_STRING_TABLE *asn1_string_table_get(int nid);
|
|
92
84
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
* a corresponding OID. For example certificates and certificate requests.
|
|
97
|
-
*/
|
|
85
|
+
// The following function generates an ASN1_STRING based on limits in a
|
|
86
|
+
// table. Frequently the types and length of an ASN1_STRING are restricted by
|
|
87
|
+
// a corresponding OID. For example certificates and certificate requests.
|
|
98
88
|
|
|
99
89
|
ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in,
|
|
100
|
-
int len, int inform, int nid)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
mask &= B_ASN1_UTF8STRING;
|
|
112
|
-
}
|
|
113
|
-
ret = ASN1_mbstring_ncopy(out, in, len, inform, mask, tbl->minsize,
|
|
114
|
-
tbl->maxsize);
|
|
115
|
-
} else {
|
|
116
|
-
ret = ASN1_mbstring_copy(out, in, len, inform, B_ASN1_UTF8STRING);
|
|
117
|
-
}
|
|
118
|
-
if (ret <= 0) {
|
|
119
|
-
return NULL;
|
|
90
|
+
int len, int inform, int nid) {
|
|
91
|
+
ASN1_STRING *str = NULL;
|
|
92
|
+
int ret;
|
|
93
|
+
if (!out) {
|
|
94
|
+
out = &str;
|
|
95
|
+
}
|
|
96
|
+
const ASN1_STRING_TABLE *tbl = asn1_string_table_get(nid);
|
|
97
|
+
if (tbl != NULL) {
|
|
98
|
+
unsigned long mask = tbl->mask;
|
|
99
|
+
if (!(tbl->flags & STABLE_NO_MASK)) {
|
|
100
|
+
mask &= B_ASN1_UTF8STRING;
|
|
120
101
|
}
|
|
121
|
-
|
|
102
|
+
ret = ASN1_mbstring_ncopy(out, in, len, inform, mask, tbl->minsize,
|
|
103
|
+
tbl->maxsize);
|
|
104
|
+
} else {
|
|
105
|
+
ret = ASN1_mbstring_copy(out, in, len, inform, B_ASN1_UTF8STRING);
|
|
106
|
+
}
|
|
107
|
+
if (ret <= 0) {
|
|
108
|
+
return NULL;
|
|
109
|
+
}
|
|
110
|
+
return *out;
|
|
122
111
|
}
|
|
123
112
|
|
|
124
|
-
|
|
125
|
-
* Now the tables and helper functions for the string table:
|
|
126
|
-
*/
|
|
113
|
+
// Now the tables and helper functions for the string table:
|
|
127
114
|
|
|
128
|
-
|
|
129
|
-
#define ub_name
|
|
130
|
-
#define ub_common_name
|
|
131
|
-
#define ub_locality_name
|
|
132
|
-
#define ub_state_name
|
|
133
|
-
#define ub_organization_name
|
|
134
|
-
#define ub_organization_unit_name
|
|
135
|
-
#define ub_email_address
|
|
136
|
-
#define ub_serial_number
|
|
115
|
+
// See RFC 5280.
|
|
116
|
+
#define ub_name 32768
|
|
117
|
+
#define ub_common_name 64
|
|
118
|
+
#define ub_locality_name 128
|
|
119
|
+
#define ub_state_name 128
|
|
120
|
+
#define ub_organization_name 64
|
|
121
|
+
#define ub_organization_unit_name 64
|
|
122
|
+
#define ub_email_address 128
|
|
123
|
+
#define ub_serial_number 64
|
|
137
124
|
|
|
138
|
-
|
|
125
|
+
// This table must be kept in NID order
|
|
139
126
|
|
|
140
127
|
static const ASN1_STRING_TABLE tbl_standard[] = {
|
|
141
128
|
{NID_commonName, 1, ub_common_name, DIRSTRING_TYPE, 0},
|
|
@@ -159,108 +146,100 @@ static const ASN1_STRING_TABLE tbl_standard[] = {
|
|
|
159
146
|
{NID_name, 1, ub_name, DIRSTRING_TYPE, 0},
|
|
160
147
|
{NID_dnQualifier, -1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
|
|
161
148
|
{NID_domainComponent, 1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK},
|
|
162
|
-
{NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}
|
|
163
|
-
};
|
|
149
|
+
{NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}};
|
|
164
150
|
|
|
165
|
-
static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b)
|
|
166
|
-
{
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return 0;
|
|
151
|
+
static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b) {
|
|
152
|
+
if (a->nid < b->nid) {
|
|
153
|
+
return -1;
|
|
154
|
+
}
|
|
155
|
+
if (a->nid > b->nid) {
|
|
156
|
+
return 1;
|
|
157
|
+
}
|
|
158
|
+
return 0;
|
|
174
159
|
}
|
|
175
160
|
|
|
176
|
-
static int table_cmp_void(const void *a, const void *b)
|
|
177
|
-
|
|
178
|
-
return table_cmp(a, b);
|
|
161
|
+
static int table_cmp_void(const void *a, const void *b) {
|
|
162
|
+
return table_cmp(a, b);
|
|
179
163
|
}
|
|
180
164
|
|
|
181
|
-
static uint32_t table_hash(const ASN1_STRING_TABLE *tbl)
|
|
182
|
-
|
|
183
|
-
return OPENSSL_hash32(&tbl->nid, sizeof(tbl->nid));
|
|
165
|
+
static uint32_t table_hash(const ASN1_STRING_TABLE *tbl) {
|
|
166
|
+
return OPENSSL_hash32(&tbl->nid, sizeof(tbl->nid));
|
|
184
167
|
}
|
|
185
168
|
|
|
186
|
-
static const ASN1_STRING_TABLE *asn1_string_table_get(int nid)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (tbl != NULL) {
|
|
194
|
-
return tbl;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
CRYPTO_STATIC_MUTEX_lock_read(&string_tables_lock);
|
|
198
|
-
if (string_tables != NULL) {
|
|
199
|
-
tbl = lh_ASN1_STRING_TABLE_retrieve(string_tables, &key);
|
|
200
|
-
}
|
|
201
|
-
CRYPTO_STATIC_MUTEX_unlock_read(&string_tables_lock);
|
|
202
|
-
/* Note returning |tbl| without the lock is only safe because
|
|
203
|
-
* |ASN1_STRING_TABLE_add| cannot modify or delete existing entries. If we
|
|
204
|
-
* wish to support that, this function must copy the result under a lock. */
|
|
169
|
+
static const ASN1_STRING_TABLE *asn1_string_table_get(int nid) {
|
|
170
|
+
ASN1_STRING_TABLE key;
|
|
171
|
+
key.nid = nid;
|
|
172
|
+
const ASN1_STRING_TABLE *tbl =
|
|
173
|
+
bsearch(&key, tbl_standard, OPENSSL_ARRAY_SIZE(tbl_standard),
|
|
174
|
+
sizeof(ASN1_STRING_TABLE), table_cmp_void);
|
|
175
|
+
if (tbl != NULL) {
|
|
205
176
|
return tbl;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
CRYPTO_STATIC_MUTEX_lock_read(&string_tables_lock);
|
|
180
|
+
if (string_tables != NULL) {
|
|
181
|
+
tbl = lh_ASN1_STRING_TABLE_retrieve(string_tables, &key);
|
|
182
|
+
}
|
|
183
|
+
CRYPTO_STATIC_MUTEX_unlock_read(&string_tables_lock);
|
|
184
|
+
// Note returning |tbl| without the lock is only safe because
|
|
185
|
+
// |ASN1_STRING_TABLE_add| cannot modify or delete existing entries. If we
|
|
186
|
+
// wish to support that, this function must copy the result under a lock.
|
|
187
|
+
return tbl;
|
|
206
188
|
}
|
|
207
189
|
|
|
208
190
|
int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
|
|
209
|
-
unsigned long mask, unsigned long flags)
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
191
|
+
unsigned long mask, unsigned long flags) {
|
|
192
|
+
// Existing entries cannot be overwritten.
|
|
193
|
+
if (asn1_string_table_get(nid) != NULL) {
|
|
194
|
+
OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
216
197
|
|
|
217
|
-
|
|
218
|
-
|
|
198
|
+
int ret = 0;
|
|
199
|
+
CRYPTO_STATIC_MUTEX_lock_write(&string_tables_lock);
|
|
219
200
|
|
|
201
|
+
if (string_tables == NULL) {
|
|
202
|
+
string_tables = lh_ASN1_STRING_TABLE_new(table_hash, table_cmp);
|
|
220
203
|
if (string_tables == NULL) {
|
|
221
|
-
|
|
222
|
-
if (string_tables == NULL) {
|
|
223
|
-
goto err;
|
|
224
|
-
}
|
|
225
|
-
} else {
|
|
226
|
-
/* Check again for an existing entry. One may have been added while
|
|
227
|
-
* unlocked. */
|
|
228
|
-
ASN1_STRING_TABLE key;
|
|
229
|
-
key.nid = nid;
|
|
230
|
-
if (lh_ASN1_STRING_TABLE_retrieve(string_tables, &key) != NULL) {
|
|
231
|
-
OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
232
|
-
goto err;
|
|
233
|
-
}
|
|
204
|
+
goto err;
|
|
234
205
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
tbl->maxsize = maxsize;
|
|
244
|
-
tbl->mask = mask;
|
|
245
|
-
ASN1_STRING_TABLE *old_tbl;
|
|
246
|
-
if (!lh_ASN1_STRING_TABLE_insert(string_tables, &old_tbl, tbl)) {
|
|
247
|
-
OPENSSL_free(tbl);
|
|
248
|
-
goto err;
|
|
206
|
+
} else {
|
|
207
|
+
// Check again for an existing entry. One may have been added while
|
|
208
|
+
// unlocked.
|
|
209
|
+
ASN1_STRING_TABLE key;
|
|
210
|
+
key.nid = nid;
|
|
211
|
+
if (lh_ASN1_STRING_TABLE_retrieve(string_tables, &key) != NULL) {
|
|
212
|
+
OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
|
213
|
+
goto err;
|
|
249
214
|
}
|
|
250
|
-
|
|
251
|
-
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
ASN1_STRING_TABLE *tbl = OPENSSL_malloc(sizeof(ASN1_STRING_TABLE));
|
|
218
|
+
if (tbl == NULL) {
|
|
219
|
+
goto err;
|
|
220
|
+
}
|
|
221
|
+
tbl->nid = nid;
|
|
222
|
+
tbl->flags = flags;
|
|
223
|
+
tbl->minsize = minsize;
|
|
224
|
+
tbl->maxsize = maxsize;
|
|
225
|
+
tbl->mask = mask;
|
|
226
|
+
ASN1_STRING_TABLE *old_tbl;
|
|
227
|
+
if (!lh_ASN1_STRING_TABLE_insert(string_tables, &old_tbl, tbl)) {
|
|
228
|
+
OPENSSL_free(tbl);
|
|
229
|
+
goto err;
|
|
230
|
+
}
|
|
231
|
+
assert(old_tbl == NULL);
|
|
232
|
+
ret = 1;
|
|
252
233
|
|
|
253
234
|
err:
|
|
254
|
-
|
|
255
|
-
|
|
235
|
+
CRYPTO_STATIC_MUTEX_unlock_write(&string_tables_lock);
|
|
236
|
+
return ret;
|
|
256
237
|
}
|
|
257
238
|
|
|
258
|
-
void ASN1_STRING_TABLE_cleanup(void)
|
|
259
|
-
{
|
|
260
|
-
}
|
|
239
|
+
void ASN1_STRING_TABLE_cleanup(void) {}
|
|
261
240
|
|
|
262
241
|
void asn1_get_string_table_for_testing(const ASN1_STRING_TABLE **out_ptr,
|
|
263
242
|
size_t *out_len) {
|
|
264
|
-
|
|
265
|
-
|
|
243
|
+
*out_ptr = tbl_standard;
|
|
244
|
+
*out_len = OPENSSL_ARRAY_SIZE(tbl_standard);
|
|
266
245
|
}
|
|
@@ -65,148 +65,155 @@
|
|
|
65
65
|
|
|
66
66
|
#include "internal.h"
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
* Henson.
|
|
72
|
-
*/
|
|
68
|
+
// This is an implementation of the ASN1 Time structure which is: Time ::=
|
|
69
|
+
// CHOICE { utcTime UTCTime, generalTime GeneralizedTime } written by Steve
|
|
70
|
+
// Henson.
|
|
73
71
|
|
|
74
72
|
IMPLEMENT_ASN1_MSTRING(ASN1_TIME, B_ASN1_TIME)
|
|
75
73
|
|
|
76
74
|
IMPLEMENT_ASN1_FUNCTIONS_const(ASN1_TIME)
|
|
77
75
|
|
|
78
|
-
ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t)
|
|
79
|
-
|
|
80
|
-
return ASN1_TIME_adj(s, t, 0, 0);
|
|
76
|
+
ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t) {
|
|
77
|
+
return ASN1_TIME_adj(s, t, 0, 0);
|
|
81
78
|
}
|
|
82
79
|
|
|
83
|
-
ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
struct tm data;
|
|
80
|
+
ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day,
|
|
81
|
+
long offset_sec) {
|
|
82
|
+
struct tm *ts;
|
|
83
|
+
struct tm data;
|
|
88
84
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
ts = OPENSSL_gmtime(&t, &data);
|
|
86
|
+
if (ts == NULL) {
|
|
87
|
+
OPENSSL_PUT_ERROR(ASN1, ASN1_R_ERROR_GETTING_TIME);
|
|
88
|
+
return NULL;
|
|
89
|
+
}
|
|
90
|
+
if (offset_day || offset_sec) {
|
|
91
|
+
if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) {
|
|
92
|
+
return NULL;
|
|
97
93
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return
|
|
94
|
+
}
|
|
95
|
+
if ((ts->tm_year >= 50) && (ts->tm_year < 150)) {
|
|
96
|
+
return ASN1_UTCTIME_adj(s, t, offset_day, offset_sec);
|
|
97
|
+
}
|
|
98
|
+
return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec);
|
|
101
99
|
}
|
|
102
100
|
|
|
103
|
-
int ASN1_TIME_check(const ASN1_TIME *t)
|
|
104
|
-
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
int ASN1_TIME_check(const ASN1_TIME *t) {
|
|
102
|
+
if (t->type == V_ASN1_GENERALIZEDTIME) {
|
|
103
|
+
return ASN1_GENERALIZEDTIME_check(t);
|
|
104
|
+
} else if (t->type == V_ASN1_UTCTIME) {
|
|
105
|
+
return ASN1_UTCTIME_check(t);
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
110
108
|
}
|
|
111
109
|
|
|
112
|
-
|
|
110
|
+
// Convert an ASN1_TIME structure to GeneralizedTime
|
|
113
111
|
ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t,
|
|
114
|
-
ASN1_GENERALIZEDTIME **out)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
int newlen;
|
|
119
|
-
|
|
120
|
-
if (!ASN1_TIME_check(t))
|
|
121
|
-
return NULL;
|
|
122
|
-
|
|
123
|
-
if (!out || !*out) {
|
|
124
|
-
if (!(ret = ASN1_GENERALIZEDTIME_new()))
|
|
125
|
-
goto err;
|
|
126
|
-
} else {
|
|
127
|
-
ret = *out;
|
|
128
|
-
}
|
|
112
|
+
ASN1_GENERALIZEDTIME **out) {
|
|
113
|
+
ASN1_GENERALIZEDTIME *ret = NULL;
|
|
114
|
+
char *str;
|
|
115
|
+
int newlen;
|
|
129
116
|
|
|
130
|
-
|
|
131
|
-
if (t->type == V_ASN1_GENERALIZEDTIME) {
|
|
132
|
-
if (!ASN1_STRING_set(ret, t->data, t->length))
|
|
133
|
-
goto err;
|
|
134
|
-
goto done;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/* grow the string */
|
|
138
|
-
if (!ASN1_STRING_set(ret, NULL, t->length + 2))
|
|
139
|
-
goto err;
|
|
140
|
-
/* ASN1_STRING_set() allocated 'len + 1' bytes. */
|
|
141
|
-
newlen = t->length + 2 + 1;
|
|
142
|
-
str = (char *)ret->data;
|
|
143
|
-
/* Work out the century and prepend */
|
|
144
|
-
if (t->data[0] >= '5')
|
|
145
|
-
OPENSSL_strlcpy(str, "19", newlen);
|
|
146
|
-
else
|
|
147
|
-
OPENSSL_strlcpy(str, "20", newlen);
|
|
148
|
-
|
|
149
|
-
OPENSSL_strlcat(str, (char *)t->data, newlen);
|
|
150
|
-
|
|
151
|
-
done:
|
|
152
|
-
if (out != NULL && *out == NULL)
|
|
153
|
-
*out = ret;
|
|
154
|
-
return ret;
|
|
155
|
-
|
|
156
|
-
err:
|
|
157
|
-
if (out == NULL || *out != ret)
|
|
158
|
-
ASN1_GENERALIZEDTIME_free(ret);
|
|
117
|
+
if (!ASN1_TIME_check(t)) {
|
|
159
118
|
return NULL;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (!out || !*out) {
|
|
122
|
+
if (!(ret = ASN1_GENERALIZEDTIME_new())) {
|
|
123
|
+
goto err;
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
ret = *out;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// If already GeneralizedTime just copy across
|
|
130
|
+
if (t->type == V_ASN1_GENERALIZEDTIME) {
|
|
131
|
+
if (!ASN1_STRING_set(ret, t->data, t->length)) {
|
|
132
|
+
goto err;
|
|
133
|
+
}
|
|
134
|
+
goto done;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// grow the string
|
|
138
|
+
if (!ASN1_STRING_set(ret, NULL, t->length + 2)) {
|
|
139
|
+
goto err;
|
|
140
|
+
}
|
|
141
|
+
// ASN1_STRING_set() allocated 'len + 1' bytes.
|
|
142
|
+
newlen = t->length + 2 + 1;
|
|
143
|
+
str = (char *)ret->data;
|
|
144
|
+
// Work out the century and prepend
|
|
145
|
+
if (t->data[0] >= '5') {
|
|
146
|
+
OPENSSL_strlcpy(str, "19", newlen);
|
|
147
|
+
} else {
|
|
148
|
+
OPENSSL_strlcpy(str, "20", newlen);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
OPENSSL_strlcat(str, (char *)t->data, newlen);
|
|
152
|
+
|
|
153
|
+
done:
|
|
154
|
+
if (out != NULL && *out == NULL) {
|
|
155
|
+
*out = ret;
|
|
156
|
+
}
|
|
157
|
+
return ret;
|
|
158
|
+
|
|
159
|
+
err:
|
|
160
|
+
if (out == NULL || *out != ret) {
|
|
161
|
+
ASN1_GENERALIZEDTIME_free(ret);
|
|
162
|
+
}
|
|
163
|
+
return NULL;
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
|
|
163
|
-
int ASN1_TIME_set_string(ASN1_TIME *s, const char *str)
|
|
164
|
-
|
|
165
|
-
ASN1_TIME t;
|
|
167
|
+
int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) {
|
|
168
|
+
ASN1_TIME t;
|
|
166
169
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
t.length = strlen(str);
|
|
171
|
+
t.data = (unsigned char *)str;
|
|
172
|
+
t.flags = 0;
|
|
170
173
|
|
|
171
|
-
|
|
174
|
+
t.type = V_ASN1_UTCTIME;
|
|
172
175
|
|
|
176
|
+
if (!ASN1_TIME_check(&t)) {
|
|
177
|
+
t.type = V_ASN1_GENERALIZEDTIME;
|
|
173
178
|
if (!ASN1_TIME_check(&t)) {
|
|
174
|
-
|
|
175
|
-
if (!ASN1_TIME_check(&t))
|
|
176
|
-
return 0;
|
|
179
|
+
return 0;
|
|
177
180
|
}
|
|
181
|
+
}
|
|
178
182
|
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
if (s && !ASN1_STRING_copy((ASN1_STRING *)s, (ASN1_STRING *)&t)) {
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
181
186
|
|
|
182
|
-
|
|
187
|
+
return 1;
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t)
|
|
186
|
-
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
return 1;
|
|
192
|
-
return 0;
|
|
190
|
+
static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t) {
|
|
191
|
+
if (t == NULL) {
|
|
192
|
+
time_t now_t;
|
|
193
|
+
time(&now_t);
|
|
194
|
+
if (OPENSSL_gmtime(&now_t, tm)) {
|
|
195
|
+
return 1;
|
|
193
196
|
}
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
194
199
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
200
|
+
if (t->type == V_ASN1_UTCTIME) {
|
|
201
|
+
return asn1_utctime_to_tm(tm, t);
|
|
202
|
+
} else if (t->type == V_ASN1_GENERALIZEDTIME) {
|
|
203
|
+
return asn1_generalizedtime_to_tm(tm, t);
|
|
204
|
+
}
|
|
199
205
|
|
|
200
|
-
|
|
206
|
+
return 0;
|
|
201
207
|
}
|
|
202
208
|
|
|
203
|
-
int ASN1_TIME_diff(int *out_days, int *out_seconds,
|
|
204
|
-
const ASN1_TIME *
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
209
|
+
int ASN1_TIME_diff(int *out_days, int *out_seconds, const ASN1_TIME *from,
|
|
210
|
+
const ASN1_TIME *to) {
|
|
211
|
+
struct tm tm_from, tm_to;
|
|
212
|
+
if (!asn1_time_to_tm(&tm_from, from)) {
|
|
213
|
+
return 0;
|
|
214
|
+
}
|
|
215
|
+
if (!asn1_time_to_tm(&tm_to, to)) {
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
return OPENSSL_gmtime_diff(out_days, out_seconds, &tm_from, &tm_to);
|
|
212
219
|
}
|