projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make OCSP_id_cmp and OCSP_id_issuer_cmp accept const params
[oweals/openssl.git]
/
crypto
/
dsa
/
dsa_asn1.c
diff --git
a/crypto/dsa/dsa_asn1.c
b/crypto/dsa/dsa_asn1.c
index 93ce85f09e85d4d174f18a992724c7e402675217..6499e87ef31893886d47204021a1c3ee451f9ab8 100644
(file)
--- a/
crypto/dsa/dsa_asn1.c
+++ b/
crypto/dsa/dsa_asn1.c
@@
-14,22
+14,47
@@
#include <openssl/asn1t.h>
#include <openssl/rand.h>
#include <openssl/asn1t.h>
#include <openssl/rand.h>
-struct DSA_SIG_st {
- BIGNUM *r;
- BIGNUM *s;
-};
-
ASN1_SEQUENCE(DSA_SIG) = {
ASN1_SIMPLE(DSA_SIG, r, CBIGNUM),
ASN1_SIMPLE(DSA_SIG, s, CBIGNUM)
} static_ASN1_SEQUENCE_END(DSA_SIG)
ASN1_SEQUENCE(DSA_SIG) = {
ASN1_SIMPLE(DSA_SIG, r, CBIGNUM),
ASN1_SIMPLE(DSA_SIG, s, CBIGNUM)
} static_ASN1_SEQUENCE_END(DSA_SIG)
-IMPLEMENT_ASN1_FUNCTIONS_const(DSA_SIG)
+IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA_SIG, DSA_SIG, DSA_SIG)
+
+DSA_SIG *DSA_SIG_new(void)
+{
+ DSA_SIG *sig = OPENSSL_zalloc(sizeof(*sig));
+ if (sig == NULL)
+ DSAerr(DSA_F_DSA_SIG_NEW, ERR_R_MALLOC_FAILURE);
+ return sig;
+}
+
+void DSA_SIG_free(DSA_SIG *sig)
+{
+ if (sig == NULL)
+ return;
+ BN_clear_free(sig->r);
+ BN_clear_free(sig->s);
+ OPENSSL_free(sig);
+}
-void DSA_SIG_get0(
BIGNUM **pr, BIGNUM **ps, const DSA_SIG *sig
)
+void DSA_SIG_get0(
const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps
)
{
{
- *pr = sig->r;
- *ps = sig->s;
+ if (pr != NULL)
+ *pr = sig->r;
+ if (ps != NULL)
+ *ps = sig->s;
+}
+
+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
+{
+ if (r == NULL || s == NULL)
+ return 0;
+ BN_clear_free(sig->r);
+ BN_clear_free(sig->s);
+ sig->r = r;
+ sig->s = s;
+ return 1;
}
/* Override the default free and new methods */
}
/* Override the default free and new methods */
@@
-50,7
+75,7
@@
static int dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
}
ASN1_SEQUENCE_cb(DSAPrivateKey, dsa_cb) = {
}
ASN1_SEQUENCE_cb(DSAPrivateKey, dsa_cb) = {
- ASN1_
SIMPLE(DSA, version, LONG
),
+ ASN1_
EMBED(DSA, version, INT32
),
ASN1_SIMPLE(DSA, p, BIGNUM),
ASN1_SIMPLE(DSA, q, BIGNUM),
ASN1_SIMPLE(DSA, g, BIGNUM),
ASN1_SIMPLE(DSA, p, BIGNUM),
ASN1_SIMPLE(DSA, q, BIGNUM),
ASN1_SIMPLE(DSA, g, BIGNUM),
@@
-86,15
+111,15
@@
int DSA_sign(int type, const unsigned char *dgst, int dlen,
unsigned char *sig, unsigned int *siglen, DSA *dsa)
{
DSA_SIG *s;
unsigned char *sig, unsigned int *siglen, DSA *dsa)
{
DSA_SIG *s;
- RAND_seed(dgst, dlen);
+
s = DSA_do_sign(dgst, dlen, dsa);
if (s == NULL) {
*siglen = 0;
s = DSA_do_sign(dgst, dlen, dsa);
if (s == NULL) {
*siglen = 0;
- return
(0)
;
+ return
0
;
}
*siglen = i2d_DSA_SIG(s, &sig);
DSA_SIG_free(s);
}
*siglen = i2d_DSA_SIG(s, &sig);
DSA_SIG_free(s);
- return
(1)
;
+ return
1
;
}
/* data has already been hashed (probably with SHA or SHA-1). */
}
/* data has already been hashed (probably with SHA or SHA-1). */
@@
-115,7
+140,7
@@
int DSA_verify(int type, const unsigned char *dgst, int dgst_len,
s = DSA_SIG_new();
if (s == NULL)
s = DSA_SIG_new();
if (s == NULL)
- return
(ret)
;
+ return
ret
;
if (d2i_DSA_SIG(&s, &p, siglen) == NULL)
goto err;
/* Ensure signature uses DER and doesn't have trailing garbage */
if (d2i_DSA_SIG(&s, &p, siglen) == NULL)
goto err;
/* Ensure signature uses DER and doesn't have trailing garbage */
@@
-126,5
+151,5
@@
int DSA_verify(int type, const unsigned char *dgst, int dgst_len,
err:
OPENSSL_clear_free(der, derlen);
DSA_SIG_free(s);
err:
OPENSSL_clear_free(der, derlen);
DSA_SIG_free(s);
- return
(ret)
;
+ return
ret
;
}
}