mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-08 19:29:17 +08:00

* authz service init Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * authz service init Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add proto Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add proto Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * authorize method Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add casbib Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add casbib Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add casbib Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add policy grpc Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add policy grpc Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix db connection, add environment variables, docker-compose Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add model.conf policy Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add model.conf policy Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding tests, and token for auth Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix auth service Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes, add model conf env var Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove users grpc for now Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix error Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * some cosmetics Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolvin minor comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change endpoint, add file to fix test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix docker env Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix alignment and path for model.conf Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com>
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
// +build !noasm
|
|
|
|
package meow
|
|
|
|
// cpu contains feature flags relevant to selecting a Meow implementation.
|
|
var cpu struct {
|
|
HasOSXSAVE bool
|
|
HasAES bool
|
|
HasVAES bool
|
|
HasAVX bool
|
|
HasAVX512F bool
|
|
HasAVX512VL bool
|
|
HasAVX512DQ bool
|
|
EnabledAVX bool
|
|
EnabledAVX512 bool
|
|
}
|
|
|
|
func init() {
|
|
determineCPUFeatures()
|
|
|
|
switch {
|
|
case cpu.HasVAES && cpu.HasAVX512F && cpu.EnabledAVX512:
|
|
implementation = "vaes-512"
|
|
checksum = checksum512
|
|
blocks = blocks512
|
|
finish = finish128
|
|
case cpu.HasAES && cpu.HasAVX && cpu.EnabledAVX:
|
|
// AVX required for VEX-encoded AES instruction, which allows non-aligned memory addresses.
|
|
implementation = "aes-ni"
|
|
checksum = checksum128
|
|
blocks = blocks128
|
|
finish = finish128
|
|
}
|
|
}
|
|
|
|
// AES-NI implementation.
|
|
func checksum128(seed uint64, dst, src []byte)
|
|
func blocks128(s, src []byte)
|
|
func finish128(seed uint64, s, dst, rem, trail []byte, length uint64)
|
|
|
|
// VAES-256 implementation.
|
|
func checksum256(seed uint64, dst, src []byte)
|
|
func blocks256(s, src []byte)
|
|
|
|
// VAES-512 implementation.
|
|
func checksum512(seed uint64, dst, src []byte)
|
|
func blocks512(s, src []byte)
|
|
|
|
// determineCPUFeatures populates flags in global cpu variable by querying CPUID.
|
|
func determineCPUFeatures() {
|
|
maxID, _, _, _ := cpuid(0, 0)
|
|
if maxID < 1 {
|
|
return
|
|
}
|
|
|
|
_, _, ecx1, _ := cpuid(1, 0)
|
|
cpu.HasOSXSAVE = isSet(ecx1, 27)
|
|
cpu.HasAES = isSet(ecx1, 25)
|
|
cpu.HasAVX = isSet(ecx1, 28)
|
|
|
|
if cpu.HasOSXSAVE {
|
|
eax, _ := xgetbv()
|
|
cpu.EnabledAVX = (eax & 0x6) == 0x6
|
|
cpu.EnabledAVX512 = (eax & 0xe0) == 0xe0
|
|
}
|
|
|
|
if maxID < 7 {
|
|
return
|
|
}
|
|
_, ebx7, ecx7, _ := cpuid(7, 0)
|
|
cpu.HasVAES = isSet(ecx7, 9)
|
|
cpu.HasAVX512F = isSet(ebx7, 16)
|
|
cpu.HasAVX512VL = isSet(ebx7, 31)
|
|
cpu.HasAVX512DQ = isSet(ebx7, 17)
|
|
}
|
|
|
|
// cpuid executes the CPUID instruction with the given EAX, ECX inputs.
|
|
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
|
|
|
|
// xgetbv executes the XGETBV instruction.
|
|
func xgetbv() (eax, edx uint32)
|
|
|
|
// isSet determines if bit i of x is set.
|
|
func isSet(x uint32, i uint) bool {
|
|
return (x>>i)&1 == 1
|
|
}
|