2 * Copyright 2020-2022 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
11 * Key Management utility functions to share functionality between the export()
12 * and get_params() methods.
13 * export() uses OSSL_PARAM_BLD, and get_params() used the OSSL_PARAM[] to
14 * fill in parameter data for the same key and data fields.
17 #include <openssl/core_names.h>
18 #include "internal/param_build_set.h"
20 DEFINE_SPECIAL_STACK_OF_CONST(BIGNUM_const
, BIGNUM
)
22 int ossl_param_build_set_int(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
23 const char *key
, int num
)
26 return OSSL_PARAM_BLD_push_int(bld
, key
, num
);
27 p
= OSSL_PARAM_locate(p
, key
);
29 return OSSL_PARAM_set_int(p
, num
);
33 int ossl_param_build_set_long(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
34 const char *key
, long num
)
37 return OSSL_PARAM_BLD_push_long(bld
, key
, num
);
38 p
= OSSL_PARAM_locate(p
, key
);
40 return OSSL_PARAM_set_long(p
, num
);
44 int ossl_param_build_set_utf8_string(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
45 const char *key
, const char *buf
)
48 return OSSL_PARAM_BLD_push_utf8_string(bld
, key
, buf
, 0);
49 p
= OSSL_PARAM_locate(p
, key
);
51 return OSSL_PARAM_set_utf8_string(p
, buf
);
55 int ossl_param_build_set_octet_string(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
57 const unsigned char *data
,
61 return OSSL_PARAM_BLD_push_octet_string(bld
, key
, data
, data_len
);
63 p
= OSSL_PARAM_locate(p
, key
);
65 return OSSL_PARAM_set_octet_string(p
, data
, data_len
);
69 int ossl_param_build_set_bn_pad(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
70 const char *key
, const BIGNUM
*bn
, size_t sz
)
73 return OSSL_PARAM_BLD_push_BN_pad(bld
, key
, bn
, sz
);
74 p
= OSSL_PARAM_locate(p
, key
);
76 if (sz
> p
->data_size
) {
77 ERR_raise(ERR_LIB_CRYPTO
, CRYPTO_R_TOO_SMALL_BUFFER
);
81 return OSSL_PARAM_set_BN(p
, bn
);
86 int ossl_param_build_set_bn(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*p
,
87 const char *key
, const BIGNUM
*bn
)
90 return OSSL_PARAM_BLD_push_BN(bld
, key
, bn
);
92 p
= OSSL_PARAM_locate(p
, key
);
94 return OSSL_PARAM_set_BN(p
, bn
) > 0;
98 int ossl_param_build_set_multi_key_bn(OSSL_PARAM_BLD
*bld
, OSSL_PARAM
*params
,
100 STACK_OF(BIGNUM_const
) *stk
)
102 int i
, sz
= sk_BIGNUM_const_num(stk
);
107 for (i
= 0; i
< sz
&& names
[i
] != NULL
; ++i
) {
108 if (!OSSL_PARAM_BLD_push_BN(bld
, names
[i
],
109 sk_BIGNUM_const_value(stk
, i
)))
115 for (i
= 0; i
< sz
&& names
[i
] != NULL
; ++i
) {
116 p
= OSSL_PARAM_locate(params
, names
[i
]);
118 if (!OSSL_PARAM_set_BN(p
, sk_BIGNUM_const_value(stk
, i
)))