Analysis Software
Documentation for
sPHENIX
simulation software
Home page
Related Pages
Modules
Namespaces
Classes
Files
Examples
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
PHmd5Utils.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHmd5Utils.cc
1
2
#include "stdio.h"
3
4
#include "
PHmd5Utils.h
"
5
#include "
md5.h
"
6
7
int
PHmd5File
(
const
char
*
filename
,
unsigned
char
*digest,
int
*filesize)
8
{
9
int
status
;
10
FILE *fp;
11
fp = fopen (filename,
"r"
);
12
13
if
(!fp)
return
1;
14
15
status =
PHmd5Stream
(fp, digest, filesize);
16
fclose
(fp);
17
return
status
;
18
}
19
20
21
int
PHmd5Stream
(FILE *stream,
unsigned
char
*digest,
int
*filesize)
22
{
23
/* Important: BLOCKSIZE must be a multiple of 64. */
24
#define BLOCKSIZE 4096
25
md5_state_t
state
;
26
char
buffer
[
BLOCKSIZE
+ 72];
27
size_t
sum
;
28
29
/* Initialize the computation context. */
30
md5_init
(&state);
31
32
/* Iterate over full file contents. */
33
*filesize = 0;
34
while
(1)
35
{
36
/* We read the file in blocks of BLOCKSIZE bytes. One call of the
37
computation function processes the whole buffer so that with the
38
next round of the loop another block can be read. */
39
size_t
n
;
40
sum = 0;
41
42
/* Read block. Take care for partial reads. */
43
do
44
{
45
n = fread (buffer + sum, 1,
BLOCKSIZE
- sum, stream);
46
47
sum +=
n
;
48
*filesize +=
n
;
49
}
50
while
(sum <
BLOCKSIZE
&& n != 0);
51
if
(n == 0 && ferror (stream))
52
return
1;
53
54
/* If end of file is reached, end the loop. */
55
if
(n == 0)
56
break
;
57
58
/* Process buffer with BLOCKSIZE bytes. Note that
59
BLOCKSIZE % 64 == 0
60
*/
61
md5_append
(&state, (
const
md5_byte_t
*)buffer,
BLOCKSIZE
);
62
/* md5_process_block (buffer, BLOCKSIZE, &ctx); */
63
}
64
65
/* Add the last bytes if necessary. */
66
if
(sum > 0)
md5_append
(&state, (
const
md5_byte_t
*)buffer,sum );
67
/* md5_process_bytes (buffer, sum, &ctx); */
68
69
/* Construct result in desired memory. */
70
md5_finish
(&state, (
md5_byte_t
*) digest);
71
/* md5_finish_ctx (&ctx, resblock); */
72
return
0;
73
}
74
online_distribution
blob
master
newbasic
PHmd5Utils.cc
Built by
Jin Huang
. updated:
Sat Feb 17 2024 22:18:28
using
1.8.2 with
sPHENIX GitHub integration