2 * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
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
10 #include <openssl/core.h>
11 #include <openssl/core_numbers.h>
12 #include <openssl/bn.h>
13 #include <openssl/asn1.h> /* i2d_of_void */
14 #include <openssl/x509.h> /* X509_SIG */
15 #include <openssl/types.h>
17 struct pkcs8_encrypt_ctx_st {
18 /* Set to 1 if intending to encrypt/decrypt, otherwise 0 */
22 int pbe_nid; /* For future variation */
24 /* Passphrase that was passed by the caller */
26 size_t cipher_pass_length;
28 /* This callback is only used of |cipher_pass| is NULL */
29 OSSL_PASSPHRASE_CALLBACK *cb;
33 OSSL_OP_keymgmt_new_fn *ossl_prov_get_keymgmt_new(const OSSL_DISPATCH *fns);
34 OSSL_OP_keymgmt_free_fn *ossl_prov_get_keymgmt_free(const OSSL_DISPATCH *fns);
35 OSSL_OP_keymgmt_import_fn *ossl_prov_get_keymgmt_import(const OSSL_DISPATCH *fns);
37 OSSL_OP_keymgmt_new_fn *ossl_prov_get_keymgmt_rsa_new(void);
38 OSSL_OP_keymgmt_free_fn *ossl_prov_get_keymgmt_rsa_free(void);
39 OSSL_OP_keymgmt_import_fn *ossl_prov_get_keymgmt_rsa_import(void);
40 OSSL_OP_keymgmt_new_fn *ossl_prov_get_keymgmt_dh_new(void);
41 OSSL_OP_keymgmt_free_fn *ossl_prov_get_keymgmt_dh_free(void);
42 OSSL_OP_keymgmt_import_fn *ossl_prov_get_keymgmt_dh_import(void);
43 OSSL_OP_keymgmt_new_fn *ossl_prov_get_keymgmt_dsa_new(void);
44 OSSL_OP_keymgmt_free_fn *ossl_prov_get_keymgmt_dsa_free(void);
45 OSSL_OP_keymgmt_import_fn *ossl_prov_get_keymgmt_dsa_import(void);
47 int ossl_prov_prepare_dh_params(const void *dh, int nid,
48 ASN1_STRING **pstr, int *pstrtype);
49 int ossl_prov_dh_pub_to_der(const void *dh, unsigned char **pder);
50 int ossl_prov_dh_priv_to_der(const void *dh, unsigned char **pder);
52 int ossl_prov_prepare_dsa_params(const void *dsa, int nid,
53 ASN1_STRING **pstr, int *pstrtype);
55 * Special variant of ossl_prov_prepare_dsa_params() that requires all
56 * three parameters (P, Q and G) to be set. This is used when serializing
59 int ossl_prov_prepare_all_dsa_params(const void *dsa, int nid,
60 ASN1_STRING **pstr, int *pstrtype);
61 int ossl_prov_dsa_pub_to_der(const void *dsa, unsigned char **pder);
62 int ossl_prov_dsa_priv_to_der(const void *dsa, unsigned char **pder);
64 int ossl_prov_print_labeled_bignum(BIO *out, const char *label,
66 int ossl_prov_print_rsa(BIO *out, RSA *rsa, int priv);
74 int ossl_prov_print_dh(BIO *out, DH *dh, enum dh_print_type type);
82 int ossl_prov_print_dsa(BIO *out, DSA *dsa, enum dsa_print_type type);
84 int ossl_prov_write_priv_der_from_obj(BIO *out, const void *obj, int obj_nid,
85 int (*p2s)(const void *obj, int nid,
88 int (*k2d)(const void *obj,
89 unsigned char **pder),
90 struct pkcs8_encrypt_ctx_st *ctx);
91 int ossl_prov_write_priv_pem_from_obj(BIO *out, const void *obj, int obj_nid,
92 int (*p2s)(const void *obj, int nid,
95 int (*k2d)(const void *obj,
96 unsigned char **pder),
97 struct pkcs8_encrypt_ctx_st *ctx);
98 int ossl_prov_write_pub_der_from_obj(BIO *out, const void *obj, int obj_nid,
99 int (*p2s)(const void *obj, int nid,
102 int (*k2d)(const void *obj,
103 unsigned char **pder));
104 int ossl_prov_write_pub_pem_from_obj(BIO *out, const void *obj, int obj_nid,
105 int (*p2s)(const void *obj, int nid,
108 int (*k2d)(const void *obj,
109 unsigned char **pder));