1*f6210541SRobert Clausecker /*- 2*f6210541SRobert Clausecker * Copyright (c) 2024 Robert Clausecker <fuz@freebsd.org> 3*f6210541SRobert Clausecker * 4*f6210541SRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause 5*f6210541SRobert Clausecker */ 6*f6210541SRobert Clausecker 7*f6210541SRobert Clausecker #include <machine/ifunc.h> 8*f6210541SRobert Clausecker #include <sha.h> 9*f6210541SRobert Clausecker #include <sys/auxv.h> 10*f6210541SRobert Clausecker 11*f6210541SRobert Clausecker extern void _libmd_sha1block_scalar(SHA1_CTX *, const void *, size_t); 12*f6210541SRobert Clausecker extern void _libmd_sha1block_sha1(SHA1_CTX *, const void *, size_t); 13*f6210541SRobert Clausecker 14*f6210541SRobert Clausecker DEFINE_IFUNC(, void, sha1_block, (SHA1_CTX *, const void *, size_t)) 15*f6210541SRobert Clausecker { 16*f6210541SRobert Clausecker unsigned long hwcap = 0; 17*f6210541SRobert Clausecker 18*f6210541SRobert Clausecker elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap)); 19*f6210541SRobert Clausecker 20*f6210541SRobert Clausecker if (hwcap & HWCAP_SHA1) 21*f6210541SRobert Clausecker return (_libmd_sha1block_sha1); 22*f6210541SRobert Clausecker else 23*f6210541SRobert Clausecker return (_libmd_sha1block_scalar); 24*f6210541SRobert Clausecker } 25