# include <asm/hwcap.h>
# include <sys/auxv.h>
# endif
+#elif defined(__OpenBSD__)
+# include <sys/sysctl.h>
+# include <machine/cpu.h>
+# include <machine/armreg.h>
#endif
#include "nettle-types.h"
= ((hwcap & (HWCAP_ASIMD | HWCAP_SHA1)) == (HWCAP_ASIMD | HWCAP_SHA1));
features->have_sha2
= ((hwcap & (HWCAP_ASIMD | HWCAP_SHA2)) == (HWCAP_ASIMD | HWCAP_SHA2));
+#elif defined(__OpenBSD__)
+ const int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
+ uint64_t isar0;
+ size_t len = sizeof(isar0);
+
+ if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) < 0)
+ return;
+ features->have_aes
+ = (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_BASE);
+ features->have_pmull
+ = (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL);
+ features->have_sha1
+ = (ID_AA64ISAR0_SHA1(isar0) >= ID_AA64ISAR0_SHA1_BASE);
+ features->have_sha2
+ = (ID_AA64ISAR0_SHA2(isar0) >= ID_AA64ISAR0_SHA2_BASE);
#endif
}
}