46 lines
2.4 KiB
Go
46 lines
2.4 KiB
Go
package encryption
|
|
|
|
import (
|
|
"encoding/binary"
|
|
)
|
|
|
|
const MangleKeyBlockSize = 8
|
|
|
|
const MangleKeyDataSize = 4 * 4
|
|
|
|
const MangleKeyRounds = 48
|
|
|
|
// MangleKeyData Key entries of 128-bit length
|
|
type MangleKeyData [MangleKeyDataSize]byte
|
|
|
|
func (d MangleKeyData) RoundKey(round int) uint32 {
|
|
return binary.LittleEndian.Uint32(d[(round&3)<<2:])
|
|
}
|
|
|
|
type MangleKeyTable [8]MangleKeyData
|
|
|
|
var HardcodedMangleTable = MangleKeyTable{
|
|
/* Slot 0 is used by OuterMangleKeyOffsetFlash for outer key mangle */
|
|
/*0x00*/ {0x6f, 0xc0, 0x39, 0x05, 0x01, 0x58, 0x23, 0x3a, 0x80, 0xda, 0xb4, 0x1b, 0x65, 0x6a, 0x91, 0x44},
|
|
/* Slot 1 is used by OuterMangleKeyOffsetDeviceId for outer key mangle */
|
|
/*0x01*/ {0x35, 0xcb, 0x01, 0x5b, 0xfb, 0xa4, 0x98, 0xb4, 0x82, 0x6d, 0x48, 0xe9, 0x10, 0x50, 0x94, 0xf4},
|
|
/*0x02*/ {0xec, 0xbc, 0xba, 0xe8, 0xf8, 0x3d, 0xa7, 0x2a, 0x9c, 0xf7, 0xf9, 0x4c, 0xe7, 0x73, 0x6d, 0x88},
|
|
/*0x03*/ {0x03, 0x35, 0x48, 0x25, 0xaf, 0xa8, 0xa0, 0xb1, 0xb2, 0x45, 0xa7, 0x24, 0x39, 0x13, 0xe2, 0xf5},
|
|
/*0x04*/ {0x88, 0x90, 0xd8, 0x42, 0xaf, 0x79, 0xa3, 0x37, 0xe0, 0x89, 0x26, 0x42, 0xe9, 0x39, 0x62, 0x63},
|
|
/*0x05*/ {0xf0, 0x61, 0xd0, 0xab, 0x79, 0x05, 0x71, 0x7f, 0x51, 0x6b, 0x62, 0xbd, 0x15, 0x2c, 0xf2, 0x2a},
|
|
/* Slot 6 is used by OuterMangleKeyOffsetMemory for outer key mangle */
|
|
/*0x06*/ {0x06, 0xbc, 0x41, 0xb3, 0x74, 0x46, 0x6e, 0x6e, 0x01, 0x7b, 0xeb, 0xb3, 0x32, 0x5b, 0x96, 0xf1},
|
|
/*0x07*/ {0x6f, 0x3e, 0xf3, 0x52, 0xf9, 0xa2, 0x69, 0x4d, 0xc4, 0x77, 0xab, 0x77, 0x08, 0x45, 0x8f, 0x46},
|
|
}
|
|
|
|
var AlternateMangleTable = MangleKeyTable{
|
|
/*0x00*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x01*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x02*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x03*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x04*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x05*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x06*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
/*0x07*/ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
}
|