git subrepo clone https://github.com/libretro/libretro-common.git deps/libretro-common
[pcsx_rearmed.git] / deps / libretro-common / samples / utils / md5_test.c
1 /*
2  * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
3  * MD5 Message-Digest Algorithm (RFC 1321).
4  *
5  * Homepage:
6  * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
7  *
8  * Author:
9  * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
10  *
11  * This software was written by Alexander Peslyak in 2001.  No copyright is
12  * claimed, and the software is hereby placed in the public domain.
13  * In case this attempt to disclaim copyright and place the software in the
14  * public domain is deemed null and void, then the software is
15  * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
16  * general public under the following terms:
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted.
20  *
21  * There's ABSOLUTELY NO WARRANTY, express or implied.
22  *
23  * (This is a heavily cut-down "BSD license".)
24  *
25  * This differs from Colin Plumb's older public domain implementation in that
26  * no exactly 32-bit integer data type is required (any 32-bit or wider
27  * unsigned integer data type will do), there's no compile-time endianness
28  * configuration, and the function prototypes match OpenSSL's.  No code from
29  * Colin Plumb's implementation has been reused; this comment merely compares
30  * the properties of the two independent implementations.
31  *
32  * The primary goals of this implementation are portability and ease of use.
33  * It is meant to be fast, but not as fast as possible.  Some known
34  * optimizations are not included to reduce source code size and avoid
35  * compile-time configuration.
36  */
37 #include <stdio.h>
38 #include <string.h>
39
40 #include <lrc_hash.h>
41
42 int main (int argc, char *argv[])
43 {
44    /* For each command line argument in turn:
45     ** filename          -- prints message digest and name of file
46     */
47    int i;
48    MD5_CTX ctx;
49    FILE* file;
50    size_t numread;
51    char buffer[16384];
52    unsigned char result[16];
53
54    for (i = 1; i < argc; i++)
55    {
56       MD5_Init(&ctx);
57       file = fopen(argv[i], "rb");
58
59       if (file)
60       {
61          do
62          {
63             numread = fread((void*)buffer, 1, sizeof(buffer), file);
64
65             if (numread)
66             {
67                MD5_Update(&ctx,(void*)buffer, numread);
68             }
69          }
70          while (numread);
71
72          fclose(file);
73          MD5_Final(result, &ctx);
74          printf("%02x%02x%02x%02x%02x%02x%02x%02x"
75                                   "%02x%02x%02x%02x%02x%02x%02x%02x %s\n",
76                                   result[ 0 ], result[ 1 ], result[ 2 ], result[ 3 ],
77                 result[ 4 ], result[ 5 ], result[ 6 ], result[ 7 ],
78                 result[ 8 ], result[ 9 ], result[ 10 ], result[ 11 ],
79                 result[ 12 ], result[ 13 ], result[ 14 ], result[ 15 ],
80                 argv[i]);
81       }
82    }
83
84    return 0;
85 }