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

decoder.h 5.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License 2.0 (the "License"). You may not use
  5. * this file except in compliance with the License. You can obtain a copy
  6. * in the file LICENSE in the source distribution or at
  7. * https://www.openssl.org/source/license.html
  8. */
  9. #ifndef OPENSSL_DECODER_H
  10. #define OPENSSL_DECODER_H
  11. #pragma once
  12. #include <openssl/opensslconf.h>
  13. #ifndef OPENSSL_NO_STDIO
  14. #include <stdio.h>
  15. #endif
  16. #include <stdarg.h>
  17. #include <stddef.h>
  18. #include <openssl/decodererr.h>
  19. #include <openssl/types.h>
  20. #include <openssl/core.h>
  21. #ifdef __cplusplus
  22. extern "C"
  23. {
  24. #endif
  25. OSSL_DECODER* OSSL_DECODER_fetch(OSSL_LIB_CTX* libctx, const char* name, const char* properties);
  26. int OSSL_DECODER_up_ref(OSSL_DECODER* encoder);
  27. void OSSL_DECODER_free(OSSL_DECODER* encoder);
  28. const OSSL_PROVIDER* OSSL_DECODER_get0_provider(const OSSL_DECODER* encoder);
  29. const char* OSSL_DECODER_get0_properties(const OSSL_DECODER* encoder);
  30. const char* OSSL_DECODER_get0_name(const OSSL_DECODER* decoder);
  31. const char* OSSL_DECODER_get0_description(const OSSL_DECODER* decoder);
  32. int OSSL_DECODER_is_a(const OSSL_DECODER* encoder, const char* name);
  33. void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX* libctx, void (*fn)(OSSL_DECODER* encoder, void* arg), void* arg);
  34. int OSSL_DECODER_names_do_all(const OSSL_DECODER* encoder, void (*fn)(const char* name, void* data), void* data);
  35. const OSSL_PARAM* OSSL_DECODER_gettable_params(OSSL_DECODER* decoder);
  36. int OSSL_DECODER_get_params(OSSL_DECODER* decoder, OSSL_PARAM params[]);
  37. const OSSL_PARAM* OSSL_DECODER_settable_ctx_params(OSSL_DECODER* encoder);
  38. OSSL_DECODER_CTX* OSSL_DECODER_CTX_new(void);
  39. int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX* ctx, const OSSL_PARAM params[]);
  40. void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX* ctx);
  41. /* Utilities that help set specific parameters */
  42. int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX* ctx, const unsigned char* kstr, size_t klen);
  43. int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX* ctx, pem_password_cb* cb, void* cbarg);
  44. int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX* ctx, OSSL_PASSPHRASE_CALLBACK* cb, void* cbarg);
  45. int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX* ctx, const UI_METHOD* ui_method, void* ui_data);
  46. /*
  47. * Utilities to read the object to decode, with the result sent to cb.
  48. * These will discover all provided methods
  49. */
  50. int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX* ctx, int selection);
  51. int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX* ctx, const char* input_type);
  52. int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX* ctx, const char* input_structure);
  53. int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX* ctx, OSSL_DECODER* decoder);
  54. int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX* ctx, OSSL_LIB_CTX* libctx, const char* propq);
  55. int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX* ctx);
  56. typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE;
  57. OSSL_DECODER*
  58. OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE* decoder_inst);
  59. void*
  60. OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE* decoder_inst);
  61. const char*
  62. OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE* decoder_inst);
  63. const char*
  64. OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE* decoder_inst, int* was_set);
  65. typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE* decoder_inst, const OSSL_PARAM* params, void* construct_data);
  66. typedef void OSSL_DECODER_CLEANUP(void* construct_data);
  67. int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX* ctx, OSSL_DECODER_CONSTRUCT* construct);
  68. int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX* ctx, void* construct_data);
  69. int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX* ctx, OSSL_DECODER_CLEANUP* cleanup);
  70. OSSL_DECODER_CONSTRUCT* OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX* ctx);
  71. void* OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX* ctx);
  72. OSSL_DECODER_CLEANUP* OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX* ctx);
  73. int OSSL_DECODER_export(OSSL_DECODER_INSTANCE* decoder_inst, void* reference, size_t reference_sz, OSSL_CALLBACK* export_cb, void* export_cbarg);
  74. int OSSL_DECODER_from_bio(OSSL_DECODER_CTX* ctx, BIO* in);
  75. #ifndef OPENSSL_NO_STDIO
  76. int OSSL_DECODER_from_fp(OSSL_DECODER_CTX* ctx, FILE* in);
  77. #endif
  78. int OSSL_DECODER_from_data(OSSL_DECODER_CTX* ctx, const unsigned char** pdata, size_t* pdata_len);
  79. /*
  80. * Create the OSSL_DECODER_CTX with an associated type. This will perform
  81. * an implicit OSSL_DECODER_fetch(), suitable for the object of that type.
  82. */
  83. OSSL_DECODER_CTX*
  84. OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY** pkey, const char* input_type, const char* input_struct, const char* keytype, int selection, OSSL_LIB_CTX* libctx, const char* propquery);
  85. #ifdef __cplusplus
  86. }
  87. #endif
  88. #endif