73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package keys
|
||
|
||
import (
|
||
"encoding/binary"
|
||
"golang.org/x/crypto/blake2b"
|
||
)
|
||
|
||
var AesGenerator1R_Keys = keyDataInitialize_4_16("RandomX AesGenerator1R keys")
|
||
var AesGenerator4R_Keys = keyDataInitialize_8_16("RandomX AesGenerator4R keys 0-3", "RandomX AesGenerator4R keys 4-7")
|
||
var AesHash1R_State = keyDataInitialize_4_16("RandomX AesHash1R state")
|
||
var AesHash1R_XKeys = keyDataInitialize_2_16("RandomX AesHash1R xkeys")
|
||
|
||
var SuperScalar_Constants = keyDataInitialize_8_64("RandomX SuperScalarHash initialize")
|
||
|
||
func keyDataInitialize_8_16(input1, input2 string) (out [8][4]uint32) {
|
||
data := keyDataInitialize512(input1)
|
||
for i := range out[:4] {
|
||
for j := range out[i] {
|
||
out[i][j] = binary.LittleEndian.Uint32(data[i*16+j*4:])
|
||
}
|
||
}
|
||
data2 := keyDataInitialize512(input2)
|
||
for i := range out[4:] {
|
||
for j := range out[i+4] {
|
||
out[i+4][j] = binary.LittleEndian.Uint32(data2[i*16+j*4:])
|
||
}
|
||
}
|
||
return out
|
||
}
|
||
|
||
func keyDataInitialize_4_16(input string) (out [4][4]uint32) {
|
||
data := keyDataInitialize512(input)
|
||
for i := range out {
|
||
for j := range out[i] {
|
||
out[i][j] = binary.LittleEndian.Uint32(data[i*16+j*4:])
|
||
}
|
||
}
|
||
return out
|
||
}
|
||
|
||
func keyDataInitialize_2_16(input string) (out [2][4]uint32) {
|
||
data := keyDataInitialize256(input)
|
||
for i := range out {
|
||
for j := range out[i] {
|
||
out[i][j] = binary.LittleEndian.Uint32(data[i*16+j*4:])
|
||
}
|
||
}
|
||
return out
|
||
}
|
||
|
||
func keyDataInitialize_8_64(input string) (out [8]uint64) {
|
||
data := keyDataInitialize512(input)
|
||
for i := range out[1:] {
|
||
out[i+1] = binary.LittleEndian.Uint64(data[8+i*8:])
|
||
}
|
||
|
||
// Multiplier was selected because it gives an excellent distribution for linear generators (D. Knuth: The Art of Computer Programming – Vol 2.)
|
||
out[0] = 6364136223846793005
|
||
// Additionally, the constant for r1 was increased by 2^33+700
|
||
out[1] += (1 << 33) + 700
|
||
// and the constant for r3 was increased by 2^14
|
||
out[3] += 1 << 14
|
||
|
||
return out
|
||
}
|
||
|
||
func keyDataInitialize512(input string) [blake2b.Size]byte {
|
||
return blake2b.Sum512([]byte(input))
|
||
}
|
||
|
||
func keyDataInitialize256(input string) [blake2b.Size256]byte {
|
||
return blake2b.Sum256([]byte(input))
|
||
}
|