summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2022-07-04 12:22:32 +0000
committertb <>2022-07-04 12:22:32 +0000
commit00e824726e67ac60f4500af3e2eb04bc6165190b (patch)
tree9e35a209080134fc201402fc0940a82725121512 /src
parent7869bf01c6d0b61d5bf56605b35b2ee60ee72e3c (diff)
downloadopenbsd-00e824726e67ac60f4500af3e2eb04bc6165190b.tar.gz
openbsd-00e824726e67ac60f4500af3e2eb04bc6165190b.tar.bz2
openbsd-00e824726e67ac60f4500af3e2eb04bc6165190b.zip
Prepare to provide DSA_meth_{get0,set1}_name()
Also follow OpenSSL by making the name non-const to avoid ugly casting. Used by OpenSC's pkcs11-helper, as reported by Fabrice Fontaine in https://github.com/libressl-portable/openbsd/issues/130 ok jsing sthen
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/dsa/dsa.h6
-rw-r--r--src/lib/libcrypto/dsa/dsa_locl.h4
-rw-r--r--src/lib/libcrypto/dsa/dsa_meth.c33
3 files changed, 35 insertions, 8 deletions
diff --git a/src/lib/libcrypto/dsa/dsa.h b/src/lib/libcrypto/dsa/dsa.h
index 2ee27d775f..12b1faadf3 100644
--- a/src/lib/libcrypto/dsa/dsa.h
+++ b/src/lib/libcrypto/dsa/dsa.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa.h,v 1.36 2022/06/27 12:28:46 tb Exp $ */ 1/* $OpenBSD: dsa.h,v 1.37 2022/07/04 12:22:32 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -222,6 +222,10 @@ ENGINE *DSA_get0_engine(DSA *d);
222DSA_METHOD *DSA_meth_new(const char *name, int flags); 222DSA_METHOD *DSA_meth_new(const char *name, int flags);
223void DSA_meth_free(DSA_METHOD *meth); 223void DSA_meth_free(DSA_METHOD *meth);
224DSA_METHOD *DSA_meth_dup(const DSA_METHOD *meth); 224DSA_METHOD *DSA_meth_dup(const DSA_METHOD *meth);
225#ifdef LIBRESSL_INTERNAL
226const char *DSA_meth_get0_name(const DSA_METHOD *meth);
227int DSA_meth_set1_name(DSA_METHOD *meth, const char *name);
228#endif
225int DSA_meth_set_sign(DSA_METHOD *meth, 229int DSA_meth_set_sign(DSA_METHOD *meth,
226 DSA_SIG *(*sign)(const unsigned char *, int, DSA *)); 230 DSA_SIG *(*sign)(const unsigned char *, int, DSA *));
227int DSA_meth_set_finish(DSA_METHOD *meth, int (*finish)(DSA *)); 231int DSA_meth_set_finish(DSA_METHOD *meth, int (*finish)(DSA *));
diff --git a/src/lib/libcrypto/dsa/dsa_locl.h b/src/lib/libcrypto/dsa/dsa_locl.h
index 299c67a6b9..f78ff818ab 100644
--- a/src/lib/libcrypto/dsa/dsa_locl.h
+++ b/src/lib/libcrypto/dsa/dsa_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_locl.h,v 1.5 2022/01/14 08:29:06 tb Exp $ */ 1/* $OpenBSD: dsa_locl.h,v 1.6 2022/07/04 12:22:32 tb Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2007 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2007 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -63,7 +63,7 @@ struct DSA_SIG_st {
63} /* DSA_SIG */; 63} /* DSA_SIG */;
64 64
65struct dsa_method { 65struct dsa_method {
66 const char *name; 66 char *name;
67 DSA_SIG *(*dsa_do_sign)(const unsigned char *dgst, int dlen, DSA *dsa); 67 DSA_SIG *(*dsa_do_sign)(const unsigned char *dgst, int dlen, DSA *dsa);
68 int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, 68 int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp,
69 BIGNUM **rp); 69 BIGNUM **rp);
diff --git a/src/lib/libcrypto/dsa/dsa_meth.c b/src/lib/libcrypto/dsa/dsa_meth.c
index cd232835eb..2cb0426d43 100644
--- a/src/lib/libcrypto/dsa/dsa_meth.c
+++ b/src/lib/libcrypto/dsa/dsa_meth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_meth.c,v 1.3 2022/05/07 10:31:54 tb Exp $ */ 1/* $OpenBSD: dsa_meth.c,v 1.4 2022/07/04 12:22:32 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
4 * 4 *
@@ -42,10 +42,11 @@ DSA_meth_new(const char *name, int flags)
42void 42void
43DSA_meth_free(DSA_METHOD *meth) 43DSA_meth_free(DSA_METHOD *meth)
44{ 44{
45 if (meth != NULL) { 45 if (meth == NULL)
46 free((char *)meth->name); 46 return
47 free(meth); 47
48 } 48 free(meth->name);
49 free(meth);
49} 50}
50 51
51DSA_METHOD * 52DSA_METHOD *
@@ -64,6 +65,28 @@ DSA_meth_dup(const DSA_METHOD *meth)
64 return copy; 65 return copy;
65} 66}
66 67
68const char *
69DSA_meth_get0_name(const DSA_METHOD *meth)
70{
71 return meth->name;
72}
73
74int
75DSA_meth_set1_name(DSA_METHOD *meth, const char *name)
76{
77 char *new_name;
78
79 if ((new_name = strdup(name)) == NULL) {
80 DSAerror(ERR_R_MALLOC_FAILURE);
81 return 0;
82 }
83
84 free(meth->name);
85 meth->name = new_name;
86
87 return 1;
88}
89
67int 90int
68DSA_meth_set_sign(DSA_METHOD *meth, 91DSA_meth_set_sign(DSA_METHOD *meth,
69 DSA_SIG *(*sign)(const unsigned char *, int, DSA *)) 92 DSA_SIG *(*sign)(const unsigned char *, int, DSA *))