Home | History | Annotate | Download | only in sha1
      1 // Copyright 2017 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 #include "textflag.h"
      6 
      7 #define HASHUPDATECHOOSE \
      8 	SHA1C	V16.S4, V1, V2 \
      9 	SHA1H	V3, V1 \
     10 	VMOV	V2.B16, V3.B16
     11 
     12 #define HASHUPDATEPARITY \
     13 	SHA1P	V16.S4, V1, V2 \
     14 	SHA1H	V3, V1 \
     15 	VMOV	V2.B16, V3.B16
     16 
     17 #define HASHUPDATEMAJ \
     18 	SHA1M	V16.S4, V1, V2 \
     19 	SHA1H	V3, V1 \
     20 	VMOV	V2.B16, V3.B16
     21 
     22 // func sha1block(h []uint32, p []byte, k []uint32)
     23 TEXT sha1block(SB),NOSPLIT,$0
     24 	MOVD	h_base+0(FP), R0                             // hash value first address
     25 	MOVD	p_base+24(FP), R1                            // message first address
     26 	MOVD	k_base+48(FP), R2                            // k constants first address
     27 	MOVD	p_len+32(FP), R3                             // message length
     28 	VLD1.P	16(R0), [V0.S4]
     29 	VMOVS	(R0), V20
     30 	SUB	$16, R0, R0
     31 
     32 blockloop:
     33 
     34 	VLD1.P	16(R1), [V4.B16]                             // load message
     35 	VLD1.P	16(R1), [V5.B16]
     36 	VLD1.P	16(R1), [V6.B16]
     37 	VLD1.P	16(R1), [V7.B16]
     38 	VLD1	(R2), [V19.S4]                               // load constant k0-k79
     39 	VMOV	V0.B16, V2.B16
     40 	VMOV	V20.S[0], V1
     41 	VMOV	V2.B16, V3.B16
     42 	VDUP	V19.S[0], V17.S4
     43 	VREV32	V4.B16, V4.B16                               // prepare for using message in Byte format
     44 	VREV32	V5.B16, V5.B16
     45 	VREV32	V6.B16, V6.B16
     46 	VREV32	V7.B16, V7.B16
     47 
     48 
     49 	VDUP	V19.S[1], V18.S4
     50 	VADD	V17.S4, V4.S4, V16.S4
     51 	SHA1SU0	V6.S4, V5.S4, V4.S4
     52 	HASHUPDATECHOOSE
     53 	SHA1SU1	V7.S4, V4.S4
     54 
     55 	VADD	V17.S4, V5.S4, V16.S4
     56 	SHA1SU0	V7.S4, V6.S4, V5.S4
     57 	HASHUPDATECHOOSE
     58 	SHA1SU1	V4.S4, V5.S4
     59 	VADD	V17.S4, V6.S4, V16.S4
     60 	SHA1SU0	V4.S4, V7.S4, V6.S4
     61 	HASHUPDATECHOOSE
     62 	SHA1SU1	V5.S4, V6.S4
     63 
     64 	VADD	V17.S4, V7.S4, V16.S4
     65 	SHA1SU0	V5.S4, V4.S4, V7.S4
     66 	HASHUPDATECHOOSE
     67 	SHA1SU1	V6.S4, V7.S4
     68 
     69 	VADD	V17.S4, V4.S4, V16.S4
     70 	SHA1SU0	V6.S4, V5.S4, V4.S4
     71 	HASHUPDATECHOOSE
     72 	SHA1SU1	V7.S4, V4.S4
     73 
     74 	VDUP	V19.S[2], V17.S4
     75 	VADD	V18.S4, V5.S4, V16.S4
     76 	SHA1SU0	V7.S4, V6.S4, V5.S4
     77 	HASHUPDATEPARITY
     78 	SHA1SU1	V4.S4, V5.S4
     79 
     80 	VADD	V18.S4, V6.S4, V16.S4
     81 	SHA1SU0	V4.S4, V7.S4, V6.S4
     82 	HASHUPDATEPARITY
     83 	SHA1SU1	V5.S4, V6.S4
     84 
     85 	VADD	V18.S4, V7.S4, V16.S4
     86 	SHA1SU0	V5.S4, V4.S4, V7.S4
     87 	HASHUPDATEPARITY
     88 	SHA1SU1	V6.S4, V7.S4
     89 
     90 	VADD	V18.S4, V4.S4, V16.S4
     91 	SHA1SU0	V6.S4, V5.S4, V4.S4
     92 	HASHUPDATEPARITY
     93 	SHA1SU1	V7.S4, V4.S4
     94 
     95 	VADD	V18.S4, V5.S4, V16.S4
     96 	SHA1SU0	V7.S4, V6.S4, V5.S4
     97 	HASHUPDATEPARITY
     98 	SHA1SU1	V4.S4, V5.S4
     99 
    100 	VDUP	V19.S[3], V18.S4
    101 	VADD	V17.S4, V6.S4, V16.S4
    102 	SHA1SU0	V4.S4, V7.S4, V6.S4
    103 	HASHUPDATEMAJ
    104 	SHA1SU1	V5.S4, V6.S4
    105 
    106 	VADD	V17.S4, V7.S4, V16.S4
    107 	SHA1SU0	V5.S4, V4.S4, V7.S4
    108 	HASHUPDATEMAJ
    109 	SHA1SU1	V6.S4, V7.S4
    110 
    111 	VADD	V17.S4, V4.S4, V16.S4
    112 	SHA1SU0	V6.S4, V5.S4, V4.S4
    113 	HASHUPDATEMAJ
    114 	SHA1SU1	V7.S4, V4.S4
    115 
    116 	VADD	V17.S4, V5.S4, V16.S4
    117 	SHA1SU0	V7.S4, V6.S4, V5.S4
    118 	HASHUPDATEMAJ
    119 	SHA1SU1	V4.S4, V5.S4
    120 
    121 	VADD	V17.S4, V6.S4, V16.S4
    122 	SHA1SU0	V4.S4, V7.S4, V6.S4
    123 	HASHUPDATEMAJ
    124 	SHA1SU1	V5.S4, V6.S4
    125 
    126 	VADD	V18.S4, V7.S4, V16.S4
    127 	SHA1SU0	V5.S4, V4.S4, V7.S4
    128 	HASHUPDATEPARITY
    129 	SHA1SU1	V6.S4, V7.S4
    130 
    131 	VADD	V18.S4, V4.S4, V16.S4
    132 	HASHUPDATEPARITY
    133 
    134 	VADD	V18.S4, V5.S4, V16.S4
    135 	HASHUPDATEPARITY
    136 
    137 	VADD	V18.S4, V6.S4, V16.S4
    138 	HASHUPDATEPARITY
    139 
    140 	VADD	V18.S4, V7.S4, V16.S4
    141 	HASHUPDATEPARITY
    142 
    143 	SUB	$64, R3, R3                                  // message length - 64bytes, then compare with 64bytes
    144 	VADD	V2.S4, V0.S4, V0.S4
    145 	VADD	V1.S4, V20.S4, V20.S4
    146 	CBNZ	R3, blockloop
    147 
    148 sha1ret:
    149 
    150 	VST1.P	[V0.S4], 16(R0)                               // store hash value H(dcba)
    151 	VMOVS	V20, (R0)                                     // store hash value H(e)
    152 	RET
    153