Branch data Line data Source code
1 : : /**
2 : : * @file digest.c
3 : : *
4 : : * @brief Roll-up of the digests used by fwknop.
5 : : *
6 : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
7 : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full
8 : : * list of contributors, see the file 'CREDITS'.
9 : : *
10 : : * License (GNU General Public License):
11 : : *
12 : : * This program is free software; you can redistribute it and/or
13 : : * modify it under the terms of the GNU General Public License
14 : : * as published by the Free Software Foundation; either version 2
15 : : * of the License, or (at your option) any later version.
16 : : *
17 : : * This program is distributed in the hope that it will be useful,
18 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 : : * GNU General Public License for more details.
21 : : *
22 : : * You should have received a copy of the GNU General Public License
23 : : * along with this program; if not, write to the Free Software
24 : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
25 : : * USA
26 : : */
27 : :
28 : : #include "fko_common.h"
29 : : #include "digest.h"
30 : : #include "base64.h"
31 : :
32 : : /* Compute MD5 hash on in and store result in out.
33 : : */
34 : : void
35 : 1236 : md5(unsigned char *out, unsigned char *in, size_t size)
36 : : {
37 : : MD5Context ctx;
38 : :
39 : 1236 : MD5Init(&ctx);
40 : 1236 : MD5Update(&ctx, (unsigned char*)in, size);
41 : 1236 : MD5Final(out, &ctx);
42 : 1236 : }
43 : :
44 : : /* Compute MD5 hash on in and store the base64 string result in out.
45 : : */
46 : : void
47 : 0 : md5_base64(char *out, unsigned char *in, size_t size)
48 : : {
49 : : uint8_t md[MD5_DIGEST_LEN];
50 : :
51 : 0 : md5(md, in, size);
52 : 0 : b64_encode(md, out, MD5_DIGEST_LEN);
53 : :
54 : 0 : strip_b64_eq(out);
55 : 0 : }
56 : :
57 : : /* Compute SHA1 hash on in and store result in out.
58 : : */
59 : : void
60 : 166 : sha1(unsigned char *out, unsigned char *in, size_t size)
61 : : {
62 : : SHA1_INFO sha1_info;
63 : :
64 : 166 : sha1_init(&sha1_info);
65 : 166 : sha1_update(&sha1_info, (uint8_t*)in, size);
66 : 166 : sha1_final(out, &sha1_info);
67 : 166 : }
68 : :
69 : : /* Compute SHA1 hash on in and store the base64 string result in out.
70 : : */
71 : : void
72 : 58 : sha1_base64(char *out, unsigned char *in, size_t size)
73 : : {
74 : : uint8_t md[SHA1_DIGEST_LEN];
75 : :
76 : 58 : sha1(md, in, size);
77 : 58 : b64_encode(md, out, SHA1_DIGEST_LEN);
78 : :
79 : 58 : strip_b64_eq(out);
80 : 58 : }
81 : :
82 : : /* Compute SHA256 hash on in and store the hex string result in out.
83 : : */
84 : : void
85 : 537 : sha256(unsigned char *out, unsigned char *in, size_t size)
86 : : {
87 : : SHA256_CTX sha256_ctx;
88 : :
89 : 537 : SHA256_Init(&sha256_ctx);
90 : 537 : SHA256_Update(&sha256_ctx, (const uint8_t*)in, size);
91 : 537 : SHA256_Final(out, &sha256_ctx);
92 : 537 : }
93 : :
94 : : /* Compute SHA256 hash on in and store the base64 string result in out.
95 : : */
96 : : void
97 : 371 : sha256_base64(char *out, unsigned char *in, size_t size)
98 : : {
99 : : uint8_t md[SHA256_DIGEST_LEN];
100 : :
101 : 371 : sha256(md, in, size);
102 : 371 : b64_encode(md, out, SHA256_DIGEST_LEN);
103 : :
104 : 371 : strip_b64_eq(out);
105 : 371 : }
106 : :
107 : : /* Compute SHA384 hash on in and store the hex string result in out.
108 : : */
109 : : void
110 : 0 : sha384(unsigned char *out, unsigned char *in, size_t size)
111 : : {
112 : : SHA384_CTX sha384_ctx;
113 : :
114 : 0 : SHA384_Init(&sha384_ctx);
115 : 0 : SHA384_Update(&sha384_ctx, (const uint8_t*)in, size);
116 : 0 : SHA384_Final(out, &sha384_ctx);
117 : 0 : }
118 : :
119 : : /* Compute SHA384 hash on in and store the base64 string result in out.
120 : : */
121 : : void
122 : 0 : sha384_base64(char *out, unsigned char *in, size_t size)
123 : : {
124 : : uint8_t md[SHA384_DIGEST_LEN];
125 : :
126 : 0 : sha384(md, in, size);
127 : 0 : b64_encode(md, out, SHA384_DIGEST_LEN);
128 : :
129 : 0 : strip_b64_eq(out);
130 : 0 : }
131 : :
132 : : /* Compute SHA512 hash on in and store the hex string result in out.
133 : : */
134 : : void
135 : 0 : sha512(unsigned char *out, unsigned char *in, size_t size)
136 : : {
137 : : SHA512_CTX sha512_ctx;
138 : :
139 : 0 : SHA512_Init(&sha512_ctx);
140 : 0 : SHA512_Update(&sha512_ctx, (const uint8_t*)in, size);
141 : 0 : SHA512_Final(out, &sha512_ctx);
142 : 0 : }
143 : :
144 : : /* Compute SHA512 hash on in and store the base64 string result in out.
145 : : */
146 : : void
147 : 0 : sha512_base64(char *out, unsigned char *in, size_t size)
148 : : {
149 : : uint8_t md[SHA512_DIGEST_LEN];
150 : :
151 : 0 : sha512(md, in, size);
152 : 0 : b64_encode(md, out, SHA512_DIGEST_LEN);
153 : :
154 : 0 : strip_b64_eq(out);
155 : 0 : }
156 : :
157 : : /***EOF***/
|