forked from trustwallet/wallet-core
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathTWHash.h
152 lines (127 loc) · 4.57 KB
/
TWHash.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// SPDX-License-Identifier: Apache-2.0
//
// Copyright © 2017 Trust Wallet.
#pragma once
#include "TWBase.h"
#include "TWData.h"
TW_EXTERN_C_BEGIN
/// Hash functions
TW_EXPORT_STRUCT
struct TWHash {
uint8_t unused; // C doesn't allow zero-sized struct
};
static const size_t TWHashSHA1Length = 20;
static const size_t TWHashSHA256Length = 32;
static const size_t TWHashSHA512Length = 64;
static const size_t TWHashRipemdLength = 20;
/// Computes the SHA1 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA1 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA1(TWData *_Nonnull data);
/// Computes the SHA256 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA256 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA256(TWData *_Nonnull data);
/// Computes the SHA512 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA512 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA512(TWData *_Nonnull data);
/// Computes the SHA512_256 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA512_256 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA512_256(TWData *_Nonnull data);
/// Computes the Keccak256 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Keccak256 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashKeccak256(TWData *_Nonnull data);
/// Computes the Keccak512 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Keccak512 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashKeccak512(TWData *_Nonnull data);
/// Computes the SHA3_256 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA3_256 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA3_256(TWData *_Nonnull data);
/// Computes the SHA3_512 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA3_512 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA3_512(TWData *_Nonnull data);
/// Computes the RIPEMD of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed RIPEMD block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashRIPEMD(TWData *_Nonnull data);
/// Computes the Blake256 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Blake256 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashBlake256(TWData *_Nonnull data);
/// Computes the Blake2b of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Blake2b block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashBlake2b(TWData *_Nonnull data, size_t size);
/// Computes the Groestl512 of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Groestl512 block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashBlake2bPersonal(TWData *_Nonnull data, TWData * _Nonnull personal, size_t outlen);
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashGroestl512(TWData *_Nonnull data);
/// Computes the SHA256D of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA256D block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA256SHA256(TWData *_Nonnull data);
/// Computes the SHA256RIPEMD of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA256RIPEMD block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA256RIPEMD(TWData *_Nonnull data);
/// Computes the SHA3_256RIPEMD of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed SHA3_256RIPEMD block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashSHA3_256RIPEMD(TWData *_Nonnull data);
/// Computes the Blake256D of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Blake256D block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashBlake256Blake256(TWData *_Nonnull data);
/// Computes the Blake256RIPEMD of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Blake256RIPEMD block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashBlake256RIPEMD(TWData *_Nonnull data);
/// Computes the Groestl512D of a block of data.
///
/// \param data Non-null block of data
/// \return Non-null computed Groestl512D block of data
TW_EXPORT_STATIC_METHOD
TWData *_Nonnull TWHashGroestl512Groestl512(TWData *_Nonnull data);
TW_EXTERN_C_END