Latest update.
This commit is contained in:
@@ -816,7 +816,7 @@ $target : $args{generator}->[0] $deps
|
||||
\@ $incs_on
|
||||
\@ extradefines = "$defs"
|
||||
PIPE \$(CPP) $cppflags \$\@-S | -
|
||||
\$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@-i
|
||||
\$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@-i
|
||||
\@ DELETE/SYMBOL/LOCAL extradefines
|
||||
\@ $incs_off
|
||||
RENAME \$\@-i \$\@
|
||||
@@ -844,7 +844,7 @@ EOF
|
||||
|
||||
sub src2obj {
|
||||
my %args = @_;
|
||||
my @srcs = map { (my $x = $_) =~ s/\.[sS]$/.asm/; $x
|
||||
my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x
|
||||
} ( @{$args{srcs}} );
|
||||
(my $obj = $args{obj}) =~ s|\.o$||;
|
||||
my $deps = join(", -\n\t\t", @srcs, @{$args{deps}});
|
||||
@@ -864,20 +864,6 @@ EOF
|
||||
my $before = $unified_info{before}->{$obj.".OBJ"} || "\@ !";
|
||||
my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !";
|
||||
|
||||
if ($srcs[0] =~ /\.asm$/) {
|
||||
my $asflags = { shlib => ' $(LIB_ASFLAGS)',
|
||||
lib => ' $(LIB_ASFLAGS)',
|
||||
dso => ' $(DSO_ASFLAGS)',
|
||||
bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
|
||||
return <<"EOF";
|
||||
$obj.OBJ : $deps
|
||||
${before}
|
||||
SET DEFAULT $forward
|
||||
\$(AS) $asflags \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs
|
||||
SET DEFAULT $backward
|
||||
EOF
|
||||
}
|
||||
|
||||
my $cflags;
|
||||
if ($args{installed}) {
|
||||
$cflags = { shlib => '$(LIB_CFLAGS)',
|
||||
@@ -895,6 +881,10 @@ EOF
|
||||
dso => '$(DSO_CPPFLAGS)',
|
||||
bin => '$(BIN_CPPFLAGS)' } -> {$args{intent}};
|
||||
my $defs = join("", map { ",".$_ } @{$args{defs}});
|
||||
my $asflags = { shlib => ' $(LIB_ASFLAGS)',
|
||||
lib => ' $(LIB_ASFLAGS)',
|
||||
dso => ' $(DSO_ASFLAGS)',
|
||||
bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
|
||||
|
||||
my @incs_cmds = includes({ shlib => '$(LIB_INCLUDES)',
|
||||
lib => '$(LIB_INCLUDES)',
|
||||
@@ -907,6 +897,36 @@ EOF
|
||||
} @{$args{incs}});
|
||||
my $incs_on = join("\n\t\@ ", @{$incs_cmds[0]}) || '!';
|
||||
my $incs_off = join("\n\t\@ ", @{$incs_cmds[1]}) || '!';
|
||||
|
||||
if ($srcs[0] =~ /\.asm$/) {
|
||||
return <<"EOF";
|
||||
$obj.OBJ : $deps
|
||||
${before}
|
||||
SET DEFAULT $forward
|
||||
\$(AS) $asflags \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs
|
||||
SET DEFAULT $backward
|
||||
${after}
|
||||
- PURGE $obj.OBJ
|
||||
EOF
|
||||
} elsif ($srcs[0] =~ /.S$/) {
|
||||
return <<"EOF";
|
||||
$obj.OBJ : $deps
|
||||
${before}
|
||||
SET DEFAULT $forward
|
||||
\@ $incs_on
|
||||
\@ extradefines = "$defs"
|
||||
PIPE \$(CPP) ${cflags} $srcs | -
|
||||
\$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" -
|
||||
> ${objd}${objn}.asm
|
||||
\@ DELETE/SYMBOL/LOCAL extradefines
|
||||
\@ $incs_off
|
||||
SET DEFAULT $backward
|
||||
${after}
|
||||
\$(AS) $asflags \$(ASOUTFLAG)$obj.OBJ $obj.asm
|
||||
- PURGE $obj.OBJ
|
||||
EOF
|
||||
}
|
||||
|
||||
my $depbuild = $disabled{makedepend} ? ""
|
||||
: " /MMS=(FILE=${objd}${objn}.D,TARGET=$obj.OBJ)";
|
||||
|
||||
|
||||
@@ -1112,13 +1112,13 @@ foreach my $feature (@{$target{disable}}) {
|
||||
$disabled{$feature} = 'config';
|
||||
}
|
||||
foreach my $feature (@{$target{enable}}) {
|
||||
if ("default" eq ($disabled{$_} // "")) {
|
||||
if ("default" eq ($disabled{$feature} // "")) {
|
||||
if (exists $deprecated_disablables{$feature}) {
|
||||
warn "***** config $target enables deprecated feature $feature\n";
|
||||
} elsif (!grep { $feature eq $_ } @disablables) {
|
||||
die "***** config $target enables unknown feature $feature\n";
|
||||
}
|
||||
delete $disabled{$_};
|
||||
delete $disabled{$feature};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+65
-69
@@ -280,78 +280,78 @@ const UI_METHOD *get_ui_method(void)
|
||||
return ui_method;
|
||||
}
|
||||
|
||||
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
|
||||
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data)
|
||||
{
|
||||
int res = 0;
|
||||
UI *ui = NULL;
|
||||
PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp;
|
||||
UI *ui;
|
||||
int ok = 0;
|
||||
char *buff = NULL;
|
||||
int ui_flags = 0;
|
||||
const char *prompt_info = NULL;
|
||||
char *prompt;
|
||||
|
||||
ui = UI_new_method(ui_method);
|
||||
if (ui) {
|
||||
int ok = 0;
|
||||
char *buff = NULL;
|
||||
int ui_flags = 0;
|
||||
const char *prompt_info = NULL;
|
||||
char *prompt;
|
||||
if ((ui = UI_new_method(ui_method)) == NULL)
|
||||
return 0;
|
||||
|
||||
if (cb_data != NULL && cb_data->prompt_info != NULL)
|
||||
prompt_info = cb_data->prompt_info;
|
||||
prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
|
||||
if (!prompt) {
|
||||
BIO_printf(bio_err, "Out of memory\n");
|
||||
UI_free(ui);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
|
||||
UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);
|
||||
|
||||
/* We know that there is no previous user data to return to us */
|
||||
(void)UI_add_user_data(ui, cb_data);
|
||||
|
||||
ok = UI_add_input_string(ui, prompt, ui_flags, buf,
|
||||
PW_MIN_LENGTH, bufsiz - 1);
|
||||
|
||||
if (ok >= 0 && verify) {
|
||||
buff = app_malloc(bufsiz, "password buffer");
|
||||
ok = UI_add_verify_string(ui, prompt, ui_flags, buff,
|
||||
PW_MIN_LENGTH, bufsiz - 1, buf);
|
||||
}
|
||||
if (ok >= 0)
|
||||
do {
|
||||
ok = UI_process(ui);
|
||||
} while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0));
|
||||
|
||||
OPENSSL_clear_free(buff, (unsigned int)bufsiz);
|
||||
|
||||
if (ok >= 0)
|
||||
res = strlen(buf);
|
||||
if (ok == -1) {
|
||||
BIO_printf(bio_err, "User interface error\n");
|
||||
ERR_print_errors(bio_err);
|
||||
OPENSSL_cleanse(buf, (unsigned int)bufsiz);
|
||||
res = 0;
|
||||
}
|
||||
if (ok == -2) {
|
||||
BIO_printf(bio_err, "aborted!\n");
|
||||
OPENSSL_cleanse(buf, (unsigned int)bufsiz);
|
||||
res = 0;
|
||||
}
|
||||
if (cb_data != NULL && cb_data->prompt_info != NULL)
|
||||
prompt_info = cb_data->prompt_info;
|
||||
prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
|
||||
if (prompt == NULL) {
|
||||
BIO_printf(bio_err, "Out of memory\n");
|
||||
UI_free(ui);
|
||||
OPENSSL_free(prompt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
|
||||
UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);
|
||||
|
||||
/* We know that there is no previous user data to return to us */
|
||||
(void)UI_add_user_data(ui, cb_data);
|
||||
|
||||
ok = UI_add_input_string(ui, prompt, ui_flags, buf,
|
||||
PW_MIN_LENGTH, bufsiz - 1);
|
||||
|
||||
if (ok >= 0 && verify) {
|
||||
buff = app_malloc(bufsiz, "password buffer");
|
||||
ok = UI_add_verify_string(ui, prompt, ui_flags, buff,
|
||||
PW_MIN_LENGTH, bufsiz - 1, buf);
|
||||
}
|
||||
if (ok >= 0)
|
||||
do {
|
||||
ok = UI_process(ui);
|
||||
} while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0));
|
||||
|
||||
OPENSSL_clear_free(buff, (unsigned int)bufsiz);
|
||||
|
||||
if (ok >= 0)
|
||||
res = strlen(buf);
|
||||
if (ok == -1) {
|
||||
BIO_printf(bio_err, "User interface error\n");
|
||||
ERR_print_errors(bio_err);
|
||||
OPENSSL_cleanse(buf, (unsigned int)bufsiz);
|
||||
res = 0;
|
||||
}
|
||||
if (ok == -2) {
|
||||
BIO_printf(bio_err, "aborted!\n");
|
||||
OPENSSL_cleanse(buf, (unsigned int)bufsiz);
|
||||
res = 0;
|
||||
}
|
||||
UI_free(ui);
|
||||
OPENSSL_free(prompt);
|
||||
return res;
|
||||
}
|
||||
|
||||
int wrap_password_callback(char *buf, int bufsiz, int verify, void *userdata)
|
||||
{
|
||||
return password_callback(buf, bufsiz, verify, (PW_CB_DATA *)userdata);
|
||||
}
|
||||
|
||||
static char *app_get_pass(const char *arg, int keepbio);
|
||||
|
||||
int app_passwd(const char *arg1, const char *arg2, char **pass1, char **pass2)
|
||||
{
|
||||
int same;
|
||||
if (arg2 == NULL || arg1 == NULL || strcmp(arg1, arg2))
|
||||
same = 0;
|
||||
else
|
||||
same = 1;
|
||||
int same = arg1 != NULL && arg2 != NULL && strcmp(arg1, arg2) == 0;
|
||||
|
||||
if (arg1 != NULL) {
|
||||
*pass1 = app_get_pass(arg1, same);
|
||||
if (*pass1 == NULL)
|
||||
@@ -371,8 +371,8 @@ int app_passwd(const char *arg1, const char *arg2, char **pass1, char **pass2)
|
||||
|
||||
static char *app_get_pass(const char *arg, int keepbio)
|
||||
{
|
||||
char *tmp, tpass[APP_PASS_LEN];
|
||||
static BIO *pwdbio = NULL;
|
||||
char *tmp, tpass[APP_PASS_LEN];
|
||||
int i;
|
||||
|
||||
if (strncmp(arg, "pass:", 5) == 0)
|
||||
@@ -380,7 +380,7 @@ static char *app_get_pass(const char *arg, int keepbio)
|
||||
if (strncmp(arg, "env:", 4) == 0) {
|
||||
tmp = getenv(arg + 4);
|
||||
if (tmp == NULL) {
|
||||
BIO_printf(bio_err, "Can't read environment variable %s\n", arg + 4);
|
||||
BIO_printf(bio_err, "No environment variable %s\n", arg + 4);
|
||||
return NULL;
|
||||
}
|
||||
return OPENSSL_strdup(tmp);
|
||||
@@ -542,7 +542,7 @@ int add_oid_section(CONF *conf)
|
||||
}
|
||||
|
||||
static int load_pkcs12(BIO *in, const char *desc,
|
||||
pem_password_cb *pem_cb, void *cb_data,
|
||||
pem_password_cb *pem_cb, PW_CB_DATA *cb_data,
|
||||
EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca)
|
||||
{
|
||||
const char *pass;
|
||||
@@ -749,20 +749,16 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin,
|
||||
if (format == FORMAT_ASN1) {
|
||||
pkey = d2i_PrivateKey_bio(key, NULL);
|
||||
} else if (format == FORMAT_PEM) {
|
||||
pkey = PEM_read_bio_PrivateKey(key, NULL,
|
||||
(pem_password_cb *)password_callback,
|
||||
&cb_data);
|
||||
pkey = PEM_read_bio_PrivateKey(key, NULL, wrap_password_callback, &cb_data);
|
||||
} else if (format == FORMAT_PKCS12) {
|
||||
if (!load_pkcs12(key, key_descrip,
|
||||
(pem_password_cb *)password_callback, &cb_data,
|
||||
if (!load_pkcs12(key, key_descrip, wrap_password_callback, &cb_data,
|
||||
&pkey, NULL, NULL))
|
||||
goto end;
|
||||
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4)
|
||||
} else if (format == FORMAT_MSBLOB) {
|
||||
pkey = b2i_PrivateKey_bio(key);
|
||||
} else if (format == FORMAT_PVK) {
|
||||
pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback,
|
||||
&cb_data);
|
||||
pkey = b2i_PVK_bio(key, wrap_password_callback, &cb_data);
|
||||
#endif
|
||||
} else {
|
||||
BIO_printf(bio_err, "bad input format specified for key file\n");
|
||||
|
||||
@@ -437,6 +437,8 @@ typedef struct pw_cb_data {
|
||||
const char *prompt_info;
|
||||
} PW_CB_DATA;
|
||||
|
||||
/* We need both wrap and the "real" function because libcrypto uses both. */
|
||||
int wrap_password_callback(char *buf, int bufsiz, int verify, void *cb_data);
|
||||
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data);
|
||||
|
||||
int setup_ui_method(void);
|
||||
|
||||
+1
-1
@@ -863,6 +863,7 @@ static void killall(int ret, pid_t *kidpids)
|
||||
for (i = 0; i < multi; ++i)
|
||||
if (kidpids[i] != 0)
|
||||
(void)kill(kidpids[i], SIGTERM);
|
||||
OPENSSL_free(kidpids);
|
||||
sleep(1);
|
||||
exit(ret);
|
||||
}
|
||||
@@ -977,7 +978,6 @@ static void spawn_loop(void)
|
||||
}
|
||||
|
||||
/* The loop above can only break on termsig */
|
||||
OPENSSL_free(kidpids);
|
||||
syslog(LOG_INFO, "terminating on signal: %d", termsig);
|
||||
killall(0, kidpids);
|
||||
}
|
||||
|
||||
+10
-6
@@ -2535,12 +2535,16 @@ int s_client_main(int argc, char **argv)
|
||||
/* STARTTLS command requires CAPABILITIES... */
|
||||
BIO_printf(fbio, "CAPABILITIES\r\n");
|
||||
(void)BIO_flush(fbio);
|
||||
/* wait for multi-line CAPABILITIES response */
|
||||
do {
|
||||
mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
|
||||
if (strstr(mbuf, "STARTTLS"))
|
||||
foundit = 1;
|
||||
} while (mbuf_len > 1 && mbuf[0] != '.');
|
||||
BIO_gets(fbio, mbuf, BUFSIZZ);
|
||||
/* no point in trying to parse the CAPABILITIES response if there is none */
|
||||
if (strstr(mbuf, "101") != NULL) {
|
||||
/* wait for multi-line CAPABILITIES response */
|
||||
do {
|
||||
mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
|
||||
if (strstr(mbuf, "STARTTLS"))
|
||||
foundit = 1;
|
||||
} while (mbuf_len > 1 && mbuf[0] != '.');
|
||||
}
|
||||
(void)BIO_flush(fbio);
|
||||
BIO_pop(fbio);
|
||||
BIO_free(fbio);
|
||||
|
||||
@@ -23,18 +23,22 @@
|
||||
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
|
||||
unsigned char *md, unsigned int *len)
|
||||
{
|
||||
int i;
|
||||
int inl;
|
||||
unsigned char *str, *p;
|
||||
|
||||
i = i2d(data, NULL);
|
||||
if ((str = OPENSSL_malloc(i)) == NULL) {
|
||||
inl = i2d(data, NULL);
|
||||
if (inl <= 0) {
|
||||
ASN1err(ASN1_F_ASN1_DIGEST, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
if ((str = OPENSSL_malloc(inl)) == NULL) {
|
||||
ASN1err(ASN1_F_ASN1_DIGEST, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
p = str;
|
||||
i2d(data, &p);
|
||||
|
||||
if (!EVP_Digest(str, i, md, len, type, NULL)) {
|
||||
if (!EVP_Digest(str, inl, md, len, type, NULL)) {
|
||||
OPENSSL_free(str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+22
-10
@@ -29,7 +29,8 @@ int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
|
||||
{
|
||||
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
||||
unsigned char *p, *buf_in = NULL, *buf_out = NULL;
|
||||
int i, inl = 0, outl = 0, outll = 0;
|
||||
int i, inl = 0, outl = 0;
|
||||
size_t inll = 0, outll = 0;
|
||||
X509_ALGOR *a;
|
||||
|
||||
if (ctx == NULL) {
|
||||
@@ -70,10 +71,15 @@ int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
|
||||
}
|
||||
}
|
||||
inl = i2d(data, NULL);
|
||||
buf_in = OPENSSL_malloc((unsigned int)inl);
|
||||
if (inl <= 0) {
|
||||
ASN1err(ASN1_F_ASN1_SIGN, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
inll = (size_t)inl;
|
||||
buf_in = OPENSSL_malloc(inll);
|
||||
outll = outl = EVP_PKEY_size(pkey);
|
||||
buf_out = OPENSSL_malloc((unsigned int)outl);
|
||||
if ((buf_in == NULL) || (buf_out == NULL)) {
|
||||
buf_out = OPENSSL_malloc(outll);
|
||||
if (buf_in == NULL || buf_out == NULL) {
|
||||
outl = 0;
|
||||
ASN1err(ASN1_F_ASN1_SIGN, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
@@ -101,7 +107,7 @@ int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2,
|
||||
signature->flags |= ASN1_STRING_FLAG_BITS_LEFT;
|
||||
err:
|
||||
EVP_MD_CTX_free(ctx);
|
||||
OPENSSL_clear_free((char *)buf_in, (unsigned int)inl);
|
||||
OPENSSL_clear_free((char *)buf_in, inll);
|
||||
OPENSSL_clear_free((char *)buf_out, outll);
|
||||
return outl;
|
||||
}
|
||||
@@ -138,7 +144,7 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it,
|
||||
EVP_PKEY *pkey;
|
||||
unsigned char *buf_in = NULL, *buf_out = NULL;
|
||||
size_t inl = 0, outl = 0, outll = 0;
|
||||
int signid, paramtype;
|
||||
int signid, paramtype, buf_len = 0;
|
||||
int rv;
|
||||
|
||||
type = EVP_MD_CTX_md(ctx);
|
||||
@@ -198,10 +204,16 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it,
|
||||
|
||||
}
|
||||
|
||||
inl = ASN1_item_i2d(asn, &buf_in, it);
|
||||
buf_len = ASN1_item_i2d(asn, &buf_in, it);
|
||||
if (buf_len <= 0) {
|
||||
outl = 0;
|
||||
ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
inl = buf_len;
|
||||
outll = outl = EVP_PKEY_size(pkey);
|
||||
buf_out = OPENSSL_malloc((unsigned int)outl);
|
||||
if ((buf_in == NULL) || (buf_out == NULL)) {
|
||||
buf_out = OPENSSL_malloc(outll);
|
||||
if (buf_in == NULL || buf_out == NULL) {
|
||||
outl = 0;
|
||||
ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
@@ -223,7 +235,7 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it,
|
||||
signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
|
||||
signature->flags |= ASN1_STRING_FLAG_BITS_LEFT;
|
||||
err:
|
||||
OPENSSL_clear_free((char *)buf_in, (unsigned int)inl);
|
||||
OPENSSL_clear_free((char *)buf_in, inl);
|
||||
OPENSSL_clear_free((char *)buf_out, outll);
|
||||
return outl;
|
||||
}
|
||||
+13
-5
@@ -48,6 +48,10 @@ int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *a, ASN1_BIT_STRING *signature,
|
||||
}
|
||||
|
||||
inl = i2d(data, NULL);
|
||||
if (inl <= 0) {
|
||||
ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
buf_in = OPENSSL_malloc((unsigned int)inl);
|
||||
if (buf_in == NULL) {
|
||||
ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_MALLOC_FAILURE);
|
||||
@@ -87,8 +91,8 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
|
||||
EVP_MD_CTX *ctx = NULL;
|
||||
unsigned char *buf_in = NULL;
|
||||
int ret = -1, inl = 0;
|
||||
|
||||
int mdnid, pknid;
|
||||
size_t inll = 0;
|
||||
|
||||
if (!pkey) {
|
||||
ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_PASSED_NULL_PARAMETER);
|
||||
@@ -127,8 +131,8 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
|
||||
goto err;
|
||||
ret = -1;
|
||||
} else {
|
||||
const EVP_MD *type;
|
||||
type = EVP_get_digestbynid(mdnid);
|
||||
const EVP_MD *type = EVP_get_digestbynid(mdnid);
|
||||
|
||||
if (type == NULL) {
|
||||
ASN1err(ASN1_F_ASN1_ITEM_VERIFY,
|
||||
ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM);
|
||||
@@ -150,11 +154,15 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
|
||||
}
|
||||
|
||||
inl = ASN1_item_i2d(asn, &buf_in, it);
|
||||
|
||||
if (inl <= 0) {
|
||||
ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
if (buf_in == NULL) {
|
||||
ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
inll = inl;
|
||||
|
||||
ret = EVP_DigestVerify(ctx, signature->data, (size_t)signature->length,
|
||||
buf_in, inl);
|
||||
@@ -164,7 +172,7 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
OPENSSL_clear_free(buf_in, (unsigned int)inl);
|
||||
OPENSSL_clear_free(buf_in, inll);
|
||||
EVP_MD_CTX_free(ctx);
|
||||
return ret;
|
||||
}
|
||||
@@ -373,6 +373,7 @@ int cms_RecipientInfo_pwri_crypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri,
|
||||
goto err;
|
||||
}
|
||||
|
||||
OPENSSL_clear_free(ec->key, ec->keylen);
|
||||
ec->key = key;
|
||||
ec->keylen = keylen;
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "internal/engine.h"
|
||||
|
||||
/* #define ENGINE_DEVCRYPTO_DEBUG */
|
||||
|
||||
#ifdef CRYPTO_ALGORITHM_MIN
|
||||
# define CHECK_BSD_STYLE_MACROS
|
||||
#endif
|
||||
@@ -1156,7 +1158,10 @@ void engine_load_devcrypto_int()
|
||||
ENGINE *e = NULL;
|
||||
|
||||
if ((cfd = open("/dev/crypto", O_RDWR, 0)) < 0) {
|
||||
fprintf(stderr, "Could not open /dev/crypto: %s\n", strerror(errno));
|
||||
#ifndef ENGINE_DEVCRYPTO_DEBUG
|
||||
if (errno != ENOENT)
|
||||
#endif
|
||||
fprintf(stderr, "Could not open /dev/crypto: %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -697,6 +697,7 @@ DEFINE_RUN_ONCE_STATIC(err_do_init)
|
||||
ERR_STATE *ERR_get_state(void)
|
||||
{
|
||||
ERR_STATE *state;
|
||||
int saveerrno = get_last_sys_error();
|
||||
|
||||
if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
|
||||
return NULL;
|
||||
@@ -728,6 +729,7 @@ ERR_STATE *ERR_get_state(void)
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
|
||||
}
|
||||
|
||||
set_sys_error(saveerrno);
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -737,6 +739,8 @@ ERR_STATE *ERR_get_state(void)
|
||||
*/
|
||||
int err_shelve_state(void **state)
|
||||
{
|
||||
int saveerrno = get_last_sys_error();
|
||||
|
||||
if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
|
||||
return 0;
|
||||
|
||||
@@ -747,6 +751,7 @@ int err_shelve_state(void **state)
|
||||
if (!CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)-1))
|
||||
return 0;
|
||||
|
||||
set_sys_error(saveerrno);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ int EVP_PKEY_security_bits(const EVP_PKEY *pkey)
|
||||
return pkey->ameth->pkey_security_bits(pkey);
|
||||
}
|
||||
|
||||
int EVP_PKEY_size(EVP_PKEY *pkey)
|
||||
int EVP_PKEY_size(const EVP_PKEY *pkey)
|
||||
{
|
||||
if (pkey && pkey->ameth && pkey->ameth->pkey_size)
|
||||
return pkey->ameth->pkey_size(pkey);
|
||||
|
||||
+23
-23
@@ -178,8 +178,7 @@ static int tls1_prf_P_hash(const EVP_MD *md,
|
||||
unsigned char *out, size_t olen)
|
||||
{
|
||||
int chunk;
|
||||
EVP_MD_CTX *ctx = NULL, *ctx_tmp = NULL, *ctx_init = NULL;
|
||||
EVP_PKEY *mac_key = NULL;
|
||||
EVP_MAC_CTX *ctx = NULL, *ctx_tmp = NULL, *ctx_init = NULL;
|
||||
unsigned char A1[EVP_MAX_MD_SIZE];
|
||||
size_t A1_len;
|
||||
int ret = 0;
|
||||
@@ -188,47 +187,49 @@ static int tls1_prf_P_hash(const EVP_MD *md,
|
||||
if (!ossl_assert(chunk > 0))
|
||||
goto err;
|
||||
|
||||
ctx = EVP_MD_CTX_new();
|
||||
ctx_tmp = EVP_MD_CTX_new();
|
||||
ctx_init = EVP_MD_CTX_new();
|
||||
ctx = EVP_MAC_CTX_new_id(EVP_MAC_HMAC);
|
||||
ctx_tmp = EVP_MAC_CTX_new_id(EVP_MAC_HMAC);
|
||||
ctx_init = EVP_MAC_CTX_new_id(EVP_MAC_HMAC);
|
||||
if (ctx == NULL || ctx_tmp == NULL || ctx_init == NULL)
|
||||
goto err;
|
||||
EVP_MD_CTX_set_flags(ctx_init, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
|
||||
mac_key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, sec, sec_len);
|
||||
if (mac_key == NULL)
|
||||
if (EVP_MAC_ctrl(ctx_init, EVP_MAC_CTRL_SET_FLAGS, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW) != 1)
|
||||
goto err;
|
||||
if (!EVP_DigestSignInit(ctx_init, NULL, md, NULL, mac_key))
|
||||
if (EVP_MAC_ctrl(ctx_init, EVP_MAC_CTRL_SET_MD, md) != 1)
|
||||
goto err;
|
||||
if (!EVP_MD_CTX_copy_ex(ctx, ctx_init))
|
||||
if (EVP_MAC_ctrl(ctx_init, EVP_MAC_CTRL_SET_KEY, sec, sec_len) != 1)
|
||||
goto err;
|
||||
if (seed != NULL && !EVP_DigestSignUpdate(ctx, seed, seed_len))
|
||||
if (!EVP_MAC_init(ctx_init))
|
||||
goto err;
|
||||
if (!EVP_DigestSignFinal(ctx, A1, &A1_len))
|
||||
if (!EVP_MAC_CTX_copy(ctx, ctx_init))
|
||||
goto err;
|
||||
if (seed != NULL && !EVP_MAC_update(ctx, seed, seed_len))
|
||||
goto err;
|
||||
if (!EVP_MAC_final(ctx, A1, &A1_len))
|
||||
goto err;
|
||||
|
||||
for (;;) {
|
||||
/* Reinit mac contexts */
|
||||
if (!EVP_MD_CTX_copy_ex(ctx, ctx_init))
|
||||
if (!EVP_MAC_CTX_copy(ctx, ctx_init))
|
||||
goto err;
|
||||
if (!EVP_DigestSignUpdate(ctx, A1, A1_len))
|
||||
if (!EVP_MAC_update(ctx, A1, A1_len))
|
||||
goto err;
|
||||
if (olen > (size_t)chunk && !EVP_MD_CTX_copy_ex(ctx_tmp, ctx))
|
||||
if (olen > (size_t)chunk && !EVP_MAC_CTX_copy(ctx_tmp, ctx))
|
||||
goto err;
|
||||
if (seed && !EVP_DigestSignUpdate(ctx, seed, seed_len))
|
||||
if (seed != NULL && !EVP_MAC_update(ctx, seed, seed_len))
|
||||
goto err;
|
||||
|
||||
if (olen > (size_t)chunk) {
|
||||
size_t mac_len;
|
||||
if (!EVP_DigestSignFinal(ctx, out, &mac_len))
|
||||
if (!EVP_MAC_final(ctx, out, &mac_len))
|
||||
goto err;
|
||||
out += mac_len;
|
||||
olen -= mac_len;
|
||||
/* calc the next A1 value */
|
||||
if (!EVP_DigestSignFinal(ctx_tmp, A1, &A1_len))
|
||||
if (!EVP_MAC_final(ctx_tmp, A1, &A1_len))
|
||||
goto err;
|
||||
} else { /* last one */
|
||||
|
||||
if (!EVP_DigestSignFinal(ctx, A1, &A1_len))
|
||||
if (!EVP_MAC_final(ctx, A1, &A1_len))
|
||||
goto err;
|
||||
memcpy(out, A1, olen);
|
||||
break;
|
||||
@@ -236,10 +237,9 @@ static int tls1_prf_P_hash(const EVP_MD *md,
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
EVP_PKEY_free(mac_key);
|
||||
EVP_MD_CTX_free(ctx);
|
||||
EVP_MD_CTX_free(ctx_tmp);
|
||||
EVP_MD_CTX_free(ctx_init);
|
||||
EVP_MAC_CTX_free(ctx);
|
||||
EVP_MAC_CTX_free(ctx_tmp);
|
||||
EVP_MAC_CTX_free(ctx_init);
|
||||
OPENSSL_cleanse(A1, sizeof(A1));
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -206,8 +206,8 @@ struct siv128_context {
|
||||
SIV_BLOCK d;
|
||||
SIV_BLOCK tag;
|
||||
EVP_CIPHER_CTX *cipher_ctx;
|
||||
CMAC_CTX *cmac_ctx_init;
|
||||
CMAC_CTX *cmac_ctx;
|
||||
EVP_MAC_CTX *mac_ctx_init;
|
||||
EVP_MAC_CTX *mac_ctx;
|
||||
int final_ret;
|
||||
int crypto_ok;
|
||||
};
|
||||
|
||||
+27
-27
@@ -10,7 +10,6 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/cmac.h>
|
||||
#include "modes_lcl.h"
|
||||
|
||||
#ifndef OPENSSL_NO_SIV
|
||||
@@ -94,15 +93,15 @@ __owur static ossl_inline int siv128_do_s2v_p(SIV128_CONTEXT *ctx, SIV_BLOCK *ou
|
||||
SIV_BLOCK t;
|
||||
size_t out_len = sizeof(out->byte);
|
||||
|
||||
if (!CMAC_CTX_copy(ctx->cmac_ctx, ctx->cmac_ctx_init))
|
||||
if (!EVP_MAC_CTX_copy(ctx->mac_ctx, ctx->mac_ctx_init))
|
||||
return 0;
|
||||
|
||||
if (len >= SIV_LEN) {
|
||||
if (!CMAC_Update(ctx->cmac_ctx, in, len - SIV_LEN))
|
||||
if (!EVP_MAC_update(ctx->mac_ctx, in, len - SIV_LEN))
|
||||
return 0;
|
||||
memcpy(&t, in + (len-SIV_LEN), SIV_LEN);
|
||||
siv128_xorblock(&t, &ctx->d);
|
||||
if (!CMAC_Update(ctx->cmac_ctx, t.byte, SIV_LEN))
|
||||
if (!EVP_MAC_update(ctx->mac_ctx, t.byte, SIV_LEN))
|
||||
return 0;
|
||||
} else {
|
||||
memset(&t, 0, sizeof(t));
|
||||
@@ -110,10 +109,10 @@ __owur static ossl_inline int siv128_do_s2v_p(SIV128_CONTEXT *ctx, SIV_BLOCK *ou
|
||||
t.byte[len] = 0x80;
|
||||
siv128_dbl(&ctx->d);
|
||||
siv128_xorblock(&t, &ctx->d);
|
||||
if (!CMAC_Update(ctx->cmac_ctx, t.byte, SIV_LEN))
|
||||
if (!EVP_MAC_update(ctx->mac_ctx, t.byte, SIV_LEN))
|
||||
return 0;
|
||||
}
|
||||
if (!CMAC_Final(ctx->cmac_ctx, out->byte, &out_len)
|
||||
if (!EVP_MAC_final(ctx->mac_ctx, out->byte, &out_len)
|
||||
|| out_len != SIV_LEN)
|
||||
return 0;
|
||||
return 1;
|
||||
@@ -160,21 +159,22 @@ int CRYPTO_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen,
|
||||
|
||||
memset(&ctx->d, 0, sizeof(ctx->d));
|
||||
ctx->cipher_ctx = NULL;
|
||||
ctx->cmac_ctx = NULL;
|
||||
ctx->cmac_ctx_init = NULL;
|
||||
ctx->mac_ctx = NULL;
|
||||
ctx->mac_ctx_init = NULL;
|
||||
|
||||
if (key == NULL || cbc == NULL || ctr == NULL
|
||||
|| (ctx->cipher_ctx = EVP_CIPHER_CTX_new()) == NULL
|
||||
|| (ctx->cmac_ctx_init = CMAC_CTX_new()) == NULL
|
||||
|| (ctx->cmac_ctx = CMAC_CTX_new()) == NULL
|
||||
|| !CMAC_Init(ctx->cmac_ctx_init, key, klen, cbc, NULL)
|
||||
|| (ctx->mac_ctx_init = EVP_MAC_CTX_new_id(EVP_MAC_CMAC)) == NULL
|
||||
|| (ctx->mac_ctx = EVP_MAC_CTX_new_id(EVP_MAC_CMAC)) == NULL
|
||||
|| !EVP_MAC_ctrl(ctx->mac_ctx_init, EVP_MAC_CTRL_SET_CIPHER, cbc)
|
||||
|| !EVP_MAC_ctrl(ctx->mac_ctx_init, EVP_MAC_CTRL_SET_KEY, key, klen)
|
||||
|| !EVP_EncryptInit_ex(ctx->cipher_ctx, ctr, NULL, key + klen, NULL)
|
||||
|| !CMAC_CTX_copy(ctx->cmac_ctx, ctx->cmac_ctx_init)
|
||||
|| !CMAC_Update(ctx->cmac_ctx, zero, sizeof(zero))
|
||||
|| !CMAC_Final(ctx->cmac_ctx, ctx->d.byte, &out_len)) {
|
||||
|| !EVP_MAC_CTX_copy(ctx->mac_ctx, ctx->mac_ctx_init)
|
||||
|| !EVP_MAC_update(ctx->mac_ctx, zero, sizeof(zero))
|
||||
|| !EVP_MAC_final(ctx->mac_ctx, ctx->d.byte, &out_len)) {
|
||||
EVP_CIPHER_CTX_free(ctx->cipher_ctx);
|
||||
CMAC_CTX_free(ctx->cmac_ctx_init);
|
||||
CMAC_CTX_free(ctx->cmac_ctx);
|
||||
EVP_MAC_CTX_free(ctx->mac_ctx_init);
|
||||
EVP_MAC_CTX_free(ctx->mac_ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -192,9 +192,9 @@ int CRYPTO_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src)
|
||||
memcpy(&dest->d, &src->d, sizeof(src->d));
|
||||
if (!EVP_CIPHER_CTX_copy(dest->cipher_ctx, src->cipher_ctx))
|
||||
return 0;
|
||||
if (!CMAC_CTX_copy(dest->cmac_ctx_init, src->cmac_ctx_init))
|
||||
if (!EVP_MAC_CTX_copy(dest->mac_ctx_init, src->mac_ctx_init))
|
||||
return 0;
|
||||
/* no need to copy cmac_ctx since it's temp storage */
|
||||
/* no need to copy mac_ctx since it's temp storage */
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -206,18 +206,18 @@ int CRYPTO_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src)
|
||||
int CRYPTO_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad,
|
||||
size_t len)
|
||||
{
|
||||
SIV_BLOCK cmac_out;
|
||||
SIV_BLOCK mac_out;
|
||||
size_t out_len = SIV_LEN;
|
||||
|
||||
siv128_dbl(&ctx->d);
|
||||
|
||||
if (!CMAC_CTX_copy(ctx->cmac_ctx, ctx->cmac_ctx_init)
|
||||
|| !CMAC_Update(ctx->cmac_ctx, aad, len)
|
||||
|| !CMAC_Final(ctx->cmac_ctx, cmac_out.byte, &out_len)
|
||||
if (!EVP_MAC_CTX_copy(ctx->mac_ctx, ctx->mac_ctx_init)
|
||||
|| !EVP_MAC_update(ctx->mac_ctx, aad, len)
|
||||
|| !EVP_MAC_final(ctx->mac_ctx, mac_out.byte, &out_len)
|
||||
|| out_len != SIV_LEN)
|
||||
return 0;
|
||||
|
||||
siv128_xorblock(&ctx->d, &cmac_out);
|
||||
siv128_xorblock(&ctx->d, &mac_out);
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -328,10 +328,10 @@ int CRYPTO_siv128_cleanup(SIV128_CONTEXT *ctx)
|
||||
if (ctx != NULL) {
|
||||
EVP_CIPHER_CTX_free(ctx->cipher_ctx);
|
||||
ctx->cipher_ctx = NULL;
|
||||
CMAC_CTX_free(ctx->cmac_ctx_init);
|
||||
ctx->cmac_ctx_init = NULL;
|
||||
CMAC_CTX_free(ctx->cmac_ctx);
|
||||
ctx->cmac_ctx = NULL;
|
||||
EVP_MAC_CTX_free(ctx->mac_ctx_init);
|
||||
ctx->mac_ctx_init = NULL;
|
||||
EVP_MAC_CTX_free(ctx->mac_ctx);
|
||||
ctx->mac_ctx = NULL;
|
||||
OPENSSL_cleanse(&ctx->d, sizeof(ctx->d));
|
||||
OPENSSL_cleanse(&ctx->tag, sizeof(ctx->tag));
|
||||
ctx->final_ret = -1;
|
||||
|
||||
@@ -161,7 +161,7 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
|
||||
unsigned int good, found_zero_byte, mask;
|
||||
int zero_index = 0, msg_index, mlen = -1;
|
||||
|
||||
if (tlen < 0 || flen < 0)
|
||||
if (tlen <= 0 || flen <= 0)
|
||||
return -1;
|
||||
|
||||
/*
|
||||
|
||||
@@ -128,6 +128,8 @@ int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1,
|
||||
|
||||
/* calculate inverse of q mod p */
|
||||
rsa->iqmp = BN_mod_inverse(NULL, rsa->q, rsa->p, ctx2);
|
||||
if (rsa->iqmp == NULL)
|
||||
goto err;
|
||||
|
||||
ret = 1;
|
||||
err:
|
||||
|
||||
@@ -174,6 +174,10 @@ const char *X509_verify_cert_error_string(long n)
|
||||
return "OCSP verification failed";
|
||||
case X509_V_ERR_OCSP_CERT_UNKNOWN:
|
||||
return "OCSP unknown cert";
|
||||
case X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH:
|
||||
return "Subject signature algorithm and issuer public key algorithm mismatch";
|
||||
case X509_V_ERR_NO_ISSUER_PUBLIC_KEY:
|
||||
return "Issuer certificate doesn't have a public key";
|
||||
|
||||
default:
|
||||
/* Printing an error number into a static buffer is not thread-safe */
|
||||
|
||||
@@ -3232,12 +3232,19 @@ static int check_key_level(X509_STORE_CTX *ctx, X509 *cert)
|
||||
EVP_PKEY *pkey = X509_get0_pubkey(cert);
|
||||
int level = ctx->param->auth_level;
|
||||
|
||||
/*
|
||||
* At security level zero, return without checking for a supported public
|
||||
* key type. Some engines support key types not understood outside the
|
||||
* engine, and we only need to understand the key when enforcing a security
|
||||
* floor.
|
||||
*/
|
||||
if (level <= 0)
|
||||
return 1;
|
||||
|
||||
/* Unsupported or malformed keys are not secure */
|
||||
if (pkey == NULL)
|
||||
return 0;
|
||||
|
||||
if (level <= 0)
|
||||
return 1;
|
||||
if (level > NUM_AUTH_LEVELS)
|
||||
level = NUM_AUTH_LEVELS;
|
||||
|
||||
|
||||
+21
-2
@@ -764,8 +764,9 @@ static int no_check(const X509_PURPOSE *xp, const X509 *x, int ca)
|
||||
* subject name.
|
||||
* These are:
|
||||
* 1. Check issuer_name(subject) == subject_name(issuer)
|
||||
* 2. If akid(subject) exists check it matches issuer
|
||||
* 3. If key_usage(issuer) exists check it supports certificate signing
|
||||
* 2. If akid(subject) exists, check that it matches issuer
|
||||
* 3. Check that issuer public key algorithm matches subject signature algorithm
|
||||
* 4. If key_usage(issuer) exists, check that it supports certificate signing
|
||||
* returns 0 for OK, positive for reason for mismatch, reasons match
|
||||
* codes for X509_verify_cert()
|
||||
*/
|
||||
@@ -785,6 +786,24 @@ int X509_check_issued(X509 *issuer, X509 *subject)
|
||||
return ret;
|
||||
}
|
||||
|
||||
{
|
||||
/*
|
||||
* Check if the subject signature algorithm matches the issuer's PUBKEY
|
||||
* algorithm
|
||||
*/
|
||||
EVP_PKEY *i_pkey = X509_get0_pubkey(issuer);
|
||||
X509_ALGOR *s_algor = &subject->cert_info.signature;
|
||||
int s_pknid = NID_undef, s_mdnid = NID_undef;
|
||||
|
||||
if (i_pkey == NULL)
|
||||
return X509_V_ERR_NO_ISSUER_PUBLIC_KEY;
|
||||
|
||||
if (!OBJ_find_sigid_algs(OBJ_obj2nid(s_algor->algorithm),
|
||||
&s_mdnid, &s_pknid)
|
||||
|| EVP_PKEY_type(s_pknid) != EVP_PKEY_base_id(i_pkey))
|
||||
return X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH;
|
||||
}
|
||||
|
||||
if (subject->ex_flags & EXFLAG_PROXY) {
|
||||
if (ku_reject(issuer, KU_DIGITAL_SIGNATURE))
|
||||
return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE;
|
||||
|
||||
+1
-1
@@ -230,7 +230,7 @@ The section of the configuration file containing certificate extensions
|
||||
to be added when a certificate is issued (defaults to B<x509_extensions>
|
||||
unless the B<-extfile> option is used). If no extension section is
|
||||
present then, a V1 certificate is created. If the extension section
|
||||
is present (even if it is empty), then a V3 certificate is created. See the:w
|
||||
is present (even if it is empty), then a V3 certificate is created. See the
|
||||
L<x509v3_config(5)> manual page for details of the
|
||||
extension section format.
|
||||
|
||||
|
||||
@@ -777,7 +777,7 @@ The B<-V> option for the B<ciphers> command was added in OpenSSL 1.0.0.
|
||||
The B<-stdname> is only available if OpenSSL is built with tracing enabled
|
||||
(B<enable-ssl-trace> argument to Configure) before OpenSSL 1.1.1.
|
||||
|
||||
The B<-convert> was added in OpenSSL 1.1.1.
|
||||
The B<-convert> option was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+5
-5
@@ -724,14 +724,14 @@ No revocation checking is done on the signer's certificate.
|
||||
The use of multiple B<-signer> options and the B<-resign> command were first
|
||||
added in OpenSSL 1.0.0.
|
||||
|
||||
The B<keyopt> option was first added in OpenSSL 1.0.2.
|
||||
The B<keyopt> option was added in OpenSSL 1.0.2.
|
||||
|
||||
Support for RSA-OAEP and RSA-PSS was first added to OpenSSL 1.0.2.
|
||||
Support for RSA-OAEP and RSA-PSS was added in OpenSSL 1.0.2.
|
||||
|
||||
The use of non-RSA keys with B<-encrypt> and B<-decrypt> was first added
|
||||
to OpenSSL 1.0.2.
|
||||
The use of non-RSA keys with B<-encrypt> and B<-decrypt>
|
||||
was added in OpenSSL 1.0.2.
|
||||
|
||||
The -no_alt_chains options was first added to OpenSSL 1.0.2b.
|
||||
The -no_alt_chains option was added in OpenSSL 1.0.2b.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+1
-1
@@ -417,7 +417,7 @@ certain parameters. So if, for example, you want to use RC2 with a
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The default digest was changed from MD5 to SHA256 in Openssl 1.1.0.
|
||||
The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -319,9 +319,9 @@ Generate an ED448 private key:
|
||||
=head1 HISTORY
|
||||
|
||||
The ability to use NIST curve names, and to generate an EC key directly,
|
||||
were added in OpenSSL 1.0.2. The ability to generate X25519 keys was added in
|
||||
OpenSSL 1.1.0. The ability to generate X448, ED25519 and ED448 keys was added in
|
||||
OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.0.2.
|
||||
The ability to generate X25519 keys was added in OpenSSL 1.1.0.
|
||||
The ability to generate X448, ED25519 and ED448 keys was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+1
-1
@@ -486,7 +486,7 @@ to a second file.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The -no_alt_chains options was first added to OpenSSL 1.1.0.
|
||||
The -no_alt_chains option was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+1
-1
@@ -305,7 +305,7 @@ L<gendsa(1)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The B<-iter> option was added to OpenSSL 1.1.0.
|
||||
The B<-iter> option was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -811,7 +811,7 @@ L<SSL_CTX_set_max_pipelines(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The B<-no_alt_chains> option was first added to OpenSSL 1.1.0.
|
||||
The B<-no_alt_chains> option was added in OpenSSL 1.1.0.
|
||||
The B<-name> option was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
@@ -829,10 +829,10 @@ L<SSL_CTX_set_max_pipelines(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The -no_alt_chains option was first added to OpenSSL 1.1.0.
|
||||
The -no_alt_chains option was added in OpenSSL 1.1.0.
|
||||
|
||||
The -allow-no-dhe-kex and -prioritize_chacha options were first added to
|
||||
OpenSSL 1.1.1.
|
||||
The
|
||||
-allow-no-dhe-kex and -prioritize_chacha options were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+1
-1
@@ -510,7 +510,7 @@ structures may cause parsing errors.
|
||||
The use of multiple B<-signer> options and the B<-resign> command were first
|
||||
added in OpenSSL 1.0.0
|
||||
|
||||
The -no_alt_chains options was first added to OpenSSL 1.1.0.
|
||||
The -no_alt_chains option was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ L<openssl(1)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
B<openssl> B<storeutl> was added to OpenSSL 1.1.1.
|
||||
The B<openssl> B<storeutl> app was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
+1
-1
@@ -762,7 +762,7 @@ L<x509(1)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The B<-show_chain> option was first added to OpenSSL 1.1.0.
|
||||
The B<-show_chain> option was added in OpenSSL 1.1.0.
|
||||
|
||||
The B<-issuer_checks> option is deprecated as of OpenSSL 1.1.0 and
|
||||
is silently ignored.
|
||||
|
||||
@@ -119,7 +119,7 @@ L<ERR_get_error(3)>
|
||||
|
||||
ASN1_INTEGER_set_int64(), ASN1_INTEGER_get_int64(),
|
||||
ASN1_ENUMERATED_set_int64() and ASN1_ENUMERATED_get_int64()
|
||||
were added to OpenSSL 1.1.0.
|
||||
were added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -127,10 +127,10 @@ L<crypto(7)>, L<ASYNC_start_job(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
ASYNC_WAIT_CTX_new, ASYNC_WAIT_CTX_free, ASYNC_WAIT_CTX_set_wait_fd,
|
||||
ASYNC_WAIT_CTX_get_fd, ASYNC_WAIT_CTX_get_all_fds,
|
||||
ASYNC_WAIT_CTX_get_changed_fds, ASYNC_WAIT_CTX_clear_fd were first added to
|
||||
OpenSSL 1.1.0.
|
||||
ASYNC_WAIT_CTX_new(), ASYNC_WAIT_CTX_free(), ASYNC_WAIT_CTX_set_wait_fd(),
|
||||
ASYNC_WAIT_CTX_get_fd(), ASYNC_WAIT_CTX_get_all_fds(),
|
||||
ASYNC_WAIT_CTX_get_changed_fds() and ASYNC_WAIT_CTX_clear_fd()
|
||||
were added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ L<crypto(7)>, L<ERR_print_errors(3)>
|
||||
ASYNC_init_thread, ASYNC_cleanup_thread,
|
||||
ASYNC_start_job, ASYNC_pause_job, ASYNC_get_current_job, ASYNC_get_wait_ctx(),
|
||||
ASYNC_block_pause(), ASYNC_unblock_pause() and ASYNC_is_capable() were first
|
||||
added to OpenSSL 1.1.0.
|
||||
added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ L<CMS_encrypt(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
BIO_new_CMS() was added to OpenSSL 1.0.0
|
||||
The BIO_new_CMS() function was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -197,8 +197,8 @@ L<RSA_generate_key(3)>, L<ERR_get_error(3)>, L<RAND_bytes(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
BN_GENCB_new(), BN_GENCB_free(),
|
||||
and BN_GENCB_get_arg() were added in OpenSSL 1.1.0
|
||||
The BN_GENCB_new(), BN_GENCB_free(),
|
||||
and BN_GENCB_get_arg() functions were added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -73,7 +73,8 @@ a future release.
|
||||
|
||||
=item *
|
||||
|
||||
BN_priv_rand() and BN_priv_rand_range() were added in OpenSSL 1.1.1.
|
||||
The
|
||||
BN_priv_rand() and BN_priv_rand_range() functions were added in OpenSSL 1.1.1.
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ function. The symmetric algorithms are not covered neither.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
BN_security_bits() was added in OpenSSL 1.1.0.
|
||||
The BN_security_bits() function was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ L<CRYPTO_secure_malloc(3)>.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
BUF_MEM_new_ex() was added in OpenSSL 1.1.0.
|
||||
The BUF_MEM_new_ex() function was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ L<CTLOG_STORE_new(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This function was added in OpenSSL 1.1.0.
|
||||
The CTLOG_STORE_get0_log_by_id() function was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ L<BN_num_bits(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
DH_bits() was added in OpenSSL 1.1.0.
|
||||
The DH_bits() function was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Returns the maximum data payload size on success, or 0 on failure.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This function was added in OpenSSL 1.1.1
|
||||
The DTLS_get_data_mtu() function was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Returns void.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This function was added in OpenSSL 1.1.1
|
||||
The DTLS_set_timer_cb() function was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -117,10 +117,10 @@ L<ssl(7)>, L<bio(7)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_stateless() was first added in OpenSSL 1.1.1.
|
||||
The SSL_stateless() function was added in OpenSSL 1.1.1.
|
||||
|
||||
DTLSv1_listen() return codes were clarified in OpenSSL 1.1.0. The type of "peer"
|
||||
also changed in OpenSSL 1.1.0.
|
||||
The DTLSv1_listen() return codes were clarified in OpenSSL 1.1.0.
|
||||
The type of "peer" also changed in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ named curve form is used and the parameters must have a corresponding
|
||||
named curve NID set. If asn1_flags is B<OPENSSL_EC_EXPLICIT_CURVE> the
|
||||
parameters are explicitly encoded. The functions EC_GROUP_get_asn1_flag and
|
||||
EC_GROUP_set_asn1_flag get and set the status of the asn1_flag for the curve.
|
||||
Note: B<OPENSSL_EC_EXPLICIT_CURVE> was first added to OpenSSL 1.1.0, for
|
||||
Note: B<OPENSSL_EC_EXPLICIT_CURVE> was added in OpenSSL 1.1.0, for
|
||||
previous versions of OpenSSL the value 0 must be used instead. Before OpenSSL
|
||||
1.1.0 the default form was to use explicit parameters (meaning that
|
||||
applications would have to explicitly set the named curve form) in OpenSSL
|
||||
@@ -175,7 +175,7 @@ and EC_GROUP_get_degree return the order, cofactor, curve name (NID), ASN1 flag,
|
||||
specified curve respectively. If there is no curve name associated with a curve then EC_GROUP_get_curve_name will return 0.
|
||||
|
||||
EC_GROUP_get0_order() returns an internal pointer to the group order.
|
||||
EC_GROUP_get_order_bits() returns the number of bits in the group order.
|
||||
EC_GROUP_order_bits() returns the number of bits in the group order.
|
||||
EC_GROUP_get0_cofactor() returns an internal pointer to the group cofactor.
|
||||
|
||||
EC_GROUP_get0_seed returns a pointer to the seed that was used to generate the parameter b, or NULL if the seed is not
|
||||
|
||||
@@ -369,15 +369,15 @@ L<EVP_whirlpool(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
EVP_MD_CTX_create() and EVP_MD_CTX_destroy() were renamed to
|
||||
EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0.
|
||||
The EVP_MD_CTX_create() and EVP_MD_CTX_destroy() functions were renamed to
|
||||
EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0, respectively.
|
||||
|
||||
The link between digests and signing algorithms was fixed in OpenSSL 1.0 and
|
||||
later, so now EVP_sha1() can be used with RSA and DSA.
|
||||
|
||||
EVP_dss1() was removed in OpenSSL 1.1.0.
|
||||
The EVP_dss1() function was removed in OpenSSL 1.1.0.
|
||||
|
||||
EVP_MD_CTX_set_pkey_ctx() was added in 1.1.1.
|
||||
The EVP_MD_CTX_set_pkey_ctx() function was added in 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ L<SHA1(3)>, L<dgst(1)>
|
||||
=head1 HISTORY
|
||||
|
||||
EVP_DigestSignInit(), EVP_DigestSignUpdate() and EVP_DigestSignFinal()
|
||||
were first added to OpenSSL 1.0.0.
|
||||
were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ L<SHA1(3)>, L<dgst(1)>
|
||||
=head1 HISTORY
|
||||
|
||||
EVP_DigestVerifyInit(), EVP_DigestVerifyUpdate() and EVP_DigestVerifyFinal()
|
||||
were first added to OpenSSL 1.0.0.
|
||||
were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -675,7 +675,7 @@ L<EVP_sm4(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
Support for OCB mode was added in OpenSSL 1.1.0
|
||||
Support for OCB mode was added in OpenSSL 1.1.0.
|
||||
|
||||
B<EVP_CIPHER_CTX> was made opaque in OpenSSL 1.1.0. As a result,
|
||||
EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup()
|
||||
|
||||
@@ -111,7 +111,7 @@ This functions takes variable arguments, the exact expected arguments
|
||||
depend on C<cmd>.
|
||||
EVP_MAC_ctrl() can be called both before and after EVP_MAC_init(), but
|
||||
the effect will depend on what control is being use.
|
||||
See </CONTROLS> below for a description of standard controls.
|
||||
See L</CONTROLS> below for a description of standard controls.
|
||||
|
||||
EVP_MAC_vctrl() is the variant of EVP_MAC_ctrl() that takes a
|
||||
C<va_list> argument instead of variadic arguments.
|
||||
|
||||
@@ -359,7 +359,7 @@ B<param_enc> when generating EC parameters or an EC key. The encoding can be
|
||||
B<OPENSSL_EC_EXPLICIT_CURVE> for explicit parameters (the default in versions
|
||||
of OpenSSL before 1.1.0) or B<OPENSSL_EC_NAMED_CURVE> to use named curve form.
|
||||
For maximum compatibility the named curve form should be used. Note: the
|
||||
B<OPENSSL_EC_NAMED_CURVE> value was only added to OpenSSL 1.1.0; previous
|
||||
B<OPENSSL_EC_NAMED_CURVE> value was added in OpenSSL 1.1.0; previous
|
||||
versions should use 0 instead.
|
||||
|
||||
=head2 ECDH parameters
|
||||
@@ -439,8 +439,9 @@ L<EVP_PKEY_keygen(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The
|
||||
EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
||||
macros were added in 1.1.1, other functions were first added to OpenSSL 1.0.0.
|
||||
macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ L<EVP_PKEY_new(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ L<EVP_PKEY_verify_recover(3)>,
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ L<EVP_PKEY_verify_recover(3)>,
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This function was first added to OpenSSL 1.0.0.
|
||||
This function was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
EVP_PKEY_check(), EVP_PKEY_public_check() and EVP_PKEY_param_check() were added
|
||||
in OpenSSL 1.1.1.
|
||||
|
||||
@@ -114,12 +114,15 @@ L<EVP_PKEY_set1_EC_KEY>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
EVP_PKEY_new() and EVP_PKEY_free() exist in all versions of OpenSSL.
|
||||
The
|
||||
EVP_PKEY_new() and EVP_PKEY_free() functions exist in all versions of OpenSSL.
|
||||
|
||||
EVP_PKEY_up_ref() was first added to OpenSSL 1.1.0.
|
||||
The EVP_PKEY_up_ref() function was added in OpenSSL 1.1.0.
|
||||
|
||||
The
|
||||
EVP_PKEY_new_raw_private_key(), EVP_PKEY_new_raw_public_key(),
|
||||
EVP_PKEY_new_CMAC_key(), EVP_PKEY_new_raw_private_key() and
|
||||
EVP_PKEY_get_raw_public_key() were first added to OpenSSL 1.1.1.
|
||||
EVP_PKEY_get_raw_public_key() functions were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ L<EVP_PKEY_keygen(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ L<EVP_PKEY_verify_recover(3)>,
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This function was first added to OpenSSL 3.0.0.
|
||||
The EVP_PKEY_supports_digest_nid() function was added in OpenSSL 3.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ L<EVP_PKEY_derive(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.0.
|
||||
These functions were added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ functions
|
||||
|
||||
void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
|
||||
|
||||
int EVP_PKEY_size(EVP_PKEY *pkey);
|
||||
int EVP_PKEY_size(const EVP_PKEY *pkey);
|
||||
int EVP_PKEY_security_bits(const EVP_PKEY *pkey);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@@ -120,7 +120,7 @@ L<BN_new(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
OPENSSL_secure_clear_free() was added in OpenSSL 1.1.0g.
|
||||
The OPENSSL_secure_clear_free() function was added in OpenSSL 1.1.0g.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ OSSL_STORE_INFO_get0_CERT(), OSSL_STORE_INFO_get0_CRL(),
|
||||
OSSL_STORE_INFO_type_string(), OSSL_STORE_INFO_free(), OSSL_STORE_INFO_new_NAME(),
|
||||
OSSL_STORE_INFO_new_PARAMS(), OSSL_STORE_INFO_new_PKEY(),
|
||||
OSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL()
|
||||
were added to OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@ OSSL_STORE_LOADER_set_eof(), OSSL_STORE_LOADER_set_close(),
|
||||
OSSL_STORE_LOADER_free(), OSSL_STORE_register_loader(),
|
||||
OSSL_STORE_unregister_loader(), OSSL_STORE_open_fn(), OSSL_STORE_ctrl_fn(),
|
||||
OSSL_STORE_load_fn(), OSSL_STORE_eof_fn() and OSSL_STORE_close_fn()
|
||||
were added to OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ OSSL_STORE_SEARCH_get0_name(),
|
||||
OSSL_STORE_SEARCH_get0_serial(),
|
||||
OSSL_STORE_SEARCH_get0_bytes(),
|
||||
and OSSL_STORE_SEARCH_get0_string()
|
||||
were added to OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ L<OSSL_STORE_load(3)>
|
||||
=head1 HISTORY
|
||||
|
||||
OSSL_STORE_expect(), OSSL_STORE_supports_search() and OSSL_STORE_find()
|
||||
were added to OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ L<passphrase-encoding(7)>
|
||||
|
||||
OSSL_STORE_CTX(), OSSL_STORE_post_process_info_fn(), OSSL_STORE_open(),
|
||||
OSSL_STORE_ctrl(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close()
|
||||
were added to OpenSSL 1.1.1.
|
||||
were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@ L<crypto(7)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The macros and functions described here were added to OpenSSL 3.0.0,
|
||||
The macros and functions described here were added in OpenSSL 3.0.0,
|
||||
with the exception of the L</BACKWARD COMPATIBILITY> ones.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
@@ -56,7 +56,7 @@ L<PEM(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
PEM_read_bio_ex() was added in OpenSSL 1.1.1.
|
||||
The PEM_read_bio_ex() function was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ L<i2d_CMS_bio_stream(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
PEM_write_bio_CMS_stream() was added to OpenSSL 1.0.0
|
||||
The PEM_write_bio_CMS_stream() function was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ L<i2d_PKCS7_bio_stream(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
PEM_write_bio_PKCS7_stream() was added to OpenSSL 1.0.0
|
||||
The PEM_write_bio_PKCS7_stream() function was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -108,9 +108,9 @@ L<ERR_get_error(3)>, L<PKCS7_verify(3)>
|
||||
=head1 HISTORY
|
||||
|
||||
The B<PKCS7_PARTIAL> flag, and the ability for B<certs>, B<signcert>,
|
||||
and B<pkey> parameters to be B<NULL> to be was added in OpenSSL 1.0.0
|
||||
and B<pkey> parameters to be B<NULL> were added in OpenSSL 1.0.0.
|
||||
|
||||
The B<PKCS7_STREAM> flag was added in OpenSSL 1.0.0
|
||||
The B<PKCS7_STREAM> flag was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ L<PKCS7_final(3)>,
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
PPKCS7_sign_add_signer() was added to OpenSSL 1.0.0
|
||||
The PPKCS7_sign_add_signer() function was added in OpenSSL 1.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ RAND_pseudo_bytes() was deprecated in OpenSSL 1.1.0; use RAND_bytes() instead.
|
||||
|
||||
=item *
|
||||
|
||||
RAND_priv_bytes() was added in OpenSSL 1.1.1.
|
||||
The RAND_priv_bytes() function was added in OpenSSL 1.1.1.
|
||||
|
||||
=back
|
||||
|
||||
|
||||
@@ -157,6 +157,7 @@ L<RSA_new(3)>, L<RSA_size(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The
|
||||
RSA_get_multi_prime_extra_count(), RSA_get0_multi_prime_factors(),
|
||||
RSA_get0_multi_prime_crt_params(), RSA_set0_multi_prime_params(),
|
||||
and RSA_get_version() functions were added in OpenSSL 1.1.1.
|
||||
|
||||
@@ -41,7 +41,7 @@ L<BN_num_bits(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
RSA_bits() was added in OpenSSL 1.1.0.
|
||||
The RSA_bits() function was added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -83,9 +83,9 @@ L<SSL_CTX_set_srp_password(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SRP_VBASE_add0_user() was first added to OpenSSL 1.2.0.
|
||||
The SRP_VBASE_add0_user() function was added in OpenSSL 3.0.0.
|
||||
|
||||
All other functions were first added to OpenSSL 1.0.1.
|
||||
All other functions were added in OpenSSL 1.0.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ L<SRP_user_pwd_new(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.1.
|
||||
These functions were added in OpenSSL 1.0.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ L<SSL_CTX_set_srp_password(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were made public in OpenSSL 1.2.0.
|
||||
These functions were made public in OpenSSL 3.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -179,19 +179,19 @@ protocol-specific ID.
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_CIPHER_get_version() was updated to always return the correct protocol
|
||||
string in OpenSSL 1.1.0.
|
||||
The SSL_CIPHER_get_version() function was updated to always return the
|
||||
correct protocol string in OpenSSL 1.1.0.
|
||||
|
||||
SSL_CIPHER_description() was changed to return B<NULL> on error,
|
||||
The SSL_CIPHER_description() function was changed to return B<NULL> on error,
|
||||
rather than a fixed string, in OpenSSL 1.1.0.
|
||||
|
||||
SSL_CIPHER_get_handshake_digest() was added in OpenSSL 1.1.1.
|
||||
The SSL_CIPHER_get_handshake_digest() function was added in OpenSSL 1.1.1.
|
||||
|
||||
SSL_CIPHER_standard_name() was globally available in OpenSSL 1.1.1. Before
|
||||
OpenSSL 1.1.1, tracing (B<enable-ssl-trace> argument to Configure) was
|
||||
The SSL_CIPHER_standard_name() function was globally available in OpenSSL 1.1.1.
|
||||
Before OpenSSL 1.1.1, tracing (B<enable-ssl-trace> argument to Configure) was
|
||||
required to enable this function.
|
||||
|
||||
OPENSSL_cipher_name() was added in OpenSSL 1.1.1.
|
||||
The OPENSSL_cipher_name() function was added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
|
||||
@@ -91,9 +91,8 @@ L<ssl(7)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_COMP_free_compression_methods() was deprecated in OpenSSL 1.1.0;
|
||||
do not use it.
|
||||
SSL_COMP_get0_name() and SSL_comp_get_id() were added in OpenSSL 1.1.0d.
|
||||
The SSL_COMP_free_compression_methods() function was deprecated in OpenSSL 1.1.0.
|
||||
The SSL_COMP_get0_name() and SSL_comp_get_id() functions were added in OpenSSL 1.1.0d.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ L<SSL_CONF_cmd_argv(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ L<SSL_CONF_cmd_argv(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ L<SSL_CONF_cmd_argv(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ L<SSL_CONF_cmd_argv(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -670,12 +670,12 @@ L<SSL_CTX_set_options(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_CONF_cmd() was first added to OpenSSL 1.0.2
|
||||
The SSL_CONF_cmd() function was added in OpenSSL 1.0.2.
|
||||
|
||||
B<SSL_OP_NO_SSL2> doesn't have effect since 1.1.0, but the macro is retained
|
||||
for backwards compatibility.
|
||||
The B<SSL_OP_NO_SSL2> option doesn't have effect since 1.1.0, but the macro
|
||||
is retained for backwards compatibility.
|
||||
|
||||
B<SSL_CONF_TYPE_NONE> was first added to OpenSSL 1.1.0. In earlier versions of
|
||||
The B<SSL_CONF_TYPE_NONE> was added in OpenSSL 1.1.0. In earlier versions of
|
||||
OpenSSL passing a command which didn't take an argument would return
|
||||
B<SSL_CONF_TYPE_UNKNOWN>.
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ L<SSL_CONF_cmd(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ L<SSL_CTX_add_extra_chain_cert(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2.
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ L<CONF_modules_load_file(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_CTX_config() and SSL_config() were first added to OpenSSL 1.1.0
|
||||
The SSL_CTX_config() and SSL_config() functions were added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -368,7 +368,7 @@ L<EVP_PKEY_free(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.1.0.
|
||||
These functions were added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ L<X509_VERIFY_PARAM_set_flags(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2.
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -97,8 +97,8 @@ L<SSL_CTX_add_extra_chain_cert(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The curve functions were first added to OpenSSL 1.0.2. The equivalent group
|
||||
functions were first added to OpenSSL 1.1.1.
|
||||
The curve functions were added in OpenSSL 1.0.2. The equivalent group
|
||||
functions were added in OpenSSL 1.1.1.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ L<SSL_build_cert_chain(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
These functions were first added to OpenSSL 1.0.2.
|
||||
These functions were added in OpenSSL 1.0.2.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ truncated.
|
||||
|
||||
SSL_CTX_get_default_passwd_cb(), SSL_CTX_get_default_passwd_cb_userdata(),
|
||||
SSL_set_default_passwd_cb() and SSL_set_default_passwd_cb_userdata() were
|
||||
first added to OpenSSL 1.1.0
|
||||
added in OpenSSL 1.1.0.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
|
||||
@@ -140,8 +140,8 @@ L<SSL_write(3)>, L<SSL_get_error(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
SSL_MODE_ASYNC was first added to OpenSSL 1.1.0.
|
||||
SSL_MODE_NO_KTLS_TX was first added to OpenSSL 3.0.0.
|
||||
SSL_MODE_ASYNC was added in OpenSSL 1.1.0.
|
||||
SSL_MODE_NO_KTLS_TX was added in OpenSSL 3.0.0.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user