4
4
* See accompanying file LICENSE.txt or copy at
5
5
* https://opensource.org/licenses/MIT
6
6
***/
7
+
7
8
#ifndef SHA1DC_SHA1_H
8
9
#define SHA1DC_SHA1_H
9
10
10
11
#if defined(__cplusplus )
11
12
extern "C" {
12
13
#endif
13
14
14
- /* uses SHA-1 message expansion to expand the first 16 words of W[] to 80 words */
15
- /* void sha1_message_expansion(uint32_t W[80]); */
16
-
17
- /* sha-1 compression function; first version takes a message block pre-parsed as 16 32-bit integers, second version takes an already expanded message) */
18
- /* void sha1_compression(uint32_t ihv[5], const uint32_t m[16]);
19
- void sha1_compression_W(uint32_t ihv[5], const uint32_t W[80]); */
15
+ #ifndef SHA1DC_NO_STANDARD_INCLUDES
16
+ #include <stdint.h>
17
+ #endif
20
18
21
- /* same as sha1_compression_W, but additionally store intermediate states */
19
+ /* sha-1 compression function that takes an already expanded message, and additionally store intermediate states */
22
20
/* only stores states ii (the state between step ii-1 and step ii) when DOSTORESTATEii is defined in ubc_check.h */
23
21
void sha1_compression_states (uint32_t [5 ], const uint32_t [16 ], uint32_t [80 ], uint32_t [80 ][5 ]);
24
22
25
23
/*
26
- // function type for sha1_recompression_step_T (uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5])
27
- // where 0 <= T < 80
28
- // me2 is an expanded message (the expansion of an original message block XOR'ed with a disturbance vector's message block difference)
29
- // state is the internal state (a,b,c,d,e) before step T of the SHA-1 compression function while processing the original message block
30
- // the function will return:
31
- // ihvin: the reconstructed input chaining value
32
- // ihvout: the reconstructed output chaining value
24
+ // Function type for sha1_recompression_step_T (uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5]).
25
+ // Where 0 <= T < 80
26
+ // me2 is an expanded message (the expansion of an original message block XOR'ed with a disturbance vector's message block difference. )
27
+ // state is the internal state (a,b,c,d,e) before step T of the SHA-1 compression function while processing the original message block.
28
+ // The function will return:
29
+ // ihvin: The reconstructed input chaining value.
30
+ // ihvout: The reconstructed output chaining value.
33
31
*/
34
32
typedef void (* sha1_recompression_type )(uint32_t * , uint32_t * , const uint32_t * , const uint32_t * );
35
33
36
- /* table of sha1_recompression_step_0, ... , sha1_recompression_step_79 */
37
- /* extern sha1_recompression_type sha1_recompression_step[80];*/
38
-
39
- /* a callback function type that can be set to be called when a collision block has been found: */
34
+ /* A callback function type that can be set to be called when a collision block has been found: */
40
35
/* void collision_block_callback(uint64_t byteoffset, const uint32_t ihvin1[5], const uint32_t ihvin2[5], const uint32_t m1[80], const uint32_t m2[80]) */
41
36
typedef void (* collision_block_callback )(uint64_t , const uint32_t * , const uint32_t * , const uint32_t * , const uint32_t * );
42
37
43
- /* the SHA-1 context */
38
+ /* The SHA-1 context. */
44
39
typedef struct {
45
40
uint64_t total ;
46
41
uint32_t ihv [5 ];
@@ -59,30 +54,34 @@ typedef struct {
59
54
uint32_t states [80 ][5 ];
60
55
} SHA1_CTX ;
61
56
62
- /* initialize SHA-1 context */
57
+ /* Initialize SHA-1 context. */
63
58
void SHA1DCInit (SHA1_CTX * );
64
59
65
60
/*
66
- // function to enable safe SHA-1 hashing:
67
- // collision attacks are thwarted by hashing a detected near-collision block 3 times
68
- // think of it as extending SHA-1 from 80-steps to 240-steps for such blocks:
69
- // the best collision attacks against SHA-1 have complexity about 2^60,
70
- // thus for 240-steps an immediate lower-bound for the best cryptanalytic attacks would 2^180
71
- // an attacker would be better off using a generic birthday search of complexity 2^80
72
- //
73
- // enabling safe SHA-1 hashing will result in the correct SHA-1 hash for messages where no collision attack was detected
74
- // but it will result in a different SHA-1 hash for messages where a collision attack was detected
75
- // this will automatically invalidate SHA-1 based digital signature forgeries
76
- // enabled by default
61
+ Function to enable safe SHA-1 hashing:
62
+ Collision attacks are thwarted by hashing a detected near-collision block 3 times.
63
+ Think of it as extending SHA-1 from 80-steps to 240-steps for such blocks:
64
+ The best collision attacks against SHA-1 have complexity about 2^60,
65
+ thus for 240-steps an immediate lower-bound for the best cryptanalytic attacks would be 2^180.
66
+ An attacker would be better off using a generic birthday search of complexity 2^80.
67
+
68
+ Enabling safe SHA-1 hashing will result in the correct SHA-1 hash for messages where no collision attack was detected,
69
+ but it will result in a different SHA-1 hash for messages where a collision attack was detected.
70
+ This will automatically invalidate SHA-1 based digital signature forgeries.
71
+ Enabled by default.
77
72
*/
78
73
void SHA1DCSetSafeHash (SHA1_CTX * , int );
79
74
80
- /* function to disable or enable the use of Unavoidable Bitconditions (provides a significant speed up) */
81
- /* enabled by default */
75
+ /*
76
+ Function to disable or enable the use of Unavoidable Bitconditions (provides a significant speed up).
77
+ Enabled by default
78
+ */
82
79
void SHA1DCSetUseUBC (SHA1_CTX * , int );
83
80
84
- /* function to disable or enable the use of Collision Detection */
85
- /* enabled by default */
81
+ /*
82
+ Function to disable or enable the use of Collision Detection.
83
+ Enabled by default.
84
+ */
86
85
void SHA1DCSetUseDetectColl (SHA1_CTX * , int );
87
86
88
87
/* function to disable or enable the detection of reduced-round SHA-1 collisions */
@@ -100,23 +99,12 @@ void SHA1DCUpdate(SHA1_CTX*, const char*, size_t);
100
99
/* returns: 0 = no collision detected, otherwise = collision found => warn user for active attack */
101
100
int SHA1DCFinal (unsigned char [20 ], SHA1_CTX * );
102
101
103
- /*
104
- * Same as SHA1DCFinal, but convert collision attack case into a verbose die().
105
- */
106
- void git_SHA1DCFinal (unsigned char [20 ], SHA1_CTX * );
107
-
108
- /*
109
- * Same as SHA1DCUpdate, but adjust types to match git's usual interface.
110
- */
111
- void git_SHA1DCUpdate (SHA1_CTX * ctx , const void * data , unsigned long len );
112
-
113
- #define platform_SHA_CTX SHA1_CTX
114
- #define platform_SHA1_Init SHA1DCInit
115
- #define platform_SHA1_Update git_SHA1DCUpdate
116
- #define platform_SHA1_Final git_SHA1DCFinal
117
-
118
102
#if defined(__cplusplus )
119
103
}
120
104
#endif
121
105
122
- #endif /* SHA1DC_SHA1_H */
106
+ #ifdef SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_H
107
+ #include SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_H
108
+ #endif
109
+
110
+ #endif
0 commit comments