gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

blamka_generic.go (4396B)


      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 package argon2
      6 
      7 var useSSE4 bool
      8 
      9 func processBlockGeneric(out, in1, in2 *block, xor bool) {
     10 	var t block
     11 	for i := range t {
     12 		t[i] = in1[i] ^ in2[i]
     13 	}
     14 	for i := 0; i < blockLength; i += 16 {
     15 		blamkaGeneric(
     16 			&t[i+0], &t[i+1], &t[i+2], &t[i+3],
     17 			&t[i+4], &t[i+5], &t[i+6], &t[i+7],
     18 			&t[i+8], &t[i+9], &t[i+10], &t[i+11],
     19 			&t[i+12], &t[i+13], &t[i+14], &t[i+15],
     20 		)
     21 	}
     22 	for i := 0; i < blockLength/8; i += 2 {
     23 		blamkaGeneric(
     24 			&t[i], &t[i+1], &t[16+i], &t[16+i+1],
     25 			&t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1],
     26 			&t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1],
     27 			&t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1],
     28 		)
     29 	}
     30 	if xor {
     31 		for i := range t {
     32 			out[i] ^= in1[i] ^ in2[i] ^ t[i]
     33 		}
     34 	} else {
     35 		for i := range t {
     36 			out[i] = in1[i] ^ in2[i] ^ t[i]
     37 		}
     38 	}
     39 }
     40 
     41 func blamkaGeneric(t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15 *uint64) {
     42 	v00, v01, v02, v03 := *t00, *t01, *t02, *t03
     43 	v04, v05, v06, v07 := *t04, *t05, *t06, *t07
     44 	v08, v09, v10, v11 := *t08, *t09, *t10, *t11
     45 	v12, v13, v14, v15 := *t12, *t13, *t14, *t15
     46 
     47 	v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04))
     48 	v12 ^= v00
     49 	v12 = v12>>32 | v12<<32
     50 	v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12))
     51 	v04 ^= v08
     52 	v04 = v04>>24 | v04<<40
     53 
     54 	v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04))
     55 	v12 ^= v00
     56 	v12 = v12>>16 | v12<<48
     57 	v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12))
     58 	v04 ^= v08
     59 	v04 = v04>>63 | v04<<1
     60 
     61 	v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05))
     62 	v13 ^= v01
     63 	v13 = v13>>32 | v13<<32
     64 	v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13))
     65 	v05 ^= v09
     66 	v05 = v05>>24 | v05<<40
     67 
     68 	v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05))
     69 	v13 ^= v01
     70 	v13 = v13>>16 | v13<<48
     71 	v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13))
     72 	v05 ^= v09
     73 	v05 = v05>>63 | v05<<1
     74 
     75 	v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06))
     76 	v14 ^= v02
     77 	v14 = v14>>32 | v14<<32
     78 	v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14))
     79 	v06 ^= v10
     80 	v06 = v06>>24 | v06<<40
     81 
     82 	v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06))
     83 	v14 ^= v02
     84 	v14 = v14>>16 | v14<<48
     85 	v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14))
     86 	v06 ^= v10
     87 	v06 = v06>>63 | v06<<1
     88 
     89 	v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07))
     90 	v15 ^= v03
     91 	v15 = v15>>32 | v15<<32
     92 	v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15))
     93 	v07 ^= v11
     94 	v07 = v07>>24 | v07<<40
     95 
     96 	v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07))
     97 	v15 ^= v03
     98 	v15 = v15>>16 | v15<<48
     99 	v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15))
    100 	v07 ^= v11
    101 	v07 = v07>>63 | v07<<1
    102 
    103 	v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05))
    104 	v15 ^= v00
    105 	v15 = v15>>32 | v15<<32
    106 	v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15))
    107 	v05 ^= v10
    108 	v05 = v05>>24 | v05<<40
    109 
    110 	v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05))
    111 	v15 ^= v00
    112 	v15 = v15>>16 | v15<<48
    113 	v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15))
    114 	v05 ^= v10
    115 	v05 = v05>>63 | v05<<1
    116 
    117 	v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06))
    118 	v12 ^= v01
    119 	v12 = v12>>32 | v12<<32
    120 	v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12))
    121 	v06 ^= v11
    122 	v06 = v06>>24 | v06<<40
    123 
    124 	v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06))
    125 	v12 ^= v01
    126 	v12 = v12>>16 | v12<<48
    127 	v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12))
    128 	v06 ^= v11
    129 	v06 = v06>>63 | v06<<1
    130 
    131 	v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07))
    132 	v13 ^= v02
    133 	v13 = v13>>32 | v13<<32
    134 	v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13))
    135 	v07 ^= v08
    136 	v07 = v07>>24 | v07<<40
    137 
    138 	v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07))
    139 	v13 ^= v02
    140 	v13 = v13>>16 | v13<<48
    141 	v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13))
    142 	v07 ^= v08
    143 	v07 = v07>>63 | v07<<1
    144 
    145 	v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04))
    146 	v14 ^= v03
    147 	v14 = v14>>32 | v14<<32
    148 	v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14))
    149 	v04 ^= v09
    150 	v04 = v04>>24 | v04<<40
    151 
    152 	v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04))
    153 	v14 ^= v03
    154 	v14 = v14>>16 | v14<<48
    155 	v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14))
    156 	v04 ^= v09
    157 	v04 = v04>>63 | v04<<1
    158 
    159 	*t00, *t01, *t02, *t03 = v00, v01, v02, v03
    160 	*t04, *t05, *t06, *t07 = v04, v05, v06, v07
    161 	*t08, *t09, *t10, *t11 = v08, v09, v10, v11
    162 	*t12, *t13, *t14, *t15 = v12, v13, v14, v15
    163 }