1
1
#![ allow( clippy:: many_single_char_names) ]
2
2
3
- #[ cfg( target_arch = "x86_64" ) ]
4
- use core:: arch:: x86_64:: * ;
5
3
#[ cfg( target_arch = "x86" ) ]
6
4
use core:: arch:: x86:: * ;
5
+ #[ cfg( target_arch = "x86_64" ) ]
6
+ use core:: arch:: x86_64:: * ;
7
7
8
8
unsafe fn schedule ( v0 : __m128i , v1 : __m128i , v2 : __m128i , v3 : __m128i ) -> __m128i {
9
9
let t1 = _mm_sha256msg1_epu32 ( v0, v1) ;
@@ -61,7 +61,7 @@ unsafe fn digest_blocks(state: &mut [u32; 8], blocks: &[[u8; 64]]) {
61
61
let mut w0 = _mm_shuffle_epi8 ( _mm_loadu_si128 ( data_ptr. add ( 0 ) ) , MASK ) ;
62
62
let mut w1 = _mm_shuffle_epi8 ( _mm_loadu_si128 ( data_ptr. add ( 1 ) ) , MASK ) ;
63
63
let mut w2 = _mm_shuffle_epi8 ( _mm_loadu_si128 ( data_ptr. add ( 2 ) ) , MASK ) ;
64
- let mut w3 = _mm_shuffle_epi8 ( _mm_loadu_si128 ( data_ptr. add ( 3 ) ) , MASK ) ;
64
+ let mut w3 = _mm_shuffle_epi8 ( _mm_loadu_si128 ( data_ptr. add ( 3 ) ) , MASK ) ;
65
65
let mut w4;
66
66
67
67
rounds4 ! ( abef, cdgh, w0, 0 ) ;
@@ -95,6 +95,7 @@ unsafe fn digest_blocks(state: &mut [u32; 8], blocks: &[[u8; 64]]) {
95
95
_mm_storeu_si128 ( state_ptr_mut. add ( 1 ) , hgef) ;
96
96
}
97
97
98
+ #[ cfg( feature = "cpuid_bool" ) ]
98
99
pub fn compress ( state : & mut [ u32 ; 8 ] , blocks : & [ [ u8 ; 64 ] ] ) {
99
100
// TODO: Replace with https://github.com/rust-lang/rfcs/pull/2725
100
101
// after stabilization
@@ -106,3 +107,19 @@ pub fn compress(state: &mut [u32; 8], blocks: &[[u8; 64]]) {
106
107
super :: soft:: compress ( state, blocks) ;
107
108
}
108
109
}
110
+
111
+ /// Use `is_x86_feature_detected` in sgx environment in the future
112
+ #[ cfg( not( feature = "cpuid_bool" ) ) ]
113
+ pub fn compress ( state : & mut [ u32 ; 8 ] , blocks : & [ [ u8 ; 64 ] ] ) {
114
+ if core:: detect:: is_target_feature_detected ( "sha" )
115
+ && core:: detect:: is_target_feature_detected ( "sse2" )
116
+ && core:: detect:: is_target_feature_detected ( "ssse3" )
117
+ && core:: detect:: is_target_feature_detected ( "sse4.1" )
118
+ {
119
+ unsafe {
120
+ digest_blocks ( state, blocks) ;
121
+ }
122
+ } else {
123
+ super :: soft:: compress ( state, blocks) ;
124
+ }
125
+ }
0 commit comments