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
qsccommon.h
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
QSC
intrinsics.h
Generated by
1.14.0