annotate liboctave/util/lo-hash.cc @ 21889:69afa5dce885

hide gnulib hash function headers * liboctave/wrappers/hash-wrappers.c, liboctave/wrappers/hash-wrappers.h: New files. Wrap gnulib hash functions and hide gnulib headers. * liboctave/util/module.mk, liboctave/wrappers/module.mk: Update. * liboctave/util/lo-hash.cc, liboctave/util/lo-hash.h: New files. Provide simple C++ interface to hashing functions. * hash.cc: Use new hash function.
author John W. Eaton <jwe@octave.org>
date Mon, 13 Jun 2016 18:36:16 -0400
parents
children 4caa7b28d183
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 2016 John W. Eaton
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 option) any later version.
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 for more details.
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 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
18 along with Octave; see the file COPYING. If not, see
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
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 */
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if defined (HAVE_CONFIG_H)
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 # include "config.h"
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 #endif
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 #include <algorithm>
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #include <iomanip>
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 #include <sstream>
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include <string>
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "hash-wrappers.h"
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "lo-error.h"
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include "lo-hash.h"
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include "oct-locbuf.h"
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 namespace octave
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 {
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 namespace crypto
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 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 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
43 {
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 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
45
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 hash_fcn (str.data (), str.length (), result_buf);
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 std::ostringstream buf;
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 for (int i = 0; i < result_buf_len; i++)
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 buf << std::hex << std::setw (2) << std::setfill ('0')
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 << (result_buf[i] & 0xFF);
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 return buf.str ();
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 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
58 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
59 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
60 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
61 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
62 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
63 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
64 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
65
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67 md2_hash (const std::string& str)
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68 {
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69 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
70 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73 md4_hash (const std::string& str)
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 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
76 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79 md5_hash (const std::string& str)
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 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
82 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 sha1_hash (const std::string& str)
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 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
88 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
90 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91 sha224_hash (const std::string& str)
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 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
94 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
96 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
97 sha256_hash (const std::string& str)
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 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
100 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103 sha384_hash (const std::string& str)
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 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
106 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109 sha512_hash (const std::string& str)
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 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
112 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114 std::string
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 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
116 {
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 std::string ht = hash_type;
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 std::transform (ht.begin (), ht.end (), ht.begin (), ::toupper);
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 if (ht == "MD2")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 return md2_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 else if (ht == "MD4")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 return md4_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 else if (ht == "MD5")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 return md5_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 else if (ht == "SHA1")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 return sha1_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 else if (ht == "SHA224")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 return sha224_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 else if (ht == "SHA256")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132 return sha256_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 else if (ht == "SHA384")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134 return sha384_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 else if (ht == "SHA512")
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 return sha512_hash (str);
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137 else
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138 (*current_liboctave_error_handler)
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139 ("hash function '%s' not supported", hash_type.c_str ());
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141 }
69afa5dce885 hide gnulib hash function headers
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142 }