Exemplo n.º 1
0
// generateBarriers creates the encoding barriers between rounds that compute ShiftRows and re-encodes data.
func generateBarriers(rs *random.Source, out *Construction, inputMask, outputMask, sr *matrix.Matrix) {
	// Generate the ShiftRows and re-encoding matrices.
	out.ShiftRows[0] = maskSwap(rs, 16, 0).Compose(*sr).Compose(*inputMask)

	for round := 1; round < 10; round++ {
		out.ShiftRows[round] = maskSwap(rs, 16, round).Compose(*sr).Compose(maskSwap(rs, 32, round-1))
	}

	// We need to apply a final matrix transformation to convert the double-level encoding to a block-level one.
	out.FinalMask = outputMask.Compose(maskSwap(rs, 32, 9))
}
Exemplo n.º 2
0
// SubByte is AES' S-box. It is a bijection.
func (constr *Construction) SubByte(e byte) byte {
	// AES S-Box
	m := matrix.Matrix{ // Linear component.
		matrix.Row{0xF1}, // 0b11110001
		matrix.Row{0xE3}, // 0b11100011
		matrix.Row{0xC7}, // 0b11000111
		matrix.Row{0x8F}, // 0b10001111
		matrix.Row{0x1F}, // 0b00011111
		matrix.Row{0x3E}, // 0b00111110
		matrix.Row{0x7C}, // 0b01111100
		matrix.Row{0xF8}, // 0b11111000
	}
	a := byte(0x63) // 0b01100011 - Affine component.

	return m.Mul(matrix.Row{byte(number.ByteFieldElem(e).Invert())})[0] ^ a
}
Exemplo n.º 3
0
// FindPermutation is called on the first affine layer. It returns the permutation matrix corresponding to the row
// permutation that has occured to the first layer.
func (al *affineLayer) findPermutation() matrix.Matrix {
	permed := (*al).BlockLinear.Forwards
	unpermed := matrix.Matrix{}

	for i := 0; i < 8; i++ {
		for pos := 0; pos < 16; pos++ {
			if h := permed[8*pos].Height(); 16*i <= h && h < 16*(i+1) {
				unpermed = append(unpermed, permed[8*pos:8*(pos+1)]...)
			}
		}
	}

	unpermed, _ = unpermed.Invert()
	perm := permed.Compose(unpermed)

	return perm
}
Exemplo n.º 4
0
// UnSubByte is the inverse of SubByte. It is a bijection.
func (constr *Construction) UnSubByte(e byte) byte {
	// AES Inverse S-Box
	m := matrix.Matrix{
		matrix.Row{0xA4},
		matrix.Row{0x49},
		matrix.Row{0x92},
		matrix.Row{0x25},
		matrix.Row{0x4a},
		matrix.Row{0x94},
		matrix.Row{0x29},
		matrix.Row{0x52},
	}
	a := byte(0x63)

	invVal := m.Mul(matrix.Row{e ^ a})[0]
	return byte(number.ByteFieldElem(invVal).Invert())
}
Exemplo n.º 5
0
// findMatrix finds an invertible matrix in a basis.
func findMatrix(basis []matrix.Row) matrix.Matrix {
	im := matrix.NewIncrementalMatrix(64)
	for _, row := range basis {
		im.Add(row)
	}

	size := im.Size()
	for i := 0; i < size; i++ {
		row := im.Row(i)
		cand := matrix.Matrix{}

		for _, v := range row {
			cand = append(cand, matrix.Row{v})
		}

		if _, ok := cand.Invert(); ok {
			return cand
		}
	}

	panic("Couldn't find an invertible matrix in the given basis!")
}
Exemplo n.º 6
0
var round = matrix.Matrix{
	matrix.Row{0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1},
	matrix.Row{0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3},
	matrix.Row{0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7},
	matrix.Row{0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f},
	matrix.Row{0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f},
	matrix.Row{0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e},
	matrix.Row{0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c},
	matrix.Row{0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8},
	matrix.Row{0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1},
	matrix.Row{0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3},
	matrix.Row{0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7},
	matrix.Row{0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f},
	matrix.Row{0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f},
	matrix.Row{0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e},
	matrix.Row{0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c},
	matrix.Row{0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8},
	matrix.Row{0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09},
	matrix.Row{0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea},
	matrix.Row{0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24},
	matrix.Row{0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0},
	matrix.Row{0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68},
	matrix.Row{0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21},
	matrix.Row{0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42},
	matrix.Row{0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84},
	matrix.Row{0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8},
	matrix.Row{0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09},
	matrix.Row{0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3},
	matrix.Row{0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f},
	matrix.Row{0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77},
	matrix.Row{0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f},
	matrix.Row{0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e},
	matrix.Row{0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c},
	matrix.Row{0x00, 0x00, 0x00, 0xf1, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xe3, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xc7, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x8f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x1f, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xf1, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x09, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xea, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xb0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x68, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x21, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xf8, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x09, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0xe3, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x3f, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x77, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x1f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x3e, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00},
	matrix.Row{0x00, 0x00, 0x00, 0x7c, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00},
	matrix.Row{0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00},
	matrix.Row{0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00},
	matrix.Row{0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf8, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x09, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xe3, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x3f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x77, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7c, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xc7, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x09, 0xf1, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xea, 0xe3, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x24, 0xc7, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x8f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x68, 0x1f, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x21, 0x3e, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x42, 0x7c, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x84, 0xf8, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x09, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x09, 0xea, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x24, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xb0, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x68, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x21, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x00, 0x00, 0x00},
	matrix.Row{0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x84, 0x00, 0x00, 0x00},
}