init: v1.0.0
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
package experiment
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"xdx.jelly/xgcl/grand"
|
||||
)
|
||||
|
||||
func TestAes(t *testing.T) {
|
||||
|
||||
// Output the aes sbox
|
||||
for i := 0; i < 16; i++ {
|
||||
for j := 0; j < 16; j++ {
|
||||
in := byte(i<<4 + j)
|
||||
fmt.Printf("0x%02x, ", aesSBox(in))
|
||||
}
|
||||
fmt.Println("")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAesni(t *testing.T) {
|
||||
// fmt.Printf("%x\n", rsh(0x89ABCDEF, 16))
|
||||
// Original data: 0x8899aabbccddeeff0123456789abcdef
|
||||
// Encoded data: 0x4b04f98cf4c860f8b6dd7df25d7ab320
|
||||
a := []uint32{0x89ABCDEF, 0x01234567, 0xCCDDEEFF, 0x8899AABB}
|
||||
key := []uint32{0x99BBDDFF, 0x11335577, 0x88AACCEE, 0x00224466}
|
||||
|
||||
res := aesni(a, key)
|
||||
fmt.Printf("%x\n", res)
|
||||
}
|
||||
func TestSm4(t *testing.T) {
|
||||
for i := 0; i < 16; i++ {
|
||||
for j := 0; j < 16; j++ {
|
||||
in := byte(i<<4 + j)
|
||||
fmt.Printf("0x%02x ", sm4SBox(in))
|
||||
}
|
||||
fmt.Println("")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMul(t *testing.T) {
|
||||
// v1 := []int{0, 0, 0, 0, 0, 0, 0, 0, 1} // x^8
|
||||
// v2 := []int{1, 1} // 1 + x^2
|
||||
// fmt.Println(add(v1, v2))
|
||||
fmt.Println(aesField.Mul(NewFFE(0x11), NewFFE(0x11)))
|
||||
fmt.Println(aesField.Add(NewFFE(0x11), NewFFE(0x11)))
|
||||
|
||||
// fmt.Println(invert(v2))
|
||||
}
|
||||
|
||||
func TestXor(t *testing.T) {
|
||||
for {
|
||||
key := make([]byte, 16)
|
||||
rand.Read(key)
|
||||
p1 := make([]byte, 16)
|
||||
AesRound(p1, key)
|
||||
|
||||
p2 := make([]byte, 16)
|
||||
p2[0] = 1
|
||||
AesRound(p2, key)
|
||||
|
||||
fmt.Printf("%02X\n", p1)
|
||||
fmt.Printf("%02X\n", p2)
|
||||
fmt.Printf("s4+s'4 = %02X\n", p1[4]^p2[4])
|
||||
for i := 0; i < 16; i++ {
|
||||
if p1[i] != p2[i] {
|
||||
fmt.Printf("%d,", i)
|
||||
}
|
||||
}
|
||||
if p1[0]^p2[0] == 2 {
|
||||
fmt.Printf("key[0] = %02X\n", key[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPossibleKey(t *testing.T) {
|
||||
for i := 0; i < 256; i++ {
|
||||
key := make([]byte, 16)
|
||||
key[0] = byte(i)
|
||||
p1 := make([]byte, 16)
|
||||
AesRound(p1, key)
|
||||
|
||||
p2 := make([]byte, 16)
|
||||
p2[0] = 1
|
||||
AesRound(p2, key)
|
||||
fmt.Println(key[0], p2[0], p1[0], p2[0]+p1[0])
|
||||
if p1[0]+p2[0] == 2 {
|
||||
fmt.Printf("key[0] = %02X\n", key[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommutation(t *testing.T) {
|
||||
s := &ffe{}
|
||||
copy(s.v[:], grand.GetRandom(8))
|
||||
for i := 0; i < 8; i++ {
|
||||
s.v[i] = s.v[i] & 1
|
||||
}
|
||||
fmt.Println(s)
|
||||
r1 := mapToAesField(sm4Field.Invert(s))
|
||||
r2 := aesField.Invert(mapToAesField(s))
|
||||
|
||||
fmt.Println(r1)
|
||||
fmt.Println(r2)
|
||||
}
|
||||
|
||||
var C1 = &ffe{v: [8]byte{0, 1, 1, 1, 1, 1, 0, 0}} // 0x3e
|
||||
|
||||
var C2 = &ffe{v: [8]byte{0, 0, 1, 1, 0, 1, 1, 0}} // 0x6c
|
||||
|
||||
func TestComputeAffine(t *testing.T) {
|
||||
for i := 0; i < 255; i++ {
|
||||
s := NewFFE(byte(i))
|
||||
|
||||
r1 := sm4SBox(s.Byte())
|
||||
|
||||
r2 := Transform(M1, s)
|
||||
r2 = aesField.Add(r2, C1)
|
||||
r2 = NewFFE(aesSBox(r2.Byte()))
|
||||
r2 = Transform(M2, r2)
|
||||
r2 = aesField.Add(r2, C2)
|
||||
if r1 != r2.Byte() {
|
||||
t.Fatal("s=", s, "; r1=", r1, "; r2=", r2)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user