TODO: update docs, and make soe other routines
which use EVP_Digest*() check return codes.
17 files changed:
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
+ *) Modify EVP_Digest*() routines so they now return values. Although the
+ internal software routines can never fail additional hardware versions
+ might.
+ [Steve Henson]
+
*) Clean up crypto/err/err.h and change some error codes to avoid conflicts:
Previously ERR_R_FATAL was too small and coincided with ERR_LIB_PKCS7
*) Clean up crypto/err/err.h and change some error codes to avoid conflicts:
Previously ERR_R_FATAL was too small and coincided with ERR_LIB_PKCS7
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/evp.h>
-void EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type)
+int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type)
- type->init(&(ctx->md));
+ return type->init(&(ctx->md));
-void EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *data,
+int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *data,
- ctx->digest->update(&(ctx->md.base[0]),data,(unsigned long)count);
+ return ctx->digest->update(&(ctx->md.base[0]),data,(unsigned long)count);
-void EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size)
+int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size)
- ctx->digest->final(md,&(ctx->md.base[0]));
+ int ret;
+ ret = ctx->digest->final(md,&(ctx->md.base[0]));
if (size != NULL)
*size=ctx->digest->md_size;
memset(&(ctx->md),0,sizeof(ctx->md));
if (size != NULL)
*size=ctx->digest->md_size;
memset(&(ctx->md),0,sizeof(ctx->md));
}
int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in)
}
int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in)
unsigned char *md, unsigned int *size, const EVP_MD *type)
{
EVP_MD_CTX ctx;
unsigned char *md, unsigned int *size, const EVP_MD *type)
{
EVP_MD_CTX ctx;
- EVP_DigestInit(&ctx, type);
- EVP_DigestUpdate(&ctx, data, count);
- EVP_DigestFinal(&ctx, md, size);
- return 1;
+ if (!EVP_DigestInit(&ctx, type))
+ return 0;
+ if (!EVP_DigestUpdate(&ctx, data, count))
+ return 0;
+ return EVP_DigestFinal(&ctx, md, size);
int type;
int pkey_type;
int md_size;
int type;
int pkey_type;
int md_size;
- void (*init)();
- void (*update)();
- void (*final)();
+ int (*init)();
+ int (*update)();
+ int (*final)();
int (*sign)();
int (*verify)();
int (*sign)();
int (*verify)();
int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
-void EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
-void EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
+int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
+int EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
-void EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
+int EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
int EVP_Digest(void *data, unsigned int count,
unsigned char *md, unsigned int *size, const EVP_MD *type);
int EVP_Digest(void *data, unsigned int count,
unsigned char *md, unsigned int *size, const EVP_MD *type);
#include <openssl/objects.h>
#include <openssl/x509.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
-static void function(void)
+static int function(void)
} MD2_CTX;
const char *MD2_options(void);
} MD2_CTX;
const char *MD2_options(void);
-void MD2_Init(MD2_CTX *c);
-void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len);
-void MD2_Final(unsigned char *md, MD2_CTX *c);
+int MD2_Init(MD2_CTX *c);
+int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len);
+int MD2_Final(unsigned char *md, MD2_CTX *c);
unsigned char *MD2(const unsigned char *d, unsigned long n,unsigned char *md);
#ifdef __cplusplus
}
unsigned char *MD2(const unsigned char *d, unsigned long n,unsigned char *md);
#ifdef __cplusplus
}
-void MD2_Init(MD2_CTX *c)
+int MD2_Init(MD2_CTX *c)
{
c->num=0;
memset(c->state,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->cksm,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->data,0,MD2_BLOCK);
{
c->num=0;
memset(c->state,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->cksm,0,MD2_BLOCK*sizeof(MD2_INT));
memset(c->data,0,MD2_BLOCK);
-void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
+int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
+ if (len == 0) return 1;
p=c->data;
if (c->num != 0)
p=c->data;
if (c->num != 0)
memcpy(&(p[c->num]),data,(int)len);
/* data+=len; */
c->num+=(int)len;
memcpy(&(p[c->num]),data,(int)len);
/* data+=len; */
c->num+=(int)len;
}
}
/* we now can process the input data in blocks of MD2_BLOCK
}
}
/* we now can process the input data in blocks of MD2_BLOCK
}
memcpy(p,data,(int)len);
c->num=(int)len;
}
memcpy(p,data,(int)len);
c->num=(int)len;
}
static void md2_block(MD2_CTX *c, const unsigned char *d)
}
static void md2_block(MD2_CTX *c, const unsigned char *d)
memset(state,0,48*sizeof(MD2_INT));
}
memset(state,0,48*sizeof(MD2_INT));
}
-void MD2_Final(unsigned char *md, MD2_CTX *c)
+int MD2_Final(unsigned char *md, MD2_CTX *c)
{
int i,v;
register UCHAR *cp;
{
int i,v;
register UCHAR *cp;
for (i=0; i<16; i++)
md[i]=(UCHAR)(p1[i]&0xff);
memset((char *)&c,0,sizeof(c));
for (i=0; i<16; i++)
md[i]=(UCHAR)(p1[i]&0xff);
memset((char *)&c,0,sizeof(c));
* Time for some action:-)
*/
* Time for some action:-)
*/
-void HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
+int HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
{
const unsigned char *data=data_;
register HASH_LONG * p;
register unsigned long l;
int sw,sc,ew,ec;
{
const unsigned char *data=data_;
register HASH_LONG * p;
register unsigned long l;
int sw,sc,ew,ec;
l=(c->Nl+(len<<3))&0xffffffffL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
l=(c->Nl+(len<<3))&0xffffffffL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
HOST_c2l_p(data,l,ec); p[sw]=l;
}
}
HOST_c2l_p(data,l,ec); p[sw]=l;
}
}
HOST_c2l_p(data,l,ec);
*p=l;
}
HOST_c2l_p(data,l,ec);
*p=l;
}
-void HASH_FINAL (unsigned char *md, HASH_CTX *c)
+int HASH_FINAL (unsigned char *md, HASH_CTX *c)
{
register HASH_LONG *p;
register unsigned long l;
{
register HASH_LONG *p;
register unsigned long l;
* but I'm not worried :-)
memset((void *)c,0,sizeof(HASH_CTX));
*/
* but I'm not worried :-)
memset((void *)c,0,sizeof(HASH_CTX));
*/
-void MD4_Init(MD4_CTX *c);
-void MD4_Update(MD4_CTX *c, const void *data, unsigned long len);
-void MD4_Final(unsigned char *md, MD4_CTX *c);
+int MD4_Init(MD4_CTX *c);
+int MD4_Update(MD4_CTX *c, const void *data, unsigned long len);
+int MD4_Final(unsigned char *md, MD4_CTX *c);
unsigned char *MD4(const unsigned char *d, unsigned long n, unsigned char *md);
void MD4_Transform(MD4_CTX *c, const unsigned char *b);
#ifdef __cplusplus
unsigned char *MD4(const unsigned char *d, unsigned long n, unsigned char *md);
void MD4_Transform(MD4_CTX *c, const unsigned char *b);
#ifdef __cplusplus
#define INIT_DATA_C (unsigned long)0x98badcfeL
#define INIT_DATA_D (unsigned long)0x10325476L
#define INIT_DATA_C (unsigned long)0x98badcfeL
#define INIT_DATA_D (unsigned long)0x10325476L
-void MD4_Init(MD4_CTX *c)
+int MD4_Init(MD4_CTX *c)
{
c->A=INIT_DATA_A;
c->B=INIT_DATA_B;
{
c->A=INIT_DATA_A;
c->B=INIT_DATA_B;
c->Nl=0;
c->Nh=0;
c->num=0;
c->Nl=0;
c->Nh=0;
c->num=0;
}
#ifndef md4_block_host_order
}
#ifndef md4_block_host_order
-void MD5_Init(MD5_CTX *c);
-void MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
-void MD5_Final(unsigned char *md, MD5_CTX *c);
+int MD5_Init(MD5_CTX *c);
+int MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
+int MD5_Final(unsigned char *md, MD5_CTX *c);
unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
void MD5_Transform(MD5_CTX *c, const unsigned char *b);
#ifdef __cplusplus
unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
void MD5_Transform(MD5_CTX *c, const unsigned char *b);
#ifdef __cplusplus
#define INIT_DATA_C (unsigned long)0x98badcfeL
#define INIT_DATA_D (unsigned long)0x10325476L
#define INIT_DATA_C (unsigned long)0x98badcfeL
#define INIT_DATA_D (unsigned long)0x10325476L
-void MD5_Init(MD5_CTX *c)
+int MD5_Init(MD5_CTX *c)
{
c->A=INIT_DATA_A;
c->B=INIT_DATA_B;
{
c->A=INIT_DATA_A;
c->B=INIT_DATA_B;
c->Nl=0;
c->Nh=0;
c->num=0;
c->Nl=0;
c->Nh=0;
c->num=0;
}
#ifndef md5_block_host_order
}
#ifndef md5_block_host_order
-void MDC2_Init(MDC2_CTX *c);
-void MDC2_Update(MDC2_CTX *c, const unsigned char *data, unsigned long len);
-void MDC2_Final(unsigned char *md, MDC2_CTX *c);
+int MDC2_Init(MDC2_CTX *c);
+int MDC2_Update(MDC2_CTX *c, const unsigned char *data, unsigned long len);
+int MDC2_Final(unsigned char *md, MDC2_CTX *c);
unsigned char *MDC2(const unsigned char *d, unsigned long n,
unsigned char *md);
unsigned char *MDC2(const unsigned char *d, unsigned long n,
unsigned char *md);
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len);
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len);
-void MDC2_Init(MDC2_CTX *c)
+int MDC2_Init(MDC2_CTX *c)
{
c->num=0;
c->pad_type=1;
memset(&(c->h[0]),0x52,MDC2_BLOCK);
memset(&(c->hh[0]),0x25,MDC2_BLOCK);
{
c->num=0;
c->pad_type=1;
memset(&(c->h[0]),0x52,MDC2_BLOCK);
memset(&(c->hh[0]),0x25,MDC2_BLOCK);
-void MDC2_Update(MDC2_CTX *c, const unsigned char *in, unsigned long len)
+int MDC2_Update(MDC2_CTX *c, const unsigned char *in, unsigned long len)
/* partial block */
memcpy(&(c->data[i]),in,(int)len);
c->num+=(int)len;
/* partial block */
memcpy(&(c->data[i]),in,(int)len);
c->num+=(int)len;
memcpy(&(c->data[0]),&(in[i]),j);
c->num=j;
}
memcpy(&(c->data[0]),&(in[i]),j);
c->num=j;
}
}
static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len)
}
static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len)
-void MDC2_Final(unsigned char *md, MDC2_CTX *c)
+int MDC2_Final(unsigned char *md, MDC2_CTX *c)
}
memcpy(md,(char *)c->h,MDC2_BLOCK);
memcpy(&(md[MDC2_BLOCK]),(char *)c->hh,MDC2_BLOCK);
}
memcpy(md,(char *)c->h,MDC2_BLOCK);
memcpy(&(md[MDC2_BLOCK]),(char *)c->hh,MDC2_BLOCK);
int num;
} RIPEMD160_CTX;
int num;
} RIPEMD160_CTX;
-void RIPEMD160_Init(RIPEMD160_CTX *c);
-void RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len);
-void RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);
+int RIPEMD160_Init(RIPEMD160_CTX *c);
+int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len);
+int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);
unsigned char *RIPEMD160(const unsigned char *d, unsigned long n,
unsigned char *md);
void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b);
unsigned char *RIPEMD160(const unsigned char *d, unsigned long n,
unsigned char *md);
void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b);
void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num);
# endif
void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num);
# endif
-void RIPEMD160_Init(RIPEMD160_CTX *c)
+int RIPEMD160_Init(RIPEMD160_CTX *c)
{
c->A=RIPEMD160_A;
c->B=RIPEMD160_B;
{
c->A=RIPEMD160_A;
c->B=RIPEMD160_B;
c->Nl=0;
c->Nh=0;
c->num=0;
c->Nl=0;
c->Nh=0;
c->num=0;
}
#ifndef ripemd160_block_host_order
}
#ifndef ripemd160_block_host_order
} SHA_CTX;
#ifndef OPENSSL_NO_SHA0
} SHA_CTX;
#ifndef OPENSSL_NO_SHA0
-void SHA_Init(SHA_CTX *c);
-void SHA_Update(SHA_CTX *c, const void *data, unsigned long len);
-void SHA_Final(unsigned char *md, SHA_CTX *c);
+int SHA_Init(SHA_CTX *c);
+int SHA_Update(SHA_CTX *c, const void *data, unsigned long len);
+int SHA_Final(unsigned char *md, SHA_CTX *c);
unsigned char *SHA(const unsigned char *d, unsigned long n,unsigned char *md);
void SHA_Transform(SHA_CTX *c, const unsigned char *data);
#endif
#ifndef OPENSSL_NO_SHA1
unsigned char *SHA(const unsigned char *d, unsigned long n,unsigned char *md);
void SHA_Transform(SHA_CTX *c, const unsigned char *data);
#endif
#ifndef OPENSSL_NO_SHA1
-void SHA1_Init(SHA_CTX *c);
-void SHA1_Update(SHA_CTX *c, const void *data, unsigned long len);
-void SHA1_Final(unsigned char *md, SHA_CTX *c);
+int SHA1_Init(SHA_CTX *c);
+int SHA1_Update(SHA_CTX *c, const void *data, unsigned long len);
+int SHA1_Final(unsigned char *md, SHA_CTX *c);
unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);
void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
#endif
unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);
void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
#endif
#define INIT_DATA_h3 0x10325476UL
#define INIT_DATA_h4 0xc3d2e1f0UL
#define INIT_DATA_h3 0x10325476UL
#define INIT_DATA_h4 0xc3d2e1f0UL
-void HASH_INIT (SHA_CTX *c)
+int HASH_INIT (SHA_CTX *c)
{
c->h0=INIT_DATA_h0;
c->h1=INIT_DATA_h1;
{
c->h0=INIT_DATA_h0;
c->h1=INIT_DATA_h1;
c->Nl=0;
c->Nh=0;
c->num=0;
c->Nl=0;
c->Nh=0;
c->num=0;
}
#define K_00_19 0x5a827999UL
}
#define K_00_19 0x5a827999UL