Mercurial > octave
annotate liboctave/util/lo-hash.cc @ 27919:1891570abac8
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2020.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 06 Jan 2020 22:29:51 -0500 |
parents | b442ec6dda5c |
children | bd51beb6205e |
rev | line source |
---|---|
21889
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1 /* |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2 |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 Copyright (C) 2016-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
4 |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
5 See the file COPYRIGHT.md in the top-level directory of this distribution |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
6 or <https://octave.org/COPYRIGHT.html/>. |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
7 |
21889
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
8 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
9 This file is part of Octave. |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
10 |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
11 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
12 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
13 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
14 (at your option) any later version. |
21889
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
15 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
16 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
17 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
19 GNU General Public License for more details. |
21889
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
20 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
21 You should have received a copy of the GNU General Public License |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
22 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
23 <https://www.gnu.org/licenses/>. |
21889
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
24 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 */ |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 #if defined (HAVE_CONFIG_H) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 # include "config.h" |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 #endif |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 #include <algorithm> |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 #include <iomanip> |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 #include <sstream> |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #include <string> |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include "hash-wrappers.h" |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 #include "lo-error.h" |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 #include "lo-hash.h" |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include "oct-locbuf.h" |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 namespace octave |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 namespace crypto |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 hash (hash_fptr hash_fcn, const std::string& str, int result_buf_len) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 OCTAVE_LOCAL_BUFFER (unsigned char, result_buf, result_buf_len); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
49 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 hash_fcn (str.data (), str.length (), result_buf); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
51 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 std::ostringstream buf; |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 for (int i = 0; i < result_buf_len; i++) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
55 buf << std::hex << std::setw (2) << std::setfill ('0') |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 << (result_buf[i] & 0xFF); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
58 return buf.str (); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
59 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
60 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
61 int md2_digest_size (void) { return octave_md2_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
62 int md4_digest_size (void) { return octave_md4_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
63 int md5_digest_size (void) { return octave_md5_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 int sha1_digest_size (void) { return octave_sha1_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 int sha224_digest_size (void) { return octave_sha224_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 int sha256_digest_size (void) { return octave_sha256_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 int sha384_digest_size (void) { return octave_sha384_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 int sha512_digest_size (void) { return octave_sha512_digest_size (); } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
71 md2_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
72 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 return hash (octave_md2_buffer_wrapper, str, md2_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
75 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 md4_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 return hash (octave_md4_buffer_wrapper, str, md4_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
80 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
81 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
82 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
83 md5_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 return hash (octave_md5_buffer_wrapper, str, md5_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
88 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
89 sha1_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 return hash (octave_sha1_buffer_wrapper, str, sha1_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 sha224_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
96 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
97 return hash (octave_sha224_buffer_wrapper, str, sha224_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
99 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 sha256_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
103 return hash (octave_sha256_buffer_wrapper, str, sha256_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
104 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
105 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
106 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
107 sha384_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
108 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
109 return hash (octave_sha384_buffer_wrapper, str, sha384_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
110 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
111 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 sha512_hash (const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 return hash (octave_sha512_buffer_wrapper, str, sha512_digest_size ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 std::string |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 hash (const std::string& hash_type, const std::string& str) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
120 { |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 std::string ht = hash_type; |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 std::transform (ht.begin (), ht.end (), ht.begin (), ::toupper); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
124 |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 if (ht == "MD2") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 return md2_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
127 else if (ht == "MD4") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
128 return md4_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
129 else if (ht == "MD5") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
130 return md5_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
131 else if (ht == "SHA1") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
132 return sha1_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
133 else if (ht == "SHA224") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
134 return sha224_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
135 else if (ht == "SHA256") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
136 return sha256_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
137 else if (ht == "SHA384") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
138 return sha384_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
139 else if (ht == "SHA512") |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
140 return sha512_hash (str); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
141 else |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
142 (*current_liboctave_error_handler) |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
143 ("hash function '%s' not supported", hash_type.c_str ()); |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
144 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 } |
69afa5dce885
hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 } |