You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
Switch OPENSSL_VERSION_NUMBER to 1.1.0. Although we are derived from 1.0.2, we mimic 1.1.0 in some ways around our FOO_up_ref functions and opaque libssl types. This causes some difficulties when porting third-party code as any OPENSSL_VERSION_NUMBER checks for 1.1.0 APIs we have will be wrong. Moreover, adding accessors without changing OPENSSL_VERSION_NUMBER can break external projects. It is common to implement a compatibility version of an accessor under #ifdef as a static function. This then conflicts with our headers if we, unlike OpenSSL 1.0.2, have this function. This change switches OPENSSL_VERSION_NUMBER to 1.1.0 and atomically adds enough accessors for software with 1.1.0 support already. The hope is this will unblock hiding SSL_CTX and SSL_SESSION, which will be especially useful with C++-ficiation. The cost is we will hit some growing pains as more 1.1.0 consumers enter the ecosystem and we converge on the right set of APIs to import from upstream. It does not remove any 1.0.2 APIs, so we will not require that all projects support 1.1.0. The exception is APIs which changed in 1.1.0 but did not change the function signature. Those are breaking changes. Specifically: - SSL_CTX_sess_set_get_cb is now const-correct. - X509_get0_signature is now const-correct. For C++ consumers only, this change temporarily includes an overload hack for SSL_CTX_sess_set_get_cb that keeps the old callback working. This is a workaround for Node not yet supporting OpenSSL 1.1.0. The version number is set at (the as yet unreleased) 1.1.0g to denote that this change includes https://github.com/openssl/openssl/pull/4384. Bug: 91 Change-Id: I5eeb27448a6db4c25c244afac37f9604d9608a76 Reviewed-on: https://boringssl-review.googlesource.com/10340 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
8 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  1. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  2. * All rights reserved.
  3. *
  4. * This package is an SSL implementation written
  5. * by Eric Young (eay@cryptsoft.com).
  6. * The implementation was written so as to conform with Netscapes SSL.
  7. *
  8. * This library is free for commercial and non-commercial use as long as
  9. * the following conditions are aheared to. The following conditions
  10. * apply to all code found in this distribution, be it the RC4, RSA,
  11. * lhash, DES, etc., code; not just the SSL code. The SSL documentation
  12. * included with this distribution is covered by the same copyright terms
  13. * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  14. *
  15. * Copyright remains Eric Young's, and as such any Copyright notices in
  16. * the code are not to be removed.
  17. * If this package is used in a product, Eric Young should be given attribution
  18. * as the author of the parts of the library used.
  19. * This can be in the form of a textual message at program startup or
  20. * in documentation (online or textual) provided with the package.
  21. *
  22. * Redistribution and use in source and binary forms, with or without
  23. * modification, are permitted provided that the following conditions
  24. * are met:
  25. * 1. Redistributions of source code must retain the copyright
  26. * notice, this list of conditions and the following disclaimer.
  27. * 2. Redistributions in binary form must reproduce the above copyright
  28. * notice, this list of conditions and the following disclaimer in the
  29. * documentation and/or other materials provided with the distribution.
  30. * 3. All advertising materials mentioning features or use of this software
  31. * must display the following acknowledgement:
  32. * "This product includes cryptographic software written by
  33. * Eric Young (eay@cryptsoft.com)"
  34. * The word 'cryptographic' can be left out if the rouines from the library
  35. * being used are not cryptographic related :-).
  36. * 4. If you include any Windows specific code (or a derivative thereof) from
  37. * the apps directory (application code) you must include an acknowledgement:
  38. * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  39. *
  40. * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  41. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  43. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  44. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  45. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  46. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  48. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  49. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  50. * SUCH DAMAGE.
  51. *
  52. * The licence and distribution terms for any publically available version or
  53. * derivative of this code cannot be changed. i.e. this code cannot simply be
  54. * copied and put under another distribution licence
  55. * [including the GNU Public Licence.] */
  56. #ifndef OPENSSL_HEADER_BIO_H
  57. #define OPENSSL_HEADER_BIO_H
  58. #include <openssl/base.h>
  59. #include <stdio.h> // For FILE
  60. #include <openssl/buffer.h>
  61. #include <openssl/err.h> // for ERR_print_errors_fp
  62. #include <openssl/ex_data.h>
  63. #include <openssl/stack.h>
  64. #include <openssl/thread.h>
  65. #if defined(__cplusplus)
  66. extern "C" {
  67. #endif
  68. // BIO abstracts over a file-descriptor like interface.
  69. // Allocation and freeing.
  70. DEFINE_STACK_OF(BIO)
  71. // BIO_new creates a new BIO with the given method and a reference count of one.
  72. // It returns the fresh |BIO|, or NULL on error.
  73. OPENSSL_EXPORT BIO *BIO_new(const BIO_METHOD *method);
  74. // BIO_free decrements the reference count of |bio|. If the reference count
  75. // drops to zero, it calls the destroy callback, if present, on the method and
  76. // frees |bio| itself. It then repeats that for the next BIO in the chain, if
  77. // any.
  78. //
  79. // It returns one on success or zero otherwise.
  80. OPENSSL_EXPORT int BIO_free(BIO *bio);
  81. // BIO_vfree performs the same actions as |BIO_free|, but has a void return
  82. // value. This is provided for API-compat.
  83. //
  84. // TODO(fork): remove.
  85. OPENSSL_EXPORT void BIO_vfree(BIO *bio);
  86. // BIO_up_ref increments the reference count of |bio| and returns one.
  87. OPENSSL_EXPORT int BIO_up_ref(BIO *bio);
  88. // Basic I/O.
  89. // BIO_read attempts to read |len| bytes into |data|. It returns the number of
  90. // bytes read, zero on EOF, or a negative number on error.
  91. OPENSSL_EXPORT int BIO_read(BIO *bio, void *data, int len);
  92. // BIO_gets "reads a line" from |bio| and puts at most |size| bytes into |buf|.
  93. // It returns the number of bytes read or a negative number on error. The
  94. // phrase "reads a line" is in quotes in the previous sentence because the
  95. // exact operation depends on the BIO's method. For example, a digest BIO will
  96. // return the digest in response to a |BIO_gets| call.
  97. //
  98. // TODO(fork): audit the set of BIOs that we end up needing. If all actually
  99. // return a line for this call, remove the warning above.
  100. OPENSSL_EXPORT int BIO_gets(BIO *bio, char *buf, int size);
  101. // BIO_write writes |len| bytes from |data| to BIO. It returns the number of
  102. // bytes written or a negative number on error.
  103. OPENSSL_EXPORT int BIO_write(BIO *bio, const void *data, int len);
  104. // BIO_puts writes a NUL terminated string from |buf| to |bio|. It returns the
  105. // number of bytes written or a negative number on error.
  106. OPENSSL_EXPORT int BIO_puts(BIO *bio, const char *buf);
  107. // BIO_flush flushes any buffered output. It returns one on success and zero
  108. // otherwise.
  109. OPENSSL_EXPORT int BIO_flush(BIO *bio);
  110. // Low-level control functions.
  111. //
  112. // These are generic functions for sending control requests to a BIO. In
  113. // general one should use the wrapper functions like |BIO_get_close|.
  114. // BIO_ctrl sends the control request |cmd| to |bio|. The |cmd| argument should
  115. // be one of the |BIO_C_*| values.
  116. OPENSSL_EXPORT long BIO_ctrl(BIO *bio, int cmd, long larg, void *parg);
  117. // BIO_ptr_ctrl acts like |BIO_ctrl| but passes the address of a |void*|
  118. // pointer as |parg| and returns the value that is written to it, or NULL if
  119. // the control request returns <= 0.
  120. OPENSSL_EXPORT char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg);
  121. // BIO_int_ctrl acts like |BIO_ctrl| but passes the address of a copy of |iarg|
  122. // as |parg|.
  123. OPENSSL_EXPORT long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);
  124. // BIO_reset resets |bio| to its initial state, the precise meaning of which
  125. // depends on the concrete type of |bio|. It returns one on success and zero
  126. // otherwise.
  127. OPENSSL_EXPORT int BIO_reset(BIO *bio);
  128. // BIO_eof returns non-zero when |bio| has reached end-of-file. The precise
  129. // meaning of which depends on the concrete type of |bio|. Note that in the
  130. // case of BIO_pair this always returns non-zero.
  131. OPENSSL_EXPORT int BIO_eof(BIO *bio);
  132. // BIO_set_flags ORs |flags| with |bio->flags|.
  133. OPENSSL_EXPORT void BIO_set_flags(BIO *bio, int flags);
  134. // BIO_test_flags returns |bio->flags| AND |flags|.
  135. OPENSSL_EXPORT int BIO_test_flags(const BIO *bio, int flags);
  136. // BIO_should_read returns non-zero if |bio| encountered a temporary error
  137. // while reading (i.e. EAGAIN), indicating that the caller should retry the
  138. // read.
  139. OPENSSL_EXPORT int BIO_should_read(const BIO *bio);
  140. // BIO_should_write returns non-zero if |bio| encountered a temporary error
  141. // while writing (i.e. EAGAIN), indicating that the caller should retry the
  142. // write.
  143. OPENSSL_EXPORT int BIO_should_write(const BIO *bio);
  144. // BIO_should_retry returns non-zero if the reason that caused a failed I/O
  145. // operation is temporary and thus the operation should be retried. Otherwise,
  146. // it was a permanent error and it returns zero.
  147. OPENSSL_EXPORT int BIO_should_retry(const BIO *bio);
  148. // BIO_should_io_special returns non-zero if |bio| encountered a temporary
  149. // error while performing a special I/O operation, indicating that the caller
  150. // should retry. The operation that caused the error is returned by
  151. // |BIO_get_retry_reason|.
  152. OPENSSL_EXPORT int BIO_should_io_special(const BIO *bio);
  153. // BIO_RR_CONNECT indicates that a connect would have blocked
  154. #define BIO_RR_CONNECT 0x02
  155. // BIO_RR_ACCEPT indicates that an accept would have blocked
  156. #define BIO_RR_ACCEPT 0x03
  157. // BIO_get_retry_reason returns the special I/O operation that needs to be
  158. // retried. The return value is one of the |BIO_RR_*| values.
  159. OPENSSL_EXPORT int BIO_get_retry_reason(const BIO *bio);
  160. // BIO_clear_flags ANDs |bio->flags| with the bitwise-complement of |flags|.
  161. OPENSSL_EXPORT void BIO_clear_flags(BIO *bio, int flags);
  162. // BIO_set_retry_read sets the |BIO_FLAGS_READ| and |BIO_FLAGS_SHOULD_RETRY|
  163. // flags on |bio|.
  164. OPENSSL_EXPORT void BIO_set_retry_read(BIO *bio);
  165. // BIO_set_retry_write sets the |BIO_FLAGS_WRITE| and |BIO_FLAGS_SHOULD_RETRY|
  166. // flags on |bio|.
  167. OPENSSL_EXPORT void BIO_set_retry_write(BIO *bio);
  168. // BIO_get_retry_flags gets the |BIO_FLAGS_READ|, |BIO_FLAGS_WRITE|,
  169. // |BIO_FLAGS_IO_SPECIAL| and |BIO_FLAGS_SHOULD_RETRY| flags from |bio|.
  170. OPENSSL_EXPORT int BIO_get_retry_flags(BIO *bio);
  171. // BIO_clear_retry_flags clears the |BIO_FLAGS_READ|, |BIO_FLAGS_WRITE|,
  172. // |BIO_FLAGS_IO_SPECIAL| and |BIO_FLAGS_SHOULD_RETRY| flags from |bio|.
  173. OPENSSL_EXPORT void BIO_clear_retry_flags(BIO *bio);
  174. // BIO_method_type returns the type of |bio|, which is one of the |BIO_TYPE_*|
  175. // values.
  176. OPENSSL_EXPORT int BIO_method_type(const BIO *bio);
  177. // These are passed to the BIO callback
  178. #define BIO_CB_FREE 0x01
  179. #define BIO_CB_READ 0x02
  180. #define BIO_CB_WRITE 0x03
  181. #define BIO_CB_PUTS 0x04
  182. #define BIO_CB_GETS 0x05
  183. #define BIO_CB_CTRL 0x06
  184. // The callback is called before and after the underling operation,
  185. // The BIO_CB_RETURN flag indicates if it is after the call
  186. #define BIO_CB_RETURN 0x80
  187. // bio_info_cb is the type of a callback function that can be called for most
  188. // BIO operations. The |event| argument is one of |BIO_CB_*| and can be ORed
  189. // with |BIO_CB_RETURN| if the callback is being made after the operation in
  190. // question. In that case, |return_value| will contain the return value from
  191. // the operation.
  192. typedef long (*bio_info_cb)(BIO *bio, int event, const char *parg, int cmd,
  193. long larg, long return_value);
  194. // BIO_callback_ctrl allows the callback function to be manipulated. The |cmd|
  195. // arg will generally be |BIO_CTRL_SET_CALLBACK| but arbitrary command values
  196. // can be interpreted by the |BIO|.
  197. OPENSSL_EXPORT long BIO_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp);
  198. // BIO_pending returns the number of bytes pending to be read.
  199. OPENSSL_EXPORT size_t BIO_pending(const BIO *bio);
  200. // BIO_ctrl_pending calls |BIO_pending| and exists only for compatibility with
  201. // OpenSSL.
  202. OPENSSL_EXPORT size_t BIO_ctrl_pending(const BIO *bio);
  203. // BIO_wpending returns the number of bytes pending to be written.
  204. OPENSSL_EXPORT size_t BIO_wpending(const BIO *bio);
  205. // BIO_set_close sets the close flag for |bio|. The meaning of which depends on
  206. // the type of |bio| but, for example, a memory BIO interprets the close flag
  207. // as meaning that it owns its buffer. It returns one on success and zero
  208. // otherwise.
  209. OPENSSL_EXPORT int BIO_set_close(BIO *bio, int close_flag);
  210. // BIO_number_read returns the number of bytes that have been read from
  211. // |bio|.
  212. OPENSSL_EXPORT size_t BIO_number_read(const BIO *bio);
  213. // BIO_number_written returns the number of bytes that have been written to
  214. // |bio|.
  215. OPENSSL_EXPORT size_t BIO_number_written(const BIO *bio);
  216. // Managing chains of BIOs.
  217. //
  218. // BIOs can be put into chains where the output of one is used as the input of
  219. // the next etc. The most common case is a buffering BIO, which accepts and
  220. // buffers writes until flushed into the next BIO in the chain.
  221. // BIO_push adds |appended_bio| to the end of the chain with |bio| at the head.
  222. // It returns |bio|. Note that |appended_bio| may be the head of a chain itself
  223. // and thus this function can be used to join two chains.
  224. //
  225. // BIO_push takes ownership of the caller's reference to |appended_bio|.
  226. OPENSSL_EXPORT BIO *BIO_push(BIO *bio, BIO *appended_bio);
  227. // BIO_pop removes |bio| from the head of a chain and returns the next BIO in
  228. // the chain, or NULL if there is no next BIO.
  229. //
  230. // The caller takes ownership of the chain's reference to |bio|.
  231. OPENSSL_EXPORT BIO *BIO_pop(BIO *bio);
  232. // BIO_next returns the next BIO in the chain after |bio|, or NULL if there is
  233. // no such BIO.
  234. OPENSSL_EXPORT BIO *BIO_next(BIO *bio);
  235. // BIO_free_all calls |BIO_free|.
  236. //
  237. // TODO(fork): update callers and remove.
  238. OPENSSL_EXPORT void BIO_free_all(BIO *bio);
  239. // BIO_find_type walks a chain of BIOs and returns the first that matches
  240. // |type|, which is one of the |BIO_TYPE_*| values.
  241. OPENSSL_EXPORT BIO *BIO_find_type(BIO *bio, int type);
  242. // BIO_copy_next_retry sets the retry flags and |retry_reason| of |bio| from
  243. // the next BIO in the chain.
  244. OPENSSL_EXPORT void BIO_copy_next_retry(BIO *bio);
  245. // Printf functions.
  246. // BIO_printf behaves like |printf| but outputs to |bio| rather than a |FILE|.
  247. // It returns the number of bytes written or a negative number on error.
  248. OPENSSL_EXPORT int BIO_printf(BIO *bio, const char *format, ...)
  249. OPENSSL_PRINTF_FORMAT_FUNC(2, 3);
  250. // Utility functions.
  251. // BIO_indent prints min(|indent|, |max_indent|) spaces. It returns one on
  252. // success and zero otherwise.
  253. OPENSSL_EXPORT int BIO_indent(BIO *bio, unsigned indent, unsigned max_indent);
  254. // BIO_hexdump writes a hex dump of |data| to |bio|. Each line will be indented
  255. // by |indent| spaces.
  256. OPENSSL_EXPORT int BIO_hexdump(BIO *bio, const uint8_t *data, size_t len,
  257. unsigned indent);
  258. // ERR_print_errors prints the current contents of the error stack to |bio|
  259. // using human readable strings where possible.
  260. OPENSSL_EXPORT void ERR_print_errors(BIO *bio);
  261. // BIO_read_asn1 reads a single ASN.1 object from |bio|. If successful it sets
  262. // |*out| to be an allocated buffer (that should be freed with |OPENSSL_free|),
  263. // |*out_size| to the length, in bytes, of that buffer and returns one.
  264. // Otherwise it returns zero.
  265. //
  266. // If the length of the object is greater than |max_len| or 2^32 then the
  267. // function will fail. Long-form tags are not supported. If the length of the
  268. // object is indefinite the full contents of |bio| are read, unless it would be
  269. // greater than |max_len|, in which case the function fails.
  270. //
  271. // If the function fails then some unknown amount of data may have been read
  272. // from |bio|.
  273. OPENSSL_EXPORT int BIO_read_asn1(BIO *bio, uint8_t **out, size_t *out_len,
  274. size_t max_len);
  275. // Memory BIOs.
  276. //
  277. // Memory BIOs can be used as a read-only source (with |BIO_new_mem_buf|) or a
  278. // writable sink (with |BIO_new|, |BIO_s_mem| and |BIO_mem_contents|). Data
  279. // written to a writable, memory BIO can be recalled by reading from it.
  280. //
  281. // Calling |BIO_reset| on a read-only BIO resets it to the original contents.
  282. // On a writable BIO, it clears any data.
  283. //
  284. // If the close flag is set to |BIO_NOCLOSE| (not the default) then the
  285. // underlying |BUF_MEM| will not be freed when the |BIO| is freed.
  286. //
  287. // Memory BIOs support |BIO_gets| and |BIO_puts|.
  288. //
  289. // |BIO_ctrl_pending| returns the number of bytes currently stored.
  290. // BIO_NOCLOSE and |BIO_CLOSE| can be used as symbolic arguments when a "close
  291. // flag" is passed to a BIO function.
  292. #define BIO_NOCLOSE 0
  293. #define BIO_CLOSE 1
  294. // BIO_s_mem returns a |BIO_METHOD| that uses a in-memory buffer.
  295. OPENSSL_EXPORT const BIO_METHOD *BIO_s_mem(void);
  296. // BIO_new_mem_buf creates read-only BIO that reads from |len| bytes at |buf|.
  297. // It does not take ownership of |buf|. It returns the BIO or NULL on error.
  298. //
  299. // If |len| is negative, then |buf| is treated as a NUL-terminated string, but
  300. // don't depend on this in new code.
  301. OPENSSL_EXPORT BIO *BIO_new_mem_buf(const void *buf, int len);
  302. // BIO_mem_contents sets |*out_contents| to point to the current contents of
  303. // |bio| and |*out_len| to contain the length of that data. It returns one on
  304. // success and zero otherwise.
  305. OPENSSL_EXPORT int BIO_mem_contents(const BIO *bio,
  306. const uint8_t **out_contents,
  307. size_t *out_len);
  308. // BIO_get_mem_data sets |*contents| to point to the current contents of |bio|
  309. // and returns the length of the data.
  310. //
  311. // WARNING: don't use this, use |BIO_mem_contents|. A return value of zero from
  312. // this function can mean either that it failed or that the memory buffer is
  313. // empty.
  314. OPENSSL_EXPORT long BIO_get_mem_data(BIO *bio, char **contents);
  315. // BIO_get_mem_ptr sets |*out| to a BUF_MEM containing the current contents of
  316. // |bio|. It returns one on success or zero on error.
  317. OPENSSL_EXPORT int BIO_get_mem_ptr(BIO *bio, BUF_MEM **out);
  318. // BIO_set_mem_buf sets |b| as the contents of |bio|. If |take_ownership| is
  319. // non-zero, then |b| will be freed when |bio| is closed. Returns one on
  320. // success or zero otherwise.
  321. OPENSSL_EXPORT int BIO_set_mem_buf(BIO *bio, BUF_MEM *b, int take_ownership);
  322. // BIO_set_mem_eof_return sets the value that will be returned from reading
  323. // |bio| when empty. If |eof_value| is zero then an empty memory BIO will
  324. // return EOF (that is it will return zero and |BIO_should_retry| will be
  325. // false). If |eof_value| is non zero then it will return |eof_value| when it
  326. // is empty and it will set the read retry flag (that is |BIO_read_retry| is
  327. // true). To avoid ambiguity with a normal positive return value, |eof_value|
  328. // should be set to a negative value, typically -1.
  329. //
  330. // For a read-only BIO, the default is zero (EOF). For a writable BIO, the
  331. // default is -1 so that additional data can be written once exhausted.
  332. OPENSSL_EXPORT int BIO_set_mem_eof_return(BIO *bio, int eof_value);
  333. // File descriptor BIOs.
  334. //
  335. // File descriptor BIOs are wrappers around the system's |read| and |write|
  336. // functions. If the close flag is set then then |close| is called on the
  337. // underlying file descriptor when the BIO is freed.
  338. //
  339. // |BIO_reset| attempts to seek the file pointer to the start of file using
  340. // |lseek|.
  341. // BIO_s_fd returns a |BIO_METHOD| for file descriptor fds.
  342. OPENSSL_EXPORT const BIO_METHOD *BIO_s_fd(void);
  343. // BIO_new_fd creates a new file descriptor BIO wrapping |fd|. If |close_flag|
  344. // is non-zero, then |fd| will be closed when the BIO is.
  345. OPENSSL_EXPORT BIO *BIO_new_fd(int fd, int close_flag);
  346. // BIO_set_fd sets the file descriptor of |bio| to |fd|. If |close_flag| is
  347. // non-zero then |fd| will be closed when |bio| is. It returns one on success
  348. // or zero on error.
  349. //
  350. // This function may also be used with socket BIOs (see |BIO_s_socket| and
  351. // |BIO_new_socket|).
  352. OPENSSL_EXPORT int BIO_set_fd(BIO *bio, int fd, int close_flag);
  353. // BIO_get_fd returns the file descriptor currently in use by |bio| or -1 if
  354. // |bio| does not wrap a file descriptor. If there is a file descriptor and
  355. // |out_fd| is not NULL, it also sets |*out_fd| to the file descriptor.
  356. //
  357. // This function may also be used with socket BIOs (see |BIO_s_socket| and
  358. // |BIO_new_socket|).
  359. OPENSSL_EXPORT int BIO_get_fd(BIO *bio, int *out_fd);
  360. // File BIOs.
  361. //
  362. // File BIOs are wrappers around a C |FILE| object.
  363. //
  364. // |BIO_flush| on a file BIO calls |fflush| on the wrapped stream.
  365. //
  366. // |BIO_reset| attempts to seek the file pointer to the start of file using
  367. // |fseek|.
  368. //
  369. // Setting the close flag causes |fclose| to be called on the stream when the
  370. // BIO is freed.
  371. // BIO_s_file returns a BIO_METHOD that wraps a |FILE|.
  372. OPENSSL_EXPORT const BIO_METHOD *BIO_s_file(void);
  373. // BIO_new_file creates a file BIO by opening |filename| with the given mode.
  374. // See the |fopen| manual page for details of the mode argument.
  375. OPENSSL_EXPORT BIO *BIO_new_file(const char *filename, const char *mode);
  376. // BIO_new_fp creates a new file BIO that wraps the given |FILE|. If
  377. // |close_flag| is |BIO_CLOSE|, then |fclose| will be called on |stream| when
  378. // the BIO is closed.
  379. OPENSSL_EXPORT BIO *BIO_new_fp(FILE *stream, int close_flag);
  380. // BIO_get_fp sets |*out_file| to the current |FILE| for |bio|. It returns one
  381. // on success and zero otherwise.
  382. OPENSSL_EXPORT int BIO_get_fp(BIO *bio, FILE **out_file);
  383. // BIO_set_fp sets the |FILE| for |bio|. If |close_flag| is |BIO_CLOSE| then
  384. // |fclose| will be called on |file| when |bio| is closed. It returns one on
  385. // success and zero otherwise.
  386. OPENSSL_EXPORT int BIO_set_fp(BIO *bio, FILE *file, int close_flag);
  387. // BIO_read_filename opens |filename| for reading and sets the result as the
  388. // |FILE| for |bio|. It returns one on success and zero otherwise. The |FILE|
  389. // will be closed when |bio| is freed.
  390. OPENSSL_EXPORT int BIO_read_filename(BIO *bio, const char *filename);
  391. // BIO_write_filename opens |filename| for writing and sets the result as the
  392. // |FILE| for |bio|. It returns one on success and zero otherwise. The |FILE|
  393. // will be closed when |bio| is freed.
  394. OPENSSL_EXPORT int BIO_write_filename(BIO *bio, const char *filename);
  395. // BIO_append_filename opens |filename| for appending and sets the result as
  396. // the |FILE| for |bio|. It returns one on success and zero otherwise. The
  397. // |FILE| will be closed when |bio| is freed.
  398. OPENSSL_EXPORT int BIO_append_filename(BIO *bio, const char *filename);
  399. // BIO_rw_filename opens |filename| for reading and writing and sets the result
  400. // as the |FILE| for |bio|. It returns one on success and zero otherwise. The
  401. // |FILE| will be closed when |bio| is freed.
  402. OPENSSL_EXPORT int BIO_rw_filename(BIO *bio, const char *filename);
  403. // Socket BIOs.
  404. //
  405. // Socket BIOs behave like file descriptor BIOs but, on Windows systems, wrap
  406. // the system's |recv| and |send| functions instead of |read| and |write|. On
  407. // Windows, file descriptors are provided by C runtime and are not
  408. // interchangeable with sockets.
  409. //
  410. // Socket BIOs may be used with |BIO_set_fd| and |BIO_get_fd|.
  411. //
  412. // TODO(davidben): Add separate APIs and fix the internals to use |SOCKET|s
  413. // around rather than rely on int casts.
  414. OPENSSL_EXPORT const BIO_METHOD *BIO_s_socket(void);
  415. // BIO_new_socket allocates and initialises a fresh BIO which will read and
  416. // write to the socket |fd|. If |close_flag| is |BIO_CLOSE| then closing the
  417. // BIO will close |fd|. It returns the fresh |BIO| or NULL on error.
  418. OPENSSL_EXPORT BIO *BIO_new_socket(int fd, int close_flag);
  419. // Connect BIOs.
  420. //
  421. // A connection BIO creates a network connection and transfers data over the
  422. // resulting socket.
  423. OPENSSL_EXPORT const BIO_METHOD *BIO_s_connect(void);
  424. // BIO_new_connect returns a BIO that connects to the given hostname and port.
  425. // The |host_and_optional_port| argument should be of the form
  426. // "www.example.com" or "www.example.com:443". If the port is omitted, it must
  427. // be provided with |BIO_set_conn_port|.
  428. //
  429. // It returns the new BIO on success, or NULL on error.
  430. OPENSSL_EXPORT BIO *BIO_new_connect(const char *host_and_optional_port);
  431. // BIO_set_conn_hostname sets |host_and_optional_port| as the hostname and
  432. // optional port that |bio| will connect to. If the port is omitted, it must be
  433. // provided with |BIO_set_conn_port|.
  434. //
  435. // It returns one on success and zero otherwise.
  436. OPENSSL_EXPORT int BIO_set_conn_hostname(BIO *bio,
  437. const char *host_and_optional_port);
  438. // BIO_set_conn_port sets |port_str| as the port or service name that |bio|
  439. // will connect to. It returns one on success and zero otherwise.
  440. OPENSSL_EXPORT int BIO_set_conn_port(BIO *bio, const char *port_str);
  441. // BIO_set_conn_int_port sets |*port| as the port that |bio| will connect to.
  442. // It returns one on success and zero otherwise.
  443. OPENSSL_EXPORT int BIO_set_conn_int_port(BIO *bio, const int *port);
  444. // BIO_set_nbio sets whether |bio| will use non-blocking I/O operations. It
  445. // returns one on success and zero otherwise.
  446. OPENSSL_EXPORT int BIO_set_nbio(BIO *bio, int on);
  447. // BIO_do_connect connects |bio| if it has not been connected yet. It returns
  448. // one on success and <= 0 otherwise.
  449. OPENSSL_EXPORT int BIO_do_connect(BIO *bio);
  450. // Datagram BIOs.
  451. //
  452. // TODO(fork): not implemented.
  453. #define BIO_CTRL_DGRAM_QUERY_MTU 40 // as kernel for current MTU
  454. #define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for MTU. want to use
  455. this if asking the kernel fails */
  456. #define BIO_CTRL_DGRAM_MTU_EXCEEDED 43 /* check whether the MTU was exceed in
  457. the previous write operation. */
  458. // BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT is unsupported as it is unused by consumers
  459. // and depends on |timeval|, which is not 2038-clean on all platforms.
  460. #define BIO_CTRL_DGRAM_GET_PEER 46
  461. #define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47
  462. // BIO Pairs.
  463. //
  464. // BIO pairs provide a "loopback" like system: a pair of BIOs where data
  465. // written to one can be read from the other and vice versa.
  466. // BIO_new_bio_pair sets |*out1| and |*out2| to two freshly created BIOs where
  467. // data written to one can be read from the other and vice versa. The
  468. // |writebuf1| argument gives the size of the buffer used in |*out1| and
  469. // |writebuf2| for |*out2|. It returns one on success and zero on error.
  470. OPENSSL_EXPORT int BIO_new_bio_pair(BIO **out1, size_t writebuf1, BIO **out2,
  471. size_t writebuf2);
  472. // BIO_ctrl_get_read_request returns the number of bytes that the other side of
  473. // |bio| tried (unsuccessfully) to read.
  474. OPENSSL_EXPORT size_t BIO_ctrl_get_read_request(BIO *bio);
  475. // BIO_ctrl_get_write_guarantee returns the number of bytes that |bio| (which
  476. // must have been returned by |BIO_new_bio_pair|) will accept on the next
  477. // |BIO_write| call.
  478. OPENSSL_EXPORT size_t BIO_ctrl_get_write_guarantee(BIO *bio);
  479. // BIO_shutdown_wr marks |bio| as closed, from the point of view of the other
  480. // side of the pair. Future |BIO_write| calls on |bio| will fail. It returns
  481. // one on success and zero otherwise.
  482. OPENSSL_EXPORT int BIO_shutdown_wr(BIO *bio);
  483. // Custom BIOs.
  484. //
  485. // Consumers can create custom |BIO|s by filling in a |BIO_METHOD| and using
  486. // low-level control functions to set state.
  487. // BIO_get_new_index returns a new "type" value for a custom |BIO|.
  488. OPENSSL_EXPORT int BIO_get_new_index(void);
  489. // BIO_meth_new returns a newly-allocated |BIO_METHOD| or NULL on allocation
  490. // error. The |type| specifies the type that will be returned by
  491. // |BIO_method_type|. If this is unnecessary, this value may be zero. The |name|
  492. // parameter is vestigial and may be NULL.
  493. //
  494. // Use the |BIO_meth_set_*| functions below to initialize the |BIO_METHOD|. The
  495. // function implementations may use |BIO_set_data| and |BIO_get_data| to add
  496. // method-specific state to associated |BIO|s. Additionally, |BIO_set_init| must
  497. // be called after an associated |BIO| is fully initialized. State set via
  498. // |BIO_set_data| may be released by configuring a destructor with
  499. // |BIO_meth_set_destroy|.
  500. OPENSSL_EXPORT BIO_METHOD *BIO_meth_new(int type, const char *name);
  501. // BIO_meth_free releases memory associated with |method|.
  502. OPENSSL_EXPORT void BIO_meth_free(BIO_METHOD *method);
  503. // BIO_meth_set_create sets a function to be called on |BIO_new| for |method|
  504. // and returns one. The function should return one on success and zero on
  505. // error.
  506. OPENSSL_EXPORT int BIO_meth_set_create(BIO_METHOD *method,
  507. int (*create)(BIO *));
  508. // BIO_meth_set_destroy sets a function to release data associated with a |BIO|
  509. // and returns one. The function's return value is ignored.
  510. OPENSSL_EXPORT int BIO_meth_set_destroy(BIO_METHOD *method,
  511. int (*destroy)(BIO *));
  512. // BIO_meth_set_write sets the implementation of |BIO_write| for |method| and
  513. // returns one. |BIO_METHOD|s which implement |BIO_write| should also implement
  514. // |BIO_CTRL_FLUSH|. (See |BIO_meth_set_ctrl|.)
  515. OPENSSL_EXPORT int BIO_meth_set_write(BIO_METHOD *method,
  516. int (*write)(BIO *, const char *, int));
  517. // BIO_meth_set_read sets the implementation of |BIO_read| for |method| and
  518. // returns one.
  519. OPENSSL_EXPORT int BIO_meth_set_read(BIO_METHOD *method,
  520. int (*read)(BIO *, char *, int));
  521. // BIO_meth_set_gets sets the implementation of |BIO_gets| for |method| and
  522. // returns one.
  523. OPENSSL_EXPORT int BIO_meth_set_gets(BIO_METHOD *method,
  524. int (*gets)(BIO *, char *, int));
  525. // BIO_meth_set_ctrl sets the implementation of |BIO_ctrl| for |method| and
  526. // returns one.
  527. OPENSSL_EXPORT int BIO_meth_set_ctrl(BIO_METHOD *method,
  528. long (*ctrl)(BIO *, int, long, void *));
  529. // BIO_set_data sets custom data on |bio|. It may be retried with
  530. // |BIO_get_data|.
  531. OPENSSL_EXPORT void BIO_set_data(BIO *bio, void *ptr);
  532. // BIO_get_data returns custom data on |bio| set by |BIO_get_data|.
  533. OPENSSL_EXPORT void *BIO_get_data(BIO *bio);
  534. // BIO_set_init sets whether |bio| has been fully initialized. Until fully
  535. // initialized, |BIO_read| and |BIO_write| will fail.
  536. OPENSSL_EXPORT void BIO_set_init(BIO *bio, int init);
  537. // BIO_get_init returns whether |bio| has been fully initialized.
  538. OPENSSL_EXPORT int BIO_get_init(BIO *bio);
  539. // These are values of the |cmd| argument to |BIO_ctrl|.
  540. #define BIO_CTRL_RESET 1 // opt - rewind/zero etc
  541. #define BIO_CTRL_EOF 2 // opt - are we at the eof
  542. #define BIO_CTRL_INFO 3 // opt - extra tit-bits
  543. #define BIO_CTRL_SET 4 // man - set the 'IO' type
  544. #define BIO_CTRL_GET 5 // man - get the 'IO' type
  545. #define BIO_CTRL_PUSH 6
  546. #define BIO_CTRL_POP 7
  547. #define BIO_CTRL_GET_CLOSE 8 // man - set the 'close' on free
  548. #define BIO_CTRL_SET_CLOSE 9 // man - set the 'close' on free
  549. #define BIO_CTRL_PENDING 10 // opt - is their more data buffered
  550. #define BIO_CTRL_FLUSH 11 // opt - 'flush' buffered output
  551. #define BIO_CTRL_WPENDING 13 // opt - number of bytes still to write
  552. // callback is int cb(BIO *bio,state,ret);
  553. #define BIO_CTRL_SET_CALLBACK 14 // opt - set callback function
  554. #define BIO_CTRL_GET_CALLBACK 15 // opt - set callback function
  555. #define BIO_CTRL_SET_FILENAME 30 // BIO_s_file special
  556. // BIO_CTRL_DUP is never used, but exists to allow code to compile more
  557. // easily.
  558. #define BIO_CTRL_DUP 12
  559. // Deprecated functions.
  560. // BIO_f_base64 returns a filter |BIO| that base64-encodes data written into
  561. // it, and decodes data read from it. |BIO_gets| is not supported. Call
  562. // |BIO_flush| when done writing, to signal that no more data are to be
  563. // encoded. The flag |BIO_FLAGS_BASE64_NO_NL| may be set to encode all the data
  564. // on one line.
  565. OPENSSL_EXPORT const BIO_METHOD *BIO_f_base64(void);
  566. OPENSSL_EXPORT void BIO_set_retry_special(BIO *bio);
  567. // BIO_set_write_buffer_size returns zero.
  568. OPENSSL_EXPORT int BIO_set_write_buffer_size(BIO *bio, int buffer_size);
  569. // BIO_set_shutdown sets a method-specific "shutdown" bit on |bio|.
  570. OPENSSL_EXPORT void BIO_set_shutdown(BIO *bio, int shutdown);
  571. // BIO_get_shutdown returns the method-specific "shutdown" bit.
  572. OPENSSL_EXPORT int BIO_get_shutdown(BIO *bio);
  573. // BIO_meth_set_puts returns one. |BIO_puts| is implemented with |BIO_write| in
  574. // BoringSSL.
  575. OPENSSL_EXPORT int BIO_meth_set_puts(BIO_METHOD *method,
  576. int (*puts)(BIO *, const char *));
  577. // Private functions
  578. #define BIO_FLAGS_READ 0x01
  579. #define BIO_FLAGS_WRITE 0x02
  580. #define BIO_FLAGS_IO_SPECIAL 0x04
  581. #define BIO_FLAGS_RWS (BIO_FLAGS_READ | BIO_FLAGS_WRITE | BIO_FLAGS_IO_SPECIAL)
  582. #define BIO_FLAGS_SHOULD_RETRY 0x08
  583. #define BIO_FLAGS_BASE64_NO_NL 0x100
  584. // This is used with memory BIOs: it means we shouldn't free up or change the
  585. // data in any way.
  586. #define BIO_FLAGS_MEM_RDONLY 0x200
  587. // These are the 'types' of BIOs
  588. #define BIO_TYPE_NONE 0
  589. #define BIO_TYPE_MEM (1 | 0x0400)
  590. #define BIO_TYPE_FILE (2 | 0x0400)
  591. #define BIO_TYPE_FD (4 | 0x0400 | 0x0100)
  592. #define BIO_TYPE_SOCKET (5 | 0x0400 | 0x0100)
  593. #define BIO_TYPE_NULL (6 | 0x0400)
  594. #define BIO_TYPE_SSL (7 | 0x0200)
  595. #define BIO_TYPE_MD (8 | 0x0200) // passive filter
  596. #define BIO_TYPE_BUFFER (9 | 0x0200) // filter
  597. #define BIO_TYPE_CIPHER (10 | 0x0200) // filter
  598. #define BIO_TYPE_BASE64 (11 | 0x0200) // filter
  599. #define BIO_TYPE_CONNECT (12 | 0x0400 | 0x0100) // socket - connect
  600. #define BIO_TYPE_ACCEPT (13 | 0x0400 | 0x0100) // socket for accept
  601. #define BIO_TYPE_PROXY_CLIENT (14 | 0x0200) // client proxy BIO
  602. #define BIO_TYPE_PROXY_SERVER (15 | 0x0200) // server proxy BIO
  603. #define BIO_TYPE_NBIO_TEST (16 | 0x0200) // server proxy BIO
  604. #define BIO_TYPE_NULL_FILTER (17 | 0x0200)
  605. #define BIO_TYPE_BER (18 | 0x0200) // BER -> bin filter
  606. #define BIO_TYPE_BIO (19 | 0x0400) // (half a) BIO pair
  607. #define BIO_TYPE_LINEBUFFER (20 | 0x0200) // filter
  608. #define BIO_TYPE_DGRAM (21 | 0x0400 | 0x0100)
  609. #define BIO_TYPE_ASN1 (22 | 0x0200) // filter
  610. #define BIO_TYPE_COMP (23 | 0x0200) // filter
  611. // |BIO_TYPE_DESCRIPTOR| denotes that the |BIO| responds to the |BIO_C_SET_FD|
  612. // (|BIO_set_fd|) and |BIO_C_GET_FD| (|BIO_get_fd|) control hooks.
  613. #define BIO_TYPE_DESCRIPTOR 0x0100 // socket, fd, connect or accept
  614. #define BIO_TYPE_FILTER 0x0200
  615. #define BIO_TYPE_SOURCE_SINK 0x0400
  616. // BIO_TYPE_START is the first user-allocated |BIO| type. No pre-defined type,
  617. // flag bits aside, may exceed this value.
  618. #define BIO_TYPE_START 128
  619. struct bio_method_st {
  620. int type;
  621. const char *name;
  622. int (*bwrite)(BIO *, const char *, int);
  623. int (*bread)(BIO *, char *, int);
  624. // TODO(fork): remove bputs.
  625. int (*bputs)(BIO *, const char *);
  626. int (*bgets)(BIO *, char *, int);
  627. long (*ctrl)(BIO *, int, long, void *);
  628. int (*create)(BIO *);
  629. int (*destroy)(BIO *);
  630. long (*callback_ctrl)(BIO *, int, bio_info_cb);
  631. };
  632. struct bio_st {
  633. const BIO_METHOD *method;
  634. // init is non-zero if this |BIO| has been initialised.
  635. int init;
  636. // shutdown is often used by specific |BIO_METHOD|s to determine whether
  637. // they own some underlying resource. This flag can often by controlled by
  638. // |BIO_set_close|. For example, whether an fd BIO closes the underlying fd
  639. // when it, itself, is closed.
  640. int shutdown;
  641. int flags;
  642. int retry_reason;
  643. // num is a BIO-specific value. For example, in fd BIOs it's used to store a
  644. // file descriptor.
  645. int num;
  646. CRYPTO_refcount_t references;
  647. void *ptr;
  648. // next_bio points to the next |BIO| in a chain. This |BIO| owns a reference
  649. // to |next_bio|.
  650. BIO *next_bio; // used by filter BIOs
  651. size_t num_read, num_write;
  652. };
  653. #define BIO_C_SET_CONNECT 100
  654. #define BIO_C_DO_STATE_MACHINE 101
  655. #define BIO_C_SET_NBIO 102
  656. #define BIO_C_SET_PROXY_PARAM 103
  657. #define BIO_C_SET_FD 104
  658. #define BIO_C_GET_FD 105
  659. #define BIO_C_SET_FILE_PTR 106
  660. #define BIO_C_GET_FILE_PTR 107
  661. #define BIO_C_SET_FILENAME 108
  662. #define BIO_C_SET_SSL 109
  663. #define BIO_C_GET_SSL 110
  664. #define BIO_C_SET_MD 111
  665. #define BIO_C_GET_MD 112
  666. #define BIO_C_GET_CIPHER_STATUS 113
  667. #define BIO_C_SET_BUF_MEM 114
  668. #define BIO_C_GET_BUF_MEM_PTR 115
  669. #define BIO_C_GET_BUFF_NUM_LINES 116
  670. #define BIO_C_SET_BUFF_SIZE 117
  671. #define BIO_C_SET_ACCEPT 118
  672. #define BIO_C_SSL_MODE 119
  673. #define BIO_C_GET_MD_CTX 120
  674. #define BIO_C_GET_PROXY_PARAM 121
  675. #define BIO_C_SET_BUFF_READ_DATA 122 // data to read first
  676. #define BIO_C_GET_ACCEPT 124
  677. #define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125
  678. #define BIO_C_GET_SSL_NUM_RENEGOTIATES 126
  679. #define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127
  680. #define BIO_C_FILE_SEEK 128
  681. #define BIO_C_GET_CIPHER_CTX 129
  682. #define BIO_C_SET_BUF_MEM_EOF_RETURN 130 //return end of input value
  683. #define BIO_C_SET_BIND_MODE 131
  684. #define BIO_C_GET_BIND_MODE 132
  685. #define BIO_C_FILE_TELL 133
  686. #define BIO_C_GET_SOCKS 134
  687. #define BIO_C_SET_SOCKS 135
  688. #define BIO_C_SET_WRITE_BUF_SIZE 136 // for BIO_s_bio
  689. #define BIO_C_GET_WRITE_BUF_SIZE 137
  690. #define BIO_C_GET_WRITE_GUARANTEE 140
  691. #define BIO_C_GET_READ_REQUEST 141
  692. #define BIO_C_SHUTDOWN_WR 142
  693. #define BIO_C_NREAD0 143
  694. #define BIO_C_NREAD 144
  695. #define BIO_C_NWRITE0 145
  696. #define BIO_C_NWRITE 146
  697. #define BIO_C_RESET_READ_REQUEST 147
  698. #define BIO_C_SET_MD_CTX 148
  699. #define BIO_C_SET_PREFIX 149
  700. #define BIO_C_GET_PREFIX 150
  701. #define BIO_C_SET_SUFFIX 151
  702. #define BIO_C_GET_SUFFIX 152
  703. #define BIO_C_SET_EX_ARG 153
  704. #define BIO_C_GET_EX_ARG 154
  705. #if defined(__cplusplus)
  706. } // extern C
  707. extern "C++" {
  708. namespace bssl {
  709. BORINGSSL_MAKE_DELETER(BIO, BIO_free)
  710. } // namespace bssl
  711. } // extern C++
  712. #endif
  713. #define BIO_R_BAD_FOPEN_MODE 100
  714. #define BIO_R_BROKEN_PIPE 101
  715. #define BIO_R_CONNECT_ERROR 102
  716. #define BIO_R_ERROR_SETTING_NBIO 103
  717. #define BIO_R_INVALID_ARGUMENT 104
  718. #define BIO_R_IN_USE 105
  719. #define BIO_R_KEEPALIVE 106
  720. #define BIO_R_NBIO_CONNECT_ERROR 107
  721. #define BIO_R_NO_HOSTNAME_SPECIFIED 108
  722. #define BIO_R_NO_PORT_SPECIFIED 109
  723. #define BIO_R_NO_SUCH_FILE 110
  724. #define BIO_R_NULL_PARAMETER 111
  725. #define BIO_R_SYS_LIB 112
  726. #define BIO_R_UNABLE_TO_CREATE_SOCKET 113
  727. #define BIO_R_UNINITIALIZED 114
  728. #define BIO_R_UNSUPPORTED_METHOD 115
  729. #define BIO_R_WRITE_TO_READ_ONLY_BIO 116
  730. #endif // OPENSSL_HEADER_BIO_H