QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
intrinsics.h
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE:
5 * This software and all accompanying materials are the exclusive property of
6 * Quantum Resistant Cryptographic Solutions Corporation (QRCS). The intellectual
7 * and technical concepts contained herein are proprietary to QRCS and are
8 * protected under applicable Canadian, U.S., and international copyright,
9 * patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC ALGORITHMS AND IMPLEMENTATIONS:
12 * - This software includes implementations of cryptographic primitives and
13 * algorithms that are standardized or in the public domain, such as AES
14 * and SHA-3, which are not proprietary to QRCS.
15 * - This software also includes cryptographic primitives, constructions, and
16 * algorithms designed by QRCS, including but not limited to RCS, SCB, CSX, QMAC, and
17 * related components, which are proprietary to QRCS.
18 * - All source code, implementations, protocol compositions, optimizations,
19 * parameter selections, and engineering work contained in this software are
20 * original works of QRCS and are protected under this license.
21 *
22 * LICENSE AND USE RESTRICTIONS:
23 * - This software is licensed under the Quantum Resistant Cryptographic Solutions
24 * Public Research and Evaluation License (QRCS-PREL), 2025-2026.
25 * - Permission is granted solely for non-commercial evaluation, academic research,
26 * cryptographic analysis, interoperability testing, and feasibility assessment.
27 * - Commercial use, production deployment, commercial redistribution, or
28 * integration into products or services is strictly prohibited without a
29 * separate written license agreement executed with QRCS.
30 * - Licensing and authorized distribution are solely at the discretion of QRCS.
31 *
32 * EXPERIMENTAL CRYPTOGRAPHY NOTICE:
33 * Portions of this software may include experimental, novel, or evolving
34 * cryptographic designs. Use of this software is entirely at the user's risk.
35 *
36 * DISCLAIMER:
37 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38 * IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
39 * FOR A PARTICULAR PURPOSE, SECURITY, OR NON-INFRINGEMENT. QRCS DISCLAIMS ALL
40 * LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
41 * ARISING FROM THE USE OR MISUSE OF THIS SOFTWARE.
42 *
43 * FULL LICENSE:
44 * This software is subject to the Quantum Resistant Cryptographic Solutions
45 * Public Research and Evaluation License (QRCS-PREL), 2025-2026. The complete license terms
46 * are provided in the accompanying LICENSE file or at https://www.qrcscorp.ca.
47 *
48 * Written by: John G. Underhill
49 * Contact: contact@qrcscorp.ca
50 */
51
52#ifndef QSC_INTRINSICS_H
53#define QSC_INTRINSICS_H
54
55/* \cond NO_DOCUMENT */
56
71
72#include "qsccommon.h"
73
74/*
75 * Architecture families.
76 *
77 * QSC_SYSTEM_ARCH_IX86 is assumed to mean the x86 family used elsewhere in the
78 * code base. If qsccommon.h distinguishes 32-bit and 64-bit x86 separately,
79 * add the x64 macro to QSC_X86_FAMILY below as needed.
80 */
81#if defined(QSC_SYSTEM_ARCH_IX86)
82# define QSC_X86_FAMILY
83#endif
84
85#if defined(QSC_SYSTEM_ARCH_ARM) || defined(QSC_SYSTEM_ARCH_ARM64)
86# define QSC_ARM_FAMILY
87#endif
88
89#if defined(QSC_SYSTEM_ARCH_PPC)
90# define QSC_PPC_FAMILY
91#endif
92
93/*
94 * MSVC
95 *
96 * <intrin.h> is the MSVC umbrella for x86/x64 intrinsics.
97 * <arm_neon.h> provides ARM/ARM64 NEON intrinsics.
98 */
99#if defined(QSC_SYSTEM_COMPILER_MSC)
100
101# if defined(QSC_X86_FAMILY)
102# include <intrin.h>
103# endif
104
105# if defined(QSC_ARM_FAMILY)
106# include <arm_neon.h>
107# endif
108
109/*
110 * Intel C/C++
111 *
112 * ICC/ICX on x86/x64 uses immintrin.h.
113 * Do not include x86 intrinsic headers for non-x86 targets.
114 */
115#elif defined(QSC_SYSTEM_COMPILER_INTEL)
116
117# if defined(QSC_X86_FAMILY)
118# include <immintrin.h>
119# endif
120
121# if defined(QSC_ARM_FAMILY) && defined(QSC_SYSTEM_HAS_ARM_NEON)
122# include <arm_neon.h>
123# endif
124
125/*
126 * GCC / Clang / GCC-compatible front-ends
127 *
128 * Use x86intrin.h only for x86-family targets.
129 * Use ARM/other vector headers only for those targets.
130 */
131#elif defined(QSC_SYSTEM_COMPILER_GCC) || defined(QSC_SYSTEM_COMPILER_CLANG)
132
133# if defined(QSC_X86_FAMILY)
134# include <x86intrin.h>
135# endif
136
137# if defined(QSC_ARM_FAMILY) && defined(QSC_SYSTEM_HAS_ARM_NEON)
138# include <arm_neon.h>
139# endif
140
141# if defined(QSC_ARM_FAMILY) && defined(QSC_SYSTEM_HAS_ARM_SVE)
142# include <arm_sve.h>
143# endif
144
145# if defined(QSC_SYSTEM_HAS_RVV)
146# include <riscv_vector.h>
147# endif
148
149# if defined(QSC_PPC_FAMILY)
150# include <altivec.h>
151# undef vector
152# undef pixel
153# undef bool
154# endif
155
156/*
157 * Arm Compiler
158 */
159#elif defined(QSC_SYSTEM_COMPILER_ARM)
160
161# if defined(QSC_ARM_FAMILY)
162# include <arm_neon.h>
163# endif
164
165/*
166 * IBM XL C / XL C++
167 */
168#elif defined(QSC_SYSTEM_COMPILER_IBM)
169
170# if defined(QSC_PPC_FAMILY)
171# include <altivec.h>
172# undef vector
173# undef pixel
174# undef bool
175# endif
176
177#endif
178
179/*
180 * Internal helper cleanup.
181 */
182#if defined(QSC_X86_FAMILY)
183# undef QSC_X86_FAMILY
184#endif
185
186#if defined(QSC_ARM_FAMILY)
187# undef QSC_ARM_FAMILY
188#endif
189
190#if defined(QSC_PPC_FAMILY)
191# undef QSC_PPC_FAMILY
192#endif
193
194/* \endcond */
195
196#endif
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.