Line data Source code
1 : /* go-sha1.cc -- Go frontend interface to gcc backend.
2 : Copyright (C) 2016-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
6 : GCC is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation; either version 3, or (at your option) any later
9 : version.
10 :
11 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with GCC; see the file COPYING3. If not see
18 : <http://www.gnu.org/licenses/>. */
19 :
20 : #include "go-sha1.h"
21 : #include "sha1.h"
22 :
23 : class Gcc_sha1_helper : public Go_sha1_helper
24 : {
25 : public:
26 :
27 8580 : Gcc_sha1_helper() : ctx_(new sha1_ctx) { sha1_init_ctx(this->ctx_); }
28 :
29 : ~Gcc_sha1_helper();
30 :
31 : // Incorporate 'len' bytes from 'buffer' into checksum.
32 : void
33 : process_bytes(const void* buffer, size_t len);
34 :
35 : // Finalize checksum and return in the form of a string.
36 : std::string
37 : finish();
38 :
39 : private:
40 : sha1_ctx *ctx_;
41 : };
42 :
43 8656 : Gcc_sha1_helper::~Gcc_sha1_helper()
44 : {
45 4328 : delete ctx_;
46 8656 : }
47 :
48 : void
49 16240218 : Gcc_sha1_helper::process_bytes(const void* buffer, size_t len)
50 : {
51 16240218 : sha1_process_bytes(buffer, len, this->ctx_);
52 16240218 : }
53 :
54 : std::string
55 4328 : Gcc_sha1_helper::finish()
56 : {
57 : // Use a union to provide the required alignment.
58 4328 : union
59 : {
60 : char checksum[checksum_len];
61 : long align;
62 : } u;
63 4328 : sha1_finish_ctx(this->ctx_, u.checksum);
64 4328 : return std::string(u.checksum, checksum_len);
65 : }
66 :
67 : Go_sha1_helper*
68 8580 : go_create_sha1_helper()
69 : {
70 8580 : return new Gcc_sha1_helper();
71 : }
|