124 lines
3.6 KiB
Text
124 lines
3.6 KiB
Text
|
Fix build with opaque EVP_MD_CTX in LibreSSL 3.5.
|
||
|
|
||
|
Index: cksum.c
|
||
|
--- cksum.c.orig
|
||
|
+++ cksum.c
|
||
|
@@ -41,20 +41,25 @@ do_fcksum( int fd, char *cksum_b64 )
|
||
|
off_t size = 0;
|
||
|
unsigned char buf[ 8192 ];
|
||
|
extern EVP_MD *md;
|
||
|
- EVP_MD_CTX mdctx;
|
||
|
+ EVP_MD_CTX *mdctx;
|
||
|
unsigned char md_value[ EVP_MAX_MD_SIZE ];
|
||
|
|
||
|
- EVP_DigestInit( &mdctx, md );
|
||
|
+ if ((mdctx = EVP_MD_CTX_new()) == NULL) {
|
||
|
+ return( -1 );
|
||
|
+ }
|
||
|
+ EVP_DigestInit( mdctx, md );
|
||
|
|
||
|
while (( rr = read( fd, buf, sizeof( buf ))) > 0 ) {
|
||
|
size += rr;
|
||
|
- EVP_DigestUpdate( &mdctx, buf, (unsigned int)rr );
|
||
|
+ EVP_DigestUpdate( mdctx, buf, (unsigned int)rr );
|
||
|
}
|
||
|
if ( rr < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
|
||
|
- EVP_DigestFinal( &mdctx, md_value, &md_len );
|
||
|
+ EVP_DigestFinal( mdctx, md_value, &md_len );
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
base64_e( md_value, md_len, cksum_b64 );
|
||
|
|
||
|
return( size );
|
||
|
@@ -103,13 +108,16 @@ do_acksum( char *path, char *cksum_b64, struct applefi
|
||
|
struct as_entry as_entries_endian[ 3 ];
|
||
|
unsigned int md_len;
|
||
|
extern EVP_MD *md;
|
||
|
- EVP_MD_CTX mdctx;
|
||
|
+ EVP_MD_CTX *mdctx;
|
||
|
unsigned char md_value[ EVP_MAX_MD_SIZE ];
|
||
|
|
||
|
- EVP_DigestInit( &mdctx, md );
|
||
|
+ if ((ctx = EVP_MD_CTX_new()) == NULL) {
|
||
|
+ return( -1 );
|
||
|
+ }
|
||
|
+ EVP_DigestInit( mdctx, md );
|
||
|
|
||
|
/* checksum applesingle header */
|
||
|
- EVP_DigestUpdate( &mdctx, (char *)&as_header, AS_HEADERLEN );
|
||
|
+ EVP_DigestUpdate( mdctx, (char *)&as_header, AS_HEADERLEN );
|
||
|
size += (size_t)AS_HEADERLEN;
|
||
|
|
||
|
/* endian handling, sum big-endian header entries */
|
||
|
@@ -120,54 +128,62 @@ do_acksum( char *path, char *cksum_b64, struct applefi
|
||
|
as_entry_netswap( &as_entries_endian[ AS_DFE ] );
|
||
|
|
||
|
/* checksum header entries */
|
||
|
- EVP_DigestUpdate( &mdctx, (char *)&as_entries_endian,
|
||
|
+ EVP_DigestUpdate( mdctx, (char *)&as_entries_endian,
|
||
|
(unsigned int)( 3 * sizeof( struct as_entry )));
|
||
|
size += sizeof( 3 * sizeof( struct as_entry ));
|
||
|
|
||
|
/* checksum finder info data */
|
||
|
- EVP_DigestUpdate( &mdctx, afinfo->ai.ai_data, FINFOLEN );
|
||
|
+ EVP_DigestUpdate( mdctx, afinfo->ai.ai_data, FINFOLEN );
|
||
|
size += FINFOLEN;
|
||
|
|
||
|
/* checksum rsrc fork data */
|
||
|
if ( afinfo->as_ents[ AS_RFE ].ae_length > 0 ) {
|
||
|
if ( snprintf( rsrc_path, MAXPATHLEN, "%s%s",
|
||
|
path, _PATH_RSRCFORKSPEC ) >= MAXPATHLEN ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
errno = ENAMETOOLONG;
|
||
|
return( -1 );
|
||
|
}
|
||
|
|
||
|
if (( rfd = open( rsrc_path, O_RDONLY )) < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
while (( rc = read( rfd, buf, sizeof( buf ))) > 0 ) {
|
||
|
- EVP_DigestUpdate( &mdctx, buf, (unsigned int)rc );
|
||
|
+ EVP_DigestUpdate( mdctx, buf, (unsigned int)rc );
|
||
|
size += (size_t)rc;
|
||
|
}
|
||
|
if ( close( rfd ) < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
if ( rc < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (( dfd = open( path, O_RDONLY, 0 )) < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
/* checksum data fork */
|
||
|
while (( rc = read( dfd, buf, sizeof( buf ))) > 0 ) {
|
||
|
- EVP_DigestUpdate( &mdctx, buf, (unsigned int)rc );
|
||
|
+ EVP_DigestUpdate( mdctx, buf, (unsigned int)rc );
|
||
|
size += (size_t)rc;
|
||
|
}
|
||
|
if ( rc < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
if ( close( dfd ) < 0 ) {
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
return( -1 );
|
||
|
}
|
||
|
|
||
|
- EVP_DigestFinal( &mdctx, md_value, &md_len );
|
||
|
+ EVP_DigestFinal( mdctx, md_value, &md_len );
|
||
|
base64_e( ( char*)&md_value, md_len, cksum_b64 );
|
||
|
+ EVP_MD_CTX_free( mdctx );
|
||
|
|
||
|
return( size );
|
||
|
}
|