shim.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*
  2. * Copyright (C) 2014 Space Monkey, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. *
  16. */
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <openssl/bio.h>
  20. #include <openssl/crypto.h>
  21. #include <openssl/dh.h>
  22. #include <openssl/err.h>
  23. #include <openssl/evp.h>
  24. #include <openssl/hmac.h>
  25. #include <openssl/pem.h>
  26. #include <openssl/ssl.h>
  27. #include <openssl/x509v3.h>
  28. #ifndef SSL_MODE_RELEASE_BUFFERS
  29. #define SSL_MODE_RELEASE_BUFFERS 0
  30. #endif
  31. #ifndef SSL_OP_NO_COMPRESSION
  32. #define SSL_OP_NO_COMPRESSION 0
  33. #endif
  34. /* shim methods */
  35. extern int X_shim_init();
  36. /* Library methods */
  37. extern void X_OPENSSL_free(void *ref);
  38. /* SSL methods */
  39. extern long X_SSL_set_options(SSL* ssl, long options);
  40. extern long X_SSL_get_options(SSL* ssl);
  41. extern long X_SSL_clear_options(SSL* ssl, long options);
  42. extern long X_SSL_set_tlsext_host_name(SSL *ssl, const char *name);
  43. extern const char * X_SSL_get_cipher_name(const SSL *ssl);
  44. extern int X_SSL_session_reused(SSL *ssl);
  45. extern int X_SSL_new_index();
  46. extern const SSL_METHOD *X_SSLv23_method();
  47. extern const SSL_METHOD *X_SSLv3_method();
  48. extern const SSL_METHOD *X_TLSv1_method();
  49. extern const SSL_METHOD *X_TLSv1_1_method();
  50. extern const SSL_METHOD *X_TLSv1_2_method();
  51. #if defined SSL_CTRL_SET_TLSEXT_HOSTNAME
  52. extern int sni_cb(SSL *ssl_conn, int *ad, void *arg);
  53. #endif
  54. extern int X_SSL_verify_cb(int ok, X509_STORE_CTX* store);
  55. /* SSL_CTX methods */
  56. extern int X_SSL_CTX_new_index();
  57. extern long X_SSL_CTX_set_options(SSL_CTX* ctx, long options);
  58. extern long X_SSL_CTX_clear_options(SSL_CTX* ctx, long options);
  59. extern long X_SSL_CTX_get_options(SSL_CTX* ctx);
  60. extern long X_SSL_CTX_set_mode(SSL_CTX* ctx, long modes);
  61. extern long X_SSL_CTX_get_mode(SSL_CTX* ctx);
  62. extern long X_SSL_CTX_set_session_cache_mode(SSL_CTX* ctx, long modes);
  63. extern long X_SSL_CTX_sess_set_cache_size(SSL_CTX* ctx, long t);
  64. extern long X_SSL_CTX_sess_get_cache_size(SSL_CTX* ctx);
  65. extern long X_SSL_CTX_set_timeout(SSL_CTX* ctx, long t);
  66. extern long X_SSL_CTX_get_timeout(SSL_CTX* ctx);
  67. extern long X_SSL_CTX_add_extra_chain_cert(SSL_CTX* ctx, X509 *cert);
  68. extern long X_SSL_CTX_set_tmp_ecdh(SSL_CTX* ctx, EC_KEY *key);
  69. extern long X_SSL_CTX_set_tlsext_servername_callback(SSL_CTX* ctx, int (*cb)(SSL *con, int *ad, void *args));
  70. extern int X_SSL_CTX_verify_cb(int ok, X509_STORE_CTX* store);
  71. extern long X_SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH *dh);
  72. extern long X_PEM_read_DHparams(SSL_CTX* ctx, DH *dh);
  73. extern int X_SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX *sslctx,
  74. int (*cb)(SSL *s, unsigned char key_name[16],
  75. unsigned char iv[EVP_MAX_IV_LENGTH],
  76. EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc));
  77. extern int X_SSL_CTX_ticket_key_cb(SSL *s, unsigned char key_name[16],
  78. unsigned char iv[EVP_MAX_IV_LENGTH],
  79. EVP_CIPHER_CTX *cctx, HMAC_CTX *hctx, int enc);
  80. /* BIO methods */
  81. extern int X_BIO_get_flags(BIO *b);
  82. extern void X_BIO_set_flags(BIO *bio, int flags);
  83. extern void X_BIO_clear_flags(BIO *bio, int flags);
  84. extern void X_BIO_set_data(BIO *bio, void* data);
  85. extern void *X_BIO_get_data(BIO *bio);
  86. extern int X_BIO_read(BIO *b, void *buf, int len);
  87. extern int X_BIO_write(BIO *b, const void *buf, int len);
  88. extern BIO *X_BIO_new_write_bio();
  89. extern BIO *X_BIO_new_read_bio();
  90. /* EVP methods */
  91. extern const EVP_MD *X_EVP_get_digestbyname(const char *name);
  92. extern EVP_MD_CTX *X_EVP_MD_CTX_new();
  93. extern void X_EVP_MD_CTX_free(EVP_MD_CTX *ctx);
  94. extern const EVP_MD *X_EVP_md_null();
  95. extern const EVP_MD *X_EVP_md5();
  96. extern const EVP_MD *X_EVP_sha();
  97. extern const EVP_MD *X_EVP_sha1();
  98. extern const EVP_MD *X_EVP_dss();
  99. extern const EVP_MD *X_EVP_dss1();
  100. extern const EVP_MD *X_EVP_ripemd160();
  101. extern const EVP_MD *X_EVP_sha224();
  102. extern const EVP_MD *X_EVP_sha256();
  103. extern const EVP_MD *X_EVP_sha384();
  104. extern const EVP_MD *X_EVP_sha512();
  105. extern int X_EVP_MD_size(const EVP_MD *md);
  106. extern int X_EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
  107. extern int X_EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
  108. extern int X_EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
  109. extern int X_EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
  110. extern int X_EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
  111. extern EVP_PKEY *X_EVP_PKEY_new(void);
  112. extern void X_EVP_PKEY_free(EVP_PKEY *pkey);
  113. extern int X_EVP_PKEY_size(EVP_PKEY *pkey);
  114. extern struct rsa_st *X_EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
  115. extern int X_EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key);
  116. extern int X_EVP_PKEY_assign_charp(EVP_PKEY *pkey, int type, char *key);
  117. extern int X_EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey);
  118. extern int X_EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
  119. extern int X_EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
  120. extern int X_EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey);
  121. extern int X_EVP_CIPHER_block_size(EVP_CIPHER *c);
  122. extern int X_EVP_CIPHER_key_length(EVP_CIPHER *c);
  123. extern int X_EVP_CIPHER_iv_length(EVP_CIPHER *c);
  124. extern int X_EVP_CIPHER_nid(EVP_CIPHER *c);
  125. extern int X_EVP_CIPHER_CTX_block_size(EVP_CIPHER_CTX *ctx);
  126. extern int X_EVP_CIPHER_CTX_key_length(EVP_CIPHER_CTX *ctx);
  127. extern int X_EVP_CIPHER_CTX_iv_length(EVP_CIPHER_CTX *ctx);
  128. extern const EVP_CIPHER *X_EVP_CIPHER_CTX_cipher(EVP_CIPHER_CTX *ctx);
  129. extern int X_EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx);
  130. /* HMAC methods */
  131. extern size_t X_HMAC_size(const HMAC_CTX *e);
  132. extern HMAC_CTX *X_HMAC_CTX_new(void);
  133. extern void X_HMAC_CTX_free(HMAC_CTX *ctx);
  134. extern int X_HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md, ENGINE *impl);
  135. extern int X_HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);
  136. extern int X_HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
  137. /* X509 methods */
  138. extern int X_X509_add_ref(X509* x509);
  139. extern const ASN1_TIME *X_X509_get0_notBefore(const X509 *x);
  140. extern const ASN1_TIME *X_X509_get0_notAfter(const X509 *x);
  141. extern int X_sk_X509_num(STACK_OF(X509) *sk);
  142. extern X509 *X_sk_X509_value(STACK_OF(X509)* sk, int i);