init: v1.0.0
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package experiment
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
var aesA = [][]byte{
|
||||
{1, 0, 0, 0, 1, 1, 1, 1},
|
||||
{1, 1, 0, 0, 0, 1, 1, 1},
|
||||
{1, 1, 1, 0, 0, 0, 1, 1},
|
||||
{1, 1, 1, 1, 0, 0, 0, 1},
|
||||
{1, 1, 1, 1, 1, 0, 0, 0},
|
||||
{0, 1, 1, 1, 1, 1, 0, 0},
|
||||
{0, 0, 1, 1, 1, 1, 1, 0},
|
||||
{0, 0, 0, 1, 1, 1, 1, 1},
|
||||
}
|
||||
|
||||
var aesC = &ffe{
|
||||
v: [8]byte{1, 1, 0, 0, 0, 1, 1, 0},
|
||||
}
|
||||
|
||||
func aesSBox(in byte) byte {
|
||||
r := NewFFE(in)
|
||||
r = aesField.Invert(r)
|
||||
r = Transform(aesA, r)
|
||||
r = aesField.Add(r, aesC)
|
||||
return r.Byte()
|
||||
}
|
||||
|
||||
func toBytes(x []uint32) []byte {
|
||||
data := make([]byte, 16)
|
||||
|
||||
binary.LittleEndian.PutUint32(data[0:], x[0])
|
||||
binary.LittleEndian.PutUint32(data[4:], x[1])
|
||||
binary.LittleEndian.PutUint32(data[8:], x[2])
|
||||
binary.LittleEndian.PutUint32(data[12:], x[3])
|
||||
return data
|
||||
}
|
||||
|
||||
func toUints(b []byte) []uint32 {
|
||||
r := make([]uint32, 4)
|
||||
r[0] = binary.LittleEndian.Uint32(b[0:])
|
||||
r[1] = binary.LittleEndian.Uint32(b[4:])
|
||||
r[2] = binary.LittleEndian.Uint32(b[8:])
|
||||
r[3] = binary.LittleEndian.Uint32(b[12:])
|
||||
return r
|
||||
}
|
||||
|
||||
// 模拟aesni指令
|
||||
// 注意aes是列优先的。
|
||||
func aesni(a, key []uint32) []uint32 {
|
||||
|
||||
aBuf := toBytes(a)
|
||||
kBuf := toBytes(key)
|
||||
|
||||
AesLastRound(aBuf, kBuf)
|
||||
|
||||
return toUints(aBuf)
|
||||
}
|
||||
Reference in New Issue
Block a user