| Index: openssl/crypto/dsa/dsa_asn1.c
|
| ===================================================================
|
| --- openssl/crypto/dsa/dsa_asn1.c (revision 105093)
|
| +++ openssl/crypto/dsa/dsa_asn1.c (working copy)
|
| @@ -3,7 +3,7 @@
|
| * project 2000.
|
| */
|
| /* ====================================================================
|
| - * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
| + * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved.
|
| *
|
| * Redistribution and use in source and binary forms, with or without
|
| * modification, are permitted provided that the following conditions
|
| @@ -61,25 +61,23 @@
|
| #include <openssl/dsa.h>
|
| #include <openssl/asn1.h>
|
| #include <openssl/asn1t.h>
|
| -#include <openssl/bn.h>
|
| -#include <openssl/rand.h>
|
| -#ifdef OPENSSL_FIPS
|
| -#include <openssl/fips.h>
|
| -#endif
|
|
|
| -
|
| /* Override the default new methods */
|
| -static int sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it)
|
| +static int sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
|
| + void *exarg)
|
| {
|
| if(operation == ASN1_OP_NEW_PRE) {
|
| DSA_SIG *sig;
|
| sig = OPENSSL_malloc(sizeof(DSA_SIG));
|
| + if (!sig)
|
| + {
|
| + DSAerr(DSA_F_SIG_CB, ERR_R_MALLOC_FAILURE);
|
| + return 0;
|
| + }
|
| sig->r = NULL;
|
| sig->s = NULL;
|
| *pval = (ASN1_VALUE *)sig;
|
| - if(sig) return 2;
|
| - DSAerr(DSA_F_SIG_CB, ERR_R_MALLOC_FAILURE);
|
| - return 0;
|
| + return 2;
|
| }
|
| return 1;
|
| }
|
| @@ -89,10 +87,11 @@
|
| ASN1_SIMPLE(DSA_SIG, s, CBIGNUM)
|
| } ASN1_SEQUENCE_END_cb(DSA_SIG, DSA_SIG)
|
|
|
| -IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA_SIG,DSA_SIG,DSA_SIG)
|
| +IMPLEMENT_ASN1_FUNCTIONS_const(DSA_SIG)
|
|
|
| /* Override the default free and new methods */
|
| -static int dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it)
|
| +static int dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
|
| + void *exarg)
|
| {
|
| if(operation == ASN1_OP_NEW_PRE) {
|
| *pval = (ASN1_VALUE *)DSA_new();
|
| @@ -145,76 +144,7 @@
|
|
|
| IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA, DSAPublicKey, DSAPublicKey)
|
|
|
| -int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
| - unsigned int *siglen, DSA *dsa)
|
| +DSA *DSAparams_dup(DSA *dsa)
|
| {
|
| - DSA_SIG *s;
|
| -#ifdef OPENSSL_FIPS
|
| - if(FIPS_mode() && !(dsa->flags & DSA_FLAG_NON_FIPS_ALLOW))
|
| - {
|
| - DSAerr(DSA_F_DSA_SIGN, DSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE);
|
| - return 0;
|
| - }
|
| -#endif
|
| - RAND_seed(dgst, dlen);
|
| - s=DSA_do_sign(dgst,dlen,dsa);
|
| - if (s == NULL)
|
| - {
|
| - *siglen=0;
|
| - return(0);
|
| - }
|
| - *siglen=i2d_DSA_SIG(s,&sig);
|
| - DSA_SIG_free(s);
|
| - return(1);
|
| + return ASN1_item_dup(ASN1_ITEM_rptr(DSAparams), dsa);
|
| }
|
| -
|
| -int DSA_size(const DSA *r)
|
| - {
|
| - int ret,i;
|
| - ASN1_INTEGER bs;
|
| - unsigned char buf[4]; /* 4 bytes looks really small.
|
| - However, i2d_ASN1_INTEGER() will not look
|
| - beyond the first byte, as long as the second
|
| - parameter is NULL. */
|
| -
|
| - i=BN_num_bits(r->q);
|
| - bs.length=(i+7)/8;
|
| - bs.data=buf;
|
| - bs.type=V_ASN1_INTEGER;
|
| - /* If the top bit is set the asn1 encoding is 1 larger. */
|
| - buf[0]=0xff;
|
| -
|
| - i=i2d_ASN1_INTEGER(&bs,NULL);
|
| - i+=i; /* r and s */
|
| - ret=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
|
| - return(ret);
|
| - }
|
| -
|
| -/* data has already been hashed (probably with SHA or SHA-1). */
|
| -/* returns
|
| - * 1: correct signature
|
| - * 0: incorrect signature
|
| - * -1: error
|
| - */
|
| -int DSA_verify(int type, const unsigned char *dgst, int dgst_len,
|
| - const unsigned char *sigbuf, int siglen, DSA *dsa)
|
| - {
|
| - DSA_SIG *s;
|
| - int ret=-1;
|
| -#ifdef OPENSSL_FIPS
|
| - if(FIPS_mode() && !(dsa->flags & DSA_FLAG_NON_FIPS_ALLOW))
|
| - {
|
| - DSAerr(DSA_F_DSA_VERIFY, DSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE);
|
| - return 0;
|
| - }
|
| -#endif
|
| -
|
| - s = DSA_SIG_new();
|
| - if (s == NULL) return(ret);
|
| - if (d2i_DSA_SIG(&s,&sigbuf,siglen) == NULL) goto err;
|
| - ret=DSA_do_verify(dgst,dgst_len,s,dsa);
|
| -err:
|
| - DSA_SIG_free(s);
|
| - return(ret);
|
| - }
|
| -
|
|
|