Hi Everyone,

ARMv8 has optional Crypto extensions, and they are available in A-53, A-57, 
etc. The Crypto extension collectively refers to AES, SAH1, SHA224 and 
SHA-256. To enable them, you compile with:

    export CXXFLAGS="... -march=armv8-a+crypto -mcpu=cortex-a53"

According to the ARM Cortex-A53 MPCore Processor 
(http://infocenter.arm.com/help/topic/com.arm.doc.ddi0500d/DDI0500D_cortex_a53_r0p2_trm.pdf),
 
the constituent parts can be selectively disabled. That is, AES could be 
disabled, or SHA-1 could be disabled, etc.

Testing for the features is not as easy as IA-32's CPUID because reading an 
ARM Machine Status Register (MSR) is a privileged operation. Attempting to 
read it results in a SIGILL. The best way I've found to determine features 
is runtime testing, and catching the SIGILL (Linux) and 
EXCEPTION_ILLEGAL_INSTRUCTION (Windows). Also see around line 260 of 
http://github.com/weidai11/cryptopp/blob/arm-neon/cpu.cpp#L259 .

I have not encountered a condition where AES is enabled, but SHA1 is 
disabled. However, iOS comes close because both NEON and Crypto extensions 
are available, but CRC32 extensions are not available. Its unclear what 
Microsoft is doing in Store 10 and Phone 10 because their 
production-released compilers do not currently support ARM-64.

My question is, should we collectively use "hasCrypto", or should we break 
them out and use "hasAES", "hasSHA1", etc?

Jeff

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to