From 004ce264d28299f167c063ec06306b4bce0688b7 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:18:47 -0700 Subject: [PATCH 01/18] OpensslPkg/BaseCryptLib: Migrate CryptHmac.c from HMAC_CTX to EVP_MAC_CTX Replace deprecated HMAC_CTX_new/HMAC_Init_ex/HMAC_Update/HMAC_Final/HMAC_CTX_free with the OpenSSL 3.x EVP_MAC_CTX provider API. Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Hmac/CryptHmac.c | 247 +++++++++++++----- 1 file changed, 187 insertions(+), 60 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Hmac/CryptHmac.c b/OpensslPkg/Library/BaseCryptLib/Hmac/CryptHmac.c index 1ae33b670..c51c66399 100644 --- a/OpensslPkg/Library/BaseCryptLib/Hmac/CryptHmac.c +++ b/OpensslPkg/Library/BaseCryptLib/Hmac/CryptHmac.c @@ -7,13 +7,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "InternalCryptLib.h" -#include +// MU_CHANGE [BEGIN] +#include +#include +#include + +// +// Wrapper structure to hold EVP_MAC_CTX so that HmacMdDuplicate can +// replace the inner context while preserving the outer pointer. +// +typedef struct { + EVP_MAC_CTX *Ctx; +} HMAC_CTX_WRAPPER; +// MU_CHANGE [END] /** - Allocates and initializes one HMAC_CTX context for subsequent HMAC-MD use. + Allocates and initializes one EVP_MAC_CTX context for subsequent HMAC-MD use. // MU_CHANGE - @return Pointer to the HMAC_CTX context that has been initialized. - If the allocations fails, HmacMdNew() returns NULL. + // MU_CHANGE [BEGIN] + @return Pointer to the HMAC_CTX_WRAPPER that has been initialized. + If the allocation fails, HmacMdNew() returns NULL. + // MU_CHANGE [END] **/ STATIC @@ -22,16 +36,48 @@ HmacMdNew ( VOID ) { + // MU_CHANGE [BEGIN] + EVP_MAC *Mac; + HMAC_CTX_WRAPPER *Wrapper; + + // + // Fetch the HMAC algorithm from the default provider. + // MU_CHANGE [END] + // + // MU_CHANGE [BEGIN] + Mac = EVP_MAC_fetch (NULL, "HMAC", NULL); + if (Mac == NULL) { + return NULL; + } + + Wrapper = AllocateZeroPool (sizeof (HMAC_CTX_WRAPPER)); + if (Wrapper == NULL) { + EVP_MAC_free (Mac); + return NULL; + } + + // MU_CHANGE [END] // - // Allocates & Initializes HMAC_CTX Context by OpenSSL HMAC_CTX_new() + // MU_CHANGE [BEGIN] + // Allocate EVP_MAC_CTX. The context holds its own reference to the + // EVP_MAC object, so we can free it immediately after ctx creation. // - return (VOID *)HMAC_CTX_new (); + Wrapper->Ctx = EVP_MAC_CTX_new (Mac); + EVP_MAC_free (Mac); + + if (Wrapper->Ctx == NULL) { + FreePool (Wrapper); + return NULL; + } + + return (VOID *)Wrapper; + // MU_CHANGE [END] } /** - Release the specified HMAC_CTX context. + Release the specified HMAC_CTX_WRAPPER context. // MU_CHANGE - @param[in] HmacMdCtx Pointer to the HMAC_CTX context to be released. + @param[in] HmacMdCtx Pointer to the HMAC_CTX_WRAPPER context to be released. // MU_CHANGE **/ STATIC @@ -40,10 +86,16 @@ HmacMdFree ( IN VOID *HmacMdCtx ) { - // - // Free OpenSSL HMAC_CTX Context - // - HMAC_CTX_free ((HMAC_CTX *)HmacMdCtx); + // MU_CHANGE [BEGIN] + HMAC_CTX_WRAPPER *Wrapper; + + if (HmacMdCtx != NULL) { + Wrapper = (HMAC_CTX_WRAPPER *)HmacMdCtx; + EVP_MAC_CTX_free (Wrapper->Ctx); + FreePool (Wrapper); + } + + // MU_CHANGE [END] } /** @@ -52,7 +104,7 @@ HmacMdFree ( If HmacMdContext is NULL, then return FALSE. - @param[in] Md Message Digest. + @param[in] MdName Digest algorithm name (e.g. "SHA256"). // MU_CHANGE @param[out] HmacMdContext Pointer to HMAC-MD context. @param[in] Key Pointer to the user-supplied key. @param[in] KeySize Key size in bytes. @@ -64,12 +116,19 @@ HmacMdFree ( STATIC BOOLEAN HmacMdSetKey ( - IN CONST EVP_MD *Md, - OUT VOID *HmacMdContext, - IN CONST UINT8 *Key, - IN UINTN KeySize + // MU_CHANGE [BEGIN] + IN CONST CHAR8 *MdName, + OUT VOID *HmacMdContext, + IN CONST UINT8 *Key, + IN UINTN KeySize + // MU_CHANGE [END] ) { + // MU_CHANGE [BEGIN] + HMAC_CTX_WRAPPER *Wrapper; + OSSL_PARAM Params[2]; + + // MU_CHANGE [END] // // Check input parameters. // @@ -77,7 +136,18 @@ HmacMdSetKey ( return FALSE; } - if (HMAC_Init_ex ((HMAC_CTX *)HmacMdContext, Key, (UINT32)KeySize, Md, NULL) != 1) { + // MU_CHANGE [BEGIN] + Wrapper = (HMAC_CTX_WRAPPER *)HmacMdContext; + + Params[0] = OSSL_PARAM_construct_utf8_string ( + OSSL_MAC_PARAM_DIGEST, + (char *)MdName, + 0 + ); + Params[1] = OSSL_PARAM_construct_end (); + + if (EVP_MAC_init (Wrapper->Ctx, Key, (size_t)KeySize, Params) != 1) { + // MU_CHANGE [END] return FALSE; } @@ -104,6 +174,12 @@ HmacMdDuplicate ( OUT VOID *NewHmacMdContext ) { + // MU_CHANGE [BEGIN] + HMAC_CTX_WRAPPER *SrcWrapper; + HMAC_CTX_WRAPPER *DstWrapper; + EVP_MAC_CTX *NewCtx; + + // MU_CHANGE [END] // // Check input parameters. // @@ -111,10 +187,24 @@ HmacMdDuplicate ( return FALSE; } - if (HMAC_CTX_copy ((HMAC_CTX *)NewHmacMdContext, (HMAC_CTX *)HmacMdContext) != 1) { + // MU_CHANGE [BEGIN] + SrcWrapper = (HMAC_CTX_WRAPPER *)HmacMdContext; + DstWrapper = (HMAC_CTX_WRAPPER *)NewHmacMdContext; + + NewCtx = EVP_MAC_CTX_dup (SrcWrapper->Ctx); + if (NewCtx == NULL) { + // MU_CHANGE [END] return FALSE; } + // MU_CHANGE [BEGIN] + // + // Replace the destination's inner context with the duplicated one. + // + EVP_MAC_CTX_free (DstWrapper->Ctx); + DstWrapper->Ctx = NewCtx; + + // MU_CHANGE [END] return TRUE; } @@ -144,6 +234,10 @@ HmacMdUpdate ( IN UINTN DataSize ) { + // MU_CHANGE [BEGIN] + HMAC_CTX_WRAPPER *Wrapper; + + // MU_CHANGE [END] // // Check input parameters. // @@ -158,10 +252,15 @@ HmacMdUpdate ( return FALSE; } + // MU_CHANGE [BEGIN] + Wrapper = (HMAC_CTX_WRAPPER *)HmacMdContext; + + // MU_CHANGE [END] // // OpenSSL HMAC-MD digest update // - if (HMAC_Update ((HMAC_CTX *)HmacMdContext, Data, DataSize) != 1) { + if (EVP_MAC_update (Wrapper->Ctx, Data, DataSize) != 1) { + // MU_CHANGE return FALSE; } @@ -195,7 +294,12 @@ HmacMdFinal ( OUT UINT8 *HmacValue ) { - UINT32 Length; + // MU_CHANGE [BEGIN] + HMAC_CTX_WRAPPER *Wrapper; + size_t MacSize; + size_t Length; + + // MU_CHANGE [END] // // Check input parameters. @@ -204,14 +308,17 @@ HmacMdFinal ( return FALSE; } + // MU_CHANGE [BEGIN] + Wrapper = (HMAC_CTX_WRAPPER *)HmacMdContext; + + // MU_CHANGE [END] // // OpenSSL HMAC-MD digest finalization // - if (HMAC_Final ((HMAC_CTX *)HmacMdContext, HmacValue, &Length) != 1) { - return FALSE; - } - - if (HMAC_CTX_reset ((HMAC_CTX *)HmacMdContext) != 1) { + // MU_CHANGE [BEGIN] + MacSize = EVP_MAC_CTX_get_mac_size (Wrapper->Ctx); + if (EVP_MAC_final (Wrapper->Ctx, HmacValue, &Length, MacSize) != 1) { + // MU_CHANGE [END] return FALSE; } @@ -226,7 +333,7 @@ HmacMdFinal ( If this interface is not supported, then return FALSE. - @param[in] Md Message Digest. + @param[in] MdName Digest algorithm name (e.g. "SHA256"). // MU_CHANGE @param[in] Data Pointer to the buffer containing the data to be digested. @param[in] DataSize Size of Data buffer in bytes. @param[in] Key Pointer to the user-supplied key. @@ -242,53 +349,73 @@ HmacMdFinal ( STATIC BOOLEAN HmacMdAll ( - IN CONST EVP_MD *Md, - IN CONST VOID *Data, - IN UINTN DataSize, - IN CONST UINT8 *Key, - IN UINTN KeySize, - OUT UINT8 *HmacValue + // MU_CHANGE [BEGIN] + IN CONST CHAR8 *MdName, + IN CONST VOID *Data, + IN UINTN DataSize, + IN CONST UINT8 *Key, + IN UINTN KeySize, + OUT UINT8 *HmacValue + // MU_CHANGE [END] ) { - UINT32 Length; - HMAC_CTX *Ctx; - BOOLEAN RetVal; + // MU_CHANGE [BEGIN] + EVP_MAC *Mac; + EVP_MAC_CTX *Ctx; + OSSL_PARAM Params[2]; + size_t MacSize; + size_t Length; + BOOLEAN RetVal; + + Mac = EVP_MAC_fetch (NULL, "HMAC", NULL); + if (Mac == NULL) { + return FALSE; + } + + // MU_CHANGE [END] - Ctx = HMAC_CTX_new (); + // MU_CHANGE [BEGIN] + Ctx = EVP_MAC_CTX_new (Mac); + EVP_MAC_free (Mac); + // MU_CHANGE [END] if (Ctx == NULL) { return FALSE; } - RetVal = (BOOLEAN)HMAC_CTX_reset (Ctx); - if (!RetVal) { - goto Done; - } + // MU_CHANGE [BEGIN] + Params[0] = OSSL_PARAM_construct_utf8_string ( + OSSL_MAC_PARAM_DIGEST, + (char *)MdName, + 0 + ); + Params[1] = OSSL_PARAM_construct_end (); + // MU_CHANGE [END] - RetVal = (BOOLEAN)HMAC_Init_ex (Ctx, Key, (UINT32)KeySize, Md, NULL); + RetVal = (BOOLEAN)(EVP_MAC_init (Ctx, Key, (size_t)KeySize, Params) == 1); // MU_CHANGE if (!RetVal) { goto Done; } - RetVal = (BOOLEAN)HMAC_Update (Ctx, Data, DataSize); + RetVal = (BOOLEAN)(EVP_MAC_update (Ctx, Data, DataSize) == 1); // MU_CHANGE if (!RetVal) { goto Done; } - RetVal = (BOOLEAN)HMAC_Final (Ctx, HmacValue, &Length); - if (!RetVal) { - goto Done; - } + // MU_CHANGE [BEGIN] + MacSize = EVP_MAC_CTX_get_mac_size (Ctx); + RetVal = (BOOLEAN)(EVP_MAC_final (Ctx, HmacValue, &Length, MacSize) == 1); + // MU_CHANGE [END] Done: - HMAC_CTX_free (Ctx); + EVP_MAC_CTX_free (Ctx); // MU_CHANGE return RetVal; } /** - Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA256 use. + Allocates and initializes one HMAC context for subsequent HMAC-SHA256 use. // MU_CHANGE - @return Pointer to the HMAC_CTX context that has been initialized. + @return Pointer to the HMAC context that has been initialized. // MU_CHANGE If the allocations fails, HmacSha256New() returns NULL. **/ @@ -302,9 +429,9 @@ HmacSha256New ( } /** - Release the specified HMAC_CTX context. + Release the specified HMAC context. // MU_CHANGE - @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be released. + @param[in] HmacSha256Ctx Pointer to the HMAC context to be released. // MU_CHANGE **/ VOID @@ -338,7 +465,7 @@ HmacSha256SetKey ( IN UINTN KeySize ) { - return HmacMdSetKey (EVP_sha256 (), HmacSha256Context, Key, KeySize); + return HmacMdSetKey ("SHA256", HmacSha256Context, Key, KeySize); // MU_CHANGE } /** @@ -453,13 +580,13 @@ HmacSha256All ( OUT UINT8 *HmacValue ) { - return HmacMdAll (EVP_sha256 (), Data, DataSize, Key, KeySize, HmacValue); + return HmacMdAll ("SHA256", Data, DataSize, Key, KeySize, HmacValue); // MU_CHANGE } /** - Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA384 use. + Allocates and initializes one HMAC context for subsequent HMAC-SHA384 use. // MU_CHANGE - @return Pointer to the HMAC_CTX context that has been initialized. + @return Pointer to the HMAC context that has been initialized. // MU_CHANGE If the allocations fails, HmacSha384New() returns NULL. **/ @@ -473,9 +600,9 @@ HmacSha384New ( } /** - Release the specified HMAC_CTX context. + Release the specified HMAC context. // MU_CHANGE - @param[in] HmacSha384Ctx Pointer to the HMAC_CTX context to be released. + @param[in] HmacSha384Ctx Pointer to the HMAC context to be released. // MU_CHANGE **/ VOID @@ -511,7 +638,7 @@ HmacSha384SetKey ( IN UINTN KeySize ) { - return HmacMdSetKey (EVP_sha384 (), HmacSha384Context, Key, KeySize); + return HmacMdSetKey ("SHA384", HmacSha384Context, Key, KeySize); // MU_CHANGE } /** @@ -632,5 +759,5 @@ HmacSha384All ( OUT UINT8 *HmacValue ) { - return HmacMdAll (EVP_sha384 (), Data, DataSize, Key, KeySize, HmacValue); + return HmacMdAll ("SHA384", Data, DataSize, Key, KeySize, HmacValue); // MU_CHANGE } From 8abd3786fe0a8af4d6c2ce91cefc06bba49f8f00 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:18:56 -0700 Subject: [PATCH 02/18] OpensslPkg/BaseCryptLib: Migrate RSA key context to EVP_PKEY APIs Replace direct RSA* usage with a new RSA_PKEY_CTX struct holding individual BIGNUMs (N, E, D, P, Q, Dp, Dq, QInv) plus a cached EVP_PKEY*. - Add CryptRsaPkeyCtx.h defining RSA_PKEY_CTX and helper declarations - RsaBuildEvpPkey(): lazily builds EVP_PKEY from stored BIGNUMs - RsaInvalidatePkey(): invalidates the cache on component change - RsaGetKey(): return TRUE with *BnSize=0 for unset (NULL) components - All operations (sign/verify/encrypt/decrypt) use EVP_PKEY_CTX Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pk/CryptRsaBasic.c | 595 ++++++++++++------ .../Library/BaseCryptLib/Pk/CryptRsaExt.c | 314 ++++++--- .../Library/BaseCryptLib/Pk/CryptRsaPkeyCtx.h | 83 +++ 3 files changed, 729 insertions(+), 263 deletions(-) create mode 100644 OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPkeyCtx.h diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c index 56df73e64..06d3177d0 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c @@ -7,8 +7,13 @@ 3) RsaSetKey 4) RsaPkcs1Verify + // MU_CHANGE [BEGIN] + Uses OpenSSL 3.x EVP_PKEY provider-based APIs instead of deprecated RSA APIs. + + // MU_CHANGE [END] Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.
(c) Copyright 2025 HP Development Company, L.P. +Copyright (c) Microsoft Corporation. // MU_CHANGE SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -16,8 +21,252 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "InternalCryptLib.h" #include +#include // MU_CHANGE #include -#include +// MU_CHANGE [BEGIN] +#include +#include +#include + +#include "CryptRsaPkeyCtx.h" + +/** + Invalidate (free) the cached EVP_PKEY in the RSA context. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX whose cache to invalidate. + +**/ +VOID +RsaInvalidatePkey ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx + ) +{ + if (RsaPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (RsaPkeyCtx->Pkey); + RsaPkeyCtx->Pkey = NULL; + } +} + +/** + Build (or return cached) EVP_PKEY from the stored BIGNUM components. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX holding key components. + + @return Pointer to EVP_PKEY on success, or NULL on failure. + +**/ +EVP_PKEY * +RsaBuildEvpPkey ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx + ) +{ + OSSL_PARAM_BLD *ParamBld; + OSSL_PARAM *Params; + EVP_PKEY_CTX *PkeyCtx; + EVP_PKEY *Pkey; + INT32 Selection; + + if (RsaPkeyCtx->Pkey != NULL) { + return RsaPkeyCtx->Pkey; + } + + // + // N and E are the minimum required components. + // + if ((RsaPkeyCtx->N == NULL) || (RsaPkeyCtx->E == NULL)) { + return NULL; + } + + ParamBld = NULL; + Params = NULL; + PkeyCtx = NULL; + Pkey = NULL; + + ParamBld = OSSL_PARAM_BLD_new (); + if (ParamBld == NULL) { + return NULL; + } + + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_N, RsaPkeyCtx->N) != 1) { + goto _Exit; + } + + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_E, RsaPkeyCtx->E) != 1) { + goto _Exit; + } + + if (RsaPkeyCtx->D != NULL) { + Selection = EVP_PKEY_KEYPAIR; + + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_D, RsaPkeyCtx->D) != 1) { + goto _Exit; + } + + if (RsaPkeyCtx->P != NULL) { + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_FACTOR1, RsaPkeyCtx->P) != 1) { + goto _Exit; + } + } + + if (RsaPkeyCtx->Q != NULL) { + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_FACTOR2, RsaPkeyCtx->Q) != 1) { + goto _Exit; + } + } + + if (RsaPkeyCtx->Dp != NULL) { + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_EXPONENT1, RsaPkeyCtx->Dp) != 1) { + goto _Exit; + } + } + + if (RsaPkeyCtx->Dq != NULL) { + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_EXPONENT2, RsaPkeyCtx->Dq) != 1) { + goto _Exit; + } + } + + if (RsaPkeyCtx->QInv != NULL) { + if (OSSL_PARAM_BLD_push_BN (ParamBld, OSSL_PKEY_PARAM_RSA_COEFFICIENT1, RsaPkeyCtx->QInv) != 1) { + goto _Exit; + } + } + } else { + Selection = EVP_PKEY_PUBLIC_KEY; + } + + Params = OSSL_PARAM_BLD_to_param (ParamBld); + if (Params == NULL) { + goto _Exit; + } + + PkeyCtx = EVP_PKEY_CTX_new_from_name (NULL, "RSA", NULL); + if (PkeyCtx == NULL) { + goto _Exit; + } + + if (EVP_PKEY_fromdata_init (PkeyCtx) != 1) { + goto _Exit; + } + + if (EVP_PKEY_fromdata (PkeyCtx, &Pkey, Selection, Params) != 1) { + Pkey = NULL; + goto _Exit; + } + + // + // Cache the built EVP_PKEY. + // + RsaPkeyCtx->Pkey = Pkey; + +_Exit: + if (PkeyCtx != NULL) { + EVP_PKEY_CTX_free (PkeyCtx); + } + + if (Params != NULL) { + OSSL_PARAM_free (Params); + } + + if (ParamBld != NULL) { + OSSL_PARAM_BLD_free (ParamBld); + } + + return RsaPkeyCtx->Pkey; +} + +/** + Extract all RSA BIGNUM key components from an EVP_PKEY into RSA_PKEY_CTX. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX to populate. + @param[in] Pkey EVP_PKEY from which to extract components. + + @retval TRUE Components extracted successfully. + @retval FALSE Extraction failed. + +**/ +BOOLEAN +RsaExtractBigNums ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx, + IN EVP_PKEY *Pkey + ) +{ + // + // Free any existing BIGNUMs. + // + BN_free (RsaPkeyCtx->N); + BN_free (RsaPkeyCtx->E); + BN_clear_free (RsaPkeyCtx->D); + BN_clear_free (RsaPkeyCtx->P); + BN_clear_free (RsaPkeyCtx->Q); + BN_clear_free (RsaPkeyCtx->Dp); + BN_clear_free (RsaPkeyCtx->Dq); + BN_clear_free (RsaPkeyCtx->QInv); + + RsaPkeyCtx->N = NULL; + RsaPkeyCtx->E = NULL; + RsaPkeyCtx->D = NULL; + RsaPkeyCtx->P = NULL; + RsaPkeyCtx->Q = NULL; + RsaPkeyCtx->Dp = NULL; + RsaPkeyCtx->Dq = NULL; + RsaPkeyCtx->QInv = NULL; + + // + // Extract public components (required). + // + if (EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_N, &RsaPkeyCtx->N) != 1) { + return FALSE; + } + + if (EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_E, &RsaPkeyCtx->E) != 1) { + return FALSE; + } + + // + // Extract private components (optional -- may not be present for public keys). + // + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_D, &RsaPkeyCtx->D); + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_FACTOR1, &RsaPkeyCtx->P); + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_FACTOR2, &RsaPkeyCtx->Q); + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_EXPONENT1, &RsaPkeyCtx->Dp); + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_EXPONENT2, &RsaPkeyCtx->Dq); + EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_COEFFICIENT1, &RsaPkeyCtx->QInv); + + return TRUE; +} + +/** + Retrieve a pointer to EVP message digest object. + + @param[in] HashSize Size of the message digest in bytes. + + @return Pointer to EVP_MD, or NULL if unsupported size. + +**/ +STATIC +CONST +EVP_MD * +GetEvpMdFromHashSize ( + IN UINTN HashSize + ) +{ + switch (HashSize) { + case MD5_DIGEST_SIZE: + return EVP_md5 (); + case SHA1_DIGEST_SIZE: + return EVP_sha1 (); + case SHA256_DIGEST_SIZE: + return EVP_sha256 (); + case SHA384_DIGEST_SIZE: + return EVP_sha384 (); + case SHA512_DIGEST_SIZE: + return EVP_sha512 (); + default: + return NULL; + } +} +// MU_CHANGE [END] /** Allocates and initializes one RSA context for subsequent use. @@ -33,9 +282,9 @@ RsaNew ( ) { // - // Allocates & Initializes RSA Context by OpenSSL RSA_new() + // Allocate and zero-initialize an RSA_PKEY_CTX structure. // MU_CHANGE // - return (VOID *)RSA_new (); + return (VOID *)AllocateZeroPool (sizeof (RSA_PKEY_CTX)); // MU_CHANGE } /** @@ -50,10 +299,42 @@ RsaFree ( IN VOID *RsaContext ) { + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + + if (RsaContext == NULL) { + return; + } + + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + + // MU_CHANGE [END] // - // Free OpenSSL RSA Context + // Free cached EVP_PKEY. // MU_CHANGE // - RSA_free ((RSA *)RsaContext); + // MU_CHANGE [BEGIN] + if (RsaPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (RsaPkeyCtx->Pkey); + } + + // + // Free public components. + // + BN_free (RsaPkeyCtx->N); + BN_free (RsaPkeyCtx->E); + + // + // Securely free private components. + // + BN_clear_free (RsaPkeyCtx->D); + BN_clear_free (RsaPkeyCtx->P); + BN_clear_free (RsaPkeyCtx->Q); + BN_clear_free (RsaPkeyCtx->Dp); + BN_clear_free (RsaPkeyCtx->Dq); + BN_clear_free (RsaPkeyCtx->QInv); + + FreePool (RsaPkeyCtx); + // MU_CHANGE [END] } /** @@ -87,16 +368,10 @@ RsaSetKey ( IN UINTN BnSize ) { - RSA *RsaKey; - BIGNUM *BnN; - BIGNUM *BnE; - BIGNUM *BnD; - BIGNUM *BnP; - BIGNUM *BnQ; - BIGNUM *BnDp; - BIGNUM *BnDq; - BIGNUM *BnQInv; - BIGNUM *AllocatedBn[3]; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + BIGNUM **BnTarget; + // MU_CHANGE [END] // // Check input parameters. @@ -105,172 +380,88 @@ RsaSetKey ( return FALSE; } - BnN = NULL; - BnE = NULL; - BnD = NULL; - BnP = NULL; - BnQ = NULL; - BnDp = NULL; - BnDq = NULL; - BnQInv = NULL; + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; // MU_CHANGE - AllocatedBn[0] = NULL; - AllocatedBn[1] = NULL; - AllocatedBn[2] = NULL; // - // Retrieve the components from RSA object. + // Invalidate cached EVP_PKEY since a key component is changing. // MU_CHANGE // - RsaKey = (RSA *)RsaContext; - RSA_get0_key (RsaKey, (const BIGNUM **)&BnN, (const BIGNUM **)&BnE, (const BIGNUM **)&BnD); - RSA_get0_factors (RsaKey, (const BIGNUM **)&BnP, (const BIGNUM **)&BnQ); - RSA_get0_crt_params (RsaKey, (const BIGNUM **)&BnDp, (const BIGNUM **)&BnDq, (const BIGNUM **)&BnQInv); + RsaInvalidatePkey (RsaPkeyCtx); // MU_CHANGE // - // Set RSA Key Components by converting octet string to OpenSSL BN representation. - // NOTE: For RSA public key (used in signature verification), only public components - // (N, e) are needed. + // Select the target BIGNUM pointer based on key tag. // MU_CHANGE // switch (KeyTag) { - // - // RSA Public Modulus (N), Public Exponent (e) and Private Exponent (d) - // case RsaKeyN: + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->N; + break; + // MU_CHANGE [END] case RsaKeyE: + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->E; + break; + // MU_CHANGE [END] case RsaKeyD: - if (BnN == NULL) { - BnN = BN_new (); - AllocatedBn[0] = BnN; - } - - if (BnE == NULL) { - BnE = BN_new (); - AllocatedBn[1] = BnE; - } - - if (BnD == NULL) { - BnD = BN_new (); - AllocatedBn[2] = BnD; - } - - if ((BnN == NULL) || (BnE == NULL) || (BnD == NULL)) { - return FALSE; - } - - switch (KeyTag) { - case RsaKeyN: - BnN = BN_bin2bn (BigNumber, (UINT32)BnSize, BnN); - break; - case RsaKeyE: - BnE = BN_bin2bn (BigNumber, (UINT32)BnSize, BnE); - break; - case RsaKeyD: - BnD = BN_bin2bn (BigNumber, (UINT32)BnSize, BnD); - break; - default: - return FALSE; - } - - if (RSA_set0_key (RsaKey, BN_dup (BnN), BN_dup (BnE), BN_dup (BnD)) == 0) { - return FALSE; - } - - BN_free (AllocatedBn[0]); - BN_free (AllocatedBn[1]); - BN_clear_free (AllocatedBn[2]); - + BnTarget = &RsaPkeyCtx->D; // MU_CHANGE break; - - // - // RSA Secret Prime Factor of Modulus (p and q) - // case RsaKeyP: + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->P; + break; + // MU_CHANGE [END] case RsaKeyQ: - if (BnP == NULL) { - BnP = BN_new (); - AllocatedBn[0] = BnP; - } - - if (BnQ == NULL) { - BnQ = BN_new (); - AllocatedBn[1] = BnQ; - } - - if ((BnP == NULL) || (BnQ == NULL)) { - return FALSE; - } - - switch (KeyTag) { - case RsaKeyP: - BnP = BN_bin2bn (BigNumber, (UINT32)BnSize, BnP); - break; - case RsaKeyQ: - BnQ = BN_bin2bn (BigNumber, (UINT32)BnSize, BnQ); - break; - default: - return FALSE; - } - - if (RSA_set0_factors (RsaKey, BN_dup (BnP), BN_dup (BnQ)) == 0) { - return FALSE; - } - - BN_clear_free (AllocatedBn[0]); - BN_clear_free (AllocatedBn[1]); - + BnTarget = &RsaPkeyCtx->Q; // MU_CHANGE break; - - // - // p's CRT Exponent (== d mod (p - 1)), q's CRT Exponent (== d mod (q - 1)), - // and CRT Coefficient (== 1/q mod p) - // case RsaKeyDp: + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->Dp; + break; + // MU_CHANGE [END] case RsaKeyDq: + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->Dq; + break; + // MU_CHANGE [END] case RsaKeyQInv: - if (BnDp == NULL) { - BnDp = BN_new (); - AllocatedBn[0] = BnDp; - } - - if (BnDq == NULL) { - BnDq = BN_new (); - AllocatedBn[1] = BnDq; - } - - if (BnQInv == NULL) { - BnQInv = BN_new (); - AllocatedBn[2] = BnQInv; - } - - if ((BnDp == NULL) || (BnDq == NULL) || (BnQInv == NULL)) { - return FALSE; - } - - switch (KeyTag) { - case RsaKeyDp: - BnDp = BN_bin2bn (BigNumber, (UINT32)BnSize, BnDp); - break; - case RsaKeyDq: - BnDq = BN_bin2bn (BigNumber, (UINT32)BnSize, BnDq); - break; - case RsaKeyQInv: - BnQInv = BN_bin2bn (BigNumber, (UINT32)BnSize, BnQInv); - break; - default: - return FALSE; - } + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->QInv; + break; + default: + return FALSE; + } + // MU_CHANGE [END] - if (RSA_set0_crt_params (RsaKey, BN_dup (BnDp), BN_dup (BnDq), BN_dup (BnQInv)) == 0) { - return FALSE; + // MU_CHANGE [BEGIN] + // + // If BigNumber is NULL, clear the component. + // + if (BigNumber == NULL) { + if (*BnTarget != NULL) { + if ((KeyTag == RsaKeyN) || (KeyTag == RsaKeyE)) { + BN_free (*BnTarget); + } else { + BN_clear_free (*BnTarget); + // MU_CHANGE [END] } - BN_clear_free (AllocatedBn[0]); - BN_clear_free (AllocatedBn[1]); - BN_clear_free (AllocatedBn[2]); + // MU_CHANGE [BEGIN] + *BnTarget = NULL; + } + // MU_CHANGE [END] - break; + // MU_CHANGE [BEGIN] + return TRUE; + } + // MU_CHANGE [END] - default: - return FALSE; + // MU_CHANGE [BEGIN] + // + // Convert octet string to BIGNUM. + // + *BnTarget = BN_bin2bn (BigNumber, (UINT32)BnSize, *BnTarget); + if (*BnTarget == NULL) { + return FALSE; + // MU_CHANGE [END] } return TRUE; @@ -305,8 +496,13 @@ RsaPkcs1Verify ( IN UINTN SigSize ) { - INT32 DigestType; - UINT8 *SigBuf; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + EVP_PKEY *Pkey; + EVP_PKEY_CTX *PkeyCtx; + CONST EVP_MD *Md; + BOOLEAN Result; + // MU_CHANGE [END] // // Check input parameters. @@ -321,40 +517,61 @@ RsaPkcs1Verify ( // // Determine the message digest algorithm according to digest size. - // Only MD5, SHA-1, SHA-256, SHA-384 or SHA-512 algorithm is supported. // - switch (HashSize) { - case MD5_DIGEST_SIZE: - DigestType = NID_md5; - break; + // MU_CHANGE [BEGIN] + Md = GetEvpMdFromHashSize (HashSize); + if (Md == NULL) { + return FALSE; + } + // MU_CHANGE [END] - case SHA1_DIGEST_SIZE: - DigestType = NID_sha1; - break; + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + Result = FALSE; + PkeyCtx = NULL; + // MU_CHANGE [END] - case SHA256_DIGEST_SIZE: - DigestType = NID_sha256; - break; + // MU_CHANGE [BEGIN] + // + // Build EVP_PKEY from stored key components. + // + Pkey = RsaBuildEvpPkey (RsaPkeyCtx); + if (Pkey == NULL) { + return FALSE; + } + // MU_CHANGE [END] - case SHA384_DIGEST_SIZE: - DigestType = NID_sha384; - break; + // MU_CHANGE [BEGIN] + PkeyCtx = EVP_PKEY_CTX_new_from_pkey (NULL, Pkey, NULL); + if (PkeyCtx == NULL) { + goto _Exit; + } + // MU_CHANGE [END] - case SHA512_DIGEST_SIZE: - DigestType = NID_sha512; - break; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_verify_init (PkeyCtx) != 1) { + goto _Exit; + } + // MU_CHANGE [END] - default: - return FALSE; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_CTX_set_rsa_padding (PkeyCtx, RSA_PKCS1_PADDING) <= 0) { + goto _Exit; + } + + if (EVP_PKEY_CTX_set_signature_md (PkeyCtx, Md) <= 0) { + goto _Exit; + } + + if (EVP_PKEY_verify (PkeyCtx, Signature, SigSize, MessageHash, HashSize) == 1) { + Result = TRUE; + } + +_Exit: + if (PkeyCtx != NULL) { + EVP_PKEY_CTX_free (PkeyCtx); + // MU_CHANGE [END] } - SigBuf = (UINT8 *)Signature; - return (BOOLEAN)RSA_verify ( - DigestType, - MessageHash, - (UINT32)HashSize, - SigBuf, - (UINT32)SigSize, - (RSA *)RsaContext - ); + return Result; // MU_CHANGE } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c index 1ea3d5e0e..36c78516a 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c @@ -7,7 +7,12 @@ 3) RsaCheckKey 4) RsaPkcs1Sign + // MU_CHANGE [BEGIN] + Uses OpenSSL 3.x EVP_PKEY provider-based APIs instead of deprecated RSA APIs. + + // MU_CHANGE [END] Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.
+Copyright (c) Microsoft Corporation. // MU_CHANGE SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -15,9 +20,48 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "InternalCryptLib.h" #include +#include // MU_CHANGE #include +// MU_CHANGE [BEGIN] +#include +#include +// MU_CHANGE [END] #include -#include +// MU_CHANGE [BEGIN] + +#include "CryptRsaPkeyCtx.h" + +/** + Retrieve a pointer to EVP message digest object. + + @param[in] HashSize Size of the message digest in bytes. + + @return Pointer to EVP_MD, or NULL if unsupported size. + +**/ +STATIC +CONST +EVP_MD * +GetEvpMdFromHashSize ( + IN UINTN HashSize + ) +{ + switch (HashSize) { + case MD5_DIGEST_SIZE: + return EVP_md5 (); + case SHA1_DIGEST_SIZE: + return EVP_sha1 (); + case SHA256_DIGEST_SIZE: + return EVP_sha256 (); + case SHA384_DIGEST_SIZE: + return EVP_sha384 (); + case SHA512_DIGEST_SIZE: + return EVP_sha512 (); + default: + return NULL; + } +} +// MU_CHANGE [END] /** Gets the tag-designated RSA key component from the established RSA context. @@ -54,9 +98,11 @@ RsaGetKey ( IN OUT UINTN *BnSize ) { - RSA *RsaKey; - BIGNUM *BnKey; - UINTN Size; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + BIGNUM *BnKey; + UINTN Size; + // MU_CHANGE [END] // // Check input parameters. @@ -65,66 +111,68 @@ RsaGetKey ( return FALSE; } - RsaKey = (RSA *)RsaContext; - Size = *BnSize; - *BnSize = 0; - BnKey = NULL; + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + Size = *BnSize; + *BnSize = 0; + BnKey = NULL; + // MU_CHANGE [END] switch (KeyTag) { // // RSA Public Modulus (N) // case RsaKeyN: - RSA_get0_key (RsaKey, (const BIGNUM **)&BnKey, NULL, NULL); + BnKey = RsaPkeyCtx->N; // MU_CHANGE break; // // RSA Public Exponent (e) // case RsaKeyE: - RSA_get0_key (RsaKey, NULL, (const BIGNUM **)&BnKey, NULL); + BnKey = RsaPkeyCtx->E; // MU_CHANGE break; // // RSA Private Exponent (d) // case RsaKeyD: - RSA_get0_key (RsaKey, NULL, NULL, (const BIGNUM **)&BnKey); + BnKey = RsaPkeyCtx->D; // MU_CHANGE break; // // RSA Secret Prime Factor of Modulus (p) // case RsaKeyP: - RSA_get0_factors (RsaKey, (const BIGNUM **)&BnKey, NULL); + BnKey = RsaPkeyCtx->P; // MU_CHANGE break; // // RSA Secret Prime Factor of Modules (q) // case RsaKeyQ: - RSA_get0_factors (RsaKey, NULL, (const BIGNUM **)&BnKey); + BnKey = RsaPkeyCtx->Q; // MU_CHANGE break; // // p's CRT Exponent (== d mod (p - 1)) // case RsaKeyDp: - RSA_get0_crt_params (RsaKey, (const BIGNUM **)&BnKey, NULL, NULL); + BnKey = RsaPkeyCtx->Dp; // MU_CHANGE break; // // q's CRT Exponent (== d mod (q - 1)) // case RsaKeyDq: - RSA_get0_crt_params (RsaKey, NULL, (const BIGNUM **)&BnKey, NULL); + BnKey = RsaPkeyCtx->Dq; // MU_CHANGE break; // // The CRT Coefficient (== 1/q mod p) // case RsaKeyQInv: - RSA_get0_crt_params (RsaKey, NULL, NULL, (const BIGNUM **)&BnKey); + BnKey = RsaPkeyCtx->QInv; // MU_CHANGE break; default: @@ -186,8 +234,13 @@ RsaGenerateKey ( IN UINTN PublicExponentSize ) { - BIGNUM *KeyE; - BOOLEAN RetVal; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + EVP_PKEY_CTX *KeyGenCtx; + EVP_PKEY *Pkey; + BIGNUM *KeyE; + BOOLEAN RetVal; + // MU_CHANGE [END] // // Check input parameters. @@ -196,29 +249,89 @@ RsaGenerateKey ( return FALSE; } - KeyE = BN_new (); - if (KeyE == NULL) { + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + KeyGenCtx = NULL; + Pkey = NULL; + KeyE = NULL; + RetVal = FALSE; + + // + // Invalidate any cached key since we are generating a new one. + // + RsaInvalidatePkey (RsaPkeyCtx); + + KeyGenCtx = EVP_PKEY_CTX_new_from_name (NULL, "RSA", NULL); + if (KeyGenCtx == NULL) { + // MU_CHANGE [END] return FALSE; } - RetVal = FALSE; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_keygen_init (KeyGenCtx) != 1) { + goto _Exit; + } + + if (EVP_PKEY_CTX_set_rsa_keygen_bits (KeyGenCtx, (INT32)ModulusLength) != 1) { + goto _Exit; + } + // MU_CHANGE [END] - if (PublicExponent == NULL) { - if (BN_set_word (KeyE, 0x10001) == 0) { + // MU_CHANGE [BEGIN] + // + // Set public exponent if provided, otherwise OpenSSL defaults to 0x10001. + // + if (PublicExponent != NULL) { + KeyE = BN_new (); + if (KeyE == NULL) { + // MU_CHANGE [END] goto _Exit; } - } else { + // MU_CHANGE if (BN_bin2bn (PublicExponent, (UINT32)PublicExponentSize, KeyE) == NULL) { goto _Exit; } +// MU_CHANGE [BEGIN] + + if (EVP_PKEY_CTX_set1_rsa_keygen_pubexp (KeyGenCtx, KeyE) != 1) { + goto _Exit; + } +// MU_CHANGE [END] + } + + // MU_CHANGE [BEGIN] + if (EVP_PKEY_keygen (KeyGenCtx, &Pkey) != 1) { + goto _Exit; + // MU_CHANGE [END] } - if (RSA_generate_key_ex ((RSA *)RsaContext, (UINT32)ModulusLength, KeyE, NULL) == 1) { - RetVal = TRUE; + // MU_CHANGE [BEGIN] + // + // Extract all key components from the generated EVP_PKEY. + // + if (!RsaExtractBigNums (RsaPkeyCtx, Pkey)) { + EVP_PKEY_free (Pkey); + goto _Exit; } + // + // Cache the generated EVP_PKEY. + // + RsaPkeyCtx->Pkey = Pkey; + RetVal = TRUE; + + // MU_CHANGE [END] _Exit: - BN_free (KeyE); + // MU_CHANGE [BEGIN] + if (KeyE != NULL) { + BN_free (KeyE); + } + + if (KeyGenCtx != NULL) { + EVP_PKEY_CTX_free (KeyGenCtx); + } + + // MU_CHANGE [END] return RetVal; } @@ -247,7 +360,12 @@ RsaCheckKey ( IN VOID *RsaContext ) { - UINTN Reason; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + EVP_PKEY *Pkey; + EVP_PKEY_CTX *PkeyCtx; + INT32 Result; + // MU_CHANGE [END] // // Check input parameters. @@ -256,15 +374,30 @@ RsaCheckKey ( return FALSE; } - if (RSA_check_key ((RSA *)RsaContext) != 1) { - Reason = ERR_GET_REASON (ERR_peek_last_error ()); - if ((Reason == RSA_R_P_NOT_PRIME) || - (Reason == RSA_R_Q_NOT_PRIME) || - (Reason == RSA_R_N_DOES_NOT_EQUAL_P_Q) || - (Reason == RSA_R_D_E_NOT_CONGRUENT_TO_1)) - { - return FALSE; - } + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + PkeyCtx = NULL; + + // + // Build EVP_PKEY from stored key components. + // + Pkey = RsaBuildEvpPkey (RsaPkeyCtx); + if (Pkey == NULL) { + return FALSE; + } + + PkeyCtx = EVP_PKEY_CTX_new_from_pkey (NULL, Pkey, NULL); + if (PkeyCtx == NULL) { + return FALSE; + } + + Result = EVP_PKEY_check (PkeyCtx); + + EVP_PKEY_CTX_free (PkeyCtx); + + if (Result != 1) { + return FALSE; + // MU_CHANGE [END] } return TRUE; @@ -305,9 +438,14 @@ RsaPkcs1Sign ( IN OUT UINTN *SigSize ) { - RSA *Rsa; - UINTN Size; - INT32 DigestType; + // MU_CHANGE [BEGIN] + RSA_PKEY_CTX *RsaPkeyCtx; + EVP_PKEY *Pkey; + EVP_PKEY_CTX *PkeyCtx; + CONST EVP_MD *Md; + UINTN RequiredSize; + BOOLEAN Result; + // MU_CHANGE [END] // // Check input parameters. @@ -316,53 +454,81 @@ RsaPkcs1Sign ( return FALSE; } - Rsa = (RSA *)RsaContext; - Size = RSA_size (Rsa); - - if (*SigSize < Size) { - *SigSize = Size; + // MU_CHANGE [BEGIN] + // + // Determine the message digest algorithm according to digest size. + // + Md = GetEvpMdFromHashSize (HashSize); + if (Md == NULL) { + // MU_CHANGE [END] return FALSE; } - if (Signature == NULL) { + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + PkeyCtx = NULL; + Result = FALSE; + + // + // Build EVP_PKEY from stored key components. + // + Pkey = RsaBuildEvpPkey (RsaPkeyCtx); + if (Pkey == NULL) { + // MU_CHANGE [END] return FALSE; } // - // Determine the message digest algorithm according to digest size. - // Only MD5, SHA-1, SHA-256, SHA-384 or SHA-512 algorithm is supported. + // Check if the signature buffer is large enough. // MU_CHANGE // - switch (HashSize) { - case MD5_DIGEST_SIZE: - DigestType = NID_md5; - break; + // MU_CHANGE [BEGIN] + RequiredSize = (UINTN)EVP_PKEY_get_size (Pkey); + if (*SigSize < RequiredSize) { + *SigSize = RequiredSize; + return FALSE; + } + // MU_CHANGE [END] - case SHA1_DIGEST_SIZE: - DigestType = NID_sha1; - break; + // MU_CHANGE [BEGIN] + if (Signature == NULL) { + return FALSE; + } + // MU_CHANGE [END] - case SHA256_DIGEST_SIZE: - DigestType = NID_sha256; - break; + // MU_CHANGE [BEGIN] + PkeyCtx = EVP_PKEY_CTX_new_from_pkey (NULL, Pkey, NULL); + if (PkeyCtx == NULL) { + goto _Exit; + } + // MU_CHANGE [END] - case SHA384_DIGEST_SIZE: - DigestType = NID_sha384; - break; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_sign_init (PkeyCtx) != 1) { + goto _Exit; + } + // MU_CHANGE [END] - case SHA512_DIGEST_SIZE: - DigestType = NID_sha512; - break; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_CTX_set_rsa_padding (PkeyCtx, RSA_PKCS1_PADDING) <= 0) { + goto _Exit; + } + // MU_CHANGE [END] - default: - return FALSE; + // MU_CHANGE [BEGIN] + if (EVP_PKEY_CTX_set_signature_md (PkeyCtx, Md) <= 0) { + goto _Exit; + } + + *SigSize = RequiredSize; + if (EVP_PKEY_sign (PkeyCtx, Signature, SigSize, MessageHash, HashSize) == 1) { + Result = TRUE; + } + +_Exit: + if (PkeyCtx != NULL) { + EVP_PKEY_CTX_free (PkeyCtx); + // MU_CHANGE [END] } - return (BOOLEAN)RSA_sign ( - DigestType, - MessageHash, - (UINT32)HashSize, - Signature, - (UINT32 *)SigSize, - (RSA *)RsaContext - ); + return Result; // MU_CHANGE } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPkeyCtx.h b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPkeyCtx.h new file mode 100644 index 000000000..0a82011ae --- /dev/null +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPkeyCtx.h @@ -0,0 +1,83 @@ +/** @file +// MU_CHANGE + Internal header for RSA EVP_PKEY context shared between CryptRsaBasic.c + and CryptRsaExt.c. + + Defines the RSA_PKEY_CTX structure that replaces the deprecated OpenSSL RSA + object, and declares helper functions for building and managing EVP_PKEY + instances from stored BIGNUM key components. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef CRYPT_RSA_PKEY_CTX_H_ +#define CRYPT_RSA_PKEY_CTX_H_ + +#include +#include + +/// +/// Internal RSA key context that holds individual BIGNUM key components +/// and a cached EVP_PKEY built from those components. +/// +typedef struct { + EVP_PKEY *Pkey; + BIGNUM *N; ///< Public modulus + BIGNUM *E; ///< Public exponent + BIGNUM *D; ///< Private exponent + BIGNUM *P; ///< Secret prime factor p + BIGNUM *Q; ///< Secret prime factor q + BIGNUM *Dp; ///< p's CRT exponent (d mod (p-1)) + BIGNUM *Dq; ///< q's CRT exponent (d mod (q-1)) + BIGNUM *QInv; ///< CRT coefficient (1/q mod p) +} RSA_PKEY_CTX; + +/** + Build (or return cached) EVP_PKEY from the stored BIGNUM components. + + If the EVP_PKEY is already cached and valid, return it directly. + Otherwise, construct a new EVP_PKEY using OSSL_PARAM_BLD and + EVP_PKEY_fromdata. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX holding key components. + + @return Pointer to EVP_PKEY on success, or NULL on failure. +**/ +EVP_PKEY * +RsaBuildEvpPkey ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx + ); + +/** + Extract all RSA BIGNUM key components from an EVP_PKEY into RSA_PKEY_CTX. + + Any previously stored BIGNUMs in the context are freed before extraction. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX to populate. + @param[in] Pkey EVP_PKEY from which to extract components. + + @retval TRUE Components extracted successfully. + @retval FALSE Extraction failed. +**/ +BOOLEAN +RsaExtractBigNums ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx, + IN EVP_PKEY *Pkey + ); + +/** + Invalidate (free) the cached EVP_PKEY in the RSA context. + + Called when key components change so the EVP_PKEY will be rebuilt + on next use. + + @param[in,out] RsaPkeyCtx Pointer to RSA_PKEY_CTX whose cache to invalidate. +**/ +VOID +RsaInvalidatePkey ( + IN OUT RSA_PKEY_CTX *RsaPkeyCtx + ); + +#endif // CRYPT_RSA_PKEY_CTX_H_ From ed2f562815e7efd911af44d071cde70cae14d82e Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:19:03 -0700 Subject: [PATCH 03/18] OpensslPkg/BaseCryptLib: Migrate RSA consumers to RSA_PKEY_CTX Update files that consume RSA keys to work with the new RSA_PKEY_CTX type instead of the deprecated RSA* direct usage: - CryptPkcs7Sign.c: remove EVP_PKEY_assign_RSA; use RSA_PKEY_CTX->Pkey - CryptPkcs1Oaep.c: remove EVP_PKEY_set1_RSA; use RSA_PKEY_CTX->Pkey - CryptRsaPss.c: update context casting to RSA_PKEY_CTX - CryptRsaPssSign.c: update context casting to RSA_PKEY_CTX Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pk/CryptPkcs1Oaep.c | 60 ++++--------- .../Library/BaseCryptLib/Pk/CryptPkcs7Sign.c | 89 ++++++++++++------- .../Library/BaseCryptLib/Pk/CryptRsaPss.c | 36 +++++--- .../Library/BaseCryptLib/Pk/CryptRsaPssSign.c | 42 +++++---- 4 files changed, 121 insertions(+), 106 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs1Oaep.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs1Oaep.c index 7634ab1f6..6588834ba 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs1Oaep.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs1Oaep.c @@ -14,6 +14,11 @@ #include #include +// MU_CHANGE [BEGIN] +#include "CryptRsaPkeyCtx.h" + +// MU_CHANGE [END] + /** Retrieve a pointer to EVP message digest object. @@ -374,7 +379,7 @@ RsaOaepEncrypt ( OUT UINTN *EncryptedDataSize ) { - BOOLEAN Result; + // MU_CHANGE - BOOLEAN Result; EVP_PKEY *Pkey; // @@ -386,31 +391,17 @@ RsaOaepEncrypt ( return FALSE; } - *EncryptedData = NULL; - *EncryptedDataSize = 0; - Result = FALSE; - Pkey = NULL; - - Pkey = EVP_PKEY_new (); - if (Pkey == NULL) { - goto _Exit; - } - - if (EVP_PKEY_set1_RSA (Pkey, (RSA *)RsaContext) == 0) { - goto _Exit; - } - - Result = InternalPkcs1v2Encrypt (Pkey, InData, InDataSize, PrngSeed, PrngSeedSize, DigestLen, EncryptedData, EncryptedDataSize); - -_Exit: // - // Release Resources + // Build EVP_PKEY from the RSA_PKEY_CTX key components. // MU_CHANGE // - if (Pkey != NULL) { - EVP_PKEY_free (Pkey); + // MU_CHANGE [BEGIN] + Pkey = RsaBuildEvpPkey ((RSA_PKEY_CTX *)RsaContext); + if (Pkey == NULL) { + return FALSE; + // MU_CHANGE [END] } - return Result; + return InternalPkcs1v2Encrypt (Pkey, InData, InDataSize, PrngSeed, PrngSeedSize, DigestLen, EncryptedData, EncryptedDataSize); // MU_CHANGE } /** @@ -675,7 +666,7 @@ RsaOaepDecrypt ( OUT UINTN *OutDataSize ) { - BOOLEAN Result; + // MU_CHANGE - BOOLEAN Result; EVP_PKEY *Pkey; // @@ -687,28 +678,13 @@ RsaOaepDecrypt ( return FALSE; } - Result = FALSE; - Pkey = NULL; - // - // Create a context for the decryption operation. + // Build EVP_PKEY from the RSA_PKEY_CTX key components. // MU_CHANGE // - - Pkey = EVP_PKEY_new (); + Pkey = RsaBuildEvpPkey ((RSA_PKEY_CTX *)RsaContext); // MU_CHANGE if (Pkey == NULL) { - goto _Exit; - } - - if (EVP_PKEY_set1_RSA (Pkey, (RSA *)RsaContext) == 0) { - goto _Exit; + return FALSE; // MU_CHANGE } - Result = InternalPkcs1v2Decrypt (Pkey, EncryptedData, EncryptedDataSize, DigestLen, OutData, OutDataSize); - -_Exit: - if (Pkey != NULL) { - EVP_PKEY_free (Pkey); - } - - return Result; + return InternalPkcs1v2Decrypt (Pkey, EncryptedData, EncryptedDataSize, DigestLen, OutData, OutDataSize); // MU_CHANGE } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7Sign.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7Sign.c index 087c02da4..dc2e6be70 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7Sign.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7Sign.c @@ -11,6 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include // MU_CHANGE /** Creates a PKCS#7 signedData as described in "PKCS #7: Cryptographic Message @@ -56,42 +57,58 @@ Pkcs7Sign ( X509 *Cert; // MU_CHANGE [TCBZ3925] - Pkcs7Sign is broken EVP_PKEY *Key; BIO *DataBio; + BIO *PemBio; // MU_CHANGE PKCS7 *Pkcs7; - UINT8 *RsaContext; - UINT8 *P7Data; - UINTN P7DataSize; - UINT8 *Tmp; + // MU_CHANGE - UINT8 *RsaContext; + UINT8 *P7Data; + UINTN P7DataSize; + UINT8 *Tmp; // // Check input parameters. // if ((PrivateKey == NULL) || (KeyPassword == NULL) || (InData == NULL) || - (SignCert == NULL) || (SignedData == NULL) || (SignedDataSize == NULL) || (InDataSize > INT_MAX)) + // MU_CHANGE [BEGIN] + (SignCert == NULL) || (SignedData == NULL) || (SignedDataSize == NULL) || + (PrivateKeySize > INT_MAX) || (InDataSize > INT_MAX)) + // MU_CHANGE [END] { return FALSE; } - RsaContext = NULL; - Cert = NULL; // MU_CHANGE [TCBZ3925] - Pkcs7Sign is broken - Key = NULL; - Pkcs7 = NULL; - DataBio = NULL; - Status = FALSE; + Cert = NULL; // MU_CHANGE [TCBZ3925] - Pkcs7Sign is broken + Key = NULL; + Pkcs7 = NULL; + DataBio = NULL; + PemBio = NULL; + Status = FALSE; // - // Retrieve RSA private key from PEM data. + // Retrieve RSA private key from PEM data as EVP_PKEY directly. // MU_CHANGE // - Status = RsaGetPrivateKeyFromPem ( - PrivateKey, - PrivateKeySize, - (CONST CHAR8 *)KeyPassword, - (VOID **)&RsaContext - ); - if (!Status) { - return Status; + // MU_CHANGE [BEGIN] + PemBio = BIO_new_mem_buf (PrivateKey, (int)PrivateKeySize); + if (PemBio == NULL) { + goto _Exit; } - Status = FALSE; + Key = PEM_read_bio_PrivateKey (PemBio, NULL, NULL, (void *)KeyPassword); + if (Key == NULL) { + goto _Exit; + // MU_CHANGE [END] + } + + // MU_CHANGE [BEGIN] + // + // Pkcs7Sign currently supports RSA private keys only. + // Additional key types (for example, MLDSA or composite keys) require + // extending this flow with algorithm-specific signing support. + // + if (EVP_PKEY_id (Key) != EVP_PKEY_RSA) { + goto _Exit; + } + + // MU_CHANGE [END] // // Register & Initialize necessary digest algorithms and PRNG for PKCS#7 Handling @@ -121,18 +138,18 @@ Pkcs7Sign ( // MU_CHANGE [TCBZ3925] [END] - Pkcs7Sign is broken - // - // Construct OpenSSL EVP_PKEY for private key. - // - Key = EVP_PKEY_new (); - if (Key == NULL) { - goto _Exit; - } - - if (EVP_PKEY_assign_RSA (Key, (RSA *)RsaContext) == 0) { - goto _Exit; - } - + // MU_CHANGE [BEGIN] + // // + // // Construct OpenSSL EVP_PKEY for private key. + // // + // Key = EVP_PKEY_new (); + // if (Key == NULL) { + // goto _Exit; + // } + // if (EVP_PKEY_assign_RSA (Key, (RSA *)RsaContext) == 0) { + // goto _Exit; + // } + // MU_CHANGE [END] // // Convert the data to be signed to BIO format. // @@ -212,6 +229,12 @@ Pkcs7Sign ( BIO_free (DataBio); } + // MU_CHANGE [BEGIN] + if (PemBio != NULL) { + BIO_free (PemBio); + } + + // MU_CHANGE [END] if (Pkcs7 != NULL) { PKCS7_free (Pkcs7); } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPss.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPss.c index bdc9155e1..e53987a7b 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPss.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPss.c @@ -4,6 +4,10 @@ This file implements following APIs which provide basic capabilities for RSA: 1) RsaPssVerify + // MU_CHANGE [BEGIN] + Uses OpenSSL 3.x EVP_PKEY provider-based APIs instead of deprecated RSA APIs. + + // MU_CHANGE [END] Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -16,6 +20,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include +// MU_CHANGE [BEGIN] +#include "CryptRsaPkeyCtx.h" + +// MU_CHANGE [END] + /** Retrieve a pointer to EVP message digest object. @@ -75,13 +84,13 @@ RsaPssVerify ( ) { BOOLEAN Result; - EVP_PKEY *EvpRsaKey; + EVP_PKEY *Pkey; // MU_CHANGE EVP_MD_CTX *EvpVerifyCtx; EVP_PKEY_CTX *KeyCtx; CONST EVP_MD *HashAlg; Result = FALSE; - EvpRsaKey = NULL; + Pkey = NULL; // MU_CHANGE EvpVerifyCtx = NULL; KeyCtx = NULL; HashAlg = NULL; @@ -108,19 +117,22 @@ RsaPssVerify ( return FALSE; } - EvpRsaKey = EVP_PKEY_new (); - if (EvpRsaKey == NULL) { - goto _Exit; + // MU_CHANGE [BEGIN] + // + // Build EVP_PKEY from the RSA_PKEY_CTX key components. + // + Pkey = RsaBuildEvpPkey ((RSA_PKEY_CTX *)RsaContext); + if (Pkey == NULL) { + return FALSE; + // MU_CHANGE [END] } - EVP_PKEY_set1_RSA (EvpRsaKey, RsaContext); - - EvpVerifyCtx = EVP_MD_CTX_create (); + EvpVerifyCtx = EVP_MD_CTX_new (); // MU_CHANGE if (EvpVerifyCtx == NULL) { goto _Exit; } - Result = EVP_DigestVerifyInit (EvpVerifyCtx, &KeyCtx, HashAlg, NULL, EvpRsaKey) > 0; + Result = EVP_DigestVerifyInit (EvpVerifyCtx, &KeyCtx, HashAlg, NULL, Pkey) > 0; // MU_CHANGE if (KeyCtx == NULL) { goto _Exit; } @@ -146,12 +158,8 @@ RsaPssVerify ( } _Exit: - if (EvpRsaKey != NULL) { - EVP_PKEY_free (EvpRsaKey); - } - if (EvpVerifyCtx != NULL) { - EVP_MD_CTX_destroy (EvpVerifyCtx); + EVP_MD_CTX_free (EvpVerifyCtx); // MU_CHANGE } return Result; diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPssSign.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPssSign.c index 07c24f6e8..e522efcfe 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPssSign.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaPssSign.c @@ -4,6 +4,10 @@ This file implements following APIs which provide basic capabilities for RSA: 1) RsaPssSign + // MU_CHANGE [BEGIN] + Uses OpenSSL 3.x EVP_PKEY provider-based APIs instead of deprecated RSA APIs. + + // MU_CHANGE [END] Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -16,6 +20,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include +// MU_CHANGE [BEGIN] +#include "CryptRsaPkeyCtx.h" + +// MU_CHANGE [END] + /** Retrieve a pointer to EVP message digest object. @@ -90,13 +99,13 @@ RsaPssSign ( { BOOLEAN Result; UINTN RsaSigSize; - EVP_PKEY *EvpRsaKey; + EVP_PKEY *Pkey; // MU_CHANGE EVP_MD_CTX *EvpVerifyCtx; EVP_PKEY_CTX *KeyCtx; CONST EVP_MD *HashAlg; Result = FALSE; - EvpRsaKey = NULL; + Pkey = NULL; // MU_CHANGE EvpVerifyCtx = NULL; KeyCtx = NULL; HashAlg = NULL; @@ -109,7 +118,17 @@ RsaPssSign ( return FALSE; } - RsaSigSize = RSA_size (RsaContext); + // MU_CHANGE [BEGIN] + // + // Build EVP_PKEY from the RSA_PKEY_CTX key components. + // + Pkey = RsaBuildEvpPkey ((RSA_PKEY_CTX *)RsaContext); + if (Pkey == NULL) { + return FALSE; + } + + RsaSigSize = (UINTN)EVP_PKEY_get_size (Pkey); + // MU_CHANGE [END] if (*SigSize < RsaSigSize) { *SigSize = RsaSigSize; return FALSE; @@ -129,19 +148,12 @@ RsaPssSign ( return FALSE; } - EvpRsaKey = EVP_PKEY_new (); - if (EvpRsaKey == NULL) { - goto _Exit; - } - - EVP_PKEY_set1_RSA (EvpRsaKey, RsaContext); - - EvpVerifyCtx = EVP_MD_CTX_create (); + EvpVerifyCtx = EVP_MD_CTX_new (); // MU_CHANGE if (EvpVerifyCtx == NULL) { goto _Exit; } - Result = EVP_DigestSignInit (EvpVerifyCtx, &KeyCtx, HashAlg, NULL, EvpRsaKey) > 0; + Result = EVP_DigestSignInit (EvpVerifyCtx, &KeyCtx, HashAlg, NULL, Pkey) > 0; // MU_CHANGE if (KeyCtx == NULL) { goto _Exit; } @@ -167,12 +179,8 @@ RsaPssSign ( } _Exit: - if (EvpRsaKey != NULL) { - EVP_PKEY_free (EvpRsaKey); - } - if (EvpVerifyCtx != NULL) { - EVP_MD_CTX_destroy (EvpVerifyCtx); + EVP_MD_CTX_free (EvpVerifyCtx); // MU_CHANGE } return Result; From 90c2fbe14a90fb779b600698f4e677c5788ef7fc Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:19:13 -0700 Subject: [PATCH 04/18] OpensslPkg/BaseCryptLib: Migrate CryptEc.c to EVP_PKEY APIs Replace EC_KEY* based implementation with a new EC_PKEY_CTX struct holding the curve NID and a cached EVP_PKEY*: - Add CryptEcPkeyCtx.h defining EC_PKEY_CTX - EcNewByNid(): allocates EC_PKEY_CTX with OpenSSL NID - EcDhComputeKey(): uses EVP_PKEY_derive with OSSL_PARAM_BLD peer key - EcDsaSign(): uses EVP_PKEY_sign producing DER; converts to raw R||S - EcDsaVerify(): converts raw R||S to DER via i2d_ECDSA_SIG; EVP_PKEY_verify - EC public key export: EVP_PKEY_get_octet_string_param returns 04||X||Y; skip leading 0x04 byte to match caller expectation of raw X||Y Signed-off-by: Doug Flick --- OpensslPkg/Library/BaseCryptLib/Pk/CryptEc.c | 567 ++++++++++++------ .../Library/BaseCryptLib/Pk/CryptEcPkeyCtx.h | 22 + 2 files changed, 401 insertions(+), 188 deletions(-) create mode 100644 OpensslPkg/Library/BaseCryptLib/Pk/CryptEcPkeyCtx.h diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptEc.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptEc.c index cba70557e..d8669e38f 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptEc.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptEc.c @@ -10,6 +10,13 @@ #include #include #include +// MU_CHANGE [BEGIN] +#include +#include +#include +#include +#include "CryptEcPkeyCtx.h" +// MU_CHANGE [END] // ===================================================================================== // Basic Elliptic Curve Primitives @@ -405,6 +412,52 @@ EcPointSetCompressedCoordinates ( // Elliptic Curve Diffie Hellman Primitives // ===================================================================================== +// MU_CHANGE [BEGIN] + +/** + Map an OpenSSL NID to the curve name string used by EVP_PKEY_Q_keygen / OSSL_PARAM. + + @param[in] Nid OpenSSL NID for the EC curve. + + @return ASCII curve name string, or NULL if not supported. +**/ +STATIC CONST CHAR8 * +OpenSslNidToCurveName ( + INT32 Nid + ) +{ + switch (Nid) { + case NID_X9_62_prime256v1: return "prime256v1"; + case NID_secp384r1: return "secp384r1"; + case NID_secp521r1: return "secp521r1"; + case NID_brainpoolP512r1: return "brainpoolP512r1"; + default: return NULL; + } +} + +/** + Return the coordinate half-size (in bytes) for a given OpenSSL NID. + + @param[in] Nid OpenSSL NID for the EC curve. + + @return Byte length of one coordinate, or 0 if not supported. +**/ +STATIC UINTN +GetHalfSizeFromNid ( + INT32 Nid + ) +{ + switch (Nid) { + case NID_X9_62_prime256v1: return 32; + case NID_secp384r1: return 48; + case NID_secp521r1: return 66; + case NID_brainpoolP512r1: return 64; + default: return 0; + } +} + +// MU_CHANGE [END] + /** Allocates and Initializes one Elliptic Curve Context for subsequent use with the NID. @@ -420,14 +473,27 @@ EcNewByNid ( IN UINTN Nid ) { - INT32 OpenSslNid; + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + INT32 OpenSslNid; + + // MU_CHANGE [END] OpenSslNid = CryptoNidToOpensslNid (Nid); if (OpenSslNid < 0) { return NULL; } - return (VOID *)EC_KEY_new_by_curve_name (OpenSslNid); + // MU_CHANGE [BEGIN] + EcPkeyCtx = AllocateZeroPool (sizeof (EC_PKEY_CTX)); + if (EcPkeyCtx == NULL) { + return NULL; + } + + EcPkeyCtx->Nid = OpenSslNid; + EcPkeyCtx->Pkey = NULL; + return (VOID *)EcPkeyCtx; + // MU_CHANGE [END] } /** @@ -441,7 +507,20 @@ EcFree ( IN VOID *EcContext ) { - EC_KEY_free ((EC_KEY *)EcContext); + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + + if (EcContext == NULL) { + return; + } + + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + if (EcPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (EcPkeyCtx->Pkey); + } + + FreePool (EcPkeyCtx); + // MU_CHANGE [END] } /** @@ -478,15 +557,15 @@ EcGenerateKey ( IN OUT UINTN *PublicKeySize ) { - EC_KEY *EcKey; - CONST EC_GROUP *Group; - CONST EC_POINT *EcPoint; - BOOLEAN RetVal; - BIGNUM *BnX; - BIGNUM *BnY; - UINTN HalfSize; - INTN XSize; - INTN YSize; + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + CONST CHAR8 *CurveName; + UINTN HalfSize; + EVP_PKEY *Pkey; + UINT8 PubKeyBuf[133]; + UINTN PubKeyBufLen; + + // MU_CHANGE [END] if ((EcContext == NULL) || (PublicKeySize == NULL)) { return FALSE; @@ -496,12 +575,11 @@ EcGenerateKey ( return FALSE; } - EcKey = (EC_KEY *)EcContext; - Group = EC_KEY_get0_group (EcKey); - HalfSize = (EC_GROUP_get_degree (Group) + 7) / 8; - - // Assume RAND_seed was called - if (EC_KEY_generate_key (EcKey) != 1) { + // MU_CHANGE [BEGIN] + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + HalfSize = GetHalfSizeFromNid (EcPkeyCtx->Nid); + if (HalfSize == 0) { + // MU_CHANGE [END] return FALSE; } @@ -512,40 +590,55 @@ EcGenerateKey ( *PublicKeySize = HalfSize * 2; - EcPoint = EC_KEY_get0_public_key (EcKey); - if (EcPoint == NULL) { + // MU_CHANGE [BEGIN] + CurveName = OpenSslNidToCurveName (EcPkeyCtx->Nid); + if (CurveName == NULL) { + // MU_CHANGE [END] return FALSE; } - RetVal = FALSE; - BnX = BN_new (); - BnY = BN_new (); - if ((BnX == NULL) || (BnY == NULL)) { - goto fail; + // MU_CHANGE [BEGIN] + if (EcPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (EcPkeyCtx->Pkey); + EcPkeyCtx->Pkey = NULL; + // MU_CHANGE [END] } - if (EC_POINT_get_affine_coordinates (Group, EcPoint, BnX, BnY, NULL) != 1) { - goto fail; + // MU_CHANGE [BEGIN] + Pkey = EVP_PKEY_Q_keygen (NULL, NULL, "EC", CurveName); + if (Pkey == NULL) { + return FALSE; + // MU_CHANGE [END] } - XSize = BN_num_bytes (BnX); - YSize = BN_num_bytes (BnY); - if ((XSize <= 0) || (YSize <= 0)) { - goto fail; + // MU_CHANGE [BEGIN] + EcPkeyCtx->Pkey = Pkey; + + PubKeyBufLen = sizeof (PubKeyBuf); + if (EVP_PKEY_get_octet_string_param ( + Pkey, + OSSL_PKEY_PARAM_PUB_KEY, + PubKeyBuf, + sizeof (PubKeyBuf), + &PubKeyBufLen + ) != 1) + { + return FALSE; + // MU_CHANGE [END] } - ASSERT ((UINTN)XSize <= HalfSize && (UINTN)YSize <= HalfSize); + // MU_CHANGE [BEGIN] + // PubKeyBuf is 0x04 || X || Y; skip the leading uncompressed-point prefix + if (PubKeyBufLen != 1 + HalfSize * 2) { + return FALSE; + } - ZeroMem (PublicKey, *PublicKeySize); - BN_bn2bin (BnX, &PublicKey[0 + HalfSize - XSize]); - BN_bn2bin (BnY, &PublicKey[HalfSize + HalfSize - YSize]); + // MU_CHANGE [END] - RetVal = TRUE; + ZeroMem (PublicKey, *PublicKeySize); + CopyMem (PublicKey, PubKeyBuf + 1, HalfSize * 2); // MU_CHANGE -fail: - BN_free (BnX); - BN_free (BnY); - return RetVal; + return TRUE; // MU_CHANGE } /** @@ -570,15 +663,13 @@ EcGetPubKey ( IN OUT UINTN *PublicKeySize ) { - EC_KEY *EcKey; - CONST EC_GROUP *Group; - CONST EC_POINT *EcPoint; - BIGNUM *BnX; - BIGNUM *BnY; - UINTN HalfSize; - INTN XSize; - INTN YSize; - BOOLEAN RetVal; + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + UINTN HalfSize; + UINT8 PubKeyBuf[133]; + UINTN PubKeyBufLen; + + // MU_CHANGE [END] if ((EcContext == NULL) || (PublicKeySize == NULL)) { return FALSE; @@ -588,12 +679,20 @@ EcGetPubKey ( return FALSE; } - BnX = NULL; - BnY = NULL; + // MU_CHANGE [BEGIN] + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + HalfSize = GetHalfSizeFromNid (EcPkeyCtx->Nid); + if (HalfSize == 0) { + return FALSE; + } + + // MU_CHANGE [END] - EcKey = (EC_KEY *)EcContext; - Group = EC_KEY_get0_group (EcKey); - HalfSize = (EC_GROUP_get_degree (Group) + 7) / 8; + // MU_CHANGE [BEGIN] + // EcKey = (EC_KEY *)EcContext; + // Group = EC_KEY_get0_group (EcKey); + // HalfSize = (EC_GROUP_get_degree (Group) + 7) / 8; + // MU_CHANGE [END] if (*PublicKeySize < HalfSize * 2) { *PublicKeySize = HalfSize * 2; return FALSE; @@ -601,48 +700,39 @@ EcGetPubKey ( *PublicKeySize = HalfSize * 2; - EcPoint = EC_KEY_get0_public_key (EcKey); - if (EcPoint == NULL) { + if (EcPkeyCtx->Pkey == NULL) { + // MU_CHANGE return FALSE; } - RetVal = FALSE; - BnX = BN_new (); - BnY = BN_new (); - if ((BnX == NULL) || (BnY == NULL)) { - goto fail; - } - - if (EC_POINT_get_affine_coordinates (Group, EcPoint, BnX, BnY, NULL) != 1) { - goto fail; + // MU_CHANGE [BEGIN] + PubKeyBufLen = sizeof (PubKeyBuf); + if (EVP_PKEY_get_octet_string_param ( + EcPkeyCtx->Pkey, + OSSL_PKEY_PARAM_PUB_KEY, + PubKeyBuf, + sizeof (PubKeyBuf), + &PubKeyBufLen + ) != 1) + { + return FALSE; + // MU_CHANGE [END] } - XSize = BN_num_bytes (BnX); - YSize = BN_num_bytes (BnY); - if ((XSize <= 0) || (YSize <= 0)) { - goto fail; + // MU_CHANGE [BEGIN] + // PubKeyBuf is 0x04 || X || Y; skip the leading uncompressed-point prefix + if (PubKeyBufLen != 1 + HalfSize * 2) { + return FALSE; + // MU_CHANGE [END] } - ASSERT ((UINTN)XSize <= HalfSize && (UINTN)YSize <= HalfSize); - + // MU_CHANGE - ASSERT ((UINTN)XSize <= HalfSize && (UINTN)YSize <= HalfSize); if (PublicKey != NULL) { ZeroMem (PublicKey, *PublicKeySize); - BN_bn2bin (BnX, &PublicKey[0 + HalfSize - XSize]); - BN_bn2bin (BnY, &PublicKey[HalfSize + HalfSize - YSize]); + CopyMem (PublicKey, PubKeyBuf + 1, HalfSize * 2); // MU_CHANGE } - RetVal = TRUE; - -fail: - if (BnX != NULL) { - BN_free (BnX); - } - - if (BnY != NULL) { - BN_free (BnY); - } - - return RetVal; + return TRUE; // MU_CHANGE } /** @@ -682,15 +772,23 @@ EcDhComputeKey ( IN OUT UINTN *KeySize ) { - EC_KEY *EcKey; - EC_KEY *PeerEcKey; - CONST EC_GROUP *Group; + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + CONST CHAR8 *CurveName; + // MU_CHANGE [END] + UINTN HalfSize; + // MU_CHANGE [BEGIN] BOOLEAN RetVal; - BIGNUM *BnX; - BIGNUM *BnY; - EC_POINT *Point; - INT32 OpenSslNid; - UINTN HalfSize; + UINT8 PubKeyBuf[133]; + UINTN PubKeyLen; + OSSL_PARAM_BLD *Bld; + OSSL_PARAM *Params; + EVP_PKEY_CTX *FromdataCtx; + EVP_PKEY *PeerPkey; + EVP_PKEY_CTX *DeriveCtx; + UINTN DerivedLen; + + // MU_CHANGE [END] if ((EcContext == NULL) || (PeerPublic == NULL) || (KeySize == NULL)) { return FALSE; @@ -704,9 +802,14 @@ EcDhComputeKey ( return FALSE; } - EcKey = (EC_KEY *)EcContext; - Group = EC_KEY_get0_group (EcKey); - HalfSize = (EC_GROUP_get_degree (Group) + 7) / 8; + // MU_CHANGE [BEGIN] + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + HalfSize = GetHalfSizeFromNid (EcPkeyCtx->Nid); + if (HalfSize == 0) { + return FALSE; + } + + // MU_CHANGE [END] if ((CompressFlag == NULL) && (PeerPublicSize != HalfSize * 2)) { return FALSE; } @@ -722,57 +825,107 @@ EcDhComputeKey ( *KeySize = HalfSize; - RetVal = FALSE; - Point = NULL; - BnX = BN_bin2bn (PeerPublic, (INT32)HalfSize, NULL); - BnY = NULL; - Point = EC_POINT_new (Group); - PeerEcKey = NULL; - if ((BnX == NULL) || (Point == NULL)) { - goto fail; + // MU_CHANGE [BEGIN] + if (EcPkeyCtx->Pkey == NULL) { + return FALSE; + // MU_CHANGE [END] + } + + // MU_CHANGE [BEGIN] + CurveName = OpenSslNidToCurveName (EcPkeyCtx->Nid); + if (CurveName == NULL) { + return FALSE; } + // Build uncompressed or compressed peer public key buffer + // MU_CHANGE [END] if (CompressFlag == NULL) { - BnY = BN_bin2bn (PeerPublic + HalfSize, (INT32)HalfSize, NULL); - if (BnY == NULL) { - goto fail; - } - - if (EC_POINT_set_affine_coordinates (Group, Point, BnX, BnY, NULL) != 1) { - goto fail; - } + // MU_CHANGE [BEGIN] + PubKeyBuf[0] = 0x04; + CopyMem (PubKeyBuf + 1, PeerPublic, HalfSize * 2); + PubKeyLen = 1 + HalfSize * 2; + // MU_CHANGE [END] } else { - if (EC_POINT_set_compressed_coordinates (Group, Point, BnX, *CompressFlag, NULL) != 1) { - goto fail; - } + // MU_CHANGE [BEGIN] + PubKeyBuf[0] = (UINT8)((*CompressFlag & 1) ? 0x03 : 0x02); + CopyMem (PubKeyBuf + 1, PeerPublic, HalfSize); + PubKeyLen = 1 + HalfSize; + } + + RetVal = FALSE; + Bld = NULL; + Params = NULL; + FromdataCtx = NULL; + PeerPkey = NULL; + DeriveCtx = NULL; + + Bld = OSSL_PARAM_BLD_new (); + if (Bld == NULL) { + goto fail; + } + + if (OSSL_PARAM_BLD_push_utf8_string (Bld, OSSL_PKEY_PARAM_GROUP_NAME, CurveName, 0) != 1) { + goto fail; + } + + if (OSSL_PARAM_BLD_push_octet_string (Bld, OSSL_PKEY_PARAM_PUB_KEY, PubKeyBuf, PubKeyLen) != 1) { + goto fail; + } + + Params = OSSL_PARAM_BLD_to_param (Bld); + if (Params == NULL) { + goto fail; + // MU_CHANGE [END] } - // Validate NIST ECDH public key - OpenSslNid = EC_GROUP_get_curve_name (Group); - PeerEcKey = EC_KEY_new_by_curve_name (OpenSslNid); - if (PeerEcKey == NULL) { + // MU_CHANGE [BEGIN] + FromdataCtx = EVP_PKEY_CTX_new_from_name (NULL, "EC", NULL); + if (FromdataCtx == NULL) { + // MU_CHANGE [END] goto fail; } - if (EC_KEY_set_public_key (PeerEcKey, Point) != 1) { + if (EVP_PKEY_fromdata_init (FromdataCtx) != 1) { + // MU_CHANGE goto fail; } - if (EC_KEY_check_key (PeerEcKey) != 1) { + if (EVP_PKEY_fromdata (FromdataCtx, &PeerPkey, EVP_PKEY_PUBLIC_KEY, Params) != 1) { + // MU_CHANGE goto fail; } - if (ECDH_compute_key (Key, *KeySize, Point, EcKey, NULL) <= 0) { + // MU_CHANGE [BEGIN] + DeriveCtx = EVP_PKEY_CTX_new (EcPkeyCtx->Pkey, NULL); + if (DeriveCtx == NULL) { + goto fail; + } + + if (EVP_PKEY_derive_init (DeriveCtx) != 1) { + goto fail; + } + + // EVP_PKEY_derive_set_peer also validates the peer key + if (EVP_PKEY_derive_set_peer (DeriveCtx, PeerPkey) != 1) { + goto fail; + } + + DerivedLen = *KeySize; + if (EVP_PKEY_derive (DeriveCtx, Key, &DerivedLen) != 1) { + // MU_CHANGE [END] goto fail; } RetVal = TRUE; fail: - BN_free (BnX); - BN_free (BnY); - EC_POINT_free (Point); - EC_KEY_free (PeerEcKey); + // MU_CHANGE [BEGIN] + OSSL_PARAM_BLD_free (Bld); + OSSL_PARAM_free (Params); + EVP_PKEY_CTX_free (FromdataCtx); + EVP_PKEY_free (PeerPkey); + EVP_PKEY_CTX_free (DeriveCtx); + // MU_CHANGE [END] return RetVal; } @@ -816,14 +969,20 @@ EcDsaSign ( IN OUT UINTN *SigSize ) { - EC_KEY *EcKey; - ECDSA_SIG *EcDsaSig; - INT32 OpenSslNid; - UINT8 HalfSize; - BIGNUM *R; - BIGNUM *S; - INTN RSize; - INTN SSize; + // MU_CHANGE [BEGIN] + EC_PKEY_CTX *EcPkeyCtx; + UINTN HalfSize; + EVP_PKEY_CTX *PkeyCtx; + ECDSA_SIG *EcDsaSig; + UINT8 DerSig[150]; + UINTN DerSigLen; + CONST UINT8 *DerSigPtr; + BIGNUM *R; + BIGNUM *S; + INTN RSize; + INTN SSize; + + // MU_CHANGE [END] if ((EcContext == NULL) || (MessageHash == NULL)) { return FALSE; @@ -833,23 +992,12 @@ EcDsaSign ( return FALSE; } - EcKey = (EC_KEY *)EcContext; - OpenSslNid = EC_GROUP_get_curve_name (EC_KEY_get0_group (EcKey)); - switch (OpenSslNid) { - case NID_X9_62_prime256v1: - HalfSize = 32; - break; - case NID_secp384r1: - HalfSize = 48; - break; - case NID_secp521r1: - HalfSize = 66; - break; - case NID_brainpoolP512r1: - HalfSize = 64; - break; - default: - return FALSE; + // MU_CHANGE [BEGIN] + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + HalfSize = GetHalfSizeFromNid (EcPkeyCtx->Nid); + if (HalfSize == 0) { + return FALSE; + // MU_CHANGE [END] } if (*SigSize < (UINTN)(HalfSize * 2)) { @@ -886,11 +1034,33 @@ EcDsaSign ( return FALSE; } - EcDsaSig = ECDSA_do_sign ( - MessageHash, - (UINT32)HashSize, - (EC_KEY *)EcContext - ); + // MU_CHANGE [BEGIN] + if (EcPkeyCtx->Pkey == NULL) { + return FALSE; + } + + PkeyCtx = EVP_PKEY_CTX_new (EcPkeyCtx->Pkey, NULL); + if (PkeyCtx == NULL) { + return FALSE; + } + + if (EVP_PKEY_sign_init (PkeyCtx) != 1) { + EVP_PKEY_CTX_free (PkeyCtx); + return FALSE; + } + + DerSigLen = sizeof (DerSig); + if (EVP_PKEY_sign (PkeyCtx, DerSig, &DerSigLen, MessageHash, HashSize) != 1) { + EVP_PKEY_CTX_free (PkeyCtx); + return FALSE; + } + + EVP_PKEY_CTX_free (PkeyCtx); + + // Parse DER-encoded ECDSA signature into R and S bignums + DerSigPtr = DerSig; + EcDsaSig = d2i_ECDSA_SIG (NULL, &DerSigPtr, (long)DerSigLen); + // MU_CHANGE [END] if (EcDsaSig == NULL) { return FALSE; } @@ -948,13 +1118,19 @@ EcDsaVerify ( IN UINTN SigSize ) { - INT32 Result; - EC_KEY *EcKey; - ECDSA_SIG *EcDsaSig; - INT32 OpenSslNid; - UINT8 HalfSize; - BIGNUM *R; - BIGNUM *S; + // MU_CHANGE [BEGIN] + INT32 Result; + EC_PKEY_CTX *EcPkeyCtx; + ECDSA_SIG *EcDsaSig; + UINTN HalfSize; + BIGNUM *R; + BIGNUM *S; + UINT8 DerSig[150]; + UINT8 *DerSigPtr; + INT32 DerSigLen; + EVP_PKEY_CTX *PkeyCtx; + + // MU_CHANGE [END] if ((EcContext == NULL) || (MessageHash == NULL) || (Signature == NULL)) { return FALSE; @@ -964,23 +1140,12 @@ EcDsaVerify ( return FALSE; } - EcKey = (EC_KEY *)EcContext; - OpenSslNid = EC_GROUP_get_curve_name (EC_KEY_get0_group (EcKey)); - switch (OpenSslNid) { - case NID_X9_62_prime256v1: - HalfSize = 32; - break; - case NID_secp384r1: - HalfSize = 48; - break; - case NID_secp521r1: - HalfSize = 66; - break; - case NID_brainpoolP512r1: - HalfSize = 64; - break; - default: - return FALSE; + // MU_CHANGE [BEGIN] + EcPkeyCtx = (EC_PKEY_CTX *)EcContext; + HalfSize = GetHalfSizeFromNid (EcPkeyCtx->Nid); + if (HalfSize == 0) { + return FALSE; + // MU_CHANGE [END] } if (SigSize != (UINTN)(HalfSize * 2)) { @@ -1013,29 +1178,55 @@ EcDsaVerify ( return FALSE; } + // Build ECDSA_SIG from raw R || S, then DER-encode for EVP_PKEY_verify // MU_CHANGE EcDsaSig = ECDSA_SIG_new (); if (EcDsaSig == NULL) { - ECDSA_SIG_free (EcDsaSig); + // MU_CHANGE - ECDSA_SIG_free (EcDsaSig); return FALSE; } R = BN_bin2bn (Signature, (UINT32)HalfSize, NULL); S = BN_bin2bn (Signature + HalfSize, (UINT32)HalfSize, NULL); if ((R == NULL) || (S == NULL)) { + // MU_CHANGE [BEGIN] + BN_free (R); + BN_free (S); + // MU_CHANGE [END] ECDSA_SIG_free (EcDsaSig); return FALSE; } + // ECDSA_SIG_set0 takes ownership of R and S // MU_CHANGE ECDSA_SIG_set0 (EcDsaSig, R, S); - Result = ECDSA_do_verify ( - MessageHash, - (UINT32)HashSize, - EcDsaSig, - (EC_KEY *)EcContext - ); - + // MU_CHANGE [BEGIN] + DerSigPtr = DerSig; + DerSigLen = i2d_ECDSA_SIG (EcDsaSig, &DerSigPtr); + // MU_CHANGE [END] ECDSA_SIG_free (EcDsaSig); + // MU_CHANGE [BEGIN] + if (DerSigLen <= 0) { + return FALSE; + } + + if (EcPkeyCtx->Pkey == NULL) { + return FALSE; + } + + PkeyCtx = EVP_PKEY_CTX_new (EcPkeyCtx->Pkey, NULL); + if (PkeyCtx == NULL) { + return FALSE; + } + + if (EVP_PKEY_verify_init (PkeyCtx) != 1) { + EVP_PKEY_CTX_free (PkeyCtx); + return FALSE; + } + + Result = EVP_PKEY_verify (PkeyCtx, DerSig, (UINTN)DerSigLen, MessageHash, HashSize); + + EVP_PKEY_CTX_free (PkeyCtx); + // MU_CHANGE [END] return (Result == 1); } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptEcPkeyCtx.h b/OpensslPkg/Library/BaseCryptLib/Pk/CryptEcPkeyCtx.h new file mode 100644 index 000000000..8540c65b6 --- /dev/null +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptEcPkeyCtx.h @@ -0,0 +1,22 @@ +/** @file +// MU_CHANGE + Internal header defining EC_PKEY_CTX shared between CryptEc.c and CryptX509.c. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef CRYPT_EC_PKEY_CTX_H_ +#define CRYPT_EC_PKEY_CTX_H_ + +#include + +/// +/// Internal EC key context wrapping an EVP_PKEY with the associated curve NID. +/// +typedef struct { + INT32 Nid; ///< OpenSSL NID (NID_X9_62_prime256v1, NID_secp384r1, etc.) + EVP_PKEY *Pkey; ///< NULL until EcGenerateKey() or EcGetPublicKeyFromX509() +} EC_PKEY_CTX; + +#endif // CRYPT_EC_PKEY_CTX_H_ From 30be4702367144699bdd2f1606d43b9b0e350b45 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:19:19 -0700 Subject: [PATCH 05/18] OpensslPkg/BaseCryptLib: Migrate CryptDh.c to EVP_PKEY APIs Replace DH* based implementation with a new DH_PKEY_CTX struct: - DH_PKEY_CTX holds BnP, BnG (set independently by DhSetParameter) and EVP_PKEY* (generated on DhGenerateKey) - DhSetParameter(): stores BnP/BnG; defers key generation - DhGenerateKey(): uses EVP_PKEY_paramgen + EVP_PKEY_keygen - DhComputeKey(): uses EVP_PKEY_derive with peer public key Signed-off-by: Doug Flick --- OpensslPkg/Library/BaseCryptLib/Pk/CryptDh.c | 524 +++++++++++++++++-- 1 file changed, 469 insertions(+), 55 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptDh.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptDh.c index 950e18158..9af25b456 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptDh.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptDh.c @@ -8,8 +8,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "InternalCryptLib.h" #include +// MU_CHANGE [BEGIN] +#include +#include +#include +// MU_CHANGE [END] #include +// MU_CHANGE [BEGIN] +/// +/// Internal context structure wrapping EVP_PKEY-based DH state. +/// +typedef struct { + BIGNUM *BnP; ///< Prime p (NULL until DhGenerateParameter or DhSetParameter) + BIGNUM *BnG; ///< Generator g (NULL until DhGenerateParameter or DhSetParameter) + EVP_PKEY *Pkey; ///< NULL until DhGenerateKey() +} DH_PKEY_CTX; + +// MU_CHANGE [END] + /** Allocates and Initializes one Diffie-Hellman Context for subsequent use. @@ -23,10 +40,7 @@ DhNew ( VOID ) { - // - // Allocates & Initializes DH Context by OpenSSL DH_new() - // - return (VOID *)DH_new (); + return (VOID *)AllocateZeroPool (sizeof (DH_PKEY_CTX)); // MU_CHANGE } /** @@ -43,10 +57,29 @@ DhFree ( IN VOID *DhContext ) { - // - // Free OpenSSL DH Context - // - DH_free ((DH *)DhContext); + // MU_CHANGE [BEGIN] + DH_PKEY_CTX *Ctx; + + if (DhContext == NULL) { + return; + } + + Ctx = (DH_PKEY_CTX *)DhContext; + + if (Ctx->BnP != NULL) { + BN_free (Ctx->BnP); + } + + if (Ctx->BnG != NULL) { + BN_free (Ctx->BnG); + } + + if (Ctx->Pkey != NULL) { + EVP_PKEY_free (Ctx->Pkey); + } + + FreePool (Ctx); + // MU_CHANGE [END] } /** @@ -80,8 +113,20 @@ DhGenerateParameter ( OUT UINT8 *Prime ) { - BOOLEAN RetVal; - BIGNUM *BnP; + // MU_CHANGE [BEGIN] + BOOLEAN RetVal; + DH_PKEY_CTX *Ctx; + EVP_PKEY_CTX *PgenCtx; + EVP_PKEY *ParamsPkey; + BIGNUM *BnP; + BIGNUM *BnG; + + RetVal = FALSE; + PgenCtx = NULL; + ParamsPkey = NULL; + BnP = NULL; + BnG = NULL; + // MU_CHANGE [END] // // Check input parameters. @@ -94,15 +139,100 @@ DhGenerateParameter ( return FALSE; } - RetVal = (BOOLEAN)DH_generate_parameters_ex (DhContext, (UINT32)PrimeLength, (UINT32)Generator, NULL); - if (!RetVal) { - return FALSE; + // MU_CHANGE [BEGIN] + Ctx = (DH_PKEY_CTX *)DhContext; + + // + // Generate DH parameters using EVP_PKEY paramgen. + // + PgenCtx = EVP_PKEY_CTX_new_from_name (NULL, "DH", NULL); + if (PgenCtx == NULL) { + goto Fail; + // MU_CHANGE [END] } - DH_get0_pqg (DhContext, (const BIGNUM **)&BnP, NULL, NULL); - BN_bn2bin (BnP, Prime); + // MU_CHANGE [BEGIN] + if (EVP_PKEY_paramgen_init (PgenCtx) <= 0) { + goto Fail; + } - return TRUE; + // MU_CHANGE [END] + + // MU_CHANGE [BEGIN] + if (EVP_PKEY_CTX_set_dh_paramgen_prime_len (PgenCtx, (INT32)PrimeLength) <= 0) { + goto Fail; + } + + if (EVP_PKEY_CTX_set_dh_paramgen_generator (PgenCtx, (INT32)Generator) <= 0) { + goto Fail; + } + + if (EVP_PKEY_paramgen (PgenCtx, &ParamsPkey) <= 0) { + goto Fail; + } + + // + // Extract the generated prime p. + // + if (EVP_PKEY_get_bn_param (ParamsPkey, OSSL_PKEY_PARAM_FFC_P, &BnP) <= 0) { + goto Fail; + } + + // + // Build a new BnG from the generator value. + // + BnG = BN_new (); + if (BnG == NULL) { + goto Fail; + } + + if (!BN_set_word (BnG, (BN_ULONG)Generator)) { + goto Fail; + } + + // + // Update context, releasing any previous params and key. + // + if (Ctx->BnP != NULL) { + BN_free (Ctx->BnP); + } + + if (Ctx->BnG != NULL) { + BN_free (Ctx->BnG); + } + + if (Ctx->Pkey != NULL) { + EVP_PKEY_free (Ctx->Pkey); + Ctx->Pkey = NULL; + } + + Ctx->BnP = BnP; + Ctx->BnG = BnG; + BnP = NULL; + BnG = NULL; + + BN_bn2bin (Ctx->BnP, Prime); + RetVal = TRUE; + +Fail: + if (BnP != NULL) { + BN_free (BnP); + } + + if (BnG != NULL) { + BN_free (BnG); + } + + if (ParamsPkey != NULL) { + EVP_PKEY_free (ParamsPkey); + } + + if (PgenCtx != NULL) { + EVP_PKEY_CTX_free (PgenCtx); + } + + return RetVal; + // MU_CHANGE [END] } /** @@ -135,9 +265,14 @@ DhSetParameter ( IN CONST UINT8 *Prime ) { - DH *Dh; - BIGNUM *BnP; - BIGNUM *BnG; + // MU_CHANGE [BEGIN] + DH_PKEY_CTX *Ctx; + BIGNUM *BnP; + BIGNUM *BnG; + + BnP = NULL; + BnG = NULL; + // MU_CHANGE [END] // // Check input parameters. @@ -151,15 +286,43 @@ DhSetParameter ( } // - // Set the generator and prime parameters for DH object. + // Convert prime bytes to BIGNUM and build generator BIGNUM. // MU_CHANGE // - Dh = (DH *)DhContext; - BnP = BN_bin2bn ((const unsigned char *)Prime, (int)(PrimeLength / 8), NULL); - BnG = BN_bin2bn ((const unsigned char *)&Generator, 1, NULL); - if ((BnP == NULL) || (BnG == NULL) || !DH_set0_pqg (Dh, BnP, NULL, BnG)) { + // MU_CHANGE [BEGIN] + BnP = BN_bin2bn ((const unsigned char *)Prime, (INT32)(PrimeLength / 8), NULL); + BnG = BN_new (); + if ((BnP == NULL) || (BnG == NULL)) { + // MU_CHANGE [END] goto Error; } + // MU_CHANGE [BEGIN] + if (!BN_set_word (BnG, (BN_ULONG)Generator)) { + goto Error; + } + + // + // Store into context, releasing any previous state. + // + Ctx = (DH_PKEY_CTX *)DhContext; + + if (Ctx->BnP != NULL) { + BN_free (Ctx->BnP); + } + + if (Ctx->BnG != NULL) { + BN_free (Ctx->BnG); + } + + if (Ctx->Pkey != NULL) { + EVP_PKEY_free (Ctx->Pkey); + Ctx->Pkey = NULL; + } + + Ctx->BnP = BnP; + Ctx->BnG = BnG; + + // MU_CHANGE [END] return TRUE; Error: @@ -204,10 +367,25 @@ DhGenerateKey ( IN OUT UINTN *PublicKeySize ) { - BOOLEAN RetVal; - DH *Dh; - BIGNUM *DhPubKey; - INTN Size; + // MU_CHANGE [BEGIN] + BOOLEAN RetVal; + DH_PKEY_CTX *Ctx; + OSSL_PARAM_BLD *Bld; + OSSL_PARAM *Params; + EVP_PKEY_CTX *ParamCtx; + EVP_PKEY *DhParamsPkey; + EVP_PKEY_CTX *KeygenCtx; + BIGNUM *BnPubKey; + INTN Size; + + RetVal = FALSE; + Bld = NULL; + Params = NULL; + ParamCtx = NULL; + DhParamsPkey = NULL; + KeygenCtx = NULL; + BnPubKey = NULL; + // MU_CHANGE [END] // // Check input parameters. @@ -220,22 +398,132 @@ DhGenerateKey ( return FALSE; } - Dh = (DH *)DhContext; + // MU_CHANGE [BEGIN] + Ctx = (DH_PKEY_CTX *)DhContext; - RetVal = (BOOLEAN)DH_generate_key (DhContext); - if (RetVal) { - DH_get0_key (Dh, (const BIGNUM **)&DhPubKey, NULL); - Size = BN_num_bytes (DhPubKey); - if ((Size > 0) && (*PublicKeySize < (UINTN)Size)) { - *PublicKeySize = Size; - return FALSE; - } + if ((Ctx->BnP == NULL) || (Ctx->BnG == NULL)) { + return FALSE; + } - if (PublicKey != NULL) { - BN_bn2bin (DhPubKey, PublicKey); - } + // + // Release any previously generated key. + // + if (Ctx->Pkey != NULL) { + EVP_PKEY_free (Ctx->Pkey); + Ctx->Pkey = NULL; + } + // + // Build an EVP_PKEY carrying only the DH domain parameters (p, g). + // + Bld = OSSL_PARAM_BLD_new (); + if (Bld == NULL) { + goto Fail; + } + + if (!OSSL_PARAM_BLD_push_BN (Bld, OSSL_PKEY_PARAM_FFC_P, Ctx->BnP)) { + goto Fail; + } + + if (!OSSL_PARAM_BLD_push_BN (Bld, OSSL_PKEY_PARAM_FFC_G, Ctx->BnG)) { + goto Fail; + } + + Params = OSSL_PARAM_BLD_to_param (Bld); + if (Params == NULL) { + goto Fail; + } + + ParamCtx = EVP_PKEY_CTX_new_from_name (NULL, "DH", NULL); + if (ParamCtx == NULL) { + goto Fail; + } + + if (EVP_PKEY_fromdata_init (ParamCtx) <= 0) { + goto Fail; + } + + if (EVP_PKEY_fromdata (ParamCtx, &DhParamsPkey, EVP_PKEY_KEY_PARAMETERS, Params) <= 0) { + goto Fail; + } + + // MU_CHANGE [END] + + // MU_CHANGE [BEGIN] + // + // Generate the DH key pair from the domain parameters. + // + KeygenCtx = EVP_PKEY_CTX_new (DhParamsPkey, NULL); + if (KeygenCtx == NULL) { + goto Fail; + } + + // MU_CHANGE [END] + + // MU_CHANGE [BEGIN] + if (EVP_PKEY_keygen_init (KeygenCtx) <= 0) { + goto Fail; + } + + // MU_CHANGE [END] + + // MU_CHANGE [BEGIN] + if (EVP_PKEY_keygen (KeygenCtx, &Ctx->Pkey) <= 0) { + goto Fail; + } + + // + // Extract the public key as a BIGNUM. + // + if (EVP_PKEY_get_bn_param (Ctx->Pkey, OSSL_PKEY_PARAM_PUB_KEY, &BnPubKey) <= 0) { + goto Fail; + } + + Size = BN_num_bytes (BnPubKey); + if ((Size > 0) && (*PublicKeySize < (UINTN)Size)) { + // MU_CHANGE [END] *PublicKeySize = Size; + // MU_CHANGE [BEGIN] + // + // Keep Ctx->Pkey; caller may retry with a larger buffer, but free the + // temporary BnPubKey extracted for this attempt to avoid leaking it. + // + BN_free (BnPubKey); + BnPubKey = NULL; + goto Fail; + } + + if (PublicKey != NULL) { + BN_bn2bin (BnPubKey, PublicKey); + } + + *PublicKeySize = Size; + RetVal = TRUE; + +Fail: + if (BnPubKey != NULL) { + BN_free (BnPubKey); + } + + if (KeygenCtx != NULL) { + EVP_PKEY_CTX_free (KeygenCtx); + } + + if (DhParamsPkey != NULL) { + EVP_PKEY_free (DhParamsPkey); + } + + if (ParamCtx != NULL) { + EVP_PKEY_CTX_free (ParamCtx); + } + + if (Params != NULL) { + OSSL_PARAM_free (Params); + } + + if (Bld != NULL) { + OSSL_PARAM_BLD_free (Bld); + // MU_CHANGE [END] } return RetVal; @@ -275,8 +563,25 @@ DhComputeKey ( IN OUT UINTN *KeySize ) { - BIGNUM *Bn; - INTN Size; + // MU_CHANGE [BEGIN] + BOOLEAN RetVal; + DH_PKEY_CTX *Ctx; + BIGNUM *BnPeerPubKey; + OSSL_PARAM_BLD *Bld; + OSSL_PARAM *Params; + EVP_PKEY_CTX *FromdataCtx; + EVP_PKEY *PeerPkey; + EVP_PKEY_CTX *DeriveCtx; + UINTN SharedKeyLen; + + RetVal = FALSE; + BnPeerPubKey = NULL; + Bld = NULL; + Params = NULL; + FromdataCtx = NULL; + PeerPkey = NULL; + DeriveCtx = NULL; + // MU_CHANGE [END] // // Check input parameters. @@ -289,24 +594,133 @@ DhComputeKey ( return FALSE; } - Bn = BN_bin2bn (PeerPublicKey, (UINT32)PeerPublicKeySize, NULL); - if (Bn == NULL) { + // MU_CHANGE [BEGIN] + Ctx = (DH_PKEY_CTX *)DhContext; + + if ((Ctx->Pkey == NULL) || (Ctx->BnP == NULL) || (Ctx->BnG == NULL)) { + // MU_CHANGE [END] return FALSE; } - Size = DH_compute_key (Key, Bn, DhContext); - if (Size < 0) { - BN_free (Bn); - return FALSE; + // MU_CHANGE [BEGIN] + // + // Convert peer's public key bytes to BIGNUM. + // + BnPeerPubKey = BN_bin2bn ((const unsigned char *)PeerPublicKey, (INT32)PeerPublicKeySize, NULL); + if (BnPeerPubKey == NULL) { + goto Fail; + // MU_CHANGE [END] } - if (*KeySize < (UINTN)Size) { - *KeySize = Size; - BN_free (Bn); - return FALSE; + // MU_CHANGE [BEGIN] + // + // Build a peer EVP_PKEY with p, g, and the peer's public key. + // + Bld = OSSL_PARAM_BLD_new (); + if (Bld == NULL) { + goto Fail; + // MU_CHANGE [END] } - *KeySize = Size; - BN_free (Bn); - return TRUE; + // MU_CHANGE [BEGIN] + if (!OSSL_PARAM_BLD_push_BN (Bld, OSSL_PKEY_PARAM_FFC_P, Ctx->BnP)) { + goto Fail; + } + + if (!OSSL_PARAM_BLD_push_BN (Bld, OSSL_PKEY_PARAM_FFC_G, Ctx->BnG)) { + goto Fail; + } + + if (!OSSL_PARAM_BLD_push_BN (Bld, OSSL_PKEY_PARAM_PUB_KEY, BnPeerPubKey)) { + goto Fail; + } + + Params = OSSL_PARAM_BLD_to_param (Bld); + if (Params == NULL) { + goto Fail; + } + + FromdataCtx = EVP_PKEY_CTX_new_from_name (NULL, "DH", NULL); + if (FromdataCtx == NULL) { + goto Fail; + } + + if (EVP_PKEY_fromdata_init (FromdataCtx) <= 0) { + goto Fail; + } + + if (EVP_PKEY_fromdata (FromdataCtx, &PeerPkey, EVP_PKEY_PUBLIC_KEY, Params) <= 0) { + goto Fail; + } + + // + // Derive the shared secret. + // + DeriveCtx = EVP_PKEY_CTX_new (Ctx->Pkey, NULL); + if (DeriveCtx == NULL) { + goto Fail; + } + + if (EVP_PKEY_derive_init (DeriveCtx) <= 0) { + goto Fail; + } + + if (EVP_PKEY_derive_set_peer (DeriveCtx, PeerPkey) <= 0) { + goto Fail; + } + + // + // First, query the required shared key length. + // + SharedKeyLen = 0; + if (EVP_PKEY_derive (DeriveCtx, NULL, &SharedKeyLen) <= 0) { + goto Fail; + } + + // + // If the caller-provided buffer is too small, report the required size + // while returning FALSE, preserving the previous behavior. + // + if (*KeySize < SharedKeyLen) { + *KeySize = SharedKeyLen; + goto Fail; + } + + // + // Derive the shared key into the caller-provided buffer. + // + if (EVP_PKEY_derive (DeriveCtx, Key, &SharedKeyLen) <= 0) { + goto Fail; + } + + *KeySize = SharedKeyLen; + RetVal = TRUE; + +Fail: + if (DeriveCtx != NULL) { + EVP_PKEY_CTX_free (DeriveCtx); + } + + if (PeerPkey != NULL) { + EVP_PKEY_free (PeerPkey); + } + + if (FromdataCtx != NULL) { + EVP_PKEY_CTX_free (FromdataCtx); + } + + if (Params != NULL) { + OSSL_PARAM_free (Params); + } + + if (Bld != NULL) { + OSSL_PARAM_BLD_free (Bld); + } + + if (BnPeerPubKey != NULL) { + BN_free (BnPeerPubKey); + } + + return RetVal; + // MU_CHANGE [END] } From 6a2ff40ac20fd1c42ea5e8548349c1e7fa0a5005 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:19:26 -0700 Subject: [PATCH 06/18] OpensslPkg/BaseCryptLib: Migrate CryptX509 to EVP_PKEY APIs Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pk/CryptX509.c | 85 ++++++++++++++++--- 1 file changed, 75 insertions(+), 10 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c index 25b7882a4..64e6f87f2 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c @@ -12,6 +12,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +// MU_CHANGE [BEGIN] +#include "Pk/CryptRsaPkeyCtx.h" +#include "Pk/CryptEcPkeyCtx.h" +#include +#include +// MU_CHANGE [END] /* OID*/ #define OID_EXT_KEY_USAGE { 0x55, 0x1D, 0x25 } @@ -591,9 +597,13 @@ RsaGetPublicKeyFromX509 ( OUT VOID **RsaContext ) { - BOOLEAN Status; - EVP_PKEY *Pkey; - X509 *X509Cert; + // MU_CHANGE [BEGIN] + BOOLEAN Status; + EVP_PKEY *Pkey; + X509 *X509Cert; + RSA_PKEY_CTX *RsaPkeyCtx; + + // MU_CHANGE [END] // // Check input parameters. @@ -627,8 +637,22 @@ RsaGetPublicKeyFromX509 ( // // Duplicate RSA Context from the retrieved EVP_PKEY. // - if ((*RsaContext = RSAPublicKey_dup (EVP_PKEY_get0_RSA (Pkey))) != NULL) { - Status = TRUE; + // MU_CHANGE [BEGIN] + RsaPkeyCtx = AllocateZeroPool (sizeof (RSA_PKEY_CTX)); + if (RsaPkeyCtx != NULL) { + RsaPkeyCtx->Pkey = EVP_PKEY_dup (Pkey); + if ((RsaPkeyCtx->Pkey != NULL) && RsaExtractBigNums (RsaPkeyCtx, RsaPkeyCtx->Pkey)) { + *RsaContext = (VOID *)RsaPkeyCtx; + Status = TRUE; + } else { + if (RsaPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (RsaPkeyCtx->Pkey); + } + + FreePool (RsaPkeyCtx); + } + + // MU_CHANGE [END] } _Exit: @@ -891,9 +915,16 @@ EcGetPublicKeyFromX509 ( OUT VOID **EcContext ) { - BOOLEAN Status; - EVP_PKEY *Pkey; - X509 *X509Cert; + // MU_CHANGE [BEGIN] + BOOLEAN Status; + EVP_PKEY *Pkey; + X509 *X509Cert; + EC_PKEY_CTX *EcPkeyCtx; + CHAR8 CurveNameBuf[64]; + UINTN CurveNameLen; + INT32 OpenSslNid; + + // MU_CHANGE [END] // // Check input parameters. @@ -927,8 +958,42 @@ EcGetPublicKeyFromX509 ( // // Duplicate EC Context from the retrieved EVP_PKEY. // - if ((*EcContext = EC_KEY_dup (EVP_PKEY_get0_EC_KEY (Pkey))) != NULL) { - Status = TRUE; + // MU_CHANGE [BEGIN] + EcPkeyCtx = AllocateZeroPool (sizeof (EC_PKEY_CTX)); + CurveNameLen = sizeof (CurveNameBuf); + if ((EcPkeyCtx != NULL) && + (EVP_PKEY_get_utf8_string_param ( + Pkey, + OSSL_PKEY_PARAM_GROUP_NAME, + CurveNameBuf, + CurveNameLen, + &CurveNameLen + ) == 1)) + { + OpenSslNid = OBJ_sn2nid (CurveNameBuf); + if (OpenSslNid == NID_undef) { + OpenSslNid = OBJ_ln2nid (CurveNameBuf); + } + + if (OpenSslNid == NID_undef) { + // + // Unknown/unsupported curve name: treat as error. + // + FreePool (EcPkeyCtx); + EcPkeyCtx = NULL; + } else { + EcPkeyCtx->Nid = OpenSslNid; + EcPkeyCtx->Pkey = EVP_PKEY_dup (Pkey); + if (EcPkeyCtx->Pkey != NULL) { + *EcContext = (VOID *)EcPkeyCtx; + Status = TRUE; + } else { + FreePool (EcPkeyCtx); + } + } + } else if (EcPkeyCtx != NULL) { + FreePool (EcPkeyCtx); + // MU_CHANGE [END] } _Exit: From f02840f10ed1baafd1d43d77e4bbe3473f1dff64 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sat, 21 Mar 2026 21:19:32 -0700 Subject: [PATCH 07/18] OpensslPkg/BaseCryptLib: Migrate CryptPem to EVP_PKEY APIs Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pem/CryptPem.c | 106 ++++++++++++++++-- 1 file changed, 96 insertions(+), 10 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pem/CryptPem.c b/OpensslPkg/Library/BaseCryptLib/Pem/CryptPem.c index d64cf3d68..d63251565 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pem/CryptPem.c +++ b/OpensslPkg/Library/BaseCryptLib/Pem/CryptPem.c @@ -8,6 +8,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "InternalCryptLib.h" #include +// MU_CHANGE [BEGIN] +#include +#include +#include +#include "Pk/CryptRsaPkeyCtx.h" +#include "Pk/CryptEcPkeyCtx.h" +// MU_CHANGE [END] /** Callback function for password phrase conversion used for retrieving the encrypted PEM. @@ -70,8 +77,13 @@ RsaGetPrivateKeyFromPem ( OUT VOID **RsaContext ) { - BOOLEAN Status; - BIO *PemBio; + // MU_CHANGE [BEGIN] + BOOLEAN Status; + BIO *PemBio; + EVP_PKEY *Pkey; + RSA_PKEY_CTX *RsaPkeyCtx; + + // MU_CHANGE [END] // // Check input parameters. @@ -97,6 +109,7 @@ RsaGetPrivateKeyFromPem ( } Status = FALSE; + Pkey = NULL; // MU_CHANGE // // Read encrypted PEM Data. @@ -113,15 +126,36 @@ RsaGetPrivateKeyFromPem ( // // Retrieve RSA Private Key from encrypted PEM data. // - *RsaContext = PEM_read_bio_RSAPrivateKey (PemBio, NULL, (pem_password_cb *)&PasswordCallback, (void *)Password); - if (*RsaContext != NULL) { - Status = TRUE; + // MU_CHANGE [BEGIN] + Pkey = PEM_read_bio_PrivateKey (PemBio, NULL, (pem_password_cb *)&PasswordCallback, (void *)Password); + if ((Pkey == NULL) || (EVP_PKEY_id (Pkey) != EVP_PKEY_RSA)) { + goto _Exit; + } + + RsaPkeyCtx = AllocateZeroPool (sizeof (RSA_PKEY_CTX)); + if (RsaPkeyCtx != NULL) { + RsaPkeyCtx->Pkey = Pkey; + if (RsaExtractBigNums (RsaPkeyCtx, RsaPkeyCtx->Pkey)) { + Pkey = NULL; + *RsaContext = (VOID *)RsaPkeyCtx; + Status = TRUE; + } else { + RsaFree ((VOID *)RsaPkeyCtx); + } + + // MU_CHANGE [END] } _Exit: // // Release Resources. // + // MU_CHANGE [BEGIN] + if (Pkey != NULL) { + EVP_PKEY_free (Pkey); + } + + // MU_CHANGE [END] BIO_free (PemBio); return Status; @@ -153,8 +187,16 @@ EcGetPrivateKeyFromPem ( OUT VOID **EcContext ) { - BOOLEAN Status; - BIO *PemBio; + // MU_CHANGE [BEGIN] + BOOLEAN Status; + BIO *PemBio; + EVP_PKEY *Pkey; + EC_PKEY_CTX *EcPkeyCtx; + CHAR8 CurveNameBuf[64]; + UINTN CurveNameLen; + INT32 OpenSslNid; + + // MU_CHANGE [END] // // Check input parameters. @@ -180,6 +222,7 @@ EcGetPrivateKeyFromPem ( } Status = FALSE; + Pkey = NULL; // MU_CHANGE // // Read encrypted PEM Data. @@ -196,15 +239,58 @@ EcGetPrivateKeyFromPem ( // // Retrieve EC Private Key from encrypted PEM data. // - *EcContext = PEM_read_bio_ECPrivateKey (PemBio, NULL, (pem_password_cb *)&PasswordCallback, (void *)Password); - if (*EcContext != NULL) { - Status = TRUE; + // MU_CHANGE [BEGIN] + Pkey = PEM_read_bio_PrivateKey (PemBio, NULL, (pem_password_cb *)&PasswordCallback, (void *)Password); + if ((Pkey == NULL) || (EVP_PKEY_id (Pkey) != EVP_PKEY_EC)) { + goto _Exit; + } + + CurveNameLen = sizeof (CurveNameBuf); + if (EVP_PKEY_get_utf8_string_param ( + Pkey, + OSSL_PKEY_PARAM_GROUP_NAME, + CurveNameBuf, + CurveNameLen, + &CurveNameLen + ) != 1) + { + goto _Exit; + } + + // + // Convert OpenSSL curve group name to an internal NID. + // Try short-name lookup first (for example, "prime256v1"), then + // fall back to long-name lookup if the short name is not recognized. + // + OpenSslNid = OBJ_sn2nid (CurveNameBuf); + if (OpenSslNid == NID_undef) { + OpenSslNid = OBJ_ln2nid (CurveNameBuf); + } + + if (OpenSslNid == NID_undef) { + goto _Exit; + } + + EcPkeyCtx = AllocateZeroPool (sizeof (EC_PKEY_CTX)); + if (EcPkeyCtx != NULL) { + EcPkeyCtx->Nid = OpenSslNid; + EcPkeyCtx->Pkey = Pkey; + Pkey = NULL; + *EcContext = (VOID *)EcPkeyCtx; + Status = TRUE; + // MU_CHANGE [END] } _Exit: // // Release Resources. // + // MU_CHANGE [BEGIN] + if (Pkey != NULL) { + EVP_PKEY_free (Pkey); + } + + // MU_CHANGE [END] BIO_free (PemBio); return Status; From ef12600a3a590f2a1e86a052acce862b0ea89f2e Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Mon, 30 Mar 2026 22:35:00 -0700 Subject: [PATCH 08/18] OpensslPkg/BaseCryptLib: Remove OPENSSL_NO_DEPRECATED override All BaseCryptLib files now use OpenSSL 3.x non-deprecated EVP_PKEY provider APIs. Remove the OPENSSL_NO_DEPRECATED=0 override from InternalCryptLib.h that was previously required to suppress deprecation warnings. Signed-off-by: Doug Flick --- OpensslPkg/Library/BaseCryptLib/InternalCryptLib.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/InternalCryptLib.h b/OpensslPkg/Library/BaseCryptLib/InternalCryptLib.h index cbb3378cd..461858a01 100644 --- a/OpensslPkg/Library/BaseCryptLib/InternalCryptLib.h +++ b/OpensslPkg/Library/BaseCryptLib/InternalCryptLib.h @@ -20,10 +20,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "CrtLibSupport.h" +// MU_CHANGE [BEGIN] // TODO: remove in near future to stop using deprecated OpenSSL APIs -#undef OPENSSL_NO_DEPRECATED // MU_CHANGE -#define OPENSSL_NO_DEPRECATED 0 - +// #define OPENSSL_NO_DEPRECATED 0 +// MU_CHANGE [END] #include #if OPENSSL_VERSION_NUMBER < 0x10100000L From f52eaf61d820a65b6eaeb27a424c552c519b4066 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Tue, 24 Mar 2026 20:53:13 +0000 Subject: [PATCH 09/18] OpensslPkg/BaseCryptLib: Fix memory leak in RsaExtractBigNums - RsaExtractBigNums now cleans up partially extracted BIGNUMs on failure instead of leaving them dangling in the RSA_PKEY_CTX. - RsaGetPublicKeyFromX509 error path uses RsaFree() for proper cleanup of all RSA_PKEY_CTX resources. - Fix RsaGetKey doc comment: BigNumber=NULL with sufficient BnSize returns TRUE (size query), not FALSE. Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pk/CryptRsaBasic.c | 60 +++++++++++++++---- .../Library/BaseCryptLib/Pk/CryptRsaExt.c | 39 ++++++++---- 2 files changed, 75 insertions(+), 24 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c index 06d3177d0..f2c3292d9 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c @@ -216,11 +216,11 @@ RsaExtractBigNums ( // Extract public components (required). // if (EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_N, &RsaPkeyCtx->N) != 1) { - return FALSE; + goto Fail; // MU_CHANGE } if (EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_E, &RsaPkeyCtx->E) != 1) { - return FALSE; + goto Fail; // MU_CHANGE } // @@ -234,6 +234,30 @@ RsaExtractBigNums ( EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_COEFFICIENT1, &RsaPkeyCtx->QInv); return TRUE; + // MU_CHANGE [BEGIN] + +Fail: + // + // Clean up any partially extracted BIGNUMs on failure. + // + BN_free (RsaPkeyCtx->N); + BN_free (RsaPkeyCtx->E); + BN_clear_free (RsaPkeyCtx->D); + BN_clear_free (RsaPkeyCtx->P); + BN_clear_free (RsaPkeyCtx->Q); + BN_clear_free (RsaPkeyCtx->Dp); + BN_clear_free (RsaPkeyCtx->Dq); + BN_clear_free (RsaPkeyCtx->QInv); + RsaPkeyCtx->N = NULL; + RsaPkeyCtx->E = NULL; + RsaPkeyCtx->D = NULL; + RsaPkeyCtx->P = NULL; + RsaPkeyCtx->Q = NULL; + RsaPkeyCtx->Dp = NULL; + RsaPkeyCtx->Dq = NULL; + RsaPkeyCtx->QInv = NULL; + return FALSE; + // MU_CHANGE [END] } /** @@ -266,6 +290,7 @@ GetEvpMdFromHashSize ( return NULL; } } + // MU_CHANGE [END] /** @@ -371,6 +396,7 @@ RsaSetKey ( // MU_CHANGE [BEGIN] RSA_PKEY_CTX *RsaPkeyCtx; BIGNUM **BnTarget; + // MU_CHANGE [END] // @@ -395,12 +421,12 @@ RsaSetKey ( // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->N; break; - // MU_CHANGE [END] + // MU_CHANGE [END] case RsaKeyE: // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->E; break; - // MU_CHANGE [END] + // MU_CHANGE [END] case RsaKeyD: BnTarget = &RsaPkeyCtx->D; // MU_CHANGE break; @@ -408,7 +434,7 @@ RsaSetKey ( // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->P; break; - // MU_CHANGE [END] + // MU_CHANGE [END] case RsaKeyQ: BnTarget = &RsaPkeyCtx->Q; // MU_CHANGE break; @@ -416,12 +442,12 @@ RsaSetKey ( // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->Dp; break; - // MU_CHANGE [END] + // MU_CHANGE [END] case RsaKeyDq: // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->Dq; break; - // MU_CHANGE [END] + // MU_CHANGE [END] case RsaKeyQInv: // MU_CHANGE [BEGIN] BnTarget = &RsaPkeyCtx->QInv; @@ -429,7 +455,8 @@ RsaSetKey ( default: return FALSE; } - // MU_CHANGE [END] + + // MU_CHANGE [END] // MU_CHANGE [BEGIN] // @@ -441,18 +468,20 @@ RsaSetKey ( BN_free (*BnTarget); } else { BN_clear_free (*BnTarget); - // MU_CHANGE [END] + // MU_CHANGE [END] } // MU_CHANGE [BEGIN] *BnTarget = NULL; } - // MU_CHANGE [END] + + // MU_CHANGE [END] // MU_CHANGE [BEGIN] return TRUE; } - // MU_CHANGE [END] + + // MU_CHANGE [END] // MU_CHANGE [BEGIN] // @@ -461,7 +490,7 @@ RsaSetKey ( *BnTarget = BN_bin2bn (BigNumber, (UINT32)BnSize, *BnTarget); if (*BnTarget == NULL) { return FALSE; - // MU_CHANGE [END] + // MU_CHANGE [END] } return TRUE; @@ -502,6 +531,7 @@ RsaPkcs1Verify ( EVP_PKEY_CTX *PkeyCtx; CONST EVP_MD *Md; BOOLEAN Result; + // MU_CHANGE [END] // @@ -523,6 +553,7 @@ RsaPkcs1Verify ( if (Md == NULL) { return FALSE; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -539,6 +570,7 @@ RsaPkcs1Verify ( if (Pkey == NULL) { return FALSE; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -546,12 +578,14 @@ RsaPkcs1Verify ( if (PkeyCtx == NULL) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] if (EVP_PKEY_verify_init (PkeyCtx) != 1) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -570,7 +604,7 @@ RsaPkcs1Verify ( _Exit: if (PkeyCtx != NULL) { EVP_PKEY_CTX_free (PkeyCtx); - // MU_CHANGE [END] + // MU_CHANGE [END] } return Result; // MU_CHANGE diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c index 36c78516a..8511334b6 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c @@ -61,6 +61,7 @@ GetEvpMdFromHashSize ( return NULL; } } + // MU_CHANGE [END] /** @@ -76,7 +77,10 @@ GetEvpMdFromHashSize ( If RsaContext is NULL, then return FALSE. If BnSize is NULL, then return FALSE. - If BnSize is large enough but BigNumber is NULL, then return FALSE. + // MU_CHANGE [BEGIN] + If BnSize is large enough but BigNumber is NULL, then return TRUE with BnSize set to + the required size. + // MU_CHANGE [END] @param[in, out] RsaContext Pointer to RSA context being set. @param[in] KeyTag Tag of RSA key component being set. @@ -102,6 +106,7 @@ RsaGetKey ( RSA_PKEY_CTX *RsaPkeyCtx; BIGNUM *BnKey; UINTN Size; + // MU_CHANGE [END] // @@ -240,6 +245,7 @@ RsaGenerateKey ( EVP_PKEY *Pkey; BIGNUM *KeyE; BOOLEAN RetVal; + // MU_CHANGE [END] // @@ -263,7 +269,7 @@ RsaGenerateKey ( KeyGenCtx = EVP_PKEY_CTX_new_from_name (NULL, "RSA", NULL); if (KeyGenCtx == NULL) { - // MU_CHANGE [END] + // MU_CHANGE [END] return FALSE; } @@ -275,6 +281,7 @@ RsaGenerateKey ( if (EVP_PKEY_CTX_set_rsa_keygen_bits (KeyGenCtx, (INT32)ModulusLength) != 1) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -284,25 +291,28 @@ RsaGenerateKey ( if (PublicExponent != NULL) { KeyE = BN_new (); if (KeyE == NULL) { - // MU_CHANGE [END] + // MU_CHANGE [END] goto _Exit; } - // MU_CHANGE + + // MU_CHANGE if (BN_bin2bn (PublicExponent, (UINT32)PublicExponentSize, KeyE) == NULL) { goto _Exit; } -// MU_CHANGE [BEGIN] + + // MU_CHANGE [BEGIN] if (EVP_PKEY_CTX_set1_rsa_keygen_pubexp (KeyGenCtx, KeyE) != 1) { goto _Exit; } -// MU_CHANGE [END] + + // MU_CHANGE [END] } // MU_CHANGE [BEGIN] if (EVP_PKEY_keygen (KeyGenCtx, &Pkey) != 1) { goto _Exit; - // MU_CHANGE [END] + // MU_CHANGE [END] } // MU_CHANGE [BEGIN] @@ -365,6 +375,7 @@ RsaCheckKey ( EVP_PKEY *Pkey; EVP_PKEY_CTX *PkeyCtx; INT32 Result; + // MU_CHANGE [END] // @@ -397,7 +408,7 @@ RsaCheckKey ( if (Result != 1) { return FALSE; - // MU_CHANGE [END] + // MU_CHANGE [END] } return TRUE; @@ -445,6 +456,7 @@ RsaPkcs1Sign ( CONST EVP_MD *Md; UINTN RequiredSize; BOOLEAN Result; + // MU_CHANGE [END] // @@ -460,7 +472,7 @@ RsaPkcs1Sign ( // Md = GetEvpMdFromHashSize (HashSize); if (Md == NULL) { - // MU_CHANGE [END] + // MU_CHANGE [END] return FALSE; } @@ -474,7 +486,7 @@ RsaPkcs1Sign ( // Pkey = RsaBuildEvpPkey (RsaPkeyCtx); if (Pkey == NULL) { - // MU_CHANGE [END] + // MU_CHANGE [END] return FALSE; } @@ -487,12 +499,14 @@ RsaPkcs1Sign ( *SigSize = RequiredSize; return FALSE; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] if (Signature == NULL) { return FALSE; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -500,18 +514,21 @@ RsaPkcs1Sign ( if (PkeyCtx == NULL) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] if (EVP_PKEY_sign_init (PkeyCtx) != 1) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] if (EVP_PKEY_CTX_set_rsa_padding (PkeyCtx, RSA_PKCS1_PADDING) <= 0) { goto _Exit; } + // MU_CHANGE [END] // MU_CHANGE [BEGIN] @@ -527,7 +544,7 @@ RsaPkcs1Sign ( _Exit: if (PkeyCtx != NULL) { EVP_PKEY_CTX_free (PkeyCtx); - // MU_CHANGE [END] + // MU_CHANGE [END] } return Result; // MU_CHANGE From 668f8362e318b0ba38bfa4479cda8c83cb0242d7 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:17:16 -0700 Subject: [PATCH 10/18] OpensslPkg: Update openssl submodule to 4.0.0-beta1 Update the openssl submodule pointer to the openssl-4.0.0-beta1 tag. Signed-off-by: Doug Flick --- OpensslPkg/Library/OpensslLib/openssl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpensslPkg/Library/OpensslLib/openssl b/OpensslPkg/Library/OpensslLib/openssl index 67b5686b4..470ad1757 160000 --- a/OpensslPkg/Library/OpensslLib/openssl +++ b/OpensslPkg/Library/OpensslLib/openssl @@ -1 +1 @@ -Subproject commit 67b5686b4419b4cb8caa502711c41815f5279751 +Subproject commit 470ad1757ee81b9a92ae02c26e6a6076b3027bd6 From dc365bb0599d19778d7f226aaa320354977f9148 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:17:39 -0700 Subject: [PATCH 11/18] OpensslPkg: Regenerate OpensslGen for OpenSSL 4.0.0-beta1 Regenerate all intermediate files in OpensslGen including headers, architecture-specific assembly files, DER encoding sources, and the new .inc files generated from .inc.in templates introduced in OpenSSL 4.0. Signed-off-by: Doug Flick --- .../AARCH64-ELF/crypto/aes/aes-sha1-armv8.S | 5147 ++++++++ .../AARCH64-ELF/crypto/aes/aes-sha256-armv8.S | 5483 ++++++++ .../AARCH64-ELF/crypto/aes/aes-sha512-armv8.S | 10305 +++++++++++++++ .../AARCH64-ELF/crypto/arm64cpuid.S | 8 + .../AARCH64-ELF/crypto/bn/armv8-mont.S | 6 +- .../crypto/ec/ecp_nistz256-armv8.S | 2 +- .../crypto/modes/aes-gcm-armv8_64.S | 2 +- .../AARCH64-ELF/crypto/modes/ghashv8-armx.S | 2 +- .../AARCH64-ELF/crypto/sha/keccak1600-armv8.S | 2 +- .../AARCH64-ELF/crypto/sha/sha1-armv8.S | 2 +- .../AARCH64-ELF/crypto/sha/sha256-armv8.S | 6 +- .../AARCH64-ELF/crypto/sha/sha512-armv8.S | 6 +- .../AARCH64-PE/crypto/aes/aes-sha1-armv8.S | 5151 ++++++++ .../AARCH64-PE/crypto/aes/aes-sha256-armv8.S | 5487 ++++++++ .../AARCH64-PE/crypto/aes/aes-sha512-armv8.S | 10309 ++++++++++++++++ .../OpensslGen/AARCH64-PE/crypto/arm64cpuid.S | 10 + .../AARCH64-PE/crypto/bn/armv8-mont.S | 6 +- .../AARCH64-PE/crypto/ec/ecp_nistz256-armv8.S | 2 +- .../crypto/modes/aes-gcm-armv8_64.S | 2 +- .../AARCH64-PE/crypto/modes/ghashv8-armx.S | 2 +- .../AARCH64-PE/crypto/sha/keccak1600-armv8.S | 2 +- .../AARCH64-PE/crypto/sha/sha1-armv8.S | 2 +- .../AARCH64-PE/crypto/sha/sha256-armv8.S | 6 +- .../AARCH64-PE/crypto/sha/sha512-armv8.S | 6 +- .../OpensslGen/IA32-GCC/crypto/aes/aes-586.S | 5 +- .../IA32-GCC/crypto/aes/aesni-x86.S | 5 +- .../OpensslGen/IA32-GCC/crypto/bn/x86-gf2m.S | 6 +- .../OpensslGen/IA32-GCC/crypto/bn/x86-mont.S | 4 +- .../IA32-GCC/crypto/ec/ecp_nistz256-x86.S | 5 +- .../IA32-GCC/crypto/modes/ghash-x86.S | 6 +- .../OpensslGen/IA32-GCC/crypto/sha/sha1-586.S | 5 +- .../IA32-GCC/crypto/sha/sha256-586.S | 6 +- .../IA32-GCC/crypto/sha/sha512-586.S | 6 +- .../OpensslGen/IA32-GCC/crypto/x86cpuid.S | 145 +- .../IA32-MSFT/crypto/aes/aes-586.nasm | 5 +- .../IA32-MSFT/crypto/aes/aesni-x86.nasm | 5 +- .../IA32-MSFT/crypto/bn/x86-gf2m.nasm | 6 +- .../IA32-MSFT/crypto/bn/x86-mont.nasm | 4 +- .../IA32-MSFT/crypto/ec/ecp_nistz256-x86.nasm | 5 +- .../IA32-MSFT/crypto/modes/ghash-x86.nasm | 6 +- .../IA32-MSFT/crypto/sha/sha1-586.nasm | 5 +- .../IA32-MSFT/crypto/sha/sha256-586.nasm | 6 +- .../IA32-MSFT/crypto/sha/sha512-586.nasm | 6 +- .../OpensslGen/IA32-MSFT/crypto/x86cpuid.nasm | 139 +- .../X64-GCC/crypto/aes/aes-cfb-avx512.s | 766 ++ .../X64-GCC/crypto/aes/aes-x86_64.s | 2 +- .../X64-GCC/crypto/aes/aesni-sha1-x86_64.s | 2 +- .../X64-GCC/crypto/aes/aesni-sha256-x86_64.s | 2 +- .../X64-GCC/crypto/aes/aesni-x86_64.s | 2 +- .../X64-GCC/crypto/bn/rsaz-2k-avxifma.s | 1 + .../X64-GCC/crypto/bn/rsaz-3k-avxifma.s | 3 +- .../X64-GCC/crypto/bn/rsaz-4k-avxifma.s | 3 +- .../X64-GCC/crypto/bn/x86_64-gf2m.s | 2 +- .../X64-GCC/crypto/bn/x86_64-mont.s | 2 +- .../X64-GCC/crypto/bn/x86_64-mont5.s | 2 +- .../X64-GCC/crypto/ec/x25519-x86_64.s | 2 +- .../X64-GCC/crypto/modes/aesni-gcm-x86_64.s | 2 +- .../X64-GCC/crypto/modes/ghash-x86_64.s | 2 +- .../X64-GCC/crypto/sha/keccak1600-x86_64.s | 2 +- .../X64-GCC/crypto/sha/sha1-mb-x86_64.s | 2 +- .../X64-GCC/crypto/sha/sha1-x86_64.s | 2 +- .../X64-GCC/crypto/sha/sha256-mb-x86_64.s | 2 +- .../X64-GCC/crypto/sha/sha256-x86_64.s | 21 +- .../X64-GCC/crypto/sha/sha512-x86_64.s | 346 +- .../X64-GCC/crypto/sm3/sm3-x86_64.S | 272 + .../OpensslGen/X64-GCC/crypto/x86_64cpuid.s | 37 - .../X64-MSFT/crypto/aes/aes-cfb-avx512.nasm | 784 ++ .../X64-MSFT/crypto/aes/aes-x86_64.nasm | 6 +- .../crypto/aes/aesni-sha1-x86_64.nasm | 4 +- .../crypto/aes/aesni-sha256-x86_64.nasm | 4 +- .../X64-MSFT/crypto/aes/aesni-x86_64.nasm | 5 +- .../X64-MSFT/crypto/aes/aesni-xts-avx512.nasm | 1340 +- .../X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm | 79 + .../X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm | 29 +- .../X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm | 29 +- .../X64-MSFT/crypto/bn/x86_64-gf2m.nasm | 4 +- .../X64-MSFT/crypto/bn/x86_64-mont.nasm | 5 +- .../X64-MSFT/crypto/bn/x86_64-mont5.nasm | 5 +- .../X64-MSFT/crypto/ec/x25519-x86_64.nasm | 5 +- .../crypto/modes/aesni-gcm-x86_64.nasm | 5 +- .../X64-MSFT/crypto/modes/ghash-x86_64.nasm | 4 +- .../crypto/sha/keccak1600-x86_64.nasm | 5 +- .../X64-MSFT/crypto/sha/sha1-mb-x86_64.nasm | 5 +- .../X64-MSFT/crypto/sha/sha1-x86_64.nasm | 4 +- .../X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm | 5 +- .../X64-MSFT/crypto/sha/sha256-x86_64.nasm | 23 +- .../X64-MSFT/crypto/sha/sha512-x86_64.nasm | 385 +- .../X64-MSFT/crypto/sm3/sm3-x86_64.nasm | 287 + .../X64-MSFT/crypto/x86_64cpuid.nasm | 22 - .../OpensslGen/include/openssl/asn1.h | 109 +- .../OpensslGen/include/openssl/asn1t.h | 8 +- .../OpensslGen/include/openssl/bio.h | 27 +- .../OpensslGen/include/openssl/cmp.h | 55 +- .../OpensslGen/include/openssl/cms.h | 77 +- .../OpensslGen/include/openssl/comp.h | 8 +- .../OpensslGen/include/openssl/conf.h | 8 +- .../include/openssl/configuration-ec.h | 49 +- .../include/openssl/configuration-noec.h | 49 +- .../OpensslGen/include/openssl/core_names.h | 35 +- .../OpensslGen/include/openssl/crmf.h | 28 +- .../OpensslGen/include/openssl/crypto.h | 66 +- .../OpensslGen/include/openssl/ct.h | 16 +- .../OpensslGen/include/openssl/e_os2.h | 293 + .../OpensslGen/include/openssl/err.h | 58 +- .../OpensslGen/include/openssl/ess.h | 25 +- .../OpensslGen/include/openssl/ocsp.h | 62 +- .../OpensslGen/include/openssl/opensslv.h | 18 +- .../OpensslGen/include/openssl/pkcs12.h | 28 +- .../OpensslGen/include/openssl/pkcs7.h | 51 +- .../OpensslGen/include/openssl/safestack.h | 147 +- .../OpensslGen/include/openssl/srp.h | 24 +- .../OpensslGen/include/openssl/ssl.h | 140 +- .../OpensslGen/include/openssl/ui.h | 8 +- .../OpensslGen/include/openssl/x509.h | 238 +- .../OpensslGen/include/openssl/x509_acert.h | 32 +- .../OpensslGen/include/openssl/x509_vfy.h | 109 +- .../OpensslGen/include/openssl/x509v3.h | 272 +- .../providers/common/der/der_hkdf_gen.c | 39 + .../providers/common/include/prov/der_hkdf.h | 39 + .../implementations/asymciphers/rsa_enc.inc | 439 + .../implementations/asymciphers/sm2_enc.inc | 102 + .../ciphers/cipher_aes_cbc_hmac_sha.inc | 492 + .../ciphers/cipher_aes_cbc_hmac_sha_etm.inc | 179 + .../ciphers/cipher_aes_gcm_siv.inc | 158 + .../ciphers/cipher_aes_ocb.inc | 204 + .../ciphers/cipher_aes_siv.inc | 158 + .../ciphers/cipher_aes_wrp.inc | 47 + .../ciphers/cipher_aes_xts.inc | 47 + .../ciphers/cipher_chacha20.inc | 133 + .../ciphers/cipher_chacha20_poly1305.inc | 225 + .../implementations/ciphers/cipher_null.inc | 115 + .../ciphers/cipher_rc4_hmac_md5.inc | 187 + .../ciphers/cipher_sm4_xts.inc | 47 + .../implementations/ciphers/ciphercommon.inc | 542 + .../ciphers/ciphercommon_ccm.inc | 245 + .../ciphers/ciphercommon_gcm.inc | 304 + .../implementations/digests/blake2_prov.inc | 84 + .../implementations/digests/cshake_prov.inc | 157 + .../implementations/digests/digestcommon.inc | 91 + .../implementations/digests/mdc2_prov.inc | 47 + .../digests/ml_dsa_mu_prov.inc | 151 + .../implementations/digests/sha2_prov.inc | 47 + .../implementations/digests/sha3_prov.inc | 119 + .../encode_decode/decode_der2key.inc | 47 + .../encode_decode/decode_epki2pki.inc | 47 + .../encode_decode/decode_pem2der.inc | 65 + .../encode_decode/decode_pvk2key.inc | 47 + .../encode_decode/decode_spki2typespki.inc | 47 + .../encode_decode/encode_key2any.inc | 91 + .../encode_decode/encode_key2ms.inc | 47 + .../implementations/exchange/dh_exch.inc | 349 + .../implementations/exchange/ecdh_exch.inc | 426 + .../implementations/exchange/ecx_exch.inc | 57 + .../include/prov/blake2_params.inc | 154 + .../providers/implementations/kdfs/argon2.inc | 242 + .../providers/implementations/kdfs/hkdf.inc | 612 + .../implementations/kdfs/hmacdrbg_kdf.inc | 146 + .../providers/implementations/kdfs/kbkdf.inc | 322 + .../implementations/kdfs/krb5kdf.inc | 133 + .../providers/implementations/kdfs/pbkdf1.inc | 146 + .../providers/implementations/kdfs/pbkdf2.inc | 183 + .../implementations/kdfs/pkcs12kdf.inc | 166 + .../providers/implementations/kdfs/pvkkdf.inc | 133 + .../providers/implementations/kdfs/scrypt.inc | 173 + .../implementations/kdfs/snmpkdf.inc | 133 + .../implementations/kdfs/srtpkdf.inc | 172 + .../providers/implementations/kdfs/sshkdf.inc | 255 + .../providers/implementations/kdfs/sskdf.inc | 252 + .../implementations/kdfs/tls1_prf.inc | 247 + .../implementations/kdfs/x942kdf.inc | 345 + .../implementations/kdfs/x963kdf.inc | 242 + .../providers/implementations/kem/ec_kem.inc | 65 + .../providers/implementations/kem/ecx_kem.inc | 65 + .../implementations/kem/ml_kem_kem.inc | 47 + .../providers/implementations/kem/rsa_kem.inc | 118 + .../implementations/keymgmt/dh_kmgmt.inc | 732 ++ .../implementations/keymgmt/dsa_kmgmt.inc | 510 + .../implementations/keymgmt/ecx_kmgmt.inc | 562 + .../implementations/keymgmt/lms_kmgmt.inc | 151 + .../keymgmt/mac_legacy_kmgmt.inc | 397 + .../implementations/keymgmt/ml_dsa_kmgmt.inc | 331 + .../implementations/keymgmt/ml_kem_kmgmt.inc | 384 + .../implementations/keymgmt/mlx_kmgmt.inc | 314 + .../implementations/keymgmt/slh_dsa_kmgmt.inc | 305 + .../keymgmt/template_kmgmt.inc | 283 + .../implementations/macs/cmac_prov.inc | 171 + .../implementations/macs/gmac_prov.inc | 128 + .../implementations/macs/hmac_prov.inc | 196 + .../implementations/macs/kmac_prov.inc | 270 + .../implementations/macs/poly1305_prov.inc | 84 + .../implementations/macs/siphash_prov.inc | 159 + .../implementations/rands/drbg_ctr.inc | 507 + .../implementations/rands/drbg_hash.inc | 527 + .../implementations/rands/drbg_hmac.inc | 527 + .../implementations/rands/fips_crng_test.inc | 107 + .../implementations/rands/seed_src.inc | 88 + .../implementations/rands/seed_src_jitter.inc | 88 + .../implementations/rands/test_rng.inc | 239 + .../implementations/signature/dsa_sig.inc | 382 + .../implementations/signature/ecdsa_sig.inc | 451 + .../implementations/signature/eddsa_sig.inc | 139 + .../implementations/signature/ml_dsa_sig.inc | 262 + .../implementations/signature/rsa_sig.inc | 642 + .../implementations/signature/slh_dsa_sig.inc | 128 + .../implementations/signature/sm2_sig.inc | 213 + .../implementations/skeymgmt/generic.inc | 46 + .../implementations/storemgmt/file_store.inc | 90 + .../storemgmt/file_store_any2obj.inc | 47 + .../storemgmt/winstore_store.inc | 65 + 209 files changed, 66493 insertions(+), 1901 deletions(-) create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha1-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha256-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha512-armv8.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-cfb-avx512.s create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sm3/sm3-x86_64.S create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sm3/sm3-x86_64.nasm create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/e_os2.h create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/der/der_hkdf_gen.c create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/include/prov/der_hkdf.h create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/rsa_enc.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/sm2_enc.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_gcm_siv.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_ocb.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_siv.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_wrp.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_xts.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20_poly1305.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_null.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_rc4_hmac_md5.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_sm4_xts.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_ccm.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_gcm.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/blake2_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/cshake_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/digestcommon.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/mdc2_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/ml_dsa_mu_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha2_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha3_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_der2key.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_epki2pki.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pem2der.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pvk2key.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_spki2typespki.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2any.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2ms.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/dh_exch.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecdh_exch.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecx_exch.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/include/prov/blake2_params.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/argon2.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hmacdrbg_kdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/kbkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/krb5kdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf1.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf2.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pkcs12kdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pvkkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/scrypt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/snmpkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/srtpkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sshkdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sskdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/tls1_prf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x942kdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x963kdf.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ec_kem.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ecx_kem.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ml_kem_kem.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/rsa_kem.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dh_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dsa_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ecx_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/lms_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mac_legacy_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_dsa_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_kem_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mlx_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/slh_dsa_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/template_kmgmt.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/cmac_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/gmac_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/hmac_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/kmac_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/poly1305_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/siphash_prov.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_ctr.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hash.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hmac.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/fips_crng_test.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src_jitter.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/test_rng.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/dsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ecdsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/eddsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ml_dsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/rsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/slh_dsa_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/sm2_sig.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/skeymgmt/generic.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store_any2obj.inc create mode 100644 OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/winstore_store.inc diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S new file mode 100644 index 000000000..619fc6b69 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S @@ -0,0 +1,5147 @@ +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * Description: + * + * Combined Enc/Auth Primitive = aes128cbc/sha1_hmac + * + * Operations: + * + * out = encrypt-AES128CBC(in) + * return_hash_ptr = SHA1(o_key_pad | SHA1(i_key_pad | out)) + * + * Prototype: + * int asm_aescbc_sha1_hmac(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_aescbc_sha1_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6: + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 -- temp register for SHA1 + * v20 -- ABCD copy (q20) + * v21 -- sha working state (q21) + * v22 -- sha working state (q22) + * v23 -- temp register for SHA1 + * v24 -- sha state ABCD + * v25 -- sha state E + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined. For AES partial blocks the user is required to pad the input + * to modulus 16 = 0. + * The variable "dlen" must be a multiple of 8 and greater or equal + * to "clen". This constraint is strictly related to the needs of the IPSec + * ESP packet. Encrypted payload is hashed along with the 8 byte ESP header, + * forming ICV. Speed gain is achieved by doing both things at the same time, + * hence lengths are required to match at least at the cipher level. + * + * Short lengths are not optimized at < 12 AES blocks + */ + +.globl asm_aescbc_sha1_hmac +.type asm_aescbc_sha1_hmac,%function + +.section .rodata +.align 4 +.Lrcon: +.word 0x5a827999, 0x5a827999, 0x5a827999, 0x5a827999 +.word 0x6ed9eba1, 0x6ed9eba1, 0x6ed9eba1, 0x6ed9eba1 +.word 0x8f1bbcdc, 0x8f1bbcdc, 0x8f1bbcdc, 0x8f1bbcdc +.word 0xca62c1d6, 0xca62c1d6, 0xca62c1d6, 0xca62c1d6 +.text + +asm_aescbc_sha1_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + + /* + * init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + cmp x10,12 + b.lt .Lenc_short_cases + + + ld1 {v3.16b},[x6] + + ld1 {v0.16b},[x0],16 + mov x11,x2 + lsr x12,x11,6 + /* + * now we can do the loop prolog, 1st aes sequence of 4 blocks + */ + ldp q8,q9,[x9],32 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + ldp q10,q11,[x9],32 + prfm PLDL1KEEP,[x0,64] + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x1,64] + ldp q12,q13,[x9],32 + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + + ld1 {v1.16b},[x0],16 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + ldp q14,q15,[x9],32 + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + ldp q16,q17,[x9],32 + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_enc_prolog_0 +.Laes192_enc_prolog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_prolog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v1.16b,v1.16b,v0.16b + + + + ld1 {v2.16b},[x0],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,0*64] + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + + st1 {v0.16b},[x1],16 + ld1 {v26.16b},[x3],16 + prfm PLDL1KEEP,[x8,2*64] + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,4*64] + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,6*64] + b.lt .Laes128_enc_prolog_1 +.Laes192_enc_prolog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_prolog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + prfm PLDL1KEEP,[x8,8*64] + eor v2.16b,v2.16b,v1.16b + + + + ld1 {v3.16b},[x0],16 + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + mov x9,x0 + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,10*64] + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + ld1 {v27.16b},[x3],16 + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,12*64] + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,14*64] + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt .Laes128_enc_prolog_2 +.Laes192_enc_prolog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_prolog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + ld1 {v28.16b},[x3],16 + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + + sub x15,x12,1 + and x13,x10,3 + b.lt .Laes128_enc_prolog_3 +.Laes192_enc_prolog_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_prolog_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + ldp q4,q5,[x8],32 + /* + * Note, aes_blocks_left := number after + * the main (sha) block is done. Can be 0 + */ + + + st1 {v3.16b},[x1],16 + ld1 {v29.16b},[x3],16 + + ldp q6,q7,[x8] + + + sub x8,x5,x2 + + sub x5,x5,64 + /* + * main combined loop CBC + */ +.Lenc_main_loop: + /* + * because both mov, rev32 and eor have a busy cycle, this takes longer + * than it looks. + * That's OK since there are 6 cycles before we can use the load anyway; + * so this goes as fast as it can without SW pipelining (too complicated + * given the code size) + */ + rev32 v26.16b,v26.16b + + ld1 {v0.16b},[x0],16 + mov v20.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + rev32 v28.16b,v28.16b + + ld1 {v1.16b},[x0],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + + rev32 v29.16b,v29.16b + sha1c q24,s25,v19.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + sha1c q24,s22,v23.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + cmp x16,#12 + b.lt .Laes128_enc_mainloop_0 +.Laes192_enc_mainloop_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_mainloop_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + sha1su0 v26.4s,v27.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + eor v1.16b,v1.16b,v0.16b + + st1 {v0.16b},[x1],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v28.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + add v23.4s,v5.4s,v29.4s + sha1su1 v27.4s,v26.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha1p q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + add x9,x9,64 + sha1su0 v26.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + add v23.4s,v5.4s,v27.4s + sha1p q24,s21,v19.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + b.lt .Laes128_enc_mainloop_1 +.Laes192_enc_mainloop_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_mainloop_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v27.4s,v26.4s + + + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + add v19.4s,v6.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + + ld1 {v3.16b},[x0],16 + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + b.lt .Laes128_enc_mainloop_2 +.Laes192_enc_mainloop_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_mainloop_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + + + eor v3.16b,v3.16b,v2.16b + + sha1su1 v28.4s,v27.4s + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + + st1 {v2.16b},[x1],16 + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v7.4s,v26.4s + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + add v23.4s,v7.4s,v27.4s + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + sub x15,x15,1 + add v19.4s,v7.4s,v28.4s + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + add v23.4s,v7.4s,v29.4s + b.lt .Laes128_enc_mainloop_3 +.Laes192_enc_mainloop_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_mainloop_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp q26,q27,[x3],32 + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + st1 {v3.16b},[x1],16 + + ldp q28,q29,[x3],32 + + sub x5,x5,64 + cbnz x15,.Lenc_main_loop + + mov w15,0x80 + /* + * epilog, process remaining aes blocks and b-2 sha block + * do this inline (no loop) to overlap with the sha part + * note there are 0-3 aes blocks left. + */ + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + mov v20.16b,v24.16b + cbz x13, .Lbm2fromQ0 + + /* + * mode op 0 + * read next aes block, update aes_ptr_in + */ + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + add v19.4s,v4.4s,v26.4s + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s25,v19.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + add v19.4s,v4.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + sha1c q24,s22,v23.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + add v23.4s,v4.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v4.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha1c q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_0 +.Laes192_enc_epilog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_epilog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + subs x14,x13,1 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + st1 {v0.16b},[x1],16 + + beq .Lbm2fromQ1 + /* + * mode op 1 + * read next aes block, update aes_ptr_in + */ + ld1 {v1.16b},[x0],16 + + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + sha1su1 v27.4s,v26.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v5.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_1 +.Laes192_enc_epilog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_epilog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + subs x14,x14,1 + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + st1 {v1.16b},[x1],16 + + beq .Lbm2fromQ2 + + /* + * mode op 2 + * read next aes block, update aes_ptr_in + */ + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + add v23.4s,v6.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v6.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + sha1su1 v26.4s,v29.4s + add v19.4s,v6.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + sha1m q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_2 +.Laes192_enc_epilog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_epilog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + st1 {v2.16b},[x1],16 + + b .Lbm2fromQ3 + + /* + * now there is the b-2 sha block before the final one. Execution takes over + * in the appropriate part of this depending on how many aes blocks were left. + * If there were none, the whole thing is executed. + */ +.Lbm2fromQ0: + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + +.Lbm2fromQ1: + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + +.Lbm2fromQ2: + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + +.Lbm2fromQ3: + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + eor v26.16b,v26.16b,v26.16b + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + eor v27.16b,v27.16b,v27.16b + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + eor v28.16b,v28.16b,v28.16b + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + + eor v29.16b,v29.16b,v29.16b + + cbz x13,.Lpost_long_Q0 + + + ld1 {v26.16b},[x3],16 + sub x5,x5,16 + rev32 v26.16b,v26.16b + subs x14,x13,1 + b.eq .Lpost_long_Q1 + + + ld1 {v27.16b},[x3],16 + sub x5,x5,16 + rev32 v27.16b,v27.16b + subs x14,x14,1 + b.eq .Lpost_long_Q2 + + + ld1 {v28.16b},[x3],16 + sub x5,x5,16 + rev32 v28.16b,v28.16b + + b .Lpost_long_Q3 + /* + * Process remaining 8B blocks of the digest + */ +.Lpost_long_Q0: + + + mov v26.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 + +.Lpost_long_Q1: + + + mov v27.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 + +.Lpost_long_Q2: + + + mov v28.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 + +.Lpost_long_Q3: + + + mov v29.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + /* + * Outstanding 8B blocks left. + * Since there has to be another sha block with padding, + * we need to calculate hash without padding here. + */ + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + /* + * Don't decrease x5 here. + * Use it to indicate necessity of constructing "1" padding at the end. + */ + mov v29.d[1],x2 + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,.Lpost_long_loop + subs x5,x5,8 + + b.ne .Lpost_long_Q0 + + mov v26.b[3],w15 + +.Lpost_long_loop: + + add x11,x11,x8 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov v20.16b,v24.16b + + + mov w11, #0x80 + mov v27.b[7], w11 + + mov x11, #64+20 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +.Lenc_short_cases: + ldp q8,q9,[x9],32 + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + mov w15,0x80 + ldp q10,q11,[x9],32 + lsl x11,x10,4 + eor v26.16b,v26.16b,v26.16b + ldp q12,q13,[x9],32 + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + ldp q14,q15,[x9],32 + eor v29.16b,v29.16b,v29.16b + ldp q4,q5,[x8],32 + ldp q16,q17,[x9],32 + ld1 {v3.16b},[x6] + ldp q6,q7,[x8] + + sub x8,x5,x2 + /* + * the idea in the short loop (at least 1) is to break out with the padding + * already in place excepting the final word. + */ +.Lenc_short_loop: + + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_enc_short_0 +.Laes192_enc_short_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_short_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + st1 {v0.16b},[x1],16 + + ld1 {v26.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v26.16b,v26.16b + cbz x10,.Lpost_short_Q1 + + ld1 {v1.16b},[x0],16 + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_enc_short_1 +.Laes192_enc_short_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_short_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + st1 {v1.16b},[x1],16 + + ld1 {v27.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v27.16b,v27.16b + cbz x10,.Lpost_short_Q2 + + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_enc_short_2 +.Laes192_enc_short_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_short_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + ld1 {v28.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v28.16b,v28.16b + cbz x10,.Lpost_short_Q3 + + ld1 {v3.16b},[x0],16 + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_enc_short_3 +.Laes192_enc_short_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_short_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + st1 {v3.16b},[x1],16 + + ld1 {v29.16b},[x3],16 + + sub x5,x5,16 + mov v20.16b,v24.16b + + rev32 v29.16b,v29.16b + /* + * now we have the sha1 to do for these 4 aes blocks + */ + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + sub x10,x10,1 + cbnz x10,.Lenc_short_loop + +.Lpost_short_Q0: + + mov v26.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 +.Lpost_short_Q1: + + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v27.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 +.Lpost_short_Q2: + + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v28.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 +.Lpost_short_Q3: + + eor v29.16b,v29.16b,v29.16b + + mov v29.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,.Lpost_short_loop + subs x5,x5,8 + + b.ne .Lpost_short_Q0 + + mov v26.b[3],w15 + + /* + * there are between 0 and 3 aes blocks in the final sha1 blocks + */ +.Lpost_short_loop: + + add x11,x11,x8 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov w11, #0x80 + mov v27.b[7], w11 + + mov v20.16b,v24.16b + + mov x11, #64+20 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + +.size asm_aescbc_sha1_hmac, .-asm_aescbc_sha1_hmac + + /* + * Description: + * + * Combined Auth/Dec Primitive = sha1_hmac/aes128cbc + * + * Operations: + * + * out = decrypt-AES128CBC(in) + * return_ash_ptr = SHA1(o_key_pad | SHA1(i_key_pad | in)) + * + * Prototype: + * asm_sha1_hmac_aescbc_dec(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_sha1_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 -- temp register for SHA1 + * v20 -- ABCD copy (q20) + * v21 -- sha working state (q21) + * v22 -- sha working state (q22) + * v23 -- temp register for SHA1 + * v24 -- sha state ABCD + * v25 -- sha state E + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined. For AES partial blocks the user is required to pad the input + * to modulus 16 = 0. + * + * The variable "dlen" must be a multiple of 8 and greater or equal to "clen". + * The maximum difference between "dlen" and "clen" cannot exceed 64 bytes. + * This constrain is strictly related to the needs of the IPSec ESP packet. + * Short lengths are less optimized at < 16 AES blocks, however they are + * somewhat optimized, and more so than the enc/auth versions. + */ + +.globl asm_sha1_hmac_aescbc_dec +.type asm_sha1_hmac_aescbc_dec,%function + +asm_sha1_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + /* + * init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + cmp x10,16 + blt .Ldec_short_cases + + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ldp q4,q5,[x8],32 + ldp q6,q7,[x8],32 + + + sub x8,x5,x2 + + mov x11,x2 + ld1 {v30.16b},[x6] + lsr x12,x11,6 + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + + sub x5,x5,64 + /* + * now we can do the loop prolog, 1st sha1 block + */ + prfm PLDL1KEEP,[x0,64] + prfm PLDL1KEEP,[x1,64] + /* + * do the first sha1 block on the plaintext + */ + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + add v23.4s,v4.4s,v27.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v8.16b},[x9],16 + sha1c q24,s25,v19.4s + sha1su1 v26.4s,v29.4s + ld1 {v9.16b},[x9],16 + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + ld1 {v10.16b},[x9],16 + sha1c q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + add v23.4s,v4.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + ld1 {v11.16b},[x9],16 + sha1c q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v12.16b},[x9],16 + sha1c q24,s21,v19.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v26.4s,v29.4s + ld1 {v13.16b},[x9],16 + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + ld1 {v14.16b},[x9],16 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + ld1 {v15.16b},[x9],16 + sha1p q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v16.16b},[x9],16 + sha1p q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + ld1 {v17.16b},[x9],16 + add v19.4s,v6.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + ld1 {v18.16b},[x9],16 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + sha1h s22,s24 + ld1 {v26.16b},[x3],16 + sha1p q24,s21,v19.4s + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + ld1 {v27.16b},[x3],16 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + ld1 {v28.16b},[x3],16 + sha1p q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + ld1 {v29.16b},[x3],16 + sha1p q24,s22,v23.4s + + + sub x5,x5,64 + /* + * aes_blocks_left := number after the main (sha) block is done. + * can be 0 note we account for the extra unwind in main_blocks + */ + sub x15,x12,2 + add v24.4s,v24.4s,v20.4s + and x13,x10,3 + ld1 {v0.16b},[x0] + add v25.4s,v25.4s,v21.4s + + ld1 {v31.16b},[x0],16 + + + mov x9,xzr + /* + * main combined loop CBC, can be used by auth/enc version + */ +.Ldec_main_loop: + /* + * Because both mov, rev32 and eor have a busy cycle, + * this takes longer than it looks. + */ + rev32 v26.16b,v26.16b + mov v20.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + rev32 v28.16b,v28.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + rev32 v29.16b,v29.16b + + ld1 {v1.16b},[x0] + sha1c q24,s25,v19.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_mainloop_0 +.Laes192_dec_mainloop_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_mainloop_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + add v19.4s,v5.4s,v28.4s + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha1p q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + sha1h s22,s24 + add v19.4s,v5.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1p q24,s21,v19.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + sha1su1 v27.4s,v26.4s + cmp x16,#12 + b.lt .Laes128_dec_mainloop_1 +.Laes192_dec_mainloop_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_mainloop_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v19.4s,v6.4s,v28.4s + add v23.4s,v6.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + sha1su0 v28.4s,v29.4s,v26.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v6.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha1su1 v26.4s,v29.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha1su1 v27.4s,v26.4s + add v19.4s,v6.4s,v28.4s + sha1h s22,s24 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1m q24,s21,v19.4s + cmp x16,#12 + b.lt .Laes128_dec_mainloop_2 +.Laes192_dec_mainloop_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_mainloop_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su1 v28.4s,v27.4s + add v23.4s,v7.4s,v29.4s + add v19.4s,v7.4s,v26.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + sha1h s21,s24 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + sha1p q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + ld1 {v26.16b},[x3],16 + sha1p q24,s21,v19.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + add v23.4s,v7.4s,v27.4s + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + ld1 {v27.16b},[x3],16 + sha1p q24,s22,v23.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sub x15,x15,1 + add v19.4s,v7.4s,v28.4s + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + ld1 {v0.16b},[x0] + sha1h s22,s24 + ld1 {v28.16b},[x3],16 + sha1p q24,s21,v19.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_dec_mainloop_3 +.Laes192_dec_mainloop_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_mainloop_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + ld1 {v29.16b},[x3],16 + sha1p q24,s22,v23.4s + add v24.4s,v24.4s,v20.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v25.4s,v25.4s,v21.4s + + st1 {v3.16b},[x1],16 + + sub x5,x5,64 + + cbnz x15,.Ldec_main_loop + /* + * Now the loop epilog. Since the reads for sha have already been done + * in advance, we have to have an extra unwind. + * This is why the test for the short cases is 16 and not 12. + * + * The unwind, which is just the main loop without the tests or final reads. + */ + rev32 v26.16b,v26.16b + mov v20.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + rev32 v28.16b,v28.16b + sha1su0 v26.4s,v27.4s,v28.4s + + ld1 {v1.16b},[x0] + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + sha1c q24,s25,v19.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + rev32 v29.16b,v29.16b + sha1su1 v26.4s,v29.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_0 +.Laes192_dec_epilog_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_epilog_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + + st1 {v0.16b},[x1],16 + sha1su0 v27.4s,v28.4s,v29.4s + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + add v19.4s,v5.4s,v28.4s + sha1p q24,s22,v23.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v29.4s + sha1su1 v27.4s,v26.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + + ld1 {v2.16b},[x0] + sha1h s22,s24 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + sha1p q24,s21,v19.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_1 +.Laes192_dec_epilog_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_epilog_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v19.4s,v6.4s,v28.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v27.4s,v26.4s + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + sha1su0 v28.4s,v29.4s,v26.4s + + st1 {v1.16b},[x1],16 + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v6.4s,v26.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha1su0 v29.4s,v26.4s,v27.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_2 +.Laes192_dec_epilog_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_epilog_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su1 v28.4s,v27.4s + add v23.4s,v7.4s,v29.4s + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v7.4s,v26.4s + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + + ld1 {v0.16b},[x0] + add v23.4s,v7.4s,v27.4s + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v28.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + add v23.4s,v7.4s,v29.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_3 +.Laes192_dec_epilog_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_epilog_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + /* + * now we have to do the 4 aes blocks (b-2) that catch up to where sha is + */ + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + + st1 {v3.16b},[x1],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + + ld1 {v1.16b},[x0] + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_0 +.Laes192_dec_catchup_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_catchup_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_1 +.Laes192_dec_catchup_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_catchup_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + ld1 {v3.16b},[x0] + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_2 +.Laes192_dec_catchup_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_catchup_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_3 +.Laes192_dec_catchup_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_catchup_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x9,x9,4 + + /* + * Now, there is the final b-1 sha1 padded block. + * This contains between 0-3 aes blocks. We take some pains to avoid read spill + * by only reading the blocks that are actually defined. + * this is also the final sha block code for the short_cases. + */ +.Ljoin_common: + mov w15,0x80 +.Lpost_loop_Q0: + + mov v26.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v26.d[0],x2 + + mov v26.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v26.d[1],x2 +.Lpost_loop_Q1: + + mov v27.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v27.d[0],x2 + + mov v27.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v27.d[1],x2 +.Lpost_loop_Q2: + + mov v28.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v28.d[0],x2 + + mov v28.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v28.d[1],x2 +.Lpost_loop_Q3: + + mov v29.b[3],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + //rev32 v29.16b,v29.16b + + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + eor v26.16b,v26.16b,v26.16b + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + eor v27.16b,v27.16b,v27.16b + sha1p q24,s21,v19.4s + + sha1h s21,s24 + eor v28.16b,v28.16b,v28.16b + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + eor v29.16b,v29.16b,v29.16b + add v24.4s,v24.4s,v20.4s + + + cbz x5,.Lpost_loop + subs x5,x5,8 + + b.ne .Lpost_loop_Q0 + + mov v26.b[0],w15 + +.Lpost_loop: + + add x11,x11,x8 + + add x11,x11,#64 + lsr x12,x11,32 + and x14,x11,0xffffffff + lsl x12,x12,3 + lsl x14,x14,3 + + rev32 v26.16b,v26.16b + mov v29.s[3],w14 + rev32 v27.16b,v27.16b + mov v29.s[2],w12 + rev32 v28.16b,v28.16b + + mov v20.16b,v24.16b + + cbz x9,1f + /* + * At this point all data should be fetched for SHA. + * Save remaining blocks without danger of overwriting SHA source. + */ + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 +1: + /* + * final sha block + * The strategy is to combine the 0-3 aes blocks, which is faster but + * a little gourmand on code space. + */ + cbz x13,.Lzero_aes_blocks_left + + ld1 {v0.16b},[x0] + ld1 {v31.16b},[x0],16 + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1c q24,s25,v19.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + add v19.4s,v4.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1c q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + add v23.4s,v4.4s,v29.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_final1_0 +.Laes192_dec_final1_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final1_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final1_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final1_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v29.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + + st1 {v3.16b},[x1],16 + sha1su1 v26.4s,v29.4s + + sub x13,x13,1 + cbz x13,.Lfrmquad1 + + + + ld1 {v0.16b},[x0] + ld1 {v30.16b},[x0],16 + add v23.4s,v5.4s,v27.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v19.4s,v5.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v5.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + cmp x16,#12 + b.lt .Laes128_dec_final2_0 +.Laes192_dec_final2_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final2_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final2_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final2_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v26.4s,v29.4s + eor v3.16b,v0.16b,v31.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + st1 {v3.16b},[x1],16 + sha1su1 v27.4s,v26.4s + + sub x13,x13,1 + cbz x13,.Lfrmquad2 + + + + ld1 {v0.16b},[x0],16 + add v19.4s,v6.4s,v28.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v23.4s,v6.4s,v29.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1m q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + add v19.4s,v6.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + add v23.4s,v6.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + cmp x16,#12 + b.lt .Laes128_dec_final3_0 +.Laes192_dec_final3_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final3_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final3_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final3_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v27.4s,v26.4s + eor v3.16b,v0.16b,v30.16b + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + + st1 {v3.16b},[x1],16 + sha1su1 v28.4s,v27.4s + b .Lfrmquad3 + + /* + * The final block with no aes component, i.e from here there were zero blocks + */ +.Lzero_aes_blocks_left: + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + +.Lfrmquad1: + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + + +.Lfrmquad2: + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + + +.Lfrmquad3: + add v23.4s,v7.4s,v29.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov v20.16b,v24.16b + + + mov w11, #0x80 + mov v27.b[7], w11 + + mov x11, #64+20 + + lsl x11, x11, 3 + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +.Ldec_short_cases: + ldp q8,q9,[x9],32 + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ldp q10,q11,[x9],32 + lsl x11,x10,4 + + ldp q12,q13,[x9],32 + ldp q4,q5,[x8],32 + ldp q14,q15,[x9],32 + ld1 {v30.16b},[x6] + ldp q16,q17,[x9],32 + ldp q6,q7,[x8] + ld1 {v18.16b},[x9] + + + sub x8,x5,x2 + + + mov x9,xzr + + mov x2,x0 + /* + * Digest source has to be at least of cipher source length + * therefore it is safe to use x10 to indicate whether we can + * overtake cipher processing by 4 AES block here. + */ + cmp x10,4 + + blt .Llast_sha_block + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + sub x5,x5,64 + + mov v20.16b,v24.16b + + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + + b .Lshort_loop_no_store + +.Ldec_short_loop: + cmp x10,4 + + blt .Llast_sha_block + + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 + + sub x9,x9,4 + +.Lshort_loop_no_store: + + ld1 {v31.16b},[x2] + + ld1 {v0.16b},[x2],16 + + add x0,x0,64 + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_dec_short_0 +.Laes192_dec_short_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_short_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v1.16b},[x2],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_dec_short_1 +.Laes192_dec_short_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_short_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x2] + + ld1 {v2.16b},[x2],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_short_2 +.Laes192_dec_short_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_short_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v3.16b},[x2],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_dec_short_3 +.Laes192_dec_short_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_short_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x9,x9,4 + + sub x10,x10,4 + cmp x5,64 + b.lt .Ldec_short_loop + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + sub x5,x5,64 + + mov v20.16b,v24.16b + + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + b .Ldec_short_loop + /* + * This is arranged so that we can join the common unwind code + * that does the last sha block and the final 0-3 aes blocks + */ +.Llast_sha_block: + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov x13,x10 + b .Ljoin_common + +.size asm_sha1_hmac_aescbc_dec, .-asm_sha1_hmac_aescbc_dec diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S new file mode 100644 index 000000000..b1c63bc33 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S @@ -0,0 +1,5483 @@ +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * Description: + * + * Combined Enc/Auth Primitive = aes128cbc/sha256_hmac + * + * Operations: + * + * out = encrypt-AES128CBC(in) + * return_hash_ptr = SHA256(o_key_pad | SHA256(i_key_pad | out)) + * + * Prototype: + * void asm_aescbc_sha256_hmac(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_aescbc_sha256_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 -- v3 -- aes results + * v4 -- v7 -- round consts for sha + * v8 -- v18 -- round keys + * v19 -- v20 -- round keys + * v21 -- ABCD tmp + * v22 -- sha working state ABCD (q22) + * v23 -- sha working state EFGH (q23) + * v24 -- sha state ABCD + * v25 -- sha state EFGH + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results + * are not defined. For AES partial blocks the user is required + * to pad the input to modulus 16 = 0. + * The variable "dlen" must be a multiple of 8 and greater or equal + * to "clen". This constrain is strictly related to the needs of the IPSec + * ESP packet. Encrypted payload is hashed along with the 8 byte ESP header, + * forming ICV. Speed gain is achieved by doing both things at the same time, + * hence lengths are required to match at least at the cipher level. + * + * Short lengths are not optimized at < 12 AES blocks + */ + +.globl asm_aescbc_sha256_hmac +.type asm_aescbc_sha256_hmac,%function + +.section .rodata +.align 4 +.Lrcon: +.word 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 +.word 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 +.word 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 +.word 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 +.word 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc +.word 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da +.word 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 +.word 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 +.word 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 +.word 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 +.word 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 +.word 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 +.word 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 +.word 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 +.word 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 +.word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + +.Linit_sha_state: +.word 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a +.word 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +.text + +asm_aescbc_sha256_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldp q24,q25,[x7] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + + adrp x12,.Linit_sha_state + add x12,x12,#:lo12:.Linit_sha_state + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + + /* + * Init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + prfm PLDL1KEEP,[x0,0] + cmp x10,12 + b.lt .Lenc_short_cases + + + ld1 {v3.16b},[x6] + + ld1 {v0.16b},[x0],16 + mov x11,x2 + lsr x12,x11,6 + /* + * now we can do the loop prolog, 1st aes sequence of 4 blocks + */ + ld1 {v8.16b},[x9],16 + ld1 {v9.16b},[x9],16 + eor v0.16b,v0.16b,v3.16b + ld1 {v10.16b},[x9],16 + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x0,64] + ld1 {v11.16b},[x9],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x1,64] + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ld1 {v12.16b},[x9],16 + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + + ld1 {v1.16b},[x0],16 + ld1 {v13.16b},[x9],16 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + ld1 {v14.16b},[x9],16 + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + ld1 {v15.16b},[x9],16 + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x9],16 + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + ld1 {v17.16b},[x9],16 + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_enc_prolog_0 +.Laes192_enc_prolog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_prolog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,0*64] + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + + st1 {v0.16b},[x1],16 + ld1 {v26.16b},[x3],16 + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,2*64] + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,4*64] + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,6*64] + b.lt .Laes128_enc_prolog_1 +.Laes192_enc_prolog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_prolog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + prfm PLDL1KEEP,[x8,8*64] + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + ld1 {v3.16b},[x0],16 + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,10*64] + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + ld1 {v27.16b},[x3],16 + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,12*64] + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,14*64] + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt .Laes128_enc_prolog_2 +.Laes192_enc_prolog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_prolog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + ld1 {v28.16b},[x3],16 + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + sub x15,x12,1 + and x13,x10,3 + b.lt .Laes128_enc_prolog_3 +.Laes192_enc_prolog_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_prolog_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_prolog_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_prolog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + /* + * Note, aes_blocks_left := number after the main (sha) + * block is done. Can be 0 + */ + + st1 {v3.16b},[x1],16 + ld1 {v29.16b},[x3],16 + + + sub x12,x5,x2 + + sub x5,x5,64 + + /* + * main combined loop CBC + */ +.Lenc_main_loop: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + /* + * Because both mov, rev32 and eor have a busy cycle,this takes longer + * than it looks. That's OK since there are 6 cycles before we can use + * the load anyway; so this goes as fast as it can without SW + * pipelining(too complicated given the code size) + */ + rev32 v26.16b,v26.16b + + ld1 {v0.16b},[x0],16 + mov v22.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + ld1 {v4.16b},[x8],16 + eor v0.16b,v0.16b,v3.16b + ld1 {v5.16b},[x8],16 + /* + * aes xform 0, sha quad 0 + */ + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + rev32 v28.16b,v28.16b + ld1 {v7.16b},[x8],16 + + ld1 {v1.16b},[x0],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + sha256su0 v26.4s,v27.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + + rev32 v29.16b,v29.16b + sha256h2 q23, q21, v4.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt .Laes128_enc_mainloop_0 +.Laes192_enc_mainloop_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_mainloop_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + eor v1.16b,v1.16b,v0.16b + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v4.16b},[x8],16 + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + b.lt .Laes128_enc_mainloop_1 +.Laes192_enc_mainloop_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_mainloop_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + + + eor v2.16b,v2.16b,v1.16b + + + sha256su0 v26.4s,v27.4s + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0],16 + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt .Laes128_enc_mainloop_2 +.Laes192_enc_mainloop_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_mainloop_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + + + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + sub x15,x15,1 + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + b.lt .Laes128_enc_mainloop_3 +.Laes192_enc_mainloop_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_mainloop_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_mainloop_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_mainloop_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + st1 {v3.16b},[x1],16 + + ldp q26,q27,[x3],32 + ldp q28,q29,[x3],32 + sub x5,x5,64 + + cbnz x15,.Lenc_main_loop + + mov w15,0x80 + /* + * epilog, process remaining aes blocks and b-2 sha block + * do this inline (no loop) to overlap with the sha part + * note there are 0-3 aes blocks left. + */ + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + mov v22.16b,v24.16b + mov v23.16b,v25.16b + cbz x13, .Lbm2fromQ0 + + /* + * mode op 0 + * read next aes block, update aes_ptr_in + */ + ld1 {v0.16b},[x0],16 + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + eor v0.16b,v0.16b,v3.16b + + + add v4.4s,v4.4s,v26.4s + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_0 +.Laes192_enc_epilog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_epilog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + subs x14,x13,1 + + st1 {v0.16b},[x1],16 + + beq .Lbm2fromQ1 + /* + * mode op 1 + * read next aes block, update aes_ptr_in + */ + ld1 {v1.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + eor v1.16b,v1.16b,v0.16b + + + add v4.4s,v4.4s,v26.4s + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_1 +.Laes192_enc_epilog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_epilog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + subs x14,x14,1 + + st1 {v1.16b},[x1],16 + + beq .Lbm2fromQ2 + /* + * mode op 2 + * read next aes block, update aes_ptr_in + */ + ld1 {v2.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + eor v2.16b,v2.16b,v1.16b + + + add v4.4s,v4.4s,v26.4s + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_enc_epilog_2 +.Laes192_enc_epilog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_epilog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_epilog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_epilog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + b .Lbm2fromQ3 + /* + * Now there is the b-2 sha block before the final one. Execution takes over + * in the appropriate part of this depending on how many aes blocks were left. + * If there were none, the whole thing is executed. + */ + +.Lbm2fromQ0: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lbm2fromQ1: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lbm2fromQ2: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lbm2fromQ3: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + eor v29.16b,v29.16b,v29.16b + + cbz x13,.Lpost_long_Q0 + + + ld1 {v26.16b},[x3],16 + sub x5,x5,16 + rev32 v26.16b,v26.16b + subs x14,x13,1 + b.eq .Lpost_long_Q1 + + + ld1 {v27.16b},[x3],16 + sub x5,x5,16 + rev32 v27.16b,v27.16b + subs x14,x14,1 + b.eq .Lpost_long_Q2 + + + ld1 {v28.16b},[x3],16 + sub x5,x5,16 + rev32 v28.16b,v28.16b + + b .Lpost_long_Q3 + /* + * Process remaining 8B blocks of the digest + */ +.Lpost_long_Q0: + + + mov v26.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 + +.Lpost_long_Q1: + + + mov v27.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 + +.Lpost_long_Q2: + + + mov v28.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 + +.Lpost_long_Q3: + + + mov v29.b[3],w15 + + cbz x5,.Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + /* + * Outstanding 8B blocks left. + * Since there has to be another sha block with padding, + * we need to calculate hash without padding here. + */ + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + /* + * Don't decrease x5 here. + * Use it to indicate necessity of constructing "1" padding at the end. + */ + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks + */ +1: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,.Lpost_long_loop + subs x5,x5,8 + + b.ne .Lpost_long_Q0 + + mov v26.b[3],w15 + +.Lpost_long_loop: + + add x11,x11,x12 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + /* + * do last sha of pad block + */ + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + add v27.4s,v25.4s,v23.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ldp q24,q25,[x7] + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + ldp q4,q5,[x8],32 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + stp q24,q25,[x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +.Lenc_short_cases: + ld1 {v3.16b},[x6] + ldp q8,q9,[x9],32 + eor v26.16b,v26.16b,v26.16b + ldp q10,q11,[x9],32 + eor v27.16b,v27.16b,v27.16b + ldp q12,q13,[x9],32 + eor v28.16b,v28.16b,v28.16b + ldp q14,q15,[x9],32 + eor v29.16b,v29.16b,v29.16b + ldp q16,q17,[x9],32 + mov w15,0x80 + lsl x11,x10,4 + ld1 {v18.16b},[x9] + + + sub x12,x5,x2 + /* + * the idea in the short loop (at least 1) is to break out with the padding + * already in place excepting the final word. + */ +.Lenc_short_loop: + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_enc_short_0 +.Laes192_enc_short_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_short_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + st1 {v0.16b},[x1],16 + + ld1 {v26.16b},[x3],16 + + sub x5,x5,16 + rev32 v26.16b,v26.16b + sub x10,x10,1 + cbz x10,.Lpost_short_Q1 + + ld1 {v1.16b},[x0],16 + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_enc_short_1 +.Laes192_enc_short_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_short_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + st1 {v1.16b},[x1],16 + + ld1 {v27.16b},[x3],16 + + sub x5,x5,16 + rev32 v27.16b,v27.16b + sub x10,x10,1 + cbz x10,.Lpost_short_Q2 + + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_enc_short_2 +.Laes192_enc_short_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_short_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + ld1 {v28.16b},[x3],16 + + sub x5,x5,16 + rev32 v28.16b,v28.16b + sub x10,x10,1 + cbz x10,.Lpost_short_Q3 + + ld1 {v3.16b},[x0],16 + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_enc_short_3 +.Laes192_enc_short_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_short_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +.Laes256_enc_short_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +.Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + st1 {v3.16b},[x1],16 + + ld1 {v29.16b},[x3],16 + + sub x5,x5,16 + + rev32 v29.16b,v29.16b + /* + * now we have the sha256 to do for these 4 aes blocks + */ + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + sub x10,x10,1 + eor v29.16b,v29.16b,v29.16b + + cbnz x10,.Lenc_short_loop + +.Lpost_short_Q0: + + mov v26.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 +.Lpost_short_Q1: + + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v27.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 +.Lpost_short_Q2: + + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v28.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 +.Lpost_short_Q3: + + eor v29.16b,v29.16b,v29.16b + + mov v29.b[3],w15 + + cbz x5,.Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks + */ +1: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,.Lpost_short_loop + subs x5,x5,8 + + b.ne .Lpost_short_Q0 + + mov v26.b[3],w15 + + /* + * there are between 0 and 3 aes blocks in the final sha256 blocks + */ +.Lpost_short_loop: + + add x11,x11,x12 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + add v27.4s,v25.4s,v23.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ldp q24,q25,[x7] + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + ldp q4,q5,[x8],32 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + stp q24,q25,[x4] + + ret + +.size asm_aescbc_sha256_hmac, .-asm_aescbc_sha256_hmac + + /* + * Description: + * + * Combined Auth/Dec Primitive = sha256_hmac/aes128cbc + * + * Operations: + * + * out = decrypt-AES128CBC(in) + * return_ash_ptr = SHA256(o_key_pad | SHA256(i_key_pad | in)) + * + * Prototype: + * + * void asm_sha256_hmac_aescbc_dec(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_sha256_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6: + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 - v20 -- round keys + * v21 -- ABCD tmp + * v22 -- sha working state ABCD (q22) + * v23 -- sha working state EFGH (q23) + * v24 -- sha state ABCD + * v25 -- sha state EFGH + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined For AES partial blocks the user is required to pad the input to + * modulus 16 = 0. + * + * The variable "dlen" must be a multiple of 8 and greater or equal to "clen". + * The maximum difference between "dlen" and "clen" cannot exceed 64 bytes. + * This constrain is strictly related to the needs of the IPSec ESP packet. + * Short lengths are less optimized at < 16 AES blocks, however they are + * somewhat optimized, and more so than the enc/auth versions. + */ + +.globl asm_sha256_hmac_aescbc_dec +.type asm_sha256_hmac_aescbc_dec,%function + +asm_sha256_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp, #-80]! + + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldp q24,q25,[x7] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + stp d12,d13,[sp,#32] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + stp d14,d15,[sp,#48] + + adrp x12,.Linit_sha_state + add x12,x12,#:lo12:.Linit_sha_state + stp x19,x20,[sp,#64] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + /* + * Init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case. + */ + cmp x10,16 + blt .Ldec_short_cases + + + sub x20,x5,x2 + + mov x11,x2 + ld1 {v30.16b},[x6] + lsr x12,x11,6 + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + + sub x5,x5,64 + /* + * now we can do the loop prolog, 1st sha256 block + */ + prfm PLDL1KEEP,[x0,64] + prfm PLDL1KEEP,[x1,64] + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + /* + * do the first sha256 block on the plaintext + */ + mov v22.16b,v24.16b + mov v23.16b,v25.16b + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v8.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v9.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v10.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + ld1 {v11.16b},[x9],16 + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + add v6.4s,v6.4s,v28.4s + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v12.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v13.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v14.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + ld1 {v15.16b},[x9],16 + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + add v6.4s,v6.4s,v28.4s + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v16.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v17.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v18.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + ld1 {v26.16b},[x3],16 + ld1 {v27.16b},[x3],16 + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v5.4s + ld1 {v28.16b},[x3],16 + ld1 {v29.16b},[x3],16 + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + + sub x5,x5,64 + + /* + * aes_blocks_left := number after the main (sha) block is done. + * can be 0 note we account for the extra unwind in main_blocks + */ + sub x15,x12,2 + + add v24.4s,v24.4s,v22.4s + and x13,x10,3 + ld1 {v0.16b},[x0] + add v25.4s,v25.4s,v23.4s + add x9,x0,128 + + ld1 {v31.16b},[x0],16 + + + mov x19,xzr + /* + * main combined loop CBC, can be used by auth/enc version + */ +.Ldec_main_loop: + /* + * Because both mov, rev32 and eor have a busy cycle, this takes longer + * than it looks. + */ + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + /* + * aes xform 0, sha quad 0 + */ + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v4.16b},[x8],16 + rev32 v28.16b,v28.16b + + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v26.4s,v27.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + rev32 v29.16b,v29.16b + + ld1 {v1.16b},[x0] + sha256h2 q23, q21, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt .Laes128_dec_mainloop_0 +.Laes192_dec_mainloop_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_mainloop_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v4.16b},[x8],16 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_dec_mainloop_1 +.Laes192_dec_mainloop_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_mainloop_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + sha256su0 v26.4s,v27.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_mainloop_2 +.Laes192_dec_mainloop_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_mainloop_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + ld1 {v26.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + ld1 {v27.16b},[x3],16 + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + ld1 {v28.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + ld1 {v29.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sub x15,x15,1 + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + ld1 {v0.16b},[x0] + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_dec_mainloop_3 +.Laes192_dec_mainloop_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_mainloop_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_mainloop_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_mainloop_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v25.4s,v25.4s,v23.4s + + st1 {v3.16b},[x1],16 + + sub x5,x5,64 + cbnz x15,.Ldec_main_loop + /* + * Now the loop epilog. Since the reads for sha have already been done + * in advance, we have to have an extra unwind. + * This is why the test for the short cases is 16 and not 12. + * + * The unwind, which is just the main loop without the tests or final reads. + */ + + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + /* + * aes xform 0, sha quad 0 + */ + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + rev32 v28.16b,v28.16b + ld1 {v7.16b},[x8],16 + + ld1 {v1.16b},[x0] + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + sha256su0 v26.4s,v27.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + rev32 v29.16b,v29.16b + sha256h2 q23, q21, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_0 +.Laes192_dec_epilog_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_epilog_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + + ld1 {v4.16b},[x8],16 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + cmp x16,#12 + b.lt .Laes128_dec_epilog_1 +.Laes192_dec_epilog_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_epilog_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + + + sha256su0 v26.4s,v27.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_epilog_2 +.Laes192_dec_epilog_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_epilog_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + + ld1 {v0.16b},[x0] + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_dec_epilog_3 +.Laes192_dec_epilog_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_epilog_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_epilog_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_epilog_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + /* + * now we have to do the 4 aes blocks (b-2) that catch up to where sha is + */ + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + + st1 {v3.16b},[x1],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + + ld1 {v1.16b},[x0] + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_0 +.Laes192_dec_catchup_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_catchup_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + + ld1 {v2.16b},[x0] + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_1 +.Laes192_dec_catchup_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_catchup_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + ld1 {v3.16b},[x0] + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_2 +.Laes192_dec_catchup_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_catchup_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + cmp x16,#12 + b.lt .Laes128_dec_catchup_3 +.Laes192_dec_catchup_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_catchup_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_catchup_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_catchup_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x19,x19,4 + /* + * Now, there is the final b-1 sha256 padded block. + * This contains between 0-3 aes blocks. We take some pains to avoid read spill + * by only reading the blocks that are actually defined. + * This is also the final sha block code for the shortCases. + */ +.Ljoin_common: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + mov w15,0x80 +.Lpost_loop_Q0: + + mov v26.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v26.d[0],x2 + + mov v26.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v26.d[1],x2 +.Lpost_loop_Q1: + + mov v27.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v27.d[0],x2 + + mov v27.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v27.d[1],x2 +.Lpost_loop_Q2: + + mov v28.b[0],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v28.d[0],x2 + + mov v28.b[8],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v28.d[1],x2 +.Lpost_loop_Q3: + + mov v29.b[3],w15 + + cbz x5,.Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks. + */ +1: + mov x9,x8 + rev32 v26.16b,v26.16b + ld1 {v4.16b},[x9],16 + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + //rev32 v29.16b,v29.16b + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v29.16b,v29.16b,v29.16b + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + cbz x5,.Lpost_loop + subs x5,x5,8 + + b.ne .Lpost_loop_Q0 + + mov v26.b[0],w15 + +.Lpost_loop: + + add x11,x11,x20 + + add x11,x11,#64 + lsr x12,x11,32 + and x14,x11,0xffffffff + lsl x12,x12,3 + lsl x14,x14,3 + + mov v29.s[3],w14 + mov v29.s[2],w12 + + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + rev32 v27.16b,v27.16b + mov v23.16b,v25.16b + rev32 v28.16b,v28.16b + + + cbz x19,1f + /* + * At this point all data should be fetched for SHA. + * Save remaining blocks without danger of overwriting SHA source. + */ + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 +1: + /* + * final sha block + * the strategy is to combine the 0-3 aes blocks, which is faster but + * a little gourmand on code space. + */ + cbz x13,.Lzero_aes_blocks_left + + ld1 {v0.16b},[x0] + ld1 {v31.16b},[x0],16 + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ld1 {v4.16b},[x8],16 + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v6.4s + sha256su1 v28.4s,v26.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + cmp x16,#12 + b.lt .Laes128_dec_final1_0 +.Laes192_dec_final1_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final1_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final1_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final1_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + + sub x13,x13,1 + + st1 {v3.16b},[x1],16 + cbz x13,.Lfrmquad1 + + + + + ld1 {v0.16b},[x0] + ld1 {v30.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + sha256su0 v27.4s,v28.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + cmp x16,#12 + b.lt .Laes128_dec_final2_0 +.Laes192_dec_final2_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final2_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final2_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final2_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v31.16b + + sub x13,x13,1 + + st1 {v3.16b},[x1],16 + cbz x13,.Lfrmquad2 + + + + + ld1 {v0.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v5.4s + sha256su1 v27.4s,v29.4s,v26.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt .Laes128_dec_final3_0 +.Laes192_dec_final3_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_final3_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_final3_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_final3_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + + st1 {v3.16b},[x1],16 + b .Lfrmquad3 + /* + * the final block with no aes component, i.e from here there were zero blocks + */ + +.Lzero_aes_blocks_left: + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lfrmquad1: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lfrmquad2: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +.Lfrmquad3: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + eor v29.16b,v29.16b,v29.16b + add v27.4s,v25.4s,v23.4s + + /* + * Calculate final HMAC + */ + + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + + ld1 {v24.16b},[x7],16 + ld1 {v25.16b},[x7] + + mov v22.16b,v24.16b + mov v23.16b,v25.16b + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + ldp d10,d11,[sp,#16] + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v7.4s + ldp d12,d13,[sp,#32] + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + ldp d14,d15,[sp,#48] + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + ldp x19,x20,[sp,#64] + ldp d8,d9,[sp],#80 + rev32 v25.16b, v25.16b + st1 {v24.4s},[x4],16 + mov x0, xzr + st1 {v25.4s},[x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +.Ldec_short_cases: + ldp q8,q9,[x9],32 + adrp x8,.Lrcon + add x8,x8,#:lo12:.Lrcon + ldp q10,q11,[x9],32 + lsl x11,x10,4 + + ldp q12,q13,[x9],32 + ldp q14,q15,[x9],32 + ld1 {v30.16b},[x6] + ldp q16,q17,[x9],32 + ld1 {v18.16b},[x9] + + + sub x20,x5,x2 + + + mov x19,xzr + + mov x2,x0 + + /* + * Digest source has to be at least of cipher source length + * therefore it is safe to use x10 to indicate whether we can + * overtake cipher processing by 4 AES block here. + */ + cmp x10,4 + + blt .Llast_sha_block + + sub x5,x5,64 + + mov x9,x8 + + + ld1 {v26.16b},[x3],16 + ld1 {v4.16b},[x9],16 + ld1 {v27.16b},[x3],16 + rev32 v26.16b,v26.16b + ld1 {v28.16b},[x3],16 + rev32 v27.16b,v27.16b + ld1 {v29.16b},[x3],16 + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + rev32 v29.16b,v29.16b + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + b .Lshort_loop_no_store + +.Ldec_short_loop: + cmp x10,4 + + blt .Llast_sha_block + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 + + sub x19,x19,4 + +.Lshort_loop_no_store: + ld1 {v31.16b},[x2] + + ld1 {v0.16b},[x2],16 + + add x0,x0,64 + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt .Laes128_dec_short_0 +.Laes192_dec_short_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt .Laes256_dec_short_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v1.16b},[x2],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt .Laes128_dec_short_1 +.Laes192_dec_short_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt .Laes256_dec_short_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x2] + + ld1 {v2.16b},[x2],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt .Laes128_dec_short_2 +.Laes192_dec_short_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt .Laes256_dec_short_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v3.16b},[x2],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt .Laes128_dec_short_3 +.Laes192_dec_short_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt .Laes256_dec_short_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +.Laes256_dec_short_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +.Laes128_dec_short_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x19,x19,4 + + sub x10,x10,4 + cmp x5,64 + b.lt .Ldec_short_loop + + sub x5,x5,64 + + mov x9,x8 + + + ld1 {v26.16b},[x3],16 + ld1 {v4.16b},[x9],16 + ld1 {v27.16b},[x3],16 + rev32 v26.16b,v26.16b + ld1 {v28.16b},[x3],16 + rev32 v27.16b,v27.16b + ld1 {v29.16b},[x3],16 + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + rev32 v29.16b,v29.16b + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + b .Ldec_short_loop + /* + * This is arranged so that we can join the common unwind code that does + * the last sha block and the final 0-3 aes blocks. + */ +.Llast_sha_block: + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov x13,x10 + b .Ljoin_common + +.size asm_sha256_hmac_aescbc_dec, .-asm_sha256_hmac_aescbc_dec diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S new file mode 100644 index 000000000..5ba77f82f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S @@ -0,0 +1,10305 @@ + +// Copyright 2023-2025 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License 2.0 (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// $output is the last argument if it looks like a file (it has an extension) +// $flavour is the first argument if it doesn't look like a file +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * asm_aescbc_sha512_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + */ + +.globl asm_aescbc_sha512_hmac +.type asm_aescbc_sha512_hmac,%function + +.section .rodata +.align 6 +.LK512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0 // terminator + +.text +.align 4 +asm_aescbc_sha512_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8, d9, [sp,#-64]! + stp d10, d11, [sp,#16] + stp d12, d13, [sp,#32] + stp d14, d15, [sp,#48] + + + ldr x7, [x6, #HMAC_IKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ldr x7, [x6, #CIPHER_KEY] + ldr x8, [x6, #CIPHER_IV] + ldr x9, [x6, #CIPHER_KEY_ROUNDS] + mov x12, x7 + + adrp x10, .LK512 + add x10, x10, #:lo12:.LK512 + + lsr x11, x2, #4 + cbz x11, .Lret + + cmp x11, #16 + b.lt .Lenc_short_case + + ld1 {v0.16b}, [x0], #16 + ld1 {v1.16b}, [x8] + + eor v0.16b, v0.16b, v1.16b + + ldp q8, q9, [x7], #32 + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + ldp q10, q11, [x7], #32 + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + ldp q12, q13, [x7], #32 + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + ldp q14, q15, [x7], #32 + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + ldp q16, q17, [x7], #32 + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + ld1 {v18.16b}, [x7] + cmp x9, #12 + b.lt .Laes128_enc_prelog_0 +.Laes192_enc_prelog_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_prelog_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + str q0, [x1], #16 + ld1 {v1.16b}, [x0], #16 + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt .Laes128_enc_prelog_1 +.Laes192_enc_prelog_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_prelog_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + str q1, [x1], #16 + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt .Laes128_enc_prelog_2 +.Laes192_enc_prelog_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_prelog_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + str q2, [x1], #16 + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt .Laes128_enc_prelog_3 +.Laes192_enc_prelog_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_prelog_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + str q3, [x1], #16 + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt .Laes128_enc_prelog_4 +.Laes192_enc_prelog_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt .Laes256_enc_prelog_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + str q4, [x1], #16 + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt .Laes128_enc_prelog_5 +.Laes192_enc_prelog_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt .Laes256_enc_prelog_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + str q5, [x1], #16 + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt .Laes128_enc_prelog_6 +.Laes192_enc_prelog_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt .Laes256_enc_prelog_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + + ld1 {v7.16b}, [x0], #16 + + eor v7.16b, v7.16b, v6.16b + str q6, [x1], #16 + + aese v7.16b, v8.16b + aesmc v7.16b, v7.16b + aese v7.16b, v9.16b + aesmc v7.16b, v7.16b + aese v7.16b, v10.16b + aesmc v7.16b, v7.16b + aese v7.16b, v11.16b + aesmc v7.16b, v7.16b + aese v7.16b, v12.16b + aesmc v7.16b, v7.16b + aese v7.16b, v13.16b + aesmc v7.16b, v7.16b + aese v7.16b, v14.16b + aesmc v7.16b, v7.16b + aese v7.16b, v15.16b + aesmc v7.16b, v7.16b + aese v7.16b, v16.16b + aesmc v7.16b, v7.16b + b.lt .Laes128_enc_prelog_7 +.Laes192_enc_prelog_7: + ldp q18,q19,[x7],32 + aese v7.16b,v17.16b + aesmc v7.16b,v7.16b + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + b.gt .Laes256_enc_prelog_7 + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_prelog_7: + aese v7.16b,v19.16b + aesmc v7.16b,v7.16b + ldp q18,q19,[x7],32 + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_prelog_7: + aese v7.16b,v17.16b + eor v7.16b,v7.16b,v18.16b +1: + str q7, [x1], #16 + sub x11, x11, #8 + +.Lenc_main_loop: + mov x7, x12 + mov x14, x1 + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v12.16b}, [x0], #16 + eor v12.16b, v12.16b, v7.16b + + + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + ld1 {v14.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + ldp q10, q11, [x7], #32 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt .Lenc_main_loop_aes128_0 +.Lenc_main_loop_aes192_0: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_0 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_0: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_0: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt .Lenc_main_loop_aes128_1 +.Lenc_main_loop_aes192_1: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_1 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_1: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_1: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + ldp q10, q11, [x7], #32 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt .Lenc_main_loop_aes128_2 +.Lenc_main_loop_aes192_2: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_2 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_2: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_2: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt .Lenc_main_loop_aes128_3 +.Lenc_main_loop_aes192_3: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_3 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_3: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_3: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt .Lenc_main_loop_aes128_4 +.Lenc_main_loop_aes192_4: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_4 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_4: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_4: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt .Lenc_main_loop_aes128_5 +.Lenc_main_loop_aes192_5: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_5 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_5: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_5: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v0.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + + add v28.2d, v28.2d, v14.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v1.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v25.2d, v25.2d, v15.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v2.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + + add v24.2d, v24.2d, v14.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt .Lenc_main_loop_aes128_6 +.Lenc_main_loop_aes192_6: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_6 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_6: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_6: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v3.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + add v27.2d, v27.2d, v15.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v4.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v26.2d, v26.2d, v14.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v5.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + + add v28.2d, v28.2d, v15.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v6.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v25.2d, v25.2d, v14.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v15.2d, v15.2d, v7.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + + add v24.2d, v24.2d, v15.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt .Lenc_main_loop_aes128_7 +.Lenc_main_loop_aes192_7: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt .Lenc_main_loop_aes256_7 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +.Lenc_main_loop_aes256_7: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +.Lenc_main_loop_aes128_7: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + st1 {v12.16b}, [x1], #16 + + ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x14], #64 + ld1 {v4.16b, v5.16b, v6.16b, v7.16b}, [x14] + + sub x11, x11, #8 + cmp x11, #8 + b.ge .Lenc_main_loop + + + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + mov x7, x12 + ld1 {v0.16b}, [x0], #16 + ldr q1, [x14, #48] + eor v0.16b, v0.16b, v1.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + ldp q12, q13, [x7], #32 + ldp q14, q15, [x7], #32 + ldp q16, q17, [x7], #32 + ld1 {v18.16b}, [x7] + + mov w12, #0x80 + b .Lenc_less_than_8_block + + +.Lenc_short_case: + ld1 {v0.16b}, [x0], #16 + ld1 {v1.16b}, [x8] + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + ldp q12, q13, [x7], #32 + ldp q14, q15, [x7], #32 + ldp q16, q17, [x7], #32 + ld1 {v18.16b}, [x7] + mov w12, #0x80 + + eor v0.16b, v0.16b, v1.16b + + cmp x11, #8 + b.lt .Lenc_less_than_8_block + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + cmp x9, #12 + b.lt .Laes128_enc_short_0 +.Laes192_enc_short_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_short_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + ld1 {v1.16b}, [x0], #16 + + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt .Laes128_enc_short_1 +.Laes192_enc_short_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_short_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt .Laes128_enc_short_2 +.Laes192_enc_short_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_short_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt .Laes128_enc_short_3 +.Laes192_enc_short_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_short_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt .Laes128_enc_short_4 +.Laes192_enc_short_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt .Laes256_enc_short_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt .Laes128_enc_short_5 +.Laes192_enc_short_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt .Laes256_enc_short_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt .Laes128_enc_short_6 +.Laes192_enc_short_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt .Laes256_enc_short_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + + ld1 {v7.16b}, [x0], #16 + + eor v7.16b, v7.16b, v6.16b + + aese v7.16b, v8.16b + aesmc v7.16b, v7.16b + aese v7.16b, v9.16b + aesmc v7.16b, v7.16b + aese v7.16b, v10.16b + aesmc v7.16b, v7.16b + aese v7.16b, v11.16b + aesmc v7.16b, v7.16b + aese v7.16b, v12.16b + aesmc v7.16b, v7.16b + aese v7.16b, v13.16b + aesmc v7.16b, v7.16b + aese v7.16b, v14.16b + aesmc v7.16b, v7.16b + aese v7.16b, v15.16b + aesmc v7.16b, v7.16b + aese v7.16b, v16.16b + aesmc v7.16b, v7.16b + b.lt .Laes128_enc_short_7 +.Laes192_enc_short_7: + ldp q18,q19,[x7],32 + aese v7.16b,v17.16b + aesmc v7.16b,v7.16b + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + b.gt .Laes256_enc_short_7 + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_7: + aese v7.16b,v19.16b + aesmc v7.16b,v7.16b + ldp q18,q19,[x7],32 + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_7: + aese v7.16b,v17.16b + eor v7.16b,v7.16b,v18.16b +1: + + stp q0, q1, [x1], #32 + stp q2, q3, [x1], #32 + stp q4, q5, [x1], #32 + stp q6, q7, [x1], #32 + + sub x11, x11, #8 + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + ldr x7, [x6, #CIPHER_KEY] + ldp q8, q9, [x7] + add x7, x7, #160 + cbz x11, .Lenc_short_no_more_aes_block + ld1 {v0.16b}, [x0], #16 + ldr q1, [x1, -16] + eor v0.16b, v0.16b, v1.16b +.Lenc_less_than_8_block: + cbz x11, .Lenc_short_no_more_aes_block + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + cmp x9, #12 + b.lt .Laes128_enc_short_partial_0 +.Laes192_enc_short_partial_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt .Laes256_enc_short_partial_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + str q0, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q0 + + ld1 {v1.16b}, [x0], #16 + + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt .Laes128_enc_short_partial_1 +.Laes192_enc_short_partial_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt .Laes256_enc_short_partial_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + str q1, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q1 + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt .Laes128_enc_short_partial_2 +.Laes192_enc_short_partial_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt .Laes256_enc_short_partial_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + str q2, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q2 + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt .Laes128_enc_short_partial_3 +.Laes192_enc_short_partial_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt .Laes256_enc_short_partial_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + str q3, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q3 + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt .Laes128_enc_short_partial_4 +.Laes192_enc_short_partial_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt .Laes256_enc_short_partial_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + str q4, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q4 + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt .Laes128_enc_short_partial_5 +.Laes192_enc_short_partial_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt .Laes256_enc_short_partial_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + str q5, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q5 + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt .Laes128_enc_short_partial_6 +.Laes192_enc_short_partial_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt .Laes256_enc_short_partial_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +.Laes256_enc_short_partial_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +.Laes128_enc_short_partial_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + str q6, [x1], #16 + sub x11, x11, #1 + cbz x11, .Lenc_short_post_Q6 +.Lenc_short_no_more_aes_block: + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v0.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q0: + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v1.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q1: + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v2.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q2: + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v3.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q3: + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v4.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q4: + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v5.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q5: + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v6.b[0], w12 + b .Lenc_short_post_sha +.Lenc_short_post_Q6: + eor v7.16b, v7.16b, v7.16b + mov v7.b[0], w12 + /* we have one padded sha512 block now, process it and + then employ another one to host sha length */ + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b +.Lenc_short_post_sha: + + eor x13, x13, x13 + eor x14, x14, x14 + + adds x13, x13, x2, lsl #3 + lsr x15, x2, #61 + adc x14, x14, x15 + + adds x13, x13, #1024 + adc x14, x14, xzr + + mov v7.d[0], x14 + mov v7.d[1], x13 + rev64 v7.16b, v7.16b + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + mov v0.16b, v24.16b + mov v1.16b, v25.16b + mov v2.16b, v26.16b + mov v3.16b, v27.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + + mov v4.b[7], w12 + mov x13, #1024+512 + mov v7.d[1], x13 + + + ldr x7, [x6, #HMAC_OKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d +.Lret: + mov x0, xzr + + rev64 v24.16b, v24.16b + rev64 v25.16b, v25.16b + rev64 v26.16b, v26.16b + rev64 v27.16b, v27.16b + + + st1 {v24.2d,v25.2d,v26.2d,v27.2d},[x4] + + + ldp d10, d11, [sp,#16] + ldp d12, d13, [sp,#32] + ldp d14, d15, [sp,#48] + ldp d8, d9, [sp], #64 + ret +.size asm_aescbc_sha512_hmac, .-asm_aescbc_sha512_hmac + /* + * asm_sha512_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + */ + +.globl asm_sha512_hmac_aescbc_dec +.type asm_sha512_hmac_aescbc_dec,%function + +.align 4 +asm_sha512_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8, d9, [sp,#-64]! + stp d10, d11, [sp,#16] + stp d12, d13, [sp,#32] + stp d14, d15, [sp,#48] + + + ldr x7, [x6, #HMAC_IKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ldr x7, [x6, #CIPHER_KEY] + ldr x8, [x6, #CIPHER_IV] + ldr x9, [x6, #CIPHER_KEY_ROUNDS] + mov x12, x7 + + adrp x10, .LK512 + add x10, x10, #:lo12:.LK512 + + lsr x11, x2, #4 + cbz x11, .Ldec_ret + + ld1 {v20.16b}, [x8] + cmp x11, #8 + b.lt .Ldec_short_case +.Ldec_main_loop: + ldp q12, q13, [x0], #32 + ldp q14, q15, [x0], #32 + ldp q16, q17, [x0], #32 + ldp q18, q19, [x0], #32 + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + mov v0.16b, v12.16b + mov v1.16b, v13.16b + mov v2.16b, v14.16b + mov v3.16b, v15.16b + mov v4.16b, v16.16b + mov v5.16b, v17.16b + mov v6.16b, v18.16b + mov v7.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + ldp q10, q11, [x7], #32 + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + cmp x9, #12 + + b.lt .Laes128_dec_main +.Laes192_dec_main: + ldp q10,q11,[x7],32 + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + b.gt .Laes256_dec_main + + ld1 {v8.16b},[x7] + + + aesd v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + aesd v13.16b, v11.16b + eor v13.16b, v13.16b, v8.16b + aesd v14.16b, v11.16b + eor v14.16b, v14.16b, v8.16b + aesd v15.16b, v11.16b + eor v15.16b, v15.16b, v8.16b + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + aesd v17.16b, v11.16b + eor v17.16b, v17.16b, v8.16b + aesd v18.16b, v11.16b + eor v18.16b, v18.16b, v8.16b + aesd v19.16b, v11.16b + eor v19.16b, v19.16b, v8.16b + + sub x7, x7, #192 + b 1f +.Laes256_dec_main: + ldp q8,q9,[x7],32 + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + ld1 {v10.16b},[x7] + + + aesd v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b, v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b, v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b, v9.16b + eor v15.16b, v15.16b, v10.16b + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + aesd v17.16b, v9.16b + eor v17.16b, v17.16b, v10.16b + aesd v18.16b, v9.16b + eor v18.16b, v18.16b, v10.16b + aesd v19.16b, v9.16b + eor v19.16b, v19.16b, v10.16b + + sub x7, x7, #224 + b 1f +.Laes128_dec_main: + ld1 {v10.16b},[x7] + aesd v12.16b,v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b,v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b,v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b,v9.16b + eor v15.16b, v15.16b, v10.16b + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + aesd v17.16b,v9.16b + eor v17.16b, v17.16b, v10.16b + aesd v18.16b,v9.16b + eor v18.16b, v18.16b, v10.16b + aesd v19.16b,v9.16b + eor v19.16b, v19.16b, v10.16b + sub x7, x7, #160 + +1: + eor v12.16b, v12.16b, v20.16b + eor v13.16b, v13.16b, v0.16b + eor v14.16b, v14.16b, v1.16b + eor v15.16b, v15.16b, v2.16b + eor v16.16b, v16.16b, v3.16b + eor v17.16b, v17.16b, v4.16b + eor v18.16b, v18.16b, v5.16b + eor v19.16b, v19.16b, v6.16b + + stp q12,q13, [x1], #32 + ldr q12, [x0, #-16] + stp q14,q15, [x1], #32 + stp q16,q17, [x1], #32 + stp q18,q19, [x1], #32 + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + mov v20.16b, v12.16b + sub x11, x11, #8 + cmp x11, #8 + b.ge .Ldec_main_loop + + +.Ldec_short_case: + mov w12, #0x80 + cbnz x11, 1f + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v0.b[0], w12 + b .Ldec_short_post_sha +1: + cmp x11, #4 + b.lt .Ldec_less_than_4_block + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ldp q12, q13, [x0], #32 + ldp q14, q15, [x0], #32 + + mov v0.16b, v12.16b + mov v1.16b, v13.16b + mov v2.16b, v14.16b + mov v3.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + ldp q10, q11, [x7], #32 + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + cmp x9, #12 + + b.lt .Laes128_dec_short +.Laes192_dec_short: + ldp q10,q11,[x7],32 + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + b.gt .Laes256_dec_short + + ld1 {v8.16b},[x7] + + + aesd v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + aesd v13.16b, v11.16b + eor v13.16b, v13.16b, v8.16b + aesd v14.16b, v11.16b + eor v14.16b, v14.16b, v8.16b + aesd v15.16b, v11.16b + eor v15.16b, v15.16b, v8.16b + + sub x7, x7, #192 + b 1f +.Laes256_dec_short: + ldp q8,q9,[x7],32 + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + ld1 {v10.16b},[x7] + + + aesd v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b, v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b, v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b, v9.16b + eor v15.16b, v15.16b, v10.16b + + sub x7, x7, #224 + b 1f +.Laes128_dec_short: + ld1 {v10.16b},[x7] + aesd v12.16b,v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b,v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b,v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b,v9.16b + eor v15.16b, v15.16b, v10.16b + sub x7, x7, #160 +1: + eor v12.16b, v12.16b, v20.16b + eor v13.16b, v13.16b, v0.16b + eor v14.16b, v14.16b, v1.16b + eor v15.16b, v15.16b, v2.16b + ldr q20, [x0, #-16] + + sub x11, x11, #4 + + stp q12,q13, [x1], #32 + stp q14,q15, [x1], #32 + cbz x11, .Ldec_short_post_Q3 + ld1 {v16.16b}, [x0], #16 + mov v4.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_4 +.Laes192_dec_short_4: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_4 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_4: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_4: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q4 + ld1 {v16.16b}, [x0], #16 + mov v5.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_5 +.Laes192_dec_short_5: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_5 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_5: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_5: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q5 + ld1 {v16.16b}, [x0], #16 + mov v6.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_6 +.Laes192_dec_short_6: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_6 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_6: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_6: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q6 +.Ldec_short_post_Q3: + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v4.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_Q4: + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v5.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_Q5: + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v6.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_Q6: + eor v7.16b, v7.16b, v7.16b + mov v7.b[0], w12 + /* we have one padded sha512 block now, process it and + then employ another one to host sha length */ + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + b .Ldec_short_post_sha + +.Ldec_less_than_4_block: + ld1 {v16.16b}, [x0], #16 + mov v0.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_less_than_4_0 +.Laes192_dec_short_less_than_4_0: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_less_than_4_0 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_less_than_4_0: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_less_than_4_0: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q0 + ld1 {v16.16b}, [x0], #16 + mov v1.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_less_than_4_1 +.Laes192_dec_short_less_than_4_1: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_less_than_4_1 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_less_than_4_1: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_less_than_4_1: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q1 + ld1 {v16.16b}, [x0], #16 + mov v2.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt .Laes128_dec_short_less_than_4_2 +.Laes192_dec_short_less_than_4_2: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt .Laes256_dec_short_less_than_4_2 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +.Laes256_dec_short_less_than_4_2: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +.Laes128_dec_short_less_than_4_2: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, .Ldec_short_post_Q2 +.Ldec_short_post_Q0: + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v1.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_Q1: + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v2.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_Q2: + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v3.b[0], w12 + b .Ldec_short_post_sha +.Ldec_short_post_sha: + + eor x13, x13, x13 + eor x14, x14, x14 + + adds x13, x13, x2, lsl #3 + lsr x15, x2, #61 + adc x14, x14, x15 + + adds x13, x13, #1024 + adc x14, x14, xzr + + mov v7.d[0], x14 + mov v7.d[1], x13 + rev64 v7.16b, v7.16b + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + mov v0.16b, v24.16b + mov v1.16b, v25.16b + mov v2.16b, v26.16b + mov v3.16b, v27.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + + mov v4.b[7], w12 + mov x13, #1024+512 + mov v7.d[1], x13 + + + ldr x7, [x6, #HMAC_OKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.inst 0xcec08020 //sha512su0 v0.2d, v1.2d + +.inst 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.inst 0xcec08041 //sha512su0 v1.2d, v2.2d + +.inst 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.inst 0xcec08062 //sha512su0 v2.2d, v3.2d + +.inst 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.inst 0xcec08083 //sha512su0 v3.2d, v4.2d + +.inst 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.inst 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.inst 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.inst 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.inst 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.inst 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.inst 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.inst 0xcec08007 //sha512su0 v7.2d, v0.2d + +.inst 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.inst 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.inst 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.inst 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.inst 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.inst 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.inst 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.inst 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.inst 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.inst 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.inst 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d +.Ldec_ret: + mov x0, xzr + + rev64 v24.16b, v24.16b + rev64 v25.16b, v25.16b + rev64 v26.16b, v26.16b + rev64 v27.16b, v27.16b + + + st1 {v24.2d,v25.2d,v26.2d,v27.2d},[x4] + + + ldp d10, d11, [sp,#16] + ldp d12, d13, [sp,#32] + ldp d14, d15, [sp,#48] + ldp d8, d9, [sp], #64 + ret +.size asm_sha512_hmac_aescbc_dec, .-asm_sha512_hmac_aescbc_dec diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/arm64cpuid.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/arm64cpuid.S index 2ca3b8d86..807509318 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/arm64cpuid.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/arm64cpuid.S @@ -96,6 +96,14 @@ _armv8_sve2_probe: ret .size _armv8_sve2_probe,.-_armv8_sve2_probe +.globl _armv8_sve_get_vl_bytes +.type _armv8_sve_get_vl_bytes,%function +_armv8_sve_get_vl_bytes: + AARCH64_VALID_CALL_TARGET +.inst 0x0420e3e0 // cntb x0 + ret +.size _armv8_sve_get_vl_bytes,.-_armv8_sve_get_vl_bytes + .globl _armv8_cpuid_probe .type _armv8_cpuid_probe,%function _armv8_cpuid_probe: diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/bn/armv8-mont.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/bn/armv8-mont.S index 98c5b7657..be4cccf25 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/bn/armv8-mont.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/bn/armv8-mont.S @@ -854,7 +854,7 @@ bn_mul8x_mont_neon: st1 {v15.s}[0], [x7],#4 // top-most bit sub x3,x3,x5,lsl#2 // rewind x3 - subs x1,sp,#0 // clear carry flag + subs x1,sp,#0 // set carry flag add x2,sp,x5,lsl#2 .LNEON_sub: @@ -1034,7 +1034,7 @@ __bn_sqr8x_mont: umulh x16,x10,x6 stp x19,x20,[x2],#8*2 // t[0..1] adc x19,xzr,xzr // t[8] - adds x21,x21,x17 // t[2]+lo(a[1]*a[0]) + adds x21,x21,x17 // t[2]+hi(a[1]*a[0]) umulh x17,x11,x6 adcs x22,x22,x14 umulh x14,x12,x6 @@ -2131,6 +2131,6 @@ __bn_mul4x_mont: ret .size __bn_mul4x_mont,.-__bn_mul4x_mont .section .rodata -.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 4 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/ec/ecp_nistz256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/ec/ecp_nistz256-armv8.S index 8c4210966..850dfd042 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/ec/ecp_nistz256-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/ec/ecp_nistz256-armv8.S @@ -2387,7 +2387,7 @@ ecp_nistz256_precomputed: .quad 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 .LordK: .quad 0xccd1c8aaee00bc4f -.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .text diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/aes-gcm-armv8_64.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/aes-gcm-armv8_64.S index 117c52ebc..13d807f60 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/aes-gcm-armv8_64.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/aes-gcm-armv8_64.S @@ -6390,7 +6390,7 @@ aes_gcm_dec_256_kernel: ret .size aes_gcm_dec_256_kernel,.-aes_gcm_dec_256_kernel .section .rodata -.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/ghashv8-armx.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/ghashv8-armx.S index 0b50e2af3..18ee90aa2 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/ghashv8-armx.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/modes/ghashv8-armx.S @@ -638,7 +638,7 @@ gcm_ghash_v8_4x: ret .size gcm_ghash_v8_4x,.-gcm_ghash_v8_4x .section .rodata -.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/keccak1600-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/keccak1600-armv8.S index a4f0f0f7d..c6f66cc7a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/keccak1600-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/keccak1600-armv8.S @@ -1013,5 +1013,5 @@ SHA3_squeeze_cext: AARCH64_VALIDATE_LINK_REGISTER ret .size SHA3_squeeze_cext,.-SHA3_squeeze_cext -.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha1-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha1-armv8.S index 507262b36..c91eb32ff 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha1-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha1-armv8.S @@ -1213,6 +1213,6 @@ sha1_block_armv8: .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39 .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 -.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha256-armv8.S index b0644b849..2b9f6852a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha256-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha256-armv8.S @@ -6,10 +6,10 @@ // https://www.openssl.org/source/license.html // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov, @dot-asm, initially for use in the OpenSSL // project. The module is, however, dual licensed under OpenSSL and // CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. +// details see https://github.com/dot-asm/cryptogams/. // // Permission to use under GPLv2 terms is granted. // ==================================================================== @@ -1064,7 +1064,7 @@ sha256_block_data_order: .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0 //terminator .size .LK256,.-.LK256 -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha512-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha512-armv8.S index 0a45eb06e..948ce4f4b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha512-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-ELF/crypto/sha/sha512-armv8.S @@ -6,10 +6,10 @@ // https://www.openssl.org/source/license.html // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov, @dot-asm, initially for use in the OpenSSL // project. The module is, however, dual licensed under OpenSSL and // CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. +// details see https://github.com/dot-asm/cryptogams/. // // Permission to use under GPLv2 terms is granted. // ==================================================================== @@ -1086,7 +1086,7 @@ sha512_block_data_order: .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0 // terminator .size .LK512,.-.LK512 -.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha1-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha1-armv8.S new file mode 100644 index 000000000..70f4c4911 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha1-armv8.S @@ -0,0 +1,5151 @@ +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * Description: + * + * Combined Enc/Auth Primitive = aes128cbc/sha1_hmac + * + * Operations: + * + * out = encrypt-AES128CBC(in) + * return_hash_ptr = SHA1(o_key_pad | SHA1(i_key_pad | out)) + * + * Prototype: + * int asm_aescbc_sha1_hmac(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_aescbc_sha1_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6: + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 -- temp register for SHA1 + * v20 -- ABCD copy (q20) + * v21 -- sha working state (q21) + * v22 -- sha working state (q22) + * v23 -- temp register for SHA1 + * v24 -- sha state ABCD + * v25 -- sha state E + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined. For AES partial blocks the user is required to pad the input + * to modulus 16 = 0. + * The variable "dlen" must be a multiple of 8 and greater or equal + * to "clen". This constraint is strictly related to the needs of the IPSec + * ESP packet. Encrypted payload is hashed along with the 8 byte ESP header, + * forming ICV. Speed gain is achieved by doing both things at the same time, + * hence lengths are required to match at least at the cipher level. + * + * Short lengths are not optimized at < 12 AES blocks + */ + +.globl asm_aescbc_sha1_hmac +.def asm_aescbc_sha1_hmac + .type 32 +.endef + +.section .rodata +.align 4 +Lrcon: +.word 0x5a827999, 0x5a827999, 0x5a827999, 0x5a827999 +.word 0x6ed9eba1, 0x6ed9eba1, 0x6ed9eba1, 0x6ed9eba1 +.word 0x8f1bbcdc, 0x8f1bbcdc, 0x8f1bbcdc, 0x8f1bbcdc +.word 0xca62c1d6, 0xca62c1d6, 0xca62c1d6, 0xca62c1d6 +.text + +asm_aescbc_sha1_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + + /* + * init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + cmp x10,12 + b.lt Lenc_short_cases + + + ld1 {v3.16b},[x6] + + ld1 {v0.16b},[x0],16 + mov x11,x2 + lsr x12,x11,6 + /* + * now we can do the loop prolog, 1st aes sequence of 4 blocks + */ + ldp q8,q9,[x9],32 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + ldp q10,q11,[x9],32 + prfm PLDL1KEEP,[x0,64] + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x1,64] + ldp q12,q13,[x9],32 + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + + ld1 {v1.16b},[x0],16 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + ldp q14,q15,[x9],32 + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + ldp q16,q17,[x9],32 + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_enc_prolog_0 +Laes192_enc_prolog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_prolog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v1.16b,v1.16b,v0.16b + + + + ld1 {v2.16b},[x0],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,0*64] + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + + st1 {v0.16b},[x1],16 + ld1 {v26.16b},[x3],16 + prfm PLDL1KEEP,[x8,2*64] + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,4*64] + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,6*64] + b.lt Laes128_enc_prolog_1 +Laes192_enc_prolog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_prolog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + prfm PLDL1KEEP,[x8,8*64] + eor v2.16b,v2.16b,v1.16b + + + + ld1 {v3.16b},[x0],16 + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + mov x9,x0 + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,10*64] + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + ld1 {v27.16b},[x3],16 + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,12*64] + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,14*64] + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt Laes128_enc_prolog_2 +Laes192_enc_prolog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_prolog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + ld1 {v28.16b},[x3],16 + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + + sub x15,x12,1 + and x13,x10,3 + b.lt Laes128_enc_prolog_3 +Laes192_enc_prolog_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_prolog_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + ldp q4,q5,[x8],32 + /* + * Note, aes_blocks_left := number after + * the main (sha) block is done. Can be 0 + */ + + + st1 {v3.16b},[x1],16 + ld1 {v29.16b},[x3],16 + + ldp q6,q7,[x8] + + + sub x8,x5,x2 + + sub x5,x5,64 + /* + * main combined loop CBC + */ +Lenc_main_loop: + /* + * because both mov, rev32 and eor have a busy cycle, this takes longer + * than it looks. + * That's OK since there are 6 cycles before we can use the load anyway; + * so this goes as fast as it can without SW pipelining (too complicated + * given the code size) + */ + rev32 v26.16b,v26.16b + + ld1 {v0.16b},[x0],16 + mov v20.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + rev32 v28.16b,v28.16b + + ld1 {v1.16b},[x0],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + + rev32 v29.16b,v29.16b + sha1c q24,s25,v19.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + sha1c q24,s22,v23.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + cmp x16,#12 + b.lt Laes128_enc_mainloop_0 +Laes192_enc_mainloop_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_mainloop_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + sha1su0 v26.4s,v27.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + eor v1.16b,v1.16b,v0.16b + + st1 {v0.16b},[x1],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v28.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + add v23.4s,v5.4s,v29.4s + sha1su1 v27.4s,v26.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha1p q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + add x9,x9,64 + sha1su0 v26.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + add v23.4s,v5.4s,v27.4s + sha1p q24,s21,v19.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + b.lt Laes128_enc_mainloop_1 +Laes192_enc_mainloop_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_mainloop_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v27.4s,v26.4s + + + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + add v19.4s,v6.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + + ld1 {v3.16b},[x0],16 + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + b.lt Laes128_enc_mainloop_2 +Laes192_enc_mainloop_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_mainloop_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + + + eor v3.16b,v3.16b,v2.16b + + sha1su1 v28.4s,v27.4s + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + + st1 {v2.16b},[x1],16 + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v7.4s,v26.4s + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + add v23.4s,v7.4s,v27.4s + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + sub x15,x15,1 + add v19.4s,v7.4s,v28.4s + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + add v23.4s,v7.4s,v29.4s + b.lt Laes128_enc_mainloop_3 +Laes192_enc_mainloop_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_mainloop_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp q26,q27,[x3],32 + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + st1 {v3.16b},[x1],16 + + ldp q28,q29,[x3],32 + + sub x5,x5,64 + cbnz x15,Lenc_main_loop + + mov w15,0x80 + /* + * epilog, process remaining aes blocks and b-2 sha block + * do this inline (no loop) to overlap with the sha part + * note there are 0-3 aes blocks left. + */ + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + mov v20.16b,v24.16b + cbz x13, Lbm2fromQ0 + + /* + * mode op 0 + * read next aes block, update aes_ptr_in + */ + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + add v19.4s,v4.4s,v26.4s + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s25,v19.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + add v19.4s,v4.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + sha1c q24,s22,v23.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + add v23.4s,v4.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v4.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + sha1h s21,s24 + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha1c q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_0 +Laes192_enc_epilog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_epilog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + subs x14,x13,1 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + st1 {v0.16b},[x1],16 + + beq Lbm2fromQ1 + /* + * mode op 1 + * read next aes block, update aes_ptr_in + */ + ld1 {v1.16b},[x0],16 + + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v19.4s,v5.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + sha1su1 v27.4s,v26.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v5.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_1 +Laes192_enc_epilog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_epilog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + subs x14,x14,1 + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + st1 {v1.16b},[x1],16 + + beq Lbm2fromQ2 + + /* + * mode op 2 + * read next aes block, update aes_ptr_in + */ + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + add v23.4s,v6.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v6.4s,v26.4s + sha1su0 v29.4s,v26.4s,v27.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + sha1su1 v26.4s,v29.4s + add v19.4s,v6.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha1h s21,s24 + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + sha1m q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_2 +Laes192_enc_epilog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_epilog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + st1 {v2.16b},[x1],16 + + b Lbm2fromQ3 + + /* + * now there is the b-2 sha block before the final one. Execution takes over + * in the appropriate part of this depending on how many aes blocks were left. + * If there were none, the whole thing is executed. + */ +Lbm2fromQ0: + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + +Lbm2fromQ1: + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + +Lbm2fromQ2: + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + +Lbm2fromQ3: + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + eor v26.16b,v26.16b,v26.16b + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + eor v27.16b,v27.16b,v27.16b + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + eor v28.16b,v28.16b,v28.16b + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + + eor v29.16b,v29.16b,v29.16b + + cbz x13,Lpost_long_Q0 + + + ld1 {v26.16b},[x3],16 + sub x5,x5,16 + rev32 v26.16b,v26.16b + subs x14,x13,1 + b.eq Lpost_long_Q1 + + + ld1 {v27.16b},[x3],16 + sub x5,x5,16 + rev32 v27.16b,v27.16b + subs x14,x14,1 + b.eq Lpost_long_Q2 + + + ld1 {v28.16b},[x3],16 + sub x5,x5,16 + rev32 v28.16b,v28.16b + + b Lpost_long_Q3 + /* + * Process remaining 8B blocks of the digest + */ +Lpost_long_Q0: + + + mov v26.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 + +Lpost_long_Q1: + + + mov v27.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 + +Lpost_long_Q2: + + + mov v28.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 + +Lpost_long_Q3: + + + mov v29.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + /* + * Outstanding 8B blocks left. + * Since there has to be another sha block with padding, + * we need to calculate hash without padding here. + */ + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + /* + * Don't decrease x5 here. + * Use it to indicate necessity of constructing "1" padding at the end. + */ + mov v29.d[1],x2 + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,Lpost_long_loop + subs x5,x5,8 + + b.ne Lpost_long_Q0 + + mov v26.b[3],w15 + +Lpost_long_loop: + + add x11,x11,x8 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov v20.16b,v24.16b + + + mov w11, #0x80 + mov v27.b[7], w11 + + mov x11, #64+20 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +Lenc_short_cases: + ldp q8,q9,[x9],32 + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + mov w15,0x80 + ldp q10,q11,[x9],32 + lsl x11,x10,4 + eor v26.16b,v26.16b,v26.16b + ldp q12,q13,[x9],32 + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + ldp q14,q15,[x9],32 + eor v29.16b,v29.16b,v29.16b + ldp q4,q5,[x8],32 + ldp q16,q17,[x9],32 + ld1 {v3.16b},[x6] + ldp q6,q7,[x8] + + sub x8,x5,x2 + /* + * the idea in the short loop (at least 1) is to break out with the padding + * already in place excepting the final word. + */ +Lenc_short_loop: + + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_enc_short_0 +Laes192_enc_short_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_short_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + st1 {v0.16b},[x1],16 + + ld1 {v26.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v26.16b,v26.16b + cbz x10,Lpost_short_Q1 + + ld1 {v1.16b},[x0],16 + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_enc_short_1 +Laes192_enc_short_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_short_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + st1 {v1.16b},[x1],16 + + ld1 {v27.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v27.16b,v27.16b + cbz x10,Lpost_short_Q2 + + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_enc_short_2 +Laes192_enc_short_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_short_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + ld1 {v28.16b},[x3],16 + + sub x5,x5,16 + sub x10,x10,1 + + rev32 v28.16b,v28.16b + cbz x10,Lpost_short_Q3 + + ld1 {v3.16b},[x0],16 + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_enc_short_3 +Laes192_enc_short_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_short_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + st1 {v3.16b},[x1],16 + + ld1 {v29.16b},[x3],16 + + sub x5,x5,16 + mov v20.16b,v24.16b + + rev32 v29.16b,v29.16b + /* + * now we have the sha1 to do for these 4 aes blocks + */ + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + sub x10,x10,1 + cbnz x10,Lenc_short_loop + +Lpost_short_Q0: + + mov v26.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 +Lpost_short_Q1: + + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v27.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 +Lpost_short_Q2: + + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v28.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 +Lpost_short_Q3: + + eor v29.16b,v29.16b,v29.16b + + mov v29.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,Lpost_short_loop + subs x5,x5,8 + + b.ne Lpost_short_Q0 + + mov v26.b[3],w15 + + /* + * there are between 0 and 3 aes blocks in the final sha1 blocks + */ +Lpost_short_loop: + + add x11,x11,x8 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + mov v20.16b,v24.16b + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov w11, #0x80 + mov v27.b[7], w11 + + mov v20.16b,v24.16b + + mov x11, #64+20 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + add v19.4s,v4.4s,v26.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + + + + /* + * Description: + * + * Combined Auth/Dec Primitive = sha1_hmac/aes128cbc + * + * Operations: + * + * out = decrypt-AES128CBC(in) + * return_ash_ptr = SHA1(o_key_pad | SHA1(i_key_pad | in)) + * + * Prototype: + * asm_sha1_hmac_aescbc_dec(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_sha1_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 -- temp register for SHA1 + * v20 -- ABCD copy (q20) + * v21 -- sha working state (q21) + * v22 -- sha working state (q22) + * v23 -- temp register for SHA1 + * v24 -- sha state ABCD + * v25 -- sha state E + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined. For AES partial blocks the user is required to pad the input + * to modulus 16 = 0. + * + * The variable "dlen" must be a multiple of 8 and greater or equal to "clen". + * The maximum difference between "dlen" and "clen" cannot exceed 64 bytes. + * This constrain is strictly related to the needs of the IPSec ESP packet. + * Short lengths are less optimized at < 16 AES blocks, however they are + * somewhat optimized, and more so than the enc/auth versions. + */ + +.globl asm_sha1_hmac_aescbc_dec +.def asm_sha1_hmac_aescbc_dec + .type 32 +.endef + +asm_sha1_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + /* + * init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + cmp x10,16 + blt Ldec_short_cases + + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ldp q4,q5,[x8],32 + ldp q6,q7,[x8],32 + + + sub x8,x5,x2 + + mov x11,x2 + ld1 {v30.16b},[x6] + lsr x12,x11,6 + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + + sub x5,x5,64 + /* + * now we can do the loop prolog, 1st sha1 block + */ + prfm PLDL1KEEP,[x0,64] + prfm PLDL1KEEP,[x1,64] + /* + * do the first sha1 block on the plaintext + */ + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + add v23.4s,v4.4s,v27.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v8.16b},[x9],16 + sha1c q24,s25,v19.4s + sha1su1 v26.4s,v29.4s + ld1 {v9.16b},[x9],16 + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + ld1 {v10.16b},[x9],16 + sha1c q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + add v23.4s,v4.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + ld1 {v11.16b},[x9],16 + sha1c q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v12.16b},[x9],16 + sha1c q24,s21,v19.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v26.4s,v29.4s + ld1 {v13.16b},[x9],16 + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + ld1 {v14.16b},[x9],16 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + ld1 {v15.16b},[x9],16 + sha1p q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + ld1 {v16.16b},[x9],16 + sha1p q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + ld1 {v17.16b},[x9],16 + add v19.4s,v6.4s,v28.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + ld1 {v18.16b},[x9],16 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + sha1h s22,s24 + ld1 {v26.16b},[x3],16 + sha1p q24,s21,v19.4s + add v23.4s,v7.4s,v27.4s + sha1h s21,s24 + ld1 {v27.16b},[x3],16 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v28.4s + sha1h s22,s24 + ld1 {v28.16b},[x3],16 + sha1p q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + ld1 {v29.16b},[x3],16 + sha1p q24,s22,v23.4s + + + sub x5,x5,64 + /* + * aes_blocks_left := number after the main (sha) block is done. + * can be 0 note we account for the extra unwind in main_blocks + */ + sub x15,x12,2 + add v24.4s,v24.4s,v20.4s + and x13,x10,3 + ld1 {v0.16b},[x0] + add v25.4s,v25.4s,v21.4s + + ld1 {v31.16b},[x0],16 + + + mov x9,xzr + /* + * main combined loop CBC, can be used by auth/enc version + */ +Ldec_main_loop: + /* + * Because both mov, rev32 and eor have a busy cycle, + * this takes longer than it looks. + */ + rev32 v26.16b,v26.16b + mov v20.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + rev32 v28.16b,v28.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + rev32 v29.16b,v29.16b + + ld1 {v1.16b},[x0] + sha1c q24,s25,v19.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_mainloop_0 +Laes192_dec_mainloop_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_mainloop_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + add v19.4s,v5.4s,v28.4s + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha1p q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + sha1h s22,s24 + add v19.4s,v5.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1p q24,s21,v19.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + sha1su1 v26.4s,v29.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + sha1su1 v27.4s,v26.4s + cmp x16,#12 + b.lt Laes128_dec_mainloop_1 +Laes192_dec_mainloop_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_mainloop_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v19.4s,v6.4s,v28.4s + add v23.4s,v6.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + sha1su0 v28.4s,v29.4s,v26.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v6.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha1su1 v26.4s,v29.4s + add v23.4s,v6.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha1su1 v27.4s,v26.4s + add v19.4s,v6.4s,v28.4s + sha1h s22,s24 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1m q24,s21,v19.4s + cmp x16,#12 + b.lt Laes128_dec_mainloop_2 +Laes192_dec_mainloop_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_mainloop_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + sha1su1 v28.4s,v27.4s + add v23.4s,v7.4s,v29.4s + add v19.4s,v7.4s,v26.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + sha1h s21,s24 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + sha1p q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + ld1 {v26.16b},[x3],16 + sha1p q24,s21,v19.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + add v23.4s,v7.4s,v27.4s + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + ld1 {v27.16b},[x3],16 + sha1p q24,s22,v23.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sub x15,x15,1 + add v19.4s,v7.4s,v28.4s + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + ld1 {v0.16b},[x0] + sha1h s22,s24 + ld1 {v28.16b},[x3],16 + sha1p q24,s21,v19.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_dec_mainloop_3 +Laes192_dec_mainloop_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_mainloop_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v23.4s,v7.4s,v29.4s + sha1h s21,s24 + ld1 {v29.16b},[x3],16 + sha1p q24,s22,v23.4s + add v24.4s,v24.4s,v20.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v25.4s,v25.4s,v21.4s + + st1 {v3.16b},[x1],16 + + sub x5,x5,64 + + cbnz x15,Ldec_main_loop + /* + * Now the loop epilog. Since the reads for sha have already been done + * in advance, we have to have an extra unwind. + * This is why the test for the short cases is 16 and not 12. + * + * The unwind, which is just the main loop without the tests or final reads. + */ + rev32 v26.16b,v26.16b + mov v20.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + rev32 v28.16b,v28.16b + sha1su0 v26.4s,v27.4s,v28.4s + + ld1 {v1.16b},[x0] + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + sha1c q24,s25,v19.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + rev32 v29.16b,v29.16b + sha1su1 v26.4s,v29.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + add v19.4s,v4.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v29.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1c q24,s21,v19.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_0 +Laes192_dec_epilog_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_epilog_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + add v23.4s,v5.4s,v27.4s + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + + st1 {v0.16b},[x1],16 + sha1su0 v27.4s,v28.4s,v29.4s + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + add v19.4s,v5.4s,v28.4s + sha1p q24,s22,v23.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v29.4s + sha1su1 v27.4s,v26.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + sha1su0 v28.4s,v29.4s,v26.4s + + ld1 {v2.16b},[x0] + sha1h s22,s24 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + sha1p q24,s21,v19.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha1su1 v28.4s,v27.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_1 +Laes192_dec_epilog_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_epilog_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v19.4s,v6.4s,v28.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v27.4s,v26.4s + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + sha1su0 v28.4s,v29.4s,v26.4s + + st1 {v1.16b},[x1],16 + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + sha1su1 v28.4s,v27.4s + add v19.4s,v6.4s,v26.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha1su0 v29.4s,v26.4s,v27.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + sha1h s21,s24 + sha1m q24,s22,v23.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha1su1 v29.4s,v28.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + add v23.4s,v6.4s,v27.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + add v19.4s,v6.4s,v28.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_2 +Laes192_dec_epilog_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_epilog_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + sha1su1 v28.4s,v27.4s + add v23.4s,v7.4s,v29.4s + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + sha1su0 v29.4s,v26.4s,v27.4s + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v7.4s,v26.4s + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + + ld1 {v0.16b},[x0] + add v23.4s,v7.4s,v27.4s + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v28.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + add v23.4s,v7.4s,v29.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_3 +Laes192_dec_epilog_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_epilog_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + /* + * now we have to do the 4 aes blocks (b-2) that catch up to where sha is + */ + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + + st1 {v3.16b},[x1],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + + ld1 {v1.16b},[x0] + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_0 +Laes192_dec_catchup_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_catchup_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_1 +Laes192_dec_catchup_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_catchup_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + ld1 {v3.16b},[x0] + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_2 +Laes192_dec_catchup_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_catchup_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_3 +Laes192_dec_catchup_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_catchup_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x9,x9,4 + + /* + * Now, there is the final b-1 sha1 padded block. + * This contains between 0-3 aes blocks. We take some pains to avoid read spill + * by only reading the blocks that are actually defined. + * this is also the final sha block code for the short_cases. + */ +Ljoin_common: + mov w15,0x80 +Lpost_loop_Q0: + + mov v26.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v26.d[0],x2 + + mov v26.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v26.d[1],x2 +Lpost_loop_Q1: + + mov v27.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v27.d[0],x2 + + mov v27.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v27.d[1],x2 +Lpost_loop_Q2: + + mov v28.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v28.d[0],x2 + + mov v28.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v28.d[1],x2 +Lpost_loop_Q3: + + mov v29.b[3],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha1 to do for these 4 16B blocks + */ +1: + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + //rev32 v29.16b,v29.16b + + mov v20.16b,v24.16b + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + eor v26.16b,v26.16b,v26.16b + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + eor v27.16b,v27.16b,v27.16b + sha1p q24,s21,v19.4s + + sha1h s21,s24 + eor v28.16b,v28.16b,v28.16b + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + eor v29.16b,v29.16b,v29.16b + add v24.4s,v24.4s,v20.4s + + + cbz x5,Lpost_loop + subs x5,x5,8 + + b.ne Lpost_loop_Q0 + + mov v26.b[0],w15 + +Lpost_loop: + + add x11,x11,x8 + + add x11,x11,#64 + lsr x12,x11,32 + and x14,x11,0xffffffff + lsl x12,x12,3 + lsl x14,x14,3 + + rev32 v26.16b,v26.16b + mov v29.s[3],w14 + rev32 v27.16b,v27.16b + mov v29.s[2],w12 + rev32 v28.16b,v28.16b + + mov v20.16b,v24.16b + + cbz x9,1f + /* + * At this point all data should be fetched for SHA. + * Save remaining blocks without danger of overwriting SHA source. + */ + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 +1: + /* + * final sha block + * The strategy is to combine the 0-3 aes blocks, which is faster but + * a little gourmand on code space. + */ + cbz x13,Lzero_aes_blocks_left + + ld1 {v0.16b},[x0] + ld1 {v31.16b},[x0],16 + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v19.4s,v4.4s,v26.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v23.4s,v4.4s,v27.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1c q24,s25,v19.4s + sha1su1 v26.4s,v29.4s + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1c q24,s22,v23.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + add v19.4s,v4.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1c q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + add v23.4s,v4.4s,v29.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_final1_0 +Laes192_dec_final1_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final1_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final1_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final1_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v29.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + + st1 {v3.16b},[x1],16 + sha1su1 v26.4s,v29.4s + + sub x13,x13,1 + cbz x13,Lfrmquad1 + + + + ld1 {v0.16b},[x0] + ld1 {v30.16b},[x0],16 + add v23.4s,v5.4s,v27.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v19.4s,v5.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su1 v27.4s,v26.4s + sha1su0 v28.4s,v29.4s,v26.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha1su1 v28.4s,v27.4s + add v23.4s,v5.4s,v29.4s + sha1su0 v29.4s,v26.4s,v27.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1h s21,s24 + sha1p q24,s22,v23.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1su1 v29.4s,v28.4s + add v19.4s,v5.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1p q24,s21,v19.4s + cmp x16,#12 + b.lt Laes128_dec_final2_0 +Laes192_dec_final2_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final2_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final2_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final2_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v26.4s,v29.4s + eor v3.16b,v0.16b,v31.16b + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + st1 {v3.16b},[x1],16 + sha1su1 v27.4s,v26.4s + + sub x13,x13,1 + cbz x13,Lfrmquad2 + + + + ld1 {v0.16b},[x0],16 + add v19.4s,v6.4s,v28.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v23.4s,v6.4s,v29.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha1m q24,s22,v23.4s + sha1su1 v29.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + add v19.4s,v6.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha1h s22,s24 + sha1m q24,s21,v19.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha1su1 v26.4s,v29.4s + add v23.4s,v6.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + cmp x16,#12 + b.lt Laes128_dec_final3_0 +Laes192_dec_final3_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final3_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final3_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final3_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha1su1 v27.4s,v26.4s + eor v3.16b,v0.16b,v30.16b + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + + st1 {v3.16b},[x1],16 + sha1su1 v28.4s,v27.4s + b Lfrmquad3 + + /* + * The final block with no aes component, i.e from here there were zero blocks + */ +Lzero_aes_blocks_left: + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + sha1su1 v26.4s,v29.4s + + +Lfrmquad1: + add v23.4s,v5.4s,v27.4s + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + sha1su1 v27.4s,v26.4s + + +Lfrmquad2: + add v19.4s,v6.4s,v28.4s + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + sha1su1 v28.4s,v27.4s + + +Lfrmquad3: + add v23.4s,v7.4s,v29.4s + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v26.4s,v24.4s,v20.4s + add v27.4s,v25.4s,v21.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + ldr q24, [x7] + eor v25.16b, v25.16b, v25.16b + ldr s25, [x7, #16] + + mov v20.16b,v24.16b + + + mov w11, #0x80 + mov v27.b[7], w11 + + mov x11, #64+20 + + lsl x11, x11, 3 + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v20.4s + add v25.4s,v25.4s,v21.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + st1 {v24.16b}, [x4],16 + st1 {v25.s}[0], [x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +Ldec_short_cases: + ldp q8,q9,[x9],32 + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ldp q10,q11,[x9],32 + lsl x11,x10,4 + + ldp q12,q13,[x9],32 + ldp q4,q5,[x8],32 + ldp q14,q15,[x9],32 + ld1 {v30.16b},[x6] + ldp q16,q17,[x9],32 + ldp q6,q7,[x8] + ld1 {v18.16b},[x9] + + + sub x8,x5,x2 + + + mov x9,xzr + + mov x2,x0 + /* + * Digest source has to be at least of cipher source length + * therefore it is safe to use x10 to indicate whether we can + * overtake cipher processing by 4 AES block here. + */ + cmp x10,4 + + blt Llast_sha_block + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + sub x5,x5,64 + + mov v20.16b,v24.16b + + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + + b Lshort_loop_no_store + +Ldec_short_loop: + cmp x10,4 + + blt Llast_sha_block + + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 + + sub x9,x9,4 + +Lshort_loop_no_store: + + ld1 {v31.16b},[x2] + + ld1 {v0.16b},[x2],16 + + add x0,x0,64 + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_dec_short_0 +Laes192_dec_short_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_short_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v1.16b},[x2],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_dec_short_1 +Laes192_dec_short_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_short_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x2] + + ld1 {v2.16b},[x2],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_short_2 +Laes192_dec_short_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_short_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v3.16b},[x2],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_dec_short_3 +Laes192_dec_short_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_short_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x9,x9,4 + + sub x10,x10,4 + cmp x5,64 + b.lt Ldec_short_loop + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + sub x5,x5,64 + + mov v20.16b,v24.16b + + + add v19.4s,v4.4s,v26.4s + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s25,v19.4s + add v23.4s,v4.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v4.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1c q24,s22,v23.4s + add v19.4s,v4.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1c q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v5.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + add v23.4s,v5.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v29.4s + sha1su1 v28.4s,v27.4s + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v26.4s + sha1su1 v29.4s,v28.4s + + sha1su0 v26.4s,v27.4s,v28.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v6.4s,v27.4s + sha1su1 v26.4s,v29.4s + + sha1su0 v27.4s,v28.4s,v29.4s + sha1h s21,s24 + sha1m q24,s22,v23.4s + add v19.4s,v6.4s,v28.4s + sha1su1 v27.4s,v26.4s + + sha1su0 v28.4s,v29.4s,v26.4s + sha1h s22,s24 + sha1m q24,s21,v19.4s + add v23.4s,v7.4s,v29.4s + sha1su1 v28.4s,v27.4s + + + sha1su0 v29.4s,v26.4s,v27.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + add v19.4s,v7.4s,v26.4s + sha1su1 v29.4s,v28.4s + + add v23.4s,v7.4s,v27.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + add v19.4s,v7.4s,v28.4s + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v23.4s,v7.4s,v29.4s + sha1h s22,s24 + sha1p q24,s21,v19.4s + + sha1h s21,s24 + sha1p q24,s22,v23.4s + + add v25.4s,v25.4s,v21.4s + add v24.4s,v24.4s,v20.4s + + b Ldec_short_loop + /* + * This is arranged so that we can join the common unwind code + * that does the last sha block and the final 0-3 aes blocks + */ +Llast_sha_block: + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov x13,x10 + b Ljoin_common + + diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha256-armv8.S new file mode 100644 index 000000000..2f0bf8598 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha256-armv8.S @@ -0,0 +1,5487 @@ +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * Description: + * + * Combined Enc/Auth Primitive = aes128cbc/sha256_hmac + * + * Operations: + * + * out = encrypt-AES128CBC(in) + * return_hash_ptr = SHA256(o_key_pad | SHA256(i_key_pad | out)) + * + * Prototype: + * void asm_aescbc_sha256_hmac(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_aescbc_sha256_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 -- v3 -- aes results + * v4 -- v7 -- round consts for sha + * v8 -- v18 -- round keys + * v19 -- v20 -- round keys + * v21 -- ABCD tmp + * v22 -- sha working state ABCD (q22) + * v23 -- sha working state EFGH (q23) + * v24 -- sha state ABCD + * v25 -- sha state EFGH + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results + * are not defined. For AES partial blocks the user is required + * to pad the input to modulus 16 = 0. + * The variable "dlen" must be a multiple of 8 and greater or equal + * to "clen". This constrain is strictly related to the needs of the IPSec + * ESP packet. Encrypted payload is hashed along with the 8 byte ESP header, + * forming ICV. Speed gain is achieved by doing both things at the same time, + * hence lengths are required to match at least at the cipher level. + * + * Short lengths are not optimized at < 12 AES blocks + */ + +.globl asm_aescbc_sha256_hmac +.def asm_aescbc_sha256_hmac + .type 32 +.endef + +.section .rodata +.align 4 +Lrcon: +.word 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 +.word 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 +.word 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 +.word 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 +.word 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc +.word 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da +.word 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 +.word 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 +.word 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 +.word 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 +.word 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 +.word 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 +.word 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 +.word 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 +.word 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 +.word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + +Linit_sha_state: +.word 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a +.word 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +.text + +asm_aescbc_sha256_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp,#-64]! + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldp q24,q25,[x7] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + + adrp x12,Linit_sha_state + add x12,x12,:lo12:Linit_sha_state + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + + stp d12,d13,[sp,#32] + stp d14,d15,[sp,#48] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + + /* + * Init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case + */ + prfm PLDL1KEEP,[x0,0] + cmp x10,12 + b.lt Lenc_short_cases + + + ld1 {v3.16b},[x6] + + ld1 {v0.16b},[x0],16 + mov x11,x2 + lsr x12,x11,6 + /* + * now we can do the loop prolog, 1st aes sequence of 4 blocks + */ + ld1 {v8.16b},[x9],16 + ld1 {v9.16b},[x9],16 + eor v0.16b,v0.16b,v3.16b + ld1 {v10.16b},[x9],16 + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x0,64] + ld1 {v11.16b},[x9],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + prfm PLDL1KEEP,[x1,64] + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ld1 {v12.16b},[x9],16 + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + + ld1 {v1.16b},[x0],16 + ld1 {v13.16b},[x9],16 + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + ld1 {v14.16b},[x9],16 + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + ld1 {v15.16b},[x9],16 + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x9],16 + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + ld1 {v17.16b},[x9],16 + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_enc_prolog_0 +Laes192_enc_prolog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_prolog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,0*64] + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + + st1 {v0.16b},[x1],16 + ld1 {v26.16b},[x3],16 + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,2*64] + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,4*64] + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + prfm PLDL1KEEP,[x8,6*64] + b.lt Laes128_enc_prolog_1 +Laes192_enc_prolog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_prolog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + prfm PLDL1KEEP,[x8,8*64] + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + ld1 {v3.16b},[x0],16 + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,10*64] + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + ld1 {v27.16b},[x3],16 + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,12*64] + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + prfm PLDL1KEEP,[x8,14*64] + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt Laes128_enc_prolog_2 +Laes192_enc_prolog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_prolog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + ld1 {v28.16b},[x3],16 + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + sub x15,x12,1 + and x13,x10,3 + b.lt Laes128_enc_prolog_3 +Laes192_enc_prolog_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_prolog_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_prolog_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_prolog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + /* + * Note, aes_blocks_left := number after the main (sha) + * block is done. Can be 0 + */ + + st1 {v3.16b},[x1],16 + ld1 {v29.16b},[x3],16 + + + sub x12,x5,x2 + + sub x5,x5,64 + + /* + * main combined loop CBC + */ +Lenc_main_loop: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + /* + * Because both mov, rev32 and eor have a busy cycle,this takes longer + * than it looks. That's OK since there are 6 cycles before we can use + * the load anyway; so this goes as fast as it can without SW + * pipelining(too complicated given the code size) + */ + rev32 v26.16b,v26.16b + + ld1 {v0.16b},[x0],16 + mov v22.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + ld1 {v4.16b},[x8],16 + eor v0.16b,v0.16b,v3.16b + ld1 {v5.16b},[x8],16 + /* + * aes xform 0, sha quad 0 + */ + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + rev32 v28.16b,v28.16b + ld1 {v7.16b},[x8],16 + + ld1 {v1.16b},[x0],16 + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + sha256su0 v26.4s,v27.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + + rev32 v29.16b,v29.16b + sha256h2 q23, q21, v4.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt Laes128_enc_mainloop_0 +Laes192_enc_mainloop_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_mainloop_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + eor v1.16b,v1.16b,v0.16b + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + + ld1 {v2.16b},[x0],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v4.16b},[x8],16 + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + b.lt Laes128_enc_mainloop_1 +Laes192_enc_mainloop_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_mainloop_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + + + eor v2.16b,v2.16b,v1.16b + + + sha256su0 v26.4s,v27.4s + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0],16 + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + b.lt Laes128_enc_mainloop_2 +Laes192_enc_mainloop_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_mainloop_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + + + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + sub x15,x15,1 + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + b.lt Laes128_enc_mainloop_3 +Laes192_enc_mainloop_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_mainloop_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_mainloop_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_mainloop_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + st1 {v3.16b},[x1],16 + + ldp q26,q27,[x3],32 + ldp q28,q29,[x3],32 + sub x5,x5,64 + + cbnz x15,Lenc_main_loop + + mov w15,0x80 + /* + * epilog, process remaining aes blocks and b-2 sha block + * do this inline (no loop) to overlap with the sha part + * note there are 0-3 aes blocks left. + */ + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + mov v22.16b,v24.16b + mov v23.16b,v25.16b + cbz x13, Lbm2fromQ0 + + /* + * mode op 0 + * read next aes block, update aes_ptr_in + */ + ld1 {v0.16b},[x0],16 + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + eor v0.16b,v0.16b,v3.16b + + + add v4.4s,v4.4s,v26.4s + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_0 +Laes192_enc_epilog_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_epilog_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + subs x14,x13,1 + + st1 {v0.16b},[x1],16 + + beq Lbm2fromQ1 + /* + * mode op 1 + * read next aes block, update aes_ptr_in + */ + ld1 {v1.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + eor v1.16b,v1.16b,v0.16b + + + add v4.4s,v4.4s,v26.4s + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_1 +Laes192_enc_epilog_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_epilog_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + subs x14,x14,1 + + st1 {v1.16b},[x1],16 + + beq Lbm2fromQ2 + /* + * mode op 2 + * read next aes block, update aes_ptr_in + */ + ld1 {v2.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + eor v2.16b,v2.16b,v1.16b + + + add v4.4s,v4.4s,v26.4s + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + add v5.4s,v5.4s,v27.4s + sha256su0 v26.4s,v27.4s + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + add v6.4s,v6.4s,v28.4s + sha256su0 v27.4s,v28.4s + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + cmp x16,#12 + b.lt Laes128_enc_epilog_2 +Laes192_enc_epilog_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_epilog_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_epilog_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_epilog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + b Lbm2fromQ3 + /* + * Now there is the b-2 sha block before the final one. Execution takes over + * in the appropriate part of this depending on how many aes blocks were left. + * If there were none, the whole thing is executed. + */ + +Lbm2fromQ0: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lbm2fromQ1: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lbm2fromQ2: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lbm2fromQ3: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + eor v29.16b,v29.16b,v29.16b + + cbz x13,Lpost_long_Q0 + + + ld1 {v26.16b},[x3],16 + sub x5,x5,16 + rev32 v26.16b,v26.16b + subs x14,x13,1 + b.eq Lpost_long_Q1 + + + ld1 {v27.16b},[x3],16 + sub x5,x5,16 + rev32 v27.16b,v27.16b + subs x14,x14,1 + b.eq Lpost_long_Q2 + + + ld1 {v28.16b},[x3],16 + sub x5,x5,16 + rev32 v28.16b,v28.16b + + b Lpost_long_Q3 + /* + * Process remaining 8B blocks of the digest + */ +Lpost_long_Q0: + + + mov v26.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 + +Lpost_long_Q1: + + + mov v27.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 + +Lpost_long_Q2: + + + mov v28.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 + +Lpost_long_Q3: + + + mov v29.b[3],w15 + + cbz x5,Lpost_long_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + /* + * Outstanding 8B blocks left. + * Since there has to be another sha block with padding, + * we need to calculate hash without padding here. + */ + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + /* + * Don't decrease x5 here. + * Use it to indicate necessity of constructing "1" padding at the end. + */ + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks + */ +1: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,Lpost_long_loop + subs x5,x5,8 + + b.ne Lpost_long_Q0 + + mov v26.b[3],w15 + +Lpost_long_loop: + + add x11,x11,x12 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + /* + * do last sha of pad block + */ + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + add v27.4s,v25.4s,v23.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ldp q24,q25,[x7] + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + ldp q4,q5,[x8],32 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + stp q24,q25,[x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +Lenc_short_cases: + ld1 {v3.16b},[x6] + ldp q8,q9,[x9],32 + eor v26.16b,v26.16b,v26.16b + ldp q10,q11,[x9],32 + eor v27.16b,v27.16b,v27.16b + ldp q12,q13,[x9],32 + eor v28.16b,v28.16b,v28.16b + ldp q14,q15,[x9],32 + eor v29.16b,v29.16b,v29.16b + ldp q16,q17,[x9],32 + mov w15,0x80 + lsl x11,x10,4 + ld1 {v18.16b},[x9] + + + sub x12,x5,x2 + /* + * the idea in the short loop (at least 1) is to break out with the padding + * already in place excepting the final word. + */ +Lenc_short_loop: + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ld1 {v0.16b},[x0],16 + eor v0.16b,v0.16b,v3.16b + + + aese v0.16b,v8.16b + aesmc v0.16b,v0.16b + aese v0.16b,v9.16b + aesmc v0.16b,v0.16b + aese v0.16b,v10.16b + aesmc v0.16b,v0.16b + aese v0.16b,v11.16b + aesmc v0.16b,v0.16b + aese v0.16b,v12.16b + aesmc v0.16b,v0.16b + aese v0.16b,v13.16b + aesmc v0.16b,v0.16b + aese v0.16b,v14.16b + aesmc v0.16b,v0.16b + aese v0.16b,v15.16b + aesmc v0.16b,v0.16b + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_enc_short_0 +Laes192_enc_short_0: + ldp q30,q31,[x17],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_short_0 + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_0: + aese v0.16b,v31.16b + aesmc v0.16b,v0.16b + ldp q30,q31,[x17],32 + aese v0.16b,v30.16b + aesmc v0.16b,v0.16b + ld1 {v30.16b},[x17] + aese v0.16b,v31.16b + eor v0.16b,v0.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_0: + ld1 {v18.16b},[x9] + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + st1 {v0.16b},[x1],16 + + ld1 {v26.16b},[x3],16 + + sub x5,x5,16 + rev32 v26.16b,v26.16b + sub x10,x10,1 + cbz x10,Lpost_short_Q1 + + ld1 {v1.16b},[x0],16 + eor v1.16b,v1.16b,v0.16b + + + aese v1.16b,v8.16b + aesmc v1.16b,v1.16b + aese v1.16b,v9.16b + aesmc v1.16b,v1.16b + aese v1.16b,v10.16b + aesmc v1.16b,v1.16b + aese v1.16b,v11.16b + aesmc v1.16b,v1.16b + aese v1.16b,v12.16b + aesmc v1.16b,v1.16b + aese v1.16b,v13.16b + aesmc v1.16b,v1.16b + aese v1.16b,v14.16b + aesmc v1.16b,v1.16b + aese v1.16b,v15.16b + aesmc v1.16b,v1.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_enc_short_1 +Laes192_enc_short_1: + ldp q30,q31,[x17],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_short_1 + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_1: + aese v1.16b,v31.16b + aesmc v1.16b,v1.16b + ldp q30,q31,[x17],32 + aese v1.16b,v30.16b + aesmc v1.16b,v1.16b + ld1 {v30.16b},[x17] + aese v1.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + st1 {v1.16b},[x1],16 + + ld1 {v27.16b},[x3],16 + + sub x5,x5,16 + rev32 v27.16b,v27.16b + sub x10,x10,1 + cbz x10,Lpost_short_Q2 + + ld1 {v2.16b},[x0],16 + eor v2.16b,v2.16b,v1.16b + + + aese v2.16b,v8.16b + aesmc v2.16b,v2.16b + aese v2.16b,v9.16b + aesmc v2.16b,v2.16b + aese v2.16b,v10.16b + aesmc v2.16b,v2.16b + aese v2.16b,v11.16b + aesmc v2.16b,v2.16b + aese v2.16b,v12.16b + aesmc v2.16b,v2.16b + aese v2.16b,v13.16b + aesmc v2.16b,v2.16b + aese v2.16b,v14.16b + aesmc v2.16b,v2.16b + aese v2.16b,v15.16b + aesmc v2.16b,v2.16b + aese v2.16b,v16.16b + aesmc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_enc_short_2 +Laes192_enc_short_2: + ldp q30,q31,[x17],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_short_2 + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_2: + aese v2.16b,v31.16b + aesmc v2.16b,v2.16b + ldp q30,q31,[x17],32 + aese v2.16b,v30.16b + aesmc v2.16b,v2.16b + ld1 {v30.16b},[x17] + aese v2.16b,v31.16b + eor v2.16b,v2.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + st1 {v2.16b},[x1],16 + + ld1 {v28.16b},[x3],16 + + sub x5,x5,16 + rev32 v28.16b,v28.16b + sub x10,x10,1 + cbz x10,Lpost_short_Q3 + + ld1 {v3.16b},[x0],16 + eor v3.16b,v3.16b,v2.16b + + + aese v3.16b,v8.16b + aesmc v3.16b,v3.16b + aese v3.16b,v9.16b + aesmc v3.16b,v3.16b + aese v3.16b,v10.16b + aesmc v3.16b,v3.16b + aese v3.16b,v11.16b + aesmc v3.16b,v3.16b + aese v3.16b,v12.16b + aesmc v3.16b,v3.16b + aese v3.16b,v13.16b + aesmc v3.16b,v3.16b + aese v3.16b,v14.16b + aesmc v3.16b,v3.16b + aese v3.16b,v15.16b + aesmc v3.16b,v3.16b + aese v3.16b,v16.16b + aesmc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_enc_short_3 +Laes192_enc_short_3: + ldp q30,q31,[x17],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_short_3 + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #32 + b 1f +Laes256_enc_short_3: + aese v3.16b,v31.16b + aesmc v3.16b,v3.16b + ldp q30,q31,[x17],32 + aese v3.16b,v30.16b + aesmc v3.16b,v3.16b + ld1 {v30.16b},[x17] + aese v3.16b,v31.16b + eor v3.16b,v3.16b,v30.16b + sub x17, x17, #64 + b 1f +Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + st1 {v3.16b},[x1],16 + + ld1 {v29.16b},[x3],16 + + sub x5,x5,16 + + rev32 v29.16b,v29.16b + /* + * now we have the sha256 to do for these 4 aes blocks + */ + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + sub x10,x10,1 + eor v29.16b,v29.16b,v29.16b + + cbnz x10,Lenc_short_loop + +Lpost_short_Q0: + + mov v26.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v26.d[0],x2 + + mov v26.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v26.d[1],x2 +Lpost_short_Q1: + + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v27.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v27.d[0],x2 + + mov v27.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v27.d[1],x2 +Lpost_short_Q2: + + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov v28.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v28.d[0],x2 + + mov v28.b[11],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + mov v28.d[1],x2 +Lpost_short_Q3: + + eor v29.16b,v29.16b,v29.16b + + mov v29.b[3],w15 + + cbz x5,Lpost_short_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks + */ +1: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + mov v21.16b, v22.16b + add v7.4s,v7.4s,v29.4s + + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + eor v26.16b,v26.16b,v26.16b + add v24.4s,v24.4s,v22.4s + eor v27.16b,v27.16b,v27.16b + add v25.4s,v25.4s,v23.4s + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + + cbz x5,Lpost_short_loop + subs x5,x5,8 + + b.ne Lpost_short_Q0 + + mov v26.b[3],w15 + + /* + * there are between 0 and 3 aes blocks in the final sha256 blocks + */ +Lpost_short_loop: + + add x11,x11,x12 + + add x11,x11, #64 + lsr x12,x11,32 + and x13,x11,0xffffffff + lsl x12,x12,3 + lsl x13,x13,3 + + mov v29.s[3],w13 + mov v29.s[2],w12 + + + + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + add v27.4s,v25.4s,v23.4s + + + eor v28.16b, v28.16b, v28.16b + eor v29.16b, v29.16b, v29.16b + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ldp q24,q25,[x7] + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + ldp q4,q5,[x8],32 + lsr x11, x11, 32 + mov v29.s[2], w11 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + ld1 {v4.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + ldp q6,q7,[x8],32 + add v5.4s,v5.4s,v27.4s + mov v21.16b, v22.16b + add v6.4s,v6.4s,v28.4s + + sha256h q22, q23, v4.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + ldp d10,d11,[sp,#16] + ldp d12,d13,[sp,#32] + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + ldp d14,d15,[sp,#48] + ldp d8,d9,[sp],#64 + + mov x0, xzr + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + rev32 v25.16b, v25.16b + + stp q24,q25,[x4] + + ret + + + + /* + * Description: + * + * Combined Auth/Dec Primitive = sha256_hmac/aes128cbc + * + * Operations: + * + * out = decrypt-AES128CBC(in) + * return_ash_ptr = SHA256(o_key_pad | SHA256(i_key_pad | in)) + * + * Prototype: + * + * void asm_sha256_hmac_aescbc_dec(uint8_t *csrc, uint8_t *cdst, uint64_t clen, + * uint8_t *dsrc, uint8_t *ddst, uint64_t dlen, + * CIPH_DIGEST *arg) + * + * Registers used: + * + * asm_sha256_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6: + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + * + * Routine register definitions: + * + * v0 - v3 -- aes results + * v4 - v7 -- round consts for sha + * v8 - v18 -- round keys + * v19 - v20 -- round keys + * v21 -- ABCD tmp + * v22 -- sha working state ABCD (q22) + * v23 -- sha working state EFGH (q23) + * v24 -- sha state ABCD + * v25 -- sha state EFGH + * v26 -- sha block 0 + * v27 -- sha block 1 + * v28 -- sha block 2 + * v29 -- sha block 3 + * v30 -- reserved + * v31 -- reserved + * + * + * Constraints: + * + * The variable "clen" must be a multiple of 16, otherwise results are not + * defined For AES partial blocks the user is required to pad the input to + * modulus 16 = 0. + * + * The variable "dlen" must be a multiple of 8 and greater or equal to "clen". + * The maximum difference between "dlen" and "clen" cannot exceed 64 bytes. + * This constrain is strictly related to the needs of the IPSec ESP packet. + * Short lengths are less optimized at < 16 AES blocks, however they are + * somewhat optimized, and more so than the enc/auth versions. + */ + +.globl asm_sha256_hmac_aescbc_dec +.def asm_sha256_hmac_aescbc_dec + .type 32 +.endef + +asm_sha256_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8,d9,[sp, #-80]! + + + ldr x7, [x6, #HMAC_IKEYPAD] + + ldp q24,q25,[x7] + + ldr x7, [x6, #HMAC_OKEYPAD] + + stp d10,d11,[sp,#16] + + prfm PLDL1KEEP,[x0,0] + stp d12,d13,[sp,#32] + prfm PLDL1KEEP,[x1,0] + lsr x10,x2,4 + stp d14,d15,[sp,#48] + + adrp x12,Linit_sha_state + add x12,x12,:lo12:Linit_sha_state + stp x19,x20,[sp,#64] + + ldr x9, [x6, #CIPHER_KEY] + ldr x16, [x6, #CIPHER_KEY_ROUNDS] + ldr x6, [x6, #CIPHER_IV] + add x17, x9, #160 + /* + * Init sha state, prefetch, check for small cases. + * Note that the output is prefetched as a load, for the in-place case. + */ + cmp x10,16 + blt Ldec_short_cases + + + sub x20,x5,x2 + + mov x11,x2 + ld1 {v30.16b},[x6] + lsr x12,x11,6 + + ldp q26,q27,[x3],32 + rev32 v26.16b,v26.16b + rev32 v27.16b,v27.16b + ldp q28,q29,[x3],32 + rev32 v28.16b,v28.16b + rev32 v29.16b,v29.16b + + + sub x5,x5,64 + /* + * now we can do the loop prolog, 1st sha256 block + */ + prfm PLDL1KEEP,[x0,64] + prfm PLDL1KEEP,[x1,64] + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + /* + * do the first sha256 block on the plaintext + */ + mov v22.16b,v24.16b + mov v23.16b,v25.16b + + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v8.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v9.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v10.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + ld1 {v11.16b},[x9],16 + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + add v6.4s,v6.4s,v28.4s + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v12.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v13.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v14.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + ld1 {v15.16b},[x9],16 + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + add v6.4s,v6.4s,v28.4s + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v16.16b},[x9],16 + sha256h2 q23, q21, v4.4s + ld1 {v4.16b},[x8],16 + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v17.16b},[x9],16 + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v18.16b},[x9],16 + sha256h2 q23, q21, v5.4s + ld1 {v5.16b},[x8],16 + sha256su1 v27.4s,v29.4s,v26.4s + + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v4.4s,v4.4s,v26.4s + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v7.4s + ld1 {v7.16b},[x8],16 + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + ld1 {v26.16b},[x3],16 + ld1 {v27.16b},[x3],16 + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v5.4s + ld1 {v28.16b},[x3],16 + ld1 {v29.16b},[x3],16 + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + + sub x5,x5,64 + + /* + * aes_blocks_left := number after the main (sha) block is done. + * can be 0 note we account for the extra unwind in main_blocks + */ + sub x15,x12,2 + + add v24.4s,v24.4s,v22.4s + and x13,x10,3 + ld1 {v0.16b},[x0] + add v25.4s,v25.4s,v23.4s + add x9,x0,128 + + ld1 {v31.16b},[x0],16 + + + mov x19,xzr + /* + * main combined loop CBC, can be used by auth/enc version + */ +Ldec_main_loop: + /* + * Because both mov, rev32 and eor have a busy cycle, this takes longer + * than it looks. + */ + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + prfm PLDL1KEEP,[x9,64] + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + /* + * aes xform 0, sha quad 0 + */ + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v4.16b},[x8],16 + rev32 v28.16b,v28.16b + + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v26.4s,v27.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + ld1 {v7.16b},[x8],16 + rev32 v29.16b,v29.16b + + ld1 {v1.16b},[x0] + sha256h2 q23, q21, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt Laes128_dec_mainloop_0 +Laes192_dec_mainloop_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_mainloop_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v4.16b},[x8],16 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + cmp x16,#12 + b.lt Laes128_dec_mainloop_1 +Laes192_dec_mainloop_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_mainloop_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + sha256su0 v26.4s,v27.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_mainloop_2 +Laes192_dec_mainloop_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_mainloop_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + ld1 {v26.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + ld1 {v27.16b},[x3],16 + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + ld1 {v28.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + ld1 {v29.16b},[x3],16 + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + sub x15,x15,1 + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + ld1 {v0.16b},[x0] + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_dec_mainloop_3 +Laes192_dec_mainloop_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_mainloop_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_mainloop_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_mainloop_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + add v25.4s,v25.4s,v23.4s + + st1 {v3.16b},[x1],16 + + sub x5,x5,64 + cbnz x15,Ldec_main_loop + /* + * Now the loop epilog. Since the reads for sha have already been done + * in advance, we have to have an extra unwind. + * This is why the test for the short cases is 16 and not 12. + * + * The unwind, which is just the main loop without the tests or final reads. + */ + + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + rev32 v27.16b,v27.16b + + prfm PLDL1KEEP,[x1,64] + mov v23.16b,v25.16b + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + /* + * aes xform 0, sha quad 0 + */ + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v6.16b},[x8],16 + rev32 v28.16b,v28.16b + ld1 {v7.16b},[x8],16 + + ld1 {v1.16b},[x0] + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + add v4.4s,v4.4s,v26.4s + sha256su0 v26.4s,v27.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + rev32 v29.16b,v29.16b + sha256h2 q23, q21, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + mov v21.16b, v22.16b + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v5.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + mov v21.16b, v22.16b + sha256su0 v29.4s,v26.4s + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_0 +Laes192_dec_epilog_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_epilog_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + ld1 {v6.16b},[x8],16 + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + add v5.4s,v5.4s,v27.4s + + + sha256su0 v26.4s,v27.4s + ld1 {v7.16b},[x8],16 + mov v21.16b, v22.16b + + st1 {v0.16b},[x1],16 + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + sha256h q22, q23, v4.4s + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + + ld1 {v2.16b},[x0] + add v7.4s,v7.4s,v29.4s + sha256su1 v27.4s,v29.4s,v26.4s + + ld1 {v4.16b},[x8],16 + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + ld1 {v5.16b},[x8],16 + mov v21.16b, v22.16b + sha256su0 v28.4s,v29.4s + sha256h q22, q23, v6.4s + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + sha256h2 q23, q21, v6.4s + ld1 {v6.16b},[x8],16 + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + add v5.4s,v5.4s,v27.4s + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + add v6.4s,v6.4s,v28.4s + cmp x16,#12 + b.lt Laes128_dec_epilog_1 +Laes192_dec_epilog_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_epilog_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + add v7.4s,v7.4s,v29.4s + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + + + sha256su0 v26.4s,v27.4s + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + st1 {v1.16b},[x1],16 + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + sha256su1 v26.4s,v28.4s,v29.4s + ld1 {v4.16b},[x8],16 + sha256su0 v27.4s,v28.4s + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + sha256su1 v27.4s,v29.4s,v26.4s + ld1 {v5.16b},[x8],16 + sha256su0 v28.4s,v29.4s + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + sha256su1 v28.4s,v26.4s,v27.4s + add v4.4s,v4.4s,v26.4s + sha256su0 v29.4s,v26.4s + + ld1 {v3.16b},[x0] + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + sha256su1 v29.4s,v27.4s,v28.4s + add v5.4s,v5.4s,v27.4s + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_epilog_2 +Laes192_dec_epilog_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_epilog_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + add v6.4s,v6.4s,v28.4s + add v7.4s,v7.4s,v29.4s + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + + st1 {v2.16b},[x1],16 + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + + ld1 {v0.16b},[x0] + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_dec_epilog_3 +Laes192_dec_epilog_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_epilog_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_epilog_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_epilog_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + eor v3.16b,v3.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + /* + * now we have to do the 4 aes blocks (b-2) that catch up to where sha is + */ + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + + st1 {v3.16b},[x1],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + + ld1 {v1.16b},[x0] + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_0 +Laes192_dec_catchup_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_catchup_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + + ld1 {v2.16b},[x0] + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_1 +Laes192_dec_catchup_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_catchup_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x0],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + + ld1 {v3.16b},[x0] + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_2 +Laes192_dec_catchup_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_catchup_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x0],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + cmp x16,#12 + b.lt Laes128_dec_catchup_3 +Laes192_dec_catchup_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_catchup_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_catchup_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_catchup_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x19,x19,4 + /* + * Now, there is the final b-1 sha256 padded block. + * This contains between 0-3 aes blocks. We take some pains to avoid read spill + * by only reading the blocks that are actually defined. + * This is also the final sha block code for the shortCases. + */ +Ljoin_common: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + mov w15,0x80 +Lpost_loop_Q0: + + mov v26.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v26.d[0],x2 + + mov v26.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v26.d[1],x2 +Lpost_loop_Q1: + + mov v27.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v27.d[0],x2 + + mov v27.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v27.d[1],x2 +Lpost_loop_Q2: + + mov v28.b[0],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + + mov v28.d[0],x2 + + mov v28.b[8],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + mov v28.d[1],x2 +Lpost_loop_Q3: + + mov v29.b[3],w15 + + cbz x5,Lpost_loop + + ldr x2,[x3],8 + sub x5,x5,8 + rev32 x2,x2 + + mov v29.d[0],x2 + + mov v29.b[11],w15 + + cbz x5,1f + + ldr x2,[x3],8 + rev32 x2,x2 + mov v29.d[1],x2 + + /* + * That is enough of blocks, we allow up to 64 bytes in total. + * Now we have the sha256 to do for these 4 16B blocks. + */ +1: + mov x9,x8 + rev32 v26.16b,v26.16b + ld1 {v4.16b},[x9],16 + rev32 v27.16b,v27.16b + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + //rev32 v29.16b,v29.16b + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v29.16b,v29.16b,v29.16b + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + cbz x5,Lpost_loop + subs x5,x5,8 + + b.ne Lpost_loop_Q0 + + mov v26.b[0],w15 + +Lpost_loop: + + add x11,x11,x20 + + add x11,x11,#64 + lsr x12,x11,32 + and x14,x11,0xffffffff + lsl x12,x12,3 + lsl x14,x14,3 + + mov v29.s[3],w14 + mov v29.s[2],w12 + + rev32 v26.16b,v26.16b + mov v22.16b,v24.16b + rev32 v27.16b,v27.16b + mov v23.16b,v25.16b + rev32 v28.16b,v28.16b + + + cbz x19,1f + /* + * At this point all data should be fetched for SHA. + * Save remaining blocks without danger of overwriting SHA source. + */ + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 +1: + /* + * final sha block + * the strategy is to combine the 0-3 aes blocks, which is faster but + * a little gourmand on code space. + */ + cbz x13,Lzero_aes_blocks_left + + ld1 {v0.16b},[x0] + ld1 {v31.16b},[x0],16 + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ld1 {v4.16b},[x8],16 + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + sha256su0 v27.4s,v28.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v6.4s + sha256su1 v28.4s,v26.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + cmp x16,#12 + b.lt Laes128_dec_final1_0 +Laes192_dec_final1_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final1_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final1_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final1_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + + sub x13,x13,1 + + st1 {v3.16b},[x1],16 + cbz x13,Lfrmquad1 + + + + + ld1 {v0.16b},[x0] + ld1 {v30.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v4.4s + sha256h2 q23, q21, v4.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su1 v26.4s,v28.4s,v29.4s + sha256su0 v27.4s,v28.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + sha256h2 q23, q21, v5.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + sha256su1 v27.4s,v29.4s,v26.4s + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + sha256su0 v29.4s,v26.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + cmp x16,#12 + b.lt Laes128_dec_final2_0 +Laes192_dec_final2_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final2_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final2_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final2_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v31.16b + + sub x13,x13,1 + + st1 {v3.16b},[x1],16 + cbz x13,Lfrmquad2 + + + + + ld1 {v0.16b},[x0],16 + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + ld1 {v6.16b},[x8],16 + ld1 {v7.16b},[x8],16 + add v4.4s,v4.4s,v26.4s + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + add v5.4s,v5.4s,v27.4s + add v6.4s,v6.4s,v28.4s + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v4.4s + sha256su1 v26.4s,v28.4s,v29.4s + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + sha256h2 q23, q21, v5.4s + sha256su1 v27.4s,v29.4s,v26.4s + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + add v7.4s,v7.4s,v29.4s + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + sha256su1 v28.4s,v26.4s,v27.4s + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + cmp x16,#12 + b.lt Laes128_dec_final3_0 +Laes192_dec_final3_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_final3_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_final3_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_final3_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + eor v3.16b,v0.16b,v30.16b + + st1 {v3.16b},[x1],16 + b Lfrmquad3 + /* + * the final block with no aes component, i.e from here there were zero blocks + */ + +Lzero_aes_blocks_left: + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lfrmquad1: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lfrmquad2: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + sha256su1 v29.4s,v27.4s,v28.4s + + +Lfrmquad3: + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + eor v26.16b,v26.16b,v26.16b + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + eor v27.16b,v27.16b,v27.16b + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + eor v28.16b,v28.16b,v28.16b + sha256h2 q23, q21, v7.4s + + add v26.4s,v24.4s,v22.4s + eor v29.16b,v29.16b,v29.16b + add v27.4s,v25.4s,v23.4s + + /* + * Calculate final HMAC + */ + + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + + ld1 {v24.16b},[x7],16 + ld1 {v25.16b},[x7] + + mov v22.16b,v24.16b + mov v23.16b,v25.16b + + + mov w11, #0x80 + mov v28.b[3], w11 + + mov x11, #64+32 + lsl x11, x11, 3 + + mov v29.s[3], w11 + lsr x11, x11, 32 + mov v29.s[2], w11 + + ld1 {v4.16b},[x8],16 + ld1 {v5.16b},[x8],16 + + add v4.4s,v4.4s,v26.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x8],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x8],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x8],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x8],16 + add v6.4s,v6.4s,v28.4s + + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + ldp d10,d11,[sp,#16] + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + + sha256h q22, q23, v7.4s + ldp d12,d13,[sp,#32] + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + ldp d14,d15,[sp,#48] + add v25.4s,v25.4s,v23.4s + + rev32 v24.16b, v24.16b + ldp x19,x20,[sp,#64] + ldp d8,d9,[sp],#80 + rev32 v25.16b, v25.16b + st1 {v24.4s},[x4],16 + mov x0, xzr + st1 {v25.4s},[x4] + + ret + + /* + * These are the short cases (less efficient), here used for 1-11 aes blocks. + * x10 = aes_blocks + */ +Ldec_short_cases: + ldp q8,q9,[x9],32 + adrp x8,Lrcon + add x8,x8,:lo12:Lrcon + ldp q10,q11,[x9],32 + lsl x11,x10,4 + + ldp q12,q13,[x9],32 + ldp q14,q15,[x9],32 + ld1 {v30.16b},[x6] + ldp q16,q17,[x9],32 + ld1 {v18.16b},[x9] + + + sub x20,x5,x2 + + + mov x19,xzr + + mov x2,x0 + + /* + * Digest source has to be at least of cipher source length + * therefore it is safe to use x10 to indicate whether we can + * overtake cipher processing by 4 AES block here. + */ + cmp x10,4 + + blt Llast_sha_block + + sub x5,x5,64 + + mov x9,x8 + + + ld1 {v26.16b},[x3],16 + ld1 {v4.16b},[x9],16 + ld1 {v27.16b},[x3],16 + rev32 v26.16b,v26.16b + ld1 {v28.16b},[x3],16 + rev32 v27.16b,v27.16b + ld1 {v29.16b},[x3],16 + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + rev32 v29.16b,v29.16b + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + + b Lshort_loop_no_store + +Ldec_short_loop: + cmp x10,4 + + blt Llast_sha_block + stp q0,q1,[x1],32 + stp q2,q3,[x1],32 + + sub x19,x19,4 + +Lshort_loop_no_store: + ld1 {v31.16b},[x2] + + ld1 {v0.16b},[x2],16 + + add x0,x0,64 + + + aesd v0.16b,v8.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v9.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v10.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v11.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v12.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v13.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v14.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v15.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + cmp x16,#12 + b.lt Laes128_dec_short_0 +Laes192_dec_short_0: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + b.gt Laes256_dec_short_0 + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_0: + aesd v0.16b,v23.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v0.16b,v19.16b + aesimc v0.16b,v0.16b + ld1 {v19.16b},[x17] + aesd v0.16b,v23.16b + eor v0.16b,v0.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_0: + aesd v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + eor v0.16b,v0.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v1.16b},[x2],16 + + + aesd v1.16b,v8.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v9.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v10.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v11.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v12.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v13.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v14.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v15.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + cmp x16,#12 + b.lt Laes128_dec_short_1 +Laes192_dec_short_1: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + b.gt Laes256_dec_short_1 + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_1: + aesd v1.16b,v23.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v1.16b,v19.16b + aesimc v1.16b,v1.16b + ld1 {v19.16b},[x17] + aesd v1.16b,v23.16b + eor v1.16b,v1.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_1: + aesd v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + eor v1.16b,v1.16b,v31.16b + + ld1 {v31.16b},[x2] + + ld1 {v2.16b},[x2],16 + + + aesd v2.16b,v8.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v9.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v10.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v11.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v12.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v13.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v14.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v15.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v16.16b + aesimc v2.16b,v2.16b + cmp x16,#12 + b.lt Laes128_dec_short_2 +Laes192_dec_short_2: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v17.16b + aesimc v2.16b,v2.16b + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + b.gt Laes256_dec_short_2 + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_2: + aesd v2.16b,v23.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v2.16b,v19.16b + aesimc v2.16b,v2.16b + ld1 {v19.16b},[x17] + aesd v2.16b,v23.16b + eor v2.16b,v2.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_2: + aesd v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + eor v2.16b,v2.16b,v30.16b + + ld1 {v30.16b},[x2] + + ld1 {v3.16b},[x2],16 + + + aesd v3.16b,v8.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v9.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v10.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v11.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v12.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v13.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v14.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v15.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v16.16b + aesimc v3.16b,v3.16b + cmp x16,#12 + b.lt Laes128_dec_short_3 +Laes192_dec_short_3: + stp q19,q23,[sp, #-32]! + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v17.16b + aesimc v3.16b,v3.16b + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + b.gt Laes256_dec_short_3 + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #32 + ldp q19,q23,[sp], #32 + b 1f +Laes256_dec_short_3: + aesd v3.16b,v23.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17],16 + ld1 {v23.16b},[x17],16 + aesd v3.16b,v19.16b + aesimc v3.16b,v3.16b + ld1 {v19.16b},[x17] + aesd v3.16b,v23.16b + eor v3.16b,v3.16b,v19.16b + sub x17, x17, #64 + ldp q19,q23,[sp], #32 + b 1f +Laes128_dec_short_3: + aesd v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + eor v3.16b,v3.16b,v31.16b + + add x19,x19,4 + + sub x10,x10,4 + cmp x5,64 + b.lt Ldec_short_loop + + sub x5,x5,64 + + mov x9,x8 + + + ld1 {v26.16b},[x3],16 + ld1 {v4.16b},[x9],16 + ld1 {v27.16b},[x3],16 + rev32 v26.16b,v26.16b + ld1 {v28.16b},[x3],16 + rev32 v27.16b,v27.16b + ld1 {v29.16b},[x3],16 + rev32 v28.16b,v28.16b + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + rev32 v29.16b,v29.16b + + sha256su0 v26.4s,v27.4s + mov v22.16b,v24.16b + mov v23.16b,v25.16b + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + ld1 {v5.16b},[x9],16 + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + sha256su0 v26.4s,v27.4s + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + sha256h2 q23, q21, v4.4s + add v5.4s,v5.4s,v27.4s + sha256su1 v26.4s,v28.4s,v29.4s + + sha256su0 v27.4s,v28.4s + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + sha256h2 q23, q21, v5.4s + add v6.4s,v6.4s,v28.4s + sha256su1 v27.4s,v29.4s,v26.4s + + sha256su0 v28.4s,v29.4s + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + ld1 {v4.16b},[x9],16 + sha256h2 q23, q21, v6.4s + add v7.4s,v7.4s,v29.4s + sha256su1 v28.4s,v26.4s,v27.4s + + sha256su0 v29.4s,v26.4s + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + ld1 {v5.16b},[x9],16 + sha256h2 q23, q21, v7.4s + add v4.4s,v4.4s,v26.4s + sha256su1 v29.4s,v27.4s,v28.4s + + + mov v21.16b, v22.16b + sha256h q22, q23, v4.4s + ld1 {v6.16b},[x9],16 + add v5.4s,v5.4s,v27.4s + sha256h2 q23, q21, v4.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v5.4s + ld1 {v7.16b},[x9],16 + add v6.4s,v6.4s,v28.4s + sha256h2 q23, q21, v5.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v6.4s + add v7.4s,v7.4s,v29.4s + sha256h2 q23, q21, v6.4s + + mov v21.16b, v22.16b + sha256h q22, q23, v7.4s + sha256h2 q23, q21, v7.4s + + add v24.4s,v24.4s,v22.4s + add v25.4s,v25.4s,v23.4s + + b Ldec_short_loop + /* + * This is arranged so that we can join the common unwind code that does + * the last sha block and the final 0-3 aes blocks. + */ +Llast_sha_block: + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + + mov x13,x10 + b Ljoin_common + + diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha512-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha512-armv8.S new file mode 100644 index 000000000..eeca65510 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/aes/aes-sha512-armv8.S @@ -0,0 +1,10309 @@ + +// Copyright 2023-2025 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License 2.0 (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// $output is the last argument if it looks like a file (it has an extension) +// $flavour is the first argument if it doesn't look like a file +#include "arm_arch.h" + + +#define CIPHER_KEY 0 +#define CIPHER_KEY_ROUNDS 8 +#define CIPHER_IV 16 +#define HMAC_IKEYPAD 24 +#define HMAC_OKEYPAD 32 + +.text +.arch armv8-a+crypto + /* + * asm_aescbc_sha512_hmac( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + */ + +.globl asm_aescbc_sha512_hmac +.def asm_aescbc_sha512_hmac + .type 32 +.endef + +.section .rodata +.align 6 +LK512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0 // terminator + +.text +.align 4 +asm_aescbc_sha512_hmac: + AARCH64_VALID_CALL_TARGET + + stp d8, d9, [sp,#-64]! + stp d10, d11, [sp,#16] + stp d12, d13, [sp,#32] + stp d14, d15, [sp,#48] + + + ldr x7, [x6, #HMAC_IKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ldr x7, [x6, #CIPHER_KEY] + ldr x8, [x6, #CIPHER_IV] + ldr x9, [x6, #CIPHER_KEY_ROUNDS] + mov x12, x7 + + adrp x10, LK512 + add x10, x10, :lo12:LK512 + + lsr x11, x2, #4 + cbz x11, Lret + + cmp x11, #16 + b.lt Lenc_short_case + + ld1 {v0.16b}, [x0], #16 + ld1 {v1.16b}, [x8] + + eor v0.16b, v0.16b, v1.16b + + ldp q8, q9, [x7], #32 + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + ldp q10, q11, [x7], #32 + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + ldp q12, q13, [x7], #32 + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + ldp q14, q15, [x7], #32 + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + ldp q16, q17, [x7], #32 + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + ld1 {v18.16b}, [x7] + cmp x9, #12 + b.lt Laes128_enc_prelog_0 +Laes192_enc_prelog_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_prelog_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + str q0, [x1], #16 + ld1 {v1.16b}, [x0], #16 + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt Laes128_enc_prelog_1 +Laes192_enc_prelog_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_prelog_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + str q1, [x1], #16 + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt Laes128_enc_prelog_2 +Laes192_enc_prelog_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_prelog_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + str q2, [x1], #16 + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt Laes128_enc_prelog_3 +Laes192_enc_prelog_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_prelog_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + str q3, [x1], #16 + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt Laes128_enc_prelog_4 +Laes192_enc_prelog_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt Laes256_enc_prelog_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + str q4, [x1], #16 + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt Laes128_enc_prelog_5 +Laes192_enc_prelog_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt Laes256_enc_prelog_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + str q5, [x1], #16 + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt Laes128_enc_prelog_6 +Laes192_enc_prelog_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt Laes256_enc_prelog_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + + ld1 {v7.16b}, [x0], #16 + + eor v7.16b, v7.16b, v6.16b + str q6, [x1], #16 + + aese v7.16b, v8.16b + aesmc v7.16b, v7.16b + aese v7.16b, v9.16b + aesmc v7.16b, v7.16b + aese v7.16b, v10.16b + aesmc v7.16b, v7.16b + aese v7.16b, v11.16b + aesmc v7.16b, v7.16b + aese v7.16b, v12.16b + aesmc v7.16b, v7.16b + aese v7.16b, v13.16b + aesmc v7.16b, v7.16b + aese v7.16b, v14.16b + aesmc v7.16b, v7.16b + aese v7.16b, v15.16b + aesmc v7.16b, v7.16b + aese v7.16b, v16.16b + aesmc v7.16b, v7.16b + b.lt Laes128_enc_prelog_7 +Laes192_enc_prelog_7: + ldp q18,q19,[x7],32 + aese v7.16b,v17.16b + aesmc v7.16b,v7.16b + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + b.gt Laes256_enc_prelog_7 + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_prelog_7: + aese v7.16b,v19.16b + aesmc v7.16b,v7.16b + ldp q18,q19,[x7],32 + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_prelog_7: + aese v7.16b,v17.16b + eor v7.16b,v7.16b,v18.16b +1: + str q7, [x1], #16 + sub x11, x11, #8 + +Lenc_main_loop: + mov x7, x12 + mov x14, x1 + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v12.16b}, [x0], #16 + eor v12.16b, v12.16b, v7.16b + + + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + ld1 {v14.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + ldp q10, q11, [x7], #32 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt Lenc_main_loop_aes128_0 +Lenc_main_loop_aes192_0: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_0 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_0: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_0: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt Lenc_main_loop_aes128_1 +Lenc_main_loop_aes192_1: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_1 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_1: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_1: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + ldp q10, q11, [x7], #32 + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt Lenc_main_loop_aes128_2 +Lenc_main_loop_aes192_2: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_2 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_2: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_2: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + ldp q8, q9, [x7], #32 + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt Lenc_main_loop_aes128_3 +Lenc_main_loop_aes192_3: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_3 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_3: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_3: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v28.2d, v28.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v25.2d, v25.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v14.2d, v14.2d, v0.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + add v24.2d, v24.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + cmp x9, #12 + b.lt Lenc_main_loop_aes128_4 +Lenc_main_loop_aes192_4: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_4 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_4: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_4: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v15.2d, v15.2d, v1.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + add v27.2d, v27.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v14.2d, v14.2d, v2.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + add v26.2d, v26.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v15.2d, v15.2d, v3.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + add v28.2d, v28.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v14.2d, v14.2d, v4.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + add v25.2d, v25.2d, v14.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v15.2d, v15.2d, v5.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + add v24.2d, v24.2d, v15.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt Lenc_main_loop_aes128_5 +Lenc_main_loop_aes192_5: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_5 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_5: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_5: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + add v14.2d, v14.2d, v6.2d + ld1 {v15.2d}, [x10], #16 + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + add v27.2d, v27.2d, v14.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v15.2d, v15.2d, v7.2d + ld1 {v14.2d}, [x10], #16 + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + add v26.2d, v26.2d, v15.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v0.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + + add v28.2d, v28.2d, v14.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v1.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v25.2d, v25.2d, v15.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v2.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + + add v24.2d, v24.2d, v14.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt Lenc_main_loop_aes128_6 +Lenc_main_loop_aes192_6: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_6 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_6: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_6: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + st1 {v12.16b}, [x1], #16 + + mov x7, x12 + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ld1 {v13.16b}, [x0], #16 + eor v12.16b, v12.16b, v13.16b + + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v3.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + add v27.2d, v27.2d, v15.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v4.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v26.2d, v26.2d, v14.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v14.2d},[x10],#16 + add v15.2d, v15.2d, v5.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ldp q10, q11, [x7], #32 + + add v28.2d, v28.2d, v15.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v15.2d},[x10],#16 + add v14.2d, v14.2d, v6.2d + ext v14.16b, v14.16b, v14.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + ldp q8, q9, [x7], #32 + + add v25.2d, v25.2d, v14.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v15.2d, v15.2d, v7.2d + ext v15.16b, v15.16b, v15.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + + add v24.2d, v24.2d, v15.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + cmp x9, #12 + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + b.lt Lenc_main_loop_aes128_7 +Lenc_main_loop_aes192_7: + ldp q10, q11, [x7], #32 + aese v12.16b, v9.16b + aesmc v12.16b, v12.16b + aese v12.16b, v10.16b + aesmc v12.16b, v12.16b + b.gt Lenc_main_loop_aes256_7 + ld1 {v8.16b},[x7] + aese v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + b 1f +Lenc_main_loop_aes256_7: + ldp q8, q9, [x7], #32 + aese v12.16b, v11.16b + aesmc v12.16b, v12.16b + ld1 {v10.16b},[x7] + aese v12.16b, v8.16b + aesmc v12.16b, v12.16b + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + b 1f +Lenc_main_loop_aes128_7: + ld1 {v10.16b},[x7] + aese v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b +1: + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + st1 {v12.16b}, [x1], #16 + + ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x14], #64 + ld1 {v4.16b, v5.16b, v6.16b, v7.16b}, [x14] + + sub x11, x11, #8 + cmp x11, #8 + b.ge Lenc_main_loop + + + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + mov x7, x12 + ld1 {v0.16b}, [x0], #16 + ldr q1, [x14, #48] + eor v0.16b, v0.16b, v1.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + ldp q12, q13, [x7], #32 + ldp q14, q15, [x7], #32 + ldp q16, q17, [x7], #32 + ld1 {v18.16b}, [x7] + + mov w12, #0x80 + b Lenc_less_than_8_block + + +Lenc_short_case: + ld1 {v0.16b}, [x0], #16 + ld1 {v1.16b}, [x8] + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + ldp q12, q13, [x7], #32 + ldp q14, q15, [x7], #32 + ldp q16, q17, [x7], #32 + ld1 {v18.16b}, [x7] + mov w12, #0x80 + + eor v0.16b, v0.16b, v1.16b + + cmp x11, #8 + b.lt Lenc_less_than_8_block + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + cmp x9, #12 + b.lt Laes128_enc_short_0 +Laes192_enc_short_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_short_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + + ld1 {v1.16b}, [x0], #16 + + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt Laes128_enc_short_1 +Laes192_enc_short_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_short_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt Laes128_enc_short_2 +Laes192_enc_short_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_short_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt Laes128_enc_short_3 +Laes192_enc_short_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_short_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt Laes128_enc_short_4 +Laes192_enc_short_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt Laes256_enc_short_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt Laes128_enc_short_5 +Laes192_enc_short_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt Laes256_enc_short_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt Laes128_enc_short_6 +Laes192_enc_short_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt Laes256_enc_short_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + + ld1 {v7.16b}, [x0], #16 + + eor v7.16b, v7.16b, v6.16b + + aese v7.16b, v8.16b + aesmc v7.16b, v7.16b + aese v7.16b, v9.16b + aesmc v7.16b, v7.16b + aese v7.16b, v10.16b + aesmc v7.16b, v7.16b + aese v7.16b, v11.16b + aesmc v7.16b, v7.16b + aese v7.16b, v12.16b + aesmc v7.16b, v7.16b + aese v7.16b, v13.16b + aesmc v7.16b, v7.16b + aese v7.16b, v14.16b + aesmc v7.16b, v7.16b + aese v7.16b, v15.16b + aesmc v7.16b, v7.16b + aese v7.16b, v16.16b + aesmc v7.16b, v7.16b + b.lt Laes128_enc_short_7 +Laes192_enc_short_7: + ldp q18,q19,[x7],32 + aese v7.16b,v17.16b + aesmc v7.16b,v7.16b + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + b.gt Laes256_enc_short_7 + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_7: + aese v7.16b,v19.16b + aesmc v7.16b,v7.16b + ldp q18,q19,[x7],32 + aese v7.16b,v18.16b + aesmc v7.16b,v7.16b + ld1 {v18.16b},[x7] + aese v7.16b,v19.16b + eor v7.16b,v7.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_7: + aese v7.16b,v17.16b + eor v7.16b,v7.16b,v18.16b +1: + + stp q0, q1, [x1], #32 + stp q2, q3, [x1], #32 + stp q4, q5, [x1], #32 + stp q6, q7, [x1], #32 + + sub x11, x11, #8 + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + ldr x7, [x6, #CIPHER_KEY] + ldp q8, q9, [x7] + add x7, x7, #160 + cbz x11, Lenc_short_no_more_aes_block + ld1 {v0.16b}, [x0], #16 + ldr q1, [x1, -16] + eor v0.16b, v0.16b, v1.16b +Lenc_less_than_8_block: + cbz x11, Lenc_short_no_more_aes_block + + aese v0.16b, v8.16b + aesmc v0.16b, v0.16b + aese v0.16b, v9.16b + aesmc v0.16b, v0.16b + aese v0.16b, v10.16b + aesmc v0.16b, v0.16b + aese v0.16b, v11.16b + aesmc v0.16b, v0.16b + aese v0.16b, v12.16b + aesmc v0.16b, v0.16b + aese v0.16b, v13.16b + aesmc v0.16b, v0.16b + aese v0.16b, v14.16b + aesmc v0.16b, v0.16b + aese v0.16b, v15.16b + aesmc v0.16b, v0.16b + aese v0.16b, v16.16b + aesmc v0.16b, v0.16b + cmp x9, #12 + b.lt Laes128_enc_short_partial_0 +Laes192_enc_short_partial_0: + ldp q18,q19,[x7],32 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + b.gt Laes256_enc_short_partial_0 + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_0: + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ldp q18,q19,[x7],32 + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + ld1 {v18.16b},[x7] + aese v0.16b,v19.16b + eor v0.16b,v0.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_0: + aese v0.16b,v17.16b + eor v0.16b,v0.16b,v18.16b +1: + str q0, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q0 + + ld1 {v1.16b}, [x0], #16 + + eor v1.16b, v1.16b, v0.16b + + aese v1.16b, v8.16b + aesmc v1.16b, v1.16b + aese v1.16b, v9.16b + aesmc v1.16b, v1.16b + aese v1.16b, v10.16b + aesmc v1.16b, v1.16b + aese v1.16b, v11.16b + aesmc v1.16b, v1.16b + aese v1.16b, v12.16b + aesmc v1.16b, v1.16b + aese v1.16b, v13.16b + aesmc v1.16b, v1.16b + aese v1.16b, v14.16b + aesmc v1.16b, v1.16b + aese v1.16b, v15.16b + aesmc v1.16b, v1.16b + aese v1.16b, v16.16b + aesmc v1.16b, v1.16b + b.lt Laes128_enc_short_partial_1 +Laes192_enc_short_partial_1: + ldp q18,q19,[x7],32 + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + b.gt Laes256_enc_short_partial_1 + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_1: + aese v1.16b,v19.16b + aesmc v1.16b,v1.16b + ldp q18,q19,[x7],32 + aese v1.16b,v18.16b + aesmc v1.16b,v1.16b + ld1 {v18.16b},[x7] + aese v1.16b,v19.16b + eor v1.16b,v1.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_1: + aese v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b +1: + str q1, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q1 + + ld1 {v2.16b}, [x0], #16 + + eor v2.16b, v2.16b, v1.16b + + aese v2.16b, v8.16b + aesmc v2.16b, v2.16b + aese v2.16b, v9.16b + aesmc v2.16b, v2.16b + aese v2.16b, v10.16b + aesmc v2.16b, v2.16b + aese v2.16b, v11.16b + aesmc v2.16b, v2.16b + aese v2.16b, v12.16b + aesmc v2.16b, v2.16b + aese v2.16b, v13.16b + aesmc v2.16b, v2.16b + aese v2.16b, v14.16b + aesmc v2.16b, v2.16b + aese v2.16b, v15.16b + aesmc v2.16b, v2.16b + aese v2.16b, v16.16b + aesmc v2.16b, v2.16b + b.lt Laes128_enc_short_partial_2 +Laes192_enc_short_partial_2: + ldp q18,q19,[x7],32 + aese v2.16b,v17.16b + aesmc v2.16b,v2.16b + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + b.gt Laes256_enc_short_partial_2 + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_2: + aese v2.16b,v19.16b + aesmc v2.16b,v2.16b + ldp q18,q19,[x7],32 + aese v2.16b,v18.16b + aesmc v2.16b,v2.16b + ld1 {v18.16b},[x7] + aese v2.16b,v19.16b + eor v2.16b,v2.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_2: + aese v2.16b,v17.16b + eor v2.16b,v2.16b,v18.16b +1: + str q2, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q2 + + ld1 {v3.16b}, [x0], #16 + + eor v3.16b, v3.16b, v2.16b + + aese v3.16b, v8.16b + aesmc v3.16b, v3.16b + aese v3.16b, v9.16b + aesmc v3.16b, v3.16b + aese v3.16b, v10.16b + aesmc v3.16b, v3.16b + aese v3.16b, v11.16b + aesmc v3.16b, v3.16b + aese v3.16b, v12.16b + aesmc v3.16b, v3.16b + aese v3.16b, v13.16b + aesmc v3.16b, v3.16b + aese v3.16b, v14.16b + aesmc v3.16b, v3.16b + aese v3.16b, v15.16b + aesmc v3.16b, v3.16b + aese v3.16b, v16.16b + aesmc v3.16b, v3.16b + b.lt Laes128_enc_short_partial_3 +Laes192_enc_short_partial_3: + ldp q18,q19,[x7],32 + aese v3.16b,v17.16b + aesmc v3.16b,v3.16b + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + b.gt Laes256_enc_short_partial_3 + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_3: + aese v3.16b,v19.16b + aesmc v3.16b,v3.16b + ldp q18,q19,[x7],32 + aese v3.16b,v18.16b + aesmc v3.16b,v3.16b + ld1 {v18.16b},[x7] + aese v3.16b,v19.16b + eor v3.16b,v3.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_3: + aese v3.16b,v17.16b + eor v3.16b,v3.16b,v18.16b +1: + str q3, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q3 + + ld1 {v4.16b}, [x0], #16 + + eor v4.16b, v4.16b, v3.16b + + aese v4.16b, v8.16b + aesmc v4.16b, v4.16b + aese v4.16b, v9.16b + aesmc v4.16b, v4.16b + aese v4.16b, v10.16b + aesmc v4.16b, v4.16b + aese v4.16b, v11.16b + aesmc v4.16b, v4.16b + aese v4.16b, v12.16b + aesmc v4.16b, v4.16b + aese v4.16b, v13.16b + aesmc v4.16b, v4.16b + aese v4.16b, v14.16b + aesmc v4.16b, v4.16b + aese v4.16b, v15.16b + aesmc v4.16b, v4.16b + aese v4.16b, v16.16b + aesmc v4.16b, v4.16b + b.lt Laes128_enc_short_partial_4 +Laes192_enc_short_partial_4: + ldp q18,q19,[x7],32 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + b.gt Laes256_enc_short_partial_4 + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_4: + aese v4.16b,v19.16b + aesmc v4.16b,v4.16b + ldp q18,q19,[x7],32 + aese v4.16b,v18.16b + aesmc v4.16b,v4.16b + ld1 {v18.16b},[x7] + aese v4.16b,v19.16b + eor v4.16b,v4.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_4: + aese v4.16b,v17.16b + eor v4.16b,v4.16b,v18.16b +1: + str q4, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q4 + + ld1 {v5.16b}, [x0], #16 + + eor v5.16b, v5.16b, v4.16b + + aese v5.16b, v8.16b + aesmc v5.16b, v5.16b + aese v5.16b, v9.16b + aesmc v5.16b, v5.16b + aese v5.16b, v10.16b + aesmc v5.16b, v5.16b + aese v5.16b, v11.16b + aesmc v5.16b, v5.16b + aese v5.16b, v12.16b + aesmc v5.16b, v5.16b + aese v5.16b, v13.16b + aesmc v5.16b, v5.16b + aese v5.16b, v14.16b + aesmc v5.16b, v5.16b + aese v5.16b, v15.16b + aesmc v5.16b, v5.16b + aese v5.16b, v16.16b + aesmc v5.16b, v5.16b + b.lt Laes128_enc_short_partial_5 +Laes192_enc_short_partial_5: + ldp q18,q19,[x7],32 + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + b.gt Laes256_enc_short_partial_5 + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_5: + aese v5.16b,v19.16b + aesmc v5.16b,v5.16b + ldp q18,q19,[x7],32 + aese v5.16b,v18.16b + aesmc v5.16b,v5.16b + ld1 {v18.16b},[x7] + aese v5.16b,v19.16b + eor v5.16b,v5.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_5: + aese v5.16b,v17.16b + eor v5.16b,v5.16b,v18.16b +1: + str q5, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q5 + + ld1 {v6.16b}, [x0], #16 + + eor v6.16b, v6.16b, v5.16b + + aese v6.16b, v8.16b + aesmc v6.16b, v6.16b + aese v6.16b, v9.16b + aesmc v6.16b, v6.16b + aese v6.16b, v10.16b + aesmc v6.16b, v6.16b + aese v6.16b, v11.16b + aesmc v6.16b, v6.16b + aese v6.16b, v12.16b + aesmc v6.16b, v6.16b + aese v6.16b, v13.16b + aesmc v6.16b, v6.16b + aese v6.16b, v14.16b + aesmc v6.16b, v6.16b + aese v6.16b, v15.16b + aesmc v6.16b, v6.16b + aese v6.16b, v16.16b + aesmc v6.16b, v6.16b + b.lt Laes128_enc_short_partial_6 +Laes192_enc_short_partial_6: + ldp q18,q19,[x7],32 + aese v6.16b,v17.16b + aesmc v6.16b,v6.16b + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + b.gt Laes256_enc_short_partial_6 + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #32 + b 1f +Laes256_enc_short_partial_6: + aese v6.16b,v19.16b + aesmc v6.16b,v6.16b + ldp q18,q19,[x7],32 + aese v6.16b,v18.16b + aesmc v6.16b,v6.16b + ld1 {v18.16b},[x7] + aese v6.16b,v19.16b + eor v6.16b,v6.16b,v18.16b + sub x7, x7, #64 + b 1f +Laes128_enc_short_partial_6: + aese v6.16b,v17.16b + eor v6.16b,v6.16b,v18.16b +1: + str q6, [x1], #16 + sub x11, x11, #1 + cbz x11, Lenc_short_post_Q6 +Lenc_short_no_more_aes_block: + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v0.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q0: + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v1.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q1: + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v2.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q2: + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v3.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q3: + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v4.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q4: + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v5.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q5: + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v6.b[0], w12 + b Lenc_short_post_sha +Lenc_short_post_Q6: + eor v7.16b, v7.16b, v7.16b + mov v7.b[0], w12 + /* we have one padded sha512 block now, process it and + then employ another one to host sha length */ + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b +Lenc_short_post_sha: + + eor x13, x13, x13 + eor x14, x14, x14 + + adds x13, x13, x2, lsl #3 + lsr x15, x2, #61 + adc x14, x14, x15 + + adds x13, x13, #1024 + adc x14, x14, xzr + + mov v7.d[0], x14 + mov v7.d[1], x13 + rev64 v7.16b, v7.16b + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + mov v0.16b, v24.16b + mov v1.16b, v25.16b + mov v2.16b, v26.16b + mov v3.16b, v27.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + + mov v4.b[7], w12 + mov x13, #1024+512 + mov v7.d[1], x13 + + + ldr x7, [x6, #HMAC_OKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d +Lret: + mov x0, xzr + + rev64 v24.16b, v24.16b + rev64 v25.16b, v25.16b + rev64 v26.16b, v26.16b + rev64 v27.16b, v27.16b + + + st1 {v24.2d,v25.2d,v26.2d,v27.2d},[x4] + + + ldp d10, d11, [sp,#16] + ldp d12, d13, [sp,#32] + ldp d14, d15, [sp,#48] + ldp d8, d9, [sp], #64 + ret + + /* + * asm_sha512_hmac_aescbc_dec( + * csrc, x0 (cipher src address) + * cdst, x1 (cipher dst address) + * clen x2 (cipher length) + * dsrc, x3 (digest src address) + * ddst, x4 (digest dst address) + * dlen, x5 (digest length) + * arg x6 : + * arg->cipher.key (round keys) + * arg->cipher.key_rounds (key rounds) + * arg->cipher.iv (initialization vector) + * arg->digest.hmac.i_key_pad (partially hashed i_key_pad) + * arg->digest.hmac.o_key_pad (partially hashed o_key_pad) + * ) + */ + +.globl asm_sha512_hmac_aescbc_dec +.def asm_sha512_hmac_aescbc_dec + .type 32 +.endef + +.align 4 +asm_sha512_hmac_aescbc_dec: + AARCH64_VALID_CALL_TARGET + + stp d8, d9, [sp,#-64]! + stp d10, d11, [sp,#16] + stp d12, d13, [sp,#32] + stp d14, d15, [sp,#48] + + + ldr x7, [x6, #HMAC_IKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ldr x7, [x6, #CIPHER_KEY] + ldr x8, [x6, #CIPHER_IV] + ldr x9, [x6, #CIPHER_KEY_ROUNDS] + mov x12, x7 + + adrp x10, LK512 + add x10, x10, :lo12:LK512 + + lsr x11, x2, #4 + cbz x11, Ldec_ret + + ld1 {v20.16b}, [x8] + cmp x11, #8 + b.lt Ldec_short_case +Ldec_main_loop: + ldp q12, q13, [x0], #32 + ldp q14, q15, [x0], #32 + ldp q16, q17, [x0], #32 + ldp q18, q19, [x0], #32 + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + mov v0.16b, v12.16b + mov v1.16b, v13.16b + mov v2.16b, v14.16b + mov v3.16b, v15.16b + mov v4.16b, v16.16b + mov v5.16b, v17.16b + mov v6.16b, v18.16b + mov v7.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + ldp q10, q11, [x7], #32 + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + cmp x9, #12 + + b.lt Laes128_dec_main +Laes192_dec_main: + ldp q10,q11,[x7],32 + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v9.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v9.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v9.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v10.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v10.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v10.16b + aesimc v19.16b, v19.16b + b.gt Laes256_dec_main + + ld1 {v8.16b},[x7] + + + aesd v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + aesd v13.16b, v11.16b + eor v13.16b, v13.16b, v8.16b + aesd v14.16b, v11.16b + eor v14.16b, v14.16b, v8.16b + aesd v15.16b, v11.16b + eor v15.16b, v15.16b, v8.16b + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + aesd v17.16b, v11.16b + eor v17.16b, v17.16b, v8.16b + aesd v18.16b, v11.16b + eor v18.16b, v18.16b, v8.16b + aesd v19.16b, v11.16b + eor v19.16b, v19.16b, v8.16b + + sub x7, x7, #192 + b 1f +Laes256_dec_main: + ldp q8,q9,[x7],32 + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v11.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v11.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v11.16b + aesimc v19.16b, v19.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v17.16b, v8.16b + aesimc v17.16b, v17.16b + aesd v18.16b, v8.16b + aesimc v18.16b, v18.16b + aesd v19.16b, v8.16b + aesimc v19.16b, v19.16b + + ld1 {v10.16b},[x7] + + + aesd v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b, v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b, v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b, v9.16b + eor v15.16b, v15.16b, v10.16b + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + aesd v17.16b, v9.16b + eor v17.16b, v17.16b, v10.16b + aesd v18.16b, v9.16b + eor v18.16b, v18.16b, v10.16b + aesd v19.16b, v9.16b + eor v19.16b, v19.16b, v10.16b + + sub x7, x7, #224 + b 1f +Laes128_dec_main: + ld1 {v10.16b},[x7] + aesd v12.16b,v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b,v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b,v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b,v9.16b + eor v15.16b, v15.16b, v10.16b + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + aesd v17.16b,v9.16b + eor v17.16b, v17.16b, v10.16b + aesd v18.16b,v9.16b + eor v18.16b, v18.16b, v10.16b + aesd v19.16b,v9.16b + eor v19.16b, v19.16b, v10.16b + sub x7, x7, #160 + +1: + eor v12.16b, v12.16b, v20.16b + eor v13.16b, v13.16b, v0.16b + eor v14.16b, v14.16b, v1.16b + eor v15.16b, v15.16b, v2.16b + eor v16.16b, v16.16b, v3.16b + eor v17.16b, v17.16b, v4.16b + eor v18.16b, v18.16b, v5.16b + eor v19.16b, v19.16b, v6.16b + + stp q12,q13, [x1], #32 + ldr q12, [x0, #-16] + stp q14,q15, [x1], #32 + stp q16,q17, [x1], #32 + stp q18,q19, [x1], #32 + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + mov v20.16b, v12.16b + sub x11, x11, #8 + cmp x11, #8 + b.ge Ldec_main_loop + + +Ldec_short_case: + mov w12, #0x80 + cbnz x11, 1f + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v0.b[0], w12 + b Ldec_short_post_sha +1: + cmp x11, #4 + b.lt Ldec_less_than_4_block + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + ldp q12, q13, [x0], #32 + ldp q14, q15, [x0], #32 + + mov v0.16b, v12.16b + mov v1.16b, v13.16b + mov v2.16b, v14.16b + mov v3.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + ldp q10, q11, [x7], #32 + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + ldp q8, q9, [x7], #32 + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + cmp x9, #12 + + b.lt Laes128_dec_short +Laes192_dec_short: + ldp q10,q11,[x7],32 + + + aesd v12.16b, v9.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v9.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v9.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v9.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v10.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v10.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v10.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v10.16b + aesimc v15.16b, v15.16b + b.gt Laes256_dec_short + + ld1 {v8.16b},[x7] + + + aesd v12.16b, v11.16b + eor v12.16b, v12.16b, v8.16b + aesd v13.16b, v11.16b + eor v13.16b, v13.16b, v8.16b + aesd v14.16b, v11.16b + eor v14.16b, v14.16b, v8.16b + aesd v15.16b, v11.16b + eor v15.16b, v15.16b, v8.16b + + sub x7, x7, #192 + b 1f +Laes256_dec_short: + ldp q8,q9,[x7],32 + + aesd v12.16b, v11.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v11.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v11.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v11.16b + aesimc v15.16b, v15.16b + + + aesd v12.16b, v8.16b + aesimc v12.16b, v12.16b + aesd v13.16b, v8.16b + aesimc v13.16b, v13.16b + aesd v14.16b, v8.16b + aesimc v14.16b, v14.16b + aesd v15.16b, v8.16b + aesimc v15.16b, v15.16b + + ld1 {v10.16b},[x7] + + + aesd v12.16b, v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b, v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b, v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b, v9.16b + eor v15.16b, v15.16b, v10.16b + + sub x7, x7, #224 + b 1f +Laes128_dec_short: + ld1 {v10.16b},[x7] + aesd v12.16b,v9.16b + eor v12.16b, v12.16b, v10.16b + aesd v13.16b,v9.16b + eor v13.16b, v13.16b, v10.16b + aesd v14.16b,v9.16b + eor v14.16b, v14.16b, v10.16b + aesd v15.16b,v9.16b + eor v15.16b, v15.16b, v10.16b + sub x7, x7, #160 +1: + eor v12.16b, v12.16b, v20.16b + eor v13.16b, v13.16b, v0.16b + eor v14.16b, v14.16b, v1.16b + eor v15.16b, v15.16b, v2.16b + ldr q20, [x0, #-16] + + sub x11, x11, #4 + + stp q12,q13, [x1], #32 + stp q14,q15, [x1], #32 + cbz x11, Ldec_short_post_Q3 + ld1 {v16.16b}, [x0], #16 + mov v4.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_4 +Laes192_dec_short_4: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_4 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_4: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_4: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q4 + ld1 {v16.16b}, [x0], #16 + mov v5.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_5 +Laes192_dec_short_5: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_5 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_5: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_5: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q5 + ld1 {v16.16b}, [x0], #16 + mov v6.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_6 +Laes192_dec_short_6: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_6 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_6: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_6: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q6 +Ldec_short_post_Q3: + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v4.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_Q4: + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v5.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_Q5: + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v6.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_Q6: + eor v7.16b, v7.16b, v7.16b + mov v7.b[0], w12 + /* we have one padded sha512 block now, process it and + then employ another one to host sha length */ + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + eor v0.16b, v0.16b, v0.16b + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + b Ldec_short_post_sha + +Ldec_less_than_4_block: + ld1 {v16.16b}, [x0], #16 + mov v0.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_less_than_4_0 +Laes192_dec_short_less_than_4_0: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_less_than_4_0 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_less_than_4_0: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_less_than_4_0: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q0 + ld1 {v16.16b}, [x0], #16 + mov v1.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_less_than_4_1 +Laes192_dec_short_less_than_4_1: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_less_than_4_1 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_less_than_4_1: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_less_than_4_1: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q1 + ld1 {v16.16b}, [x0], #16 + mov v2.16b, v16.16b + + ldp q8, q9, [x7], #32 + ldp q10, q11, [x7], #32 + + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + ldp q10, q11, [x7], #32 + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + ldp q8, q9, [x7], #32 + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + cmp x9, #12 + b.lt Laes128_dec_short_less_than_4_2 +Laes192_dec_short_less_than_4_2: + ldp q10,q11,[x7],32 + aesd v16.16b, v9.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v10.16b + aesimc v16.16b, v16.16b + b.gt Laes256_dec_short_less_than_4_2 + ld1 {v8.16b},[x7] + aesd v16.16b, v11.16b + eor v16.16b, v16.16b, v8.16b + sub x7, x7, #192 + b 1f +Laes256_dec_short_less_than_4_2: + ldp q8,q9,[x7],32 + aesd v16.16b, v11.16b + aesimc v16.16b, v16.16b + aesd v16.16b, v8.16b + aesimc v16.16b, v16.16b + ld1 {v10.16b},[x7] + aesd v16.16b, v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #224 + b 1f +Laes128_dec_short_less_than_4_2: + ld1 {v10.16b},[x7] + aesd v16.16b,v9.16b + eor v16.16b, v16.16b, v10.16b + sub x7, x7, #160 +1: + sub x11, x11, 1 + eor v16.16b, v16.16b, v20.16b + ldr q20, [x0, #-16] + st1 {v16.16b}, [x1], #16 + cbz x11, Ldec_short_post_Q2 +Ldec_short_post_Q0: + eor v1.16b, v1.16b, v1.16b + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v1.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_Q1: + eor v2.16b, v2.16b, v2.16b + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v2.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_Q2: + eor v3.16b, v3.16b, v3.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + mov v3.b[0], w12 + b Ldec_short_post_sha +Ldec_short_post_sha: + + eor x13, x13, x13 + eor x14, x14, x14 + + adds x13, x13, x2, lsl #3 + lsr x15, x2, #61 + adc x14, x14, x15 + + adds x13, x13, #1024 + adc x14, x14, xzr + + mov v7.d[0], x14 + mov v7.d[1], x13 + rev64 v7.16b, v7.16b + rev64 v0.16b, v0.16b + rev64 v1.16b, v1.16b + rev64 v2.16b, v2.16b + rev64 v3.16b, v3.16b + rev64 v4.16b, v4.16b + rev64 v5.16b, v5.16b + rev64 v6.16b, v6.16b + rev64 v7.16b, v7.16b + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d + + mov v0.16b, v24.16b + mov v1.16b, v25.16b + mov v2.16b, v26.16b + mov v3.16b, v27.16b + eor v4.16b, v4.16b, v4.16b + eor v5.16b, v5.16b, v5.16b + eor v6.16b, v6.16b, v6.16b + eor v7.16b, v7.16b, v7.16b + + mov v4.b[7], w12 + mov x13, #1024+512 + mov v7.d[1], x13 + + + ldr x7, [x6, #HMAC_OKEYPAD] + ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [x7] + + ld1 {v8.2d}, [x10], #16 + + + mov v20.16b, v24.16b + mov v21.16b, v25.16b + mov v22.16b, v26.16b + mov v23.16b, v27.16b + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v8.2d, v8.2d, v0.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v4.16b, v5.16b, #8 + + +.long 0xcec08020 //sha512su0 v0.2d, v1.2d + +.long 0xce7f88e0 //sha512su1 v0.2d, v7.2d, v31.2d + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v9.2d, v9.2d, v1.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v5.16b, v6.16b, #8 + + +.long 0xcec08041 //sha512su0 v1.2d, v2.2d + +.long 0xce7f8801 //sha512su1 v1.2d, v0.2d, v31.2d + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v8.2d, v8.2d, v2.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v6.16b, v7.16b, #8 + + +.long 0xcec08062 //sha512su0 v2.2d, v3.2d + +.long 0xce7f8822 //sha512su1 v2.2d, v1.2d, v31.2d + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + add v9.2d, v9.2d, v3.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + ext v31.16b, v7.16b, v0.16b, #8 + + +.long 0xcec08083 //sha512su0 v3.2d, v4.2d + +.long 0xce7f8843 //sha512su1 v3.2d, v2.2d, v31.2d + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + add v8.2d, v8.2d, v4.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + ext v31.16b, v0.16b, v1.16b, #8 + + +.long 0xcec080a4 //sha512su0 v4.2d, v5.2d + +.long 0xce7f8864 //sha512su1 v4.2d, v3.2d, v31.2d + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + add v9.2d, v9.2d, v5.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + ext v31.16b, v1.16b, v2.16b, #8 + + +.long 0xcec080c5 //sha512su0 v5.2d, v6.2d + +.long 0xce7f8885 //sha512su1 v5.2d, v4.2d, v31.2d + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v8.2d, v8.2d, v6.2d + ld1 {v9.2d}, [x10], #16 + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + ext v31.16b, v2.16b, v3.16b, #8 + + +.long 0xcec080e6 //sha512su0 v6.2d, v7.2d + +.long 0xce7f88a6 //sha512su1 v6.2d, v5.2d, v31.2d + + + add v27.2d, v27.2d, v8.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + add v9.2d, v9.2d, v7.2d + ld1 {v8.2d}, [x10], #16 + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + ext v31.16b, v3.16b, v4.16b, #8 + + +.long 0xcec08007 //sha512su0 v7.2d, v0.2d + +.long 0xce7f88c7 //sha512su1 v7.2d, v6.2d, v31.2d + + + add v26.2d, v26.2d, v9.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v0.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v8.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v1.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v9.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v2.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v8.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v3.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v26.16b, v27.16b, #8 + ext v30.16b, v25.16b, v26.16b, #8 + + + add v27.2d, v27.2d, v9.2d + +.long 0xce7e83bb //sha512h q27, q29, v30.2d + add v28.2d, v25.2d, v27.2d + +.long 0xce78873b //sha512h2 q27, q25, v24.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v4.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v28.16b, v26.16b, #8 + ext v30.16b, v24.16b, v28.16b, #8 + + + add v26.2d, v26.2d, v8.2d + +.long 0xce7e83ba //sha512h q26, q29, v30.2d + add v25.2d, v24.2d, v26.2d + +.long 0xce7b871a //sha512h2 q26, q24, v27.2d + ld1 {v8.2d},[x10],#16 + add v9.2d, v9.2d, v5.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v25.16b, v28.16b, #8 + ext v30.16b, v27.16b, v25.16b, #8 + + + add v28.2d, v28.2d, v9.2d + +.long 0xce7e83bc //sha512h q28, q29, v30.2d + add v24.2d, v27.2d, v28.2d + +.long 0xce7a877c //sha512h2 q28, q27, v26.2d + ld1 {v9.2d},[x10],#16 + add v8.2d, v8.2d, v6.2d + ext v8.16b, v8.16b, v8.16b, #8 + ext v29.16b, v24.16b, v25.16b, #8 + ext v30.16b, v26.16b, v24.16b, #8 + + + add v25.2d, v25.2d, v8.2d + +.long 0xce7e83b9 //sha512h q25, q29, v30.2d + add v27.2d, v26.2d, v25.2d + +.long 0xce7c8759 //sha512h2 q25, q26, v28.2d + sub x10, x10, #80*8 // rewind + add v9.2d, v9.2d, v7.2d + ext v9.16b, v9.16b, v9.16b, #8 + ext v29.16b, v27.16b, v24.16b, #8 + ext v30.16b, v28.16b, v27.16b, #8 + + + add v24.2d, v24.2d, v9.2d + +.long 0xce7e83b8 //sha512h q24, q29, v30.2d + add v26.2d, v28.2d, v24.2d + +.long 0xce798798 //sha512h2 q24, q28, v25.2d + add v24.2d, v24.2d, v20.2d + add v25.2d, v25.2d, v21.2d + add v26.2d, v26.2d, v22.2d + add v27.2d, v27.2d, v23.2d +Ldec_ret: + mov x0, xzr + + rev64 v24.16b, v24.16b + rev64 v25.16b, v25.16b + rev64 v26.16b, v26.16b + rev64 v27.16b, v27.16b + + + st1 {v24.2d,v25.2d,v26.2d,v27.2d},[x4] + + + ldp d10, d11, [sp,#16] + ldp d12, d13, [sp,#32] + ldp d14, d15, [sp,#48] + ldp d8, d9, [sp], #64 + ret + diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/arm64cpuid.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/arm64cpuid.S index 13de97fb3..367782c5b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/arm64cpuid.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/arm64cpuid.S @@ -118,6 +118,16 @@ _armv8_sve2_probe: ret +.globl _armv8_sve_get_vl_bytes +.def _armv8_sve_get_vl_bytes + .type 32 +.endef +_armv8_sve_get_vl_bytes: + AARCH64_VALID_CALL_TARGET +.long 0x0420e3e0 // cntb x0 + ret + + .globl _armv8_cpuid_probe .def _armv8_cpuid_probe .type 32 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/bn/armv8-mont.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/bn/armv8-mont.S index 9ad1f8897..600791a4a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/bn/armv8-mont.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/bn/armv8-mont.S @@ -858,7 +858,7 @@ LNEON_tail_entry: st1 {v15.s}[0], [x7],#4 // top-most bit sub x3,x3,x5,lsl#2 // rewind x3 - subs x1,sp,#0 // clear carry flag + subs x1,sp,#0 // set carry flag add x2,sp,x5,lsl#2 LNEON_sub: @@ -1040,7 +1040,7 @@ Lsqr8x_outer_loop: umulh x16,x10,x6 stp x19,x20,[x2],#8*2 // t[0..1] adc x19,xzr,xzr // t[8] - adds x21,x21,x17 // t[2]+lo(a[1]*a[0]) + adds x21,x21,x17 // t[2]+hi(a[1]*a[0]) umulh x17,x11,x6 adcs x22,x22,x14 umulh x14,x12,x6 @@ -2139,6 +2139,6 @@ Lmul4x_done: ret .section .rodata -.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 4 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/ec/ecp_nistz256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/ec/ecp_nistz256-armv8.S index ca164fae5..3556634d4 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/ec/ecp_nistz256-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/ec/ecp_nistz256-armv8.S @@ -2387,7 +2387,7 @@ Lord: .quad 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 LordK: .quad 0xccd1c8aaee00bc4f -.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .text diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/aes-gcm-armv8_64.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/aes-gcm-armv8_64.S index 8c810877b..f160c9ec7 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/aes-gcm-armv8_64.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/aes-gcm-armv8_64.S @@ -6402,7 +6402,7 @@ L256_dec_ret: ret .section .rodata -.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/ghashv8-armx.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/ghashv8-armx.S index 5e99bb1ab..9373f02d5 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/ghashv8-armx.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/modes/ghashv8-armx.S @@ -646,7 +646,7 @@ Ldone4x: ret .section .rodata -.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/keccak1600-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/keccak1600-armv8.S index f2865ac59..0e60be8c0 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/keccak1600-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/keccak1600-armv8.S @@ -1029,5 +1029,5 @@ Lsqueeze_done_ce: AARCH64_VALIDATE_LINK_REGISTER ret -.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha1-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha1-armv8.S index da68e0f10..589c3193a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha1-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha1-armv8.S @@ -1217,6 +1217,6 @@ Lconst: .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39 .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 -.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha256-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha256-armv8.S index f40771dcd..94088eb1b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha256-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha256-armv8.S @@ -6,10 +6,10 @@ // https://www.openssl.org/source/license.html // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov, @dot-asm, initially for use in the OpenSSL // project. The module is, however, dual licensed under OpenSSL and // CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. +// details see https://github.com/dot-asm/cryptogams/. // // Permission to use under GPLv2 terms is granted. // ==================================================================== @@ -1066,7 +1066,7 @@ LK256: .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0 //terminator -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha512-armv8.S b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha512-armv8.S index 70953ba80..992dcbd58 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha512-armv8.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/AARCH64-PE/crypto/sha/sha512-armv8.S @@ -6,10 +6,10 @@ // https://www.openssl.org/source/license.html // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov, @dot-asm, initially for use in the OpenSSL // project. The module is, however, dual licensed under OpenSSL and // CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. +// details see https://github.com/dot-asm/cryptogams/. // // Permission to use under GPLv2 terms is granted. // ==================================================================== @@ -1088,7 +1088,7 @@ LK512: .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0 // terminator -.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 2 .align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aes-586.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aes-586.S index c55c427c3..dd12c7376 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aes-586.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aes-586.S @@ -3298,8 +3298,9 @@ AES_set_decrypt_key: ret .size AES_set_decrypt_key,.-.L_AES_set_decrypt_key_begin .byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 -.byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 -.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112 +.byte 115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100 +.byte 111,116,45,97,115,109,62,0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aesni-x86.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aesni-x86.S index 2f9563bdc..8d8818bb1 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aesni-x86.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/aes/aesni-x86.S @@ -3342,8 +3342,9 @@ aesni_set_decrypt_key: .long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 -.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 -.byte 115,108,46,111,114,103,62,0 +.byte 32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116 +.byte 104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62 +.byte 0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-gf2m.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-gf2m.S index 74f098695..4aa4f3d15 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-gf2m.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-gf2m.S @@ -351,9 +351,9 @@ bn_GF2m_mul_2x2: .size bn_GF2m_mul_2x2,.-.L_bn_GF2m_mul_2x2_begin .byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 .byte 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +.byte 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +.byte 109,47,100,111,116,45,97,115,109,62,0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-mont.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-mont.S index eedb0f4b9..52a582226 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-mont.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/bn/x86-mont.S @@ -472,8 +472,8 @@ bn_mul_mont: .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 .byte 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 .byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 -.byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 -.byte 111,114,103,62,0 +.byte 32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98 +.byte 46,99,111,109,47,100,111,116,45,97,115,109,62,0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/ec/ecp_nistz256-x86.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/ec/ecp_nistz256-x86.S index 63f333ed9..968c2cb90 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/ec/ecp_nistz256-x86.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/ec/ecp_nistz256-x86.S @@ -2379,8 +2379,9 @@ ecp_nistz256_precomputed: .long 1,0,0,0,0,0,0,0 .byte 69,67,80,95,78,73,83,90,50,53,54,32,102,111,114,32 .byte 120,56,54,47,83,83,69,50,44,32,67,82,89,80,84,79 -.byte 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111 -.byte 112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47 +.byte 47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45 +.byte 97,115,109,62,0 .align 64 .globl ecp_nistz256_mul_by_2 .type ecp_nistz256_mul_by_2,@function diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/modes/ghash-x86.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/modes/ghash-x86.S index fd87e3816..5a9051ad4 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/modes/ghash-x86.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/modes/ghash-x86.S @@ -1294,9 +1294,9 @@ gcm_ghash_clmul: .long 0,3774873600,0,4246732800,0,3644850176,0,3311403008 .long 0,2441084928,0,2376073216,0,2847932416,0,3051356160 .byte 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 -.byte 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 -.byte 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 -.byte 0 +.byte 82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116 +.byte 116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109 +.byte 47,100,111,116,45,97,115,109,62,0 .section ".note.gnu.property", "a" .p2align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha1-586.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha1-586.S index a3f81ed90..39e19802e 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha1-586.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha1-586.S @@ -3984,8 +3984,9 @@ _sha1_block_data_order_avx: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 .byte 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82 -.byte 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 -.byte 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116 +.byte 112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47 +.byte 100,111,116,45,97,115,109,62,0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha256-586.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha256-586.S index 8497be1bb..a3d75bdb5 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha256-586.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha256-586.S @@ -259,9 +259,9 @@ sha256_block_data_order: .long 66051,67438087,134810123,202182159 .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 .byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +.byte 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +.byte 109,47,100,111,116,45,97,115,109,62,0 .align 16 .L007unrolled: leal -96(%esp),%esp diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha512-586.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha512-586.S index 74624d5a5..efa3bf545 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha512-586.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/sha/sha512-586.S @@ -2827,9 +2827,9 @@ sha512_block_data_order: .size sha512_block_data_order,.-.L_sha512_block_data_order_begin .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 .byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +.byte 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +.byte 109,47,100,111,116,45,97,115,109,62,0 .comm OPENSSL_ia32cap_P,40,4 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/x86cpuid.S b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/x86cpuid.S index 76d15e57d..0f917ff69 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/x86cpuid.S +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/x86cpuid.S @@ -252,39 +252,6 @@ OPENSSL_far_spin: xorl %edx,%edx ret .size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin -.globl OPENSSL_wipe_cpu -.type OPENSSL_wipe_cpu,@function -.align 16 -OPENSSL_wipe_cpu: -.L_OPENSSL_wipe_cpu_begin: - #ifdef __CET__ - -.byte 243,15,30,251 - #endif - - xorl %eax,%eax - xorl %edx,%edx - leal OPENSSL_ia32cap_P,%ecx - movl (%ecx),%ecx - btl $1,(%ecx) - jnc .L013no_x87 - andl $83886080,%ecx - cmpl $83886080,%ecx - jne .L014no_sse2 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 -.L014no_sse2: -.long 4007259865,4007259865,4007259865,4007259865,2430851995 -.L013no_x87: - leal 4(%esp),%eax - ret -.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin .globl OPENSSL_atomic_add .type OPENSSL_atomic_add,@function .align 16 @@ -300,11 +267,11 @@ OPENSSL_atomic_add: pushl %ebx nop movl (%edx),%eax -.L015spin: +.L013spin: leal (%eax,%ecx,1),%ebx nop .long 447811568 - jne .L015spin + jne .L013spin movl %ebx,%eax popl %ebx ret @@ -323,32 +290,32 @@ OPENSSL_cleanse: movl 8(%esp),%ecx xorl %eax,%eax cmpl $7,%ecx - jae .L016lot + jae .L014lot cmpl $0,%ecx - je .L017ret -.L018little: + je .L015ret +.L016little: movb %al,(%edx) subl $1,%ecx leal 1(%edx),%edx - jnz .L018little -.L017ret: + jnz .L016little +.L015ret: ret .align 16 -.L016lot: +.L014lot: testl $3,%edx - jz .L019aligned + jz .L017aligned movb %al,(%edx) leal -1(%ecx),%ecx leal 1(%edx),%edx - jmp .L016lot -.L019aligned: + jmp .L014lot +.L017aligned: movl %eax,(%edx) leal -4(%ecx),%ecx testl $-4,%ecx leal 4(%edx),%edx - jnz .L019aligned + jnz .L017aligned cmpl $0,%ecx - jne .L018little + jne .L016little ret .size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin .globl CRYPTO_memcmp @@ -369,18 +336,18 @@ CRYPTO_memcmp: xorl %eax,%eax xorl %edx,%edx cmpl $0,%ecx - je .L020no_data -.L021loop: + je .L018no_data +.L019loop: movb (%esi),%dl leal 1(%esi),%esi xorb (%edi),%dl leal 1(%edi),%edi orb %dl,%al decl %ecx - jnz .L021loop + jnz .L019loop negl %eax shrl $31,%eax -.L020no_data: +.L018no_data: popl %edi popl %esi ret @@ -402,9 +369,9 @@ OPENSSL_instrument_bus: movl $0,%eax leal OPENSSL_ia32cap_P,%edx btl $4,(%edx) - jnc .L022nogo + jnc .L020nogo btl $19,(%edx) - jnc .L022nogo + jnc .L020nogo movl 20(%esp),%edi movl 24(%esp),%ecx .byte 0x0f,0x31 @@ -413,9 +380,9 @@ OPENSSL_instrument_bus: clflush (%edi) .byte 240 addl %ebx,(%edi) - jmp .L023loop + jmp .L021loop .align 16 -.L023loop: +.L021loop: .byte 0x0f,0x31 movl %eax,%edx subl %esi,%eax @@ -426,9 +393,9 @@ OPENSSL_instrument_bus: addl %eax,(%edi) leal 4(%edi),%edi subl $1,%ecx - jnz .L023loop + jnz .L021loop movl 24(%esp),%eax -.L022nogo: +.L020nogo: popl %edi popl %esi popl %ebx @@ -452,9 +419,9 @@ OPENSSL_instrument_bus2: movl $0,%eax leal OPENSSL_ia32cap_P,%edx btl $4,(%edx) - jnc .L024nogo + jnc .L022nogo btl $19,(%edx) - jnc .L024nogo + jnc .L022nogo movl 20(%esp),%edi movl 24(%esp),%ecx movl 28(%esp),%ebp @@ -469,14 +436,14 @@ OPENSSL_instrument_bus2: subl %esi,%eax movl %edx,%esi movl %eax,%ebx - jmp .L025loop2 + jmp .L023loop2 .align 16 -.L025loop2: +.L023loop2: clflush (%edi) .byte 240 addl %eax,(%edi) subl $1,%ebp - jz .L026done2 + jz .L024done2 .byte 0x0f,0x31 movl %eax,%edx subl %esi,%eax @@ -487,11 +454,11 @@ OPENSSL_instrument_bus2: setne %dl subl %edx,%ecx leal (%edi,%edx,4),%edi - jnz .L025loop2 -.L026done2: + jnz .L023loop2 +.L024done2: movl 24(%esp),%eax subl %ecx,%eax -.L024nogo: +.L022nogo: popl %edi popl %esi popl %ebx @@ -514,33 +481,33 @@ OPENSSL_ia32_rdrand_bytes: movl 12(%esp),%edi movl 16(%esp),%ebx cmpl $0,%ebx - je .L027done + je .L025done movl $8,%ecx -.L028loop: +.L026loop: .byte 15,199,242 - jc .L029break - loop .L028loop - jmp .L027done + jc .L027break + loop .L026loop + jmp .L025done .align 16 -.L029break: +.L027break: cmpl $4,%ebx - jb .L030tail + jb .L028tail movl %edx,(%edi) leal 4(%edi),%edi addl $4,%eax subl $4,%ebx - jz .L027done + jz .L025done movl $8,%ecx - jmp .L028loop + jmp .L026loop .align 16 -.L030tail: +.L028tail: movb %dl,(%edi) leal 1(%edi),%edi incl %eax shrl $8,%edx decl %ebx - jnz .L030tail -.L027done: + jnz .L028tail +.L025done: xorl %edx,%edx popl %ebx popl %edi @@ -562,33 +529,33 @@ OPENSSL_ia32_rdseed_bytes: movl 12(%esp),%edi movl 16(%esp),%ebx cmpl $0,%ebx - je .L031done + je .L029done movl $8,%ecx -.L032loop: +.L030loop: .byte 15,199,250 - jc .L033break - loop .L032loop - jmp .L031done + jc .L031break + loop .L030loop + jmp .L029done .align 16 -.L033break: +.L031break: cmpl $4,%ebx - jb .L034tail + jb .L032tail movl %edx,(%edi) leal 4(%edi),%edi addl $4,%eax subl $4,%ebx - jz .L031done + jz .L029done movl $8,%ecx - jmp .L032loop + jmp .L030loop .align 16 -.L034tail: +.L032tail: movb %dl,(%edi) leal 1(%edi),%edi incl %eax shrl $8,%edx decl %ebx - jnz .L034tail -.L031done: + jnz .L032tail +.L029done: xorl %edx,%edx popl %ebx popl %edi @@ -597,8 +564,6 @@ OPENSSL_ia32_rdseed_bytes: .hidden OPENSSL_cpuid_setup .hidden OPENSSL_ia32cap_P .comm OPENSSL_ia32cap_P,40,4 -.section .init - call OPENSSL_cpuid_setup .section ".note.gnu.property", "a" .p2align 2 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aes-586.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aes-586.nasm index 71c812ab3..bf7360d0a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aes-586.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aes-586.nasm @@ -3205,7 +3205,8 @@ L$056permute: pop ebp ret db 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 -db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 -db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +db 80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112 +db 115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100 +db 111,116,45,97,115,109,62,0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aesni-x86.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aesni-x86.nasm index 37198a2e5..739b9cbd8 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aesni-x86.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/aes/aesni-x86.nasm @@ -3196,7 +3196,8 @@ dd 1,1,1,1 dd 27,27,27,27 db 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 db 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 -db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 -db 115,108,46,111,114,103,62,0 +db 32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116 +db 104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62 +db 0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-gf2m.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-gf2m.nasm index 52be719fc..020958e88 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-gf2m.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-gf2m.nasm @@ -338,8 +338,8 @@ L$000ialu: ret db 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 db 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 -db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -db 62,0 +db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +db 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +db 109,47,100,111,116,45,97,115,109,62,0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-mont.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-mont.nasm index 545085381..b2bd9bd15 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-mont.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/bn/x86-mont.nasm @@ -473,7 +473,7 @@ L$000just_leave: db 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 db 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 db 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 -db 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 -db 111,114,103,62,0 +db 32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98 +db 46,99,111,109,47,100,111,116,45,97,115,109,62,0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/ec/ecp_nistz256-x86.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/ec/ecp_nistz256-x86.nasm index cd5381520..b6deecbeb 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/ec/ecp_nistz256-x86.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/ec/ecp_nistz256-x86.nasm @@ -2387,8 +2387,9 @@ L$ONE: dd 1,0,0,0,0,0,0,0 db 69,67,80,95,78,73,83,90,50,53,54,32,102,111,114,32 db 120,56,54,47,83,83,69,50,44,32,67,82,89,80,84,79 -db 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111 -db 112,101,110,115,115,108,46,111,114,103,62,0 +db 71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47 +db 47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45 +db 97,115,109,62,0 align 64 global _ecp_nistz256_mul_by_2 align 16 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/modes/ghash-x86.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/modes/ghash-x86.nasm index bc3b7eaaf..ced7f2358 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/modes/ghash-x86.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/modes/ghash-x86.nasm @@ -1252,6 +1252,6 @@ dd 0,1887436800,0,1822425088,0,1220542464,0,1423966208 dd 0,3774873600,0,4246732800,0,3644850176,0,3311403008 dd 0,2441084928,0,2376073216,0,2847932416,0,3051356160 db 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 -db 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 -db 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 -db 0 +db 82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116 +db 116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109 +db 47,100,111,116,45,97,115,109,62,0 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha1-586.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha1-586.nasm index 41cc58af8..ebd497d62 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha1-586.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha1-586.nasm @@ -3964,7 +3964,8 @@ dd 66051,67438087,134810123,202182159 db 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 db 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 db 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82 -db 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 -db 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +db 89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116 +db 112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47 +db 100,111,116,45,97,115,109,62,0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha256-586.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha256-586.nasm index ec4ac3e7d..fdfa2c9b4 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha256-586.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha256-586.nasm @@ -261,9 +261,9 @@ dd 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635 dd 66051,67438087,134810123,202182159 db 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 db 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -db 62,0 +db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +db 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +db 109,47,100,111,116,45,97,115,109,62,0 align 16 L$007unrolled: lea esp,[esp-96] diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha512-586.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha512-586.nasm index d04b03ec2..02c7d33a3 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha512-586.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/sha/sha512-586.nasm @@ -2828,8 +2828,8 @@ dd 67438087,66051 dd 202182159,134810123 db 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 db 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -db 62,0 +db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +db 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +db 109,47,100,111,116,45,97,115,109,62,0 segment .bss common _OPENSSL_ia32cap_P 40 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/x86cpuid.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/x86cpuid.nasm index a0ca9aead..895590013 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/x86cpuid.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/x86cpuid.nasm @@ -232,32 +232,6 @@ L$011nospin: xor eax,eax xor edx,edx ret -global _OPENSSL_wipe_cpu -align 16 -_OPENSSL_wipe_cpu: -L$_OPENSSL_wipe_cpu_begin: - xor eax,eax - xor edx,edx - lea ecx,[_OPENSSL_ia32cap_P] - mov ecx,DWORD [ecx] - bt DWORD [ecx],1 - jnc NEAR L$013no_x87 - and ecx,83886080 - cmp ecx,83886080 - jne NEAR L$014no_sse2 - pxor xmm0,xmm0 - pxor xmm1,xmm1 - pxor xmm2,xmm2 - pxor xmm3,xmm3 - pxor xmm4,xmm4 - pxor xmm5,xmm5 - pxor xmm6,xmm6 - pxor xmm7,xmm7 -L$014no_sse2: -dd 4007259865,4007259865,4007259865,4007259865,2430851995 -L$013no_x87: - lea eax,[4+esp] - ret global _OPENSSL_atomic_add align 16 _OPENSSL_atomic_add: @@ -267,11 +241,11 @@ L$_OPENSSL_atomic_add_begin: push ebx nop mov eax,DWORD [edx] -L$015spin: +L$013spin: lea ebx,[ecx*1+eax] nop dd 447811568 - jne NEAR L$015spin + jne NEAR L$013spin mov eax,ebx pop ebx ret @@ -283,32 +257,32 @@ L$_OPENSSL_cleanse_begin: mov ecx,DWORD [8+esp] xor eax,eax cmp ecx,7 - jae NEAR L$016lot + jae NEAR L$014lot cmp ecx,0 - je NEAR L$017ret -L$018little: + je NEAR L$015ret +L$016little: mov BYTE [edx],al sub ecx,1 lea edx,[1+edx] - jnz NEAR L$018little -L$017ret: + jnz NEAR L$016little +L$015ret: ret align 16 -L$016lot: +L$014lot: test edx,3 - jz NEAR L$019aligned + jz NEAR L$017aligned mov BYTE [edx],al lea ecx,[ecx-1] lea edx,[1+edx] - jmp NEAR L$016lot -L$019aligned: + jmp NEAR L$014lot +L$017aligned: mov DWORD [edx],eax lea ecx,[ecx-4] test ecx,-4 lea edx,[4+edx] - jnz NEAR L$019aligned + jnz NEAR L$017aligned cmp ecx,0 - jne NEAR L$018little + jne NEAR L$016little ret global _CRYPTO_memcmp align 16 @@ -322,18 +296,18 @@ L$_CRYPTO_memcmp_begin: xor eax,eax xor edx,edx cmp ecx,0 - je NEAR L$020no_data -L$021loop: + je NEAR L$018no_data +L$019loop: mov dl,BYTE [esi] lea esi,[1+esi] xor dl,BYTE [edi] lea edi,[1+edi] or al,dl dec ecx - jnz NEAR L$021loop + jnz NEAR L$019loop neg eax shr eax,31 -L$020no_data: +L$018no_data: pop edi pop esi ret @@ -348,9 +322,9 @@ L$_OPENSSL_instrument_bus_begin: mov eax,0 lea edx,[_OPENSSL_ia32cap_P] bt DWORD [edx],4 - jnc NEAR L$022nogo + jnc NEAR L$020nogo bt DWORD [edx],19 - jnc NEAR L$022nogo + jnc NEAR L$020nogo mov edi,DWORD [20+esp] mov ecx,DWORD [24+esp] rdtsc @@ -359,9 +333,9 @@ L$_OPENSSL_instrument_bus_begin: clflush [edi] db 240 add DWORD [edi],ebx - jmp NEAR L$023loop + jmp NEAR L$021loop align 16 -L$023loop: +L$021loop: rdtsc mov edx,eax sub eax,esi @@ -372,9 +346,9 @@ db 240 add DWORD [edi],eax lea edi,[4+edi] sub ecx,1 - jnz NEAR L$023loop + jnz NEAR L$021loop mov eax,DWORD [24+esp] -L$022nogo: +L$020nogo: pop edi pop esi pop ebx @@ -391,9 +365,9 @@ L$_OPENSSL_instrument_bus2_begin: mov eax,0 lea edx,[_OPENSSL_ia32cap_P] bt DWORD [edx],4 - jnc NEAR L$024nogo + jnc NEAR L$022nogo bt DWORD [edx],19 - jnc NEAR L$024nogo + jnc NEAR L$022nogo mov edi,DWORD [20+esp] mov ecx,DWORD [24+esp] mov ebp,DWORD [28+esp] @@ -408,14 +382,14 @@ db 240 sub eax,esi mov esi,edx mov ebx,eax - jmp NEAR L$025loop2 + jmp NEAR L$023loop2 align 16 -L$025loop2: +L$023loop2: clflush [edi] db 240 add DWORD [edi],eax sub ebp,1 - jz NEAR L$026done2 + jz NEAR L$024done2 rdtsc mov edx,eax sub eax,esi @@ -426,11 +400,11 @@ db 240 setne dl sub ecx,edx lea edi,[edx*4+edi] - jnz NEAR L$025loop2 -L$026done2: + jnz NEAR L$023loop2 +L$024done2: mov eax,DWORD [24+esp] sub eax,ecx -L$024nogo: +L$022nogo: pop edi pop esi pop ebx @@ -446,33 +420,33 @@ L$_OPENSSL_ia32_rdrand_bytes_begin: mov edi,DWORD [12+esp] mov ebx,DWORD [16+esp] cmp ebx,0 - je NEAR L$027done + je NEAR L$025done mov ecx,8 -L$028loop: +L$026loop: db 15,199,242 - jc NEAR L$029break - loop L$028loop - jmp NEAR L$027done + jc NEAR L$027break + loop L$026loop + jmp NEAR L$025done align 16 -L$029break: +L$027break: cmp ebx,4 - jb NEAR L$030tail + jb NEAR L$028tail mov DWORD [edi],edx lea edi,[4+edi] add eax,4 sub ebx,4 - jz NEAR L$027done + jz NEAR L$025done mov ecx,8 - jmp NEAR L$028loop + jmp NEAR L$026loop align 16 -L$030tail: +L$028tail: mov BYTE [edi],dl lea edi,[1+edi] inc eax shr edx,8 dec ebx - jnz NEAR L$030tail -L$027done: + jnz NEAR L$028tail +L$025done: xor edx,edx pop ebx pop edi @@ -487,39 +461,36 @@ L$_OPENSSL_ia32_rdseed_bytes_begin: mov edi,DWORD [12+esp] mov ebx,DWORD [16+esp] cmp ebx,0 - je NEAR L$031done + je NEAR L$029done mov ecx,8 -L$032loop: +L$030loop: db 15,199,250 - jc NEAR L$033break - loop L$032loop - jmp NEAR L$031done + jc NEAR L$031break + loop L$030loop + jmp NEAR L$029done align 16 -L$033break: +L$031break: cmp ebx,4 - jb NEAR L$034tail + jb NEAR L$032tail mov DWORD [edi],edx lea edi,[4+edi] add eax,4 sub ebx,4 - jz NEAR L$031done + jz NEAR L$029done mov ecx,8 - jmp NEAR L$032loop + jmp NEAR L$030loop align 16 -L$034tail: +L$032tail: mov BYTE [edi],dl lea edi,[1+edi] inc eax shr edx,8 dec ebx - jnz NEAR L$034tail -L$031done: + jnz NEAR L$032tail +L$029done: xor edx,edx pop ebx pop edi ret segment .bss common _OPENSSL_ia32cap_P 40 -segment .CRT$XCU data align=4 -extern _OPENSSL_cpuid_setup -dd _OPENSSL_cpuid_setup diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-cfb-avx512.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-cfb-avx512.s new file mode 100644 index 000000000..181177e0e --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-cfb-avx512.s @@ -0,0 +1,766 @@ +.text + + + + + + + + + + + + + +.globl ossl_aes_cfb128_vaes_eligible +.type ossl_aes_cfb128_vaes_eligible,@function +.balign 64 + +ossl_aes_cfb128_vaes_eligible: +.cfi_startproc +.byte 243,15,30,250 + + movl OPENSSL_ia32cap_P+8(%rip),%ecx + xorl %eax,%eax + + + + + andl $0x40030000,%ecx + cmpl $0x40030000,%ecx + jne .Laes_cfb128_vaes_eligible_done + + movl OPENSSL_ia32cap_P+12(%rip),%ecx + + + + + andl $0x200,%ecx + cmpl $0x200,%ecx + cmovel %ecx,%eax + +.Laes_cfb128_vaes_eligible_done: + .byte 0xf3,0xc3 +.cfi_endproc +.size ossl_aes_cfb128_vaes_eligible, .-ossl_aes_cfb128_vaes_eligible +.globl ossl_aes_cfb128_vaes_enc +.type ossl_aes_cfb128_vaes_enc,@function +.balign 64 +ossl_aes_cfb128_vaes_enc: +.cfi_startproc +.byte 243,15,30,250 + + movq (%r9),%r11 + + + testq %rdx,%rdx + jz .Laes_cfb128_vaes_enc_done + + testq %r11,%r11 + jz .Laes_cfb128_enc_mid + + + + + + movq %rcx,%r10 + + movq $0x10,%rcx + subq %r11,%rcx + cmpq %rdx,%rcx + cmovaq %rdx,%rcx + + movq $1,%rax + shlq %cl,%rax + decq %rax + kmovq %rax,%k1 + + movq %r11,%rax + addq %rcx,%rax + andb $0x0F,%al + + leaq (%r11,%r8,1),%r11 + vmovdqu8 (%r11),%xmm0 + vmovdqu8 (%rdi),%xmm1 + vpxor %xmm0,%xmm1,%xmm2 + vmovdqu8 %xmm2,(%rsi){%k1} + vmovdqu8 %xmm2,(%r11){%k1} + + addq %rcx,%rdi + addq %rcx,%rsi + subq %rcx,%rdx + jz .Laes_cfb128_enc_zero_pre + + movq %r10,%rcx + +.Laes_cfb128_enc_mid: + vmovdqu8 0(%rcx),%xmm17 + vmovdqu8 16(%rcx),%xmm18 + vmovdqu8 32(%rcx),%xmm19 + vmovdqu8 48(%rcx),%xmm20 + vmovdqu8 64(%rcx),%xmm21 + vmovdqu8 80(%rcx),%xmm22 + vmovdqu8 96(%rcx),%xmm23 + vmovdqu8 112(%rcx),%xmm24 + vmovdqu8 128(%rcx),%xmm25 + vmovdqu8 144(%rcx),%xmm26 + vmovdqu8 160(%rcx),%xmm27 + vmovdqu8 176(%rcx),%xmm28 + vmovdqu8 192(%rcx),%xmm29 + vmovdqu8 208(%rcx),%xmm30 + vmovdqu8 224(%rcx),%xmm31 + + movl 240(%rcx),%r11d + + + + + + vmovdqu (%r8),%xmm2 + + cmpq $0x10,%rdx + jb .Laes_cfb128_enc_post + +.balign 32 +.Loop_aes_cfb128_enc_main: + subq $0x10,%rdx + + vmovdqu (%rdi),%xmm3 + leaq 16(%rdi),%rdi + vpxord %xmm17,%xmm2,%xmm2 + vaesenc %xmm18,%xmm2,%xmm2 + vaesenc %xmm19,%xmm2,%xmm2 + vaesenc %xmm20,%xmm2,%xmm2 + vaesenc %xmm21,%xmm2,%xmm2 + vaesenc %xmm22,%xmm2,%xmm2 + vaesenc %xmm23,%xmm2,%xmm2 + vaesenc %xmm24,%xmm2,%xmm2 + vaesenc %xmm25,%xmm2,%xmm2 + vaesenc %xmm26,%xmm2,%xmm2 + + cmpl $0x09,%r11d + ja .Laes_cfb128_enc_mid_192_256 + + vaesenclast %xmm27,%xmm2,%xmm2 + jmp .Laes_cfb128_enc_mid_end + +.balign 32 +.Laes_cfb128_enc_mid_192_256: + + vaesenc %xmm27,%xmm2,%xmm2 + vaesenc %xmm28,%xmm2,%xmm2 + + cmpl $0x0B,%r11d + ja .Laes_cfb128_enc_mid_256 + + vaesenclast %xmm29,%xmm2,%xmm2 + jmp .Laes_cfb128_enc_mid_end + +.balign 32 +.Laes_cfb128_enc_mid_256: + + vaesenc %xmm29,%xmm2,%xmm2 + vaesenc %xmm30,%xmm2,%xmm2 + vaesenclast %xmm31,%xmm2,%xmm2 + +.balign 32 +.Laes_cfb128_enc_mid_end: + + vpxor %xmm3,%xmm2,%xmm2 + cmpq $0x10,%rdx + vmovdqu %xmm2,(%rsi) + leaq 16(%rsi),%rsi + jae .Loop_aes_cfb128_enc_main + + xorl %eax,%eax + + vmovdqu %xmm2,(%r8) + +.Laes_cfb128_enc_post: + + + + + + testq %rdx,%rdx + jz .Laes_cfb128_enc_zero_all + vpxord %xmm17,%xmm2,%xmm2 + vaesenc %xmm18,%xmm2,%xmm2 + vaesenc %xmm19,%xmm2,%xmm2 + vaesenc %xmm20,%xmm2,%xmm2 + vaesenc %xmm21,%xmm2,%xmm2 + vaesenc %xmm22,%xmm2,%xmm2 + vaesenc %xmm23,%xmm2,%xmm2 + vaesenc %xmm24,%xmm2,%xmm2 + vaesenc %xmm25,%xmm2,%xmm2 + vaesenc %xmm26,%xmm2,%xmm2 + + cmpl $0x09,%r11d + ja .Laes_cfb128_enc_post_192_256 + + vaesenclast %xmm27,%xmm2,%xmm2 + jmp .Laes_cfb128_enc_post_end + +.balign 32 +.Laes_cfb128_enc_post_192_256: + + vaesenc %xmm27,%xmm2,%xmm2 + vaesenc %xmm28,%xmm2,%xmm2 + + cmpl $0x0B,%r11d + ja .Laes_cfb128_enc_post_256 + + vaesenclast %xmm29,%xmm2,%xmm2 + jmp .Laes_cfb128_enc_post_end + +.balign 32 +.Laes_cfb128_enc_post_256: + + vaesenc %xmm29,%xmm2,%xmm2 + vaesenc %xmm30,%xmm2,%xmm2 + vaesenclast %xmm31,%xmm2,%xmm2 + +.balign 32 +.Laes_cfb128_enc_post_end: + + movq %rdx,%rax + + movq $1,%r11 + movb %dl,%cl + shlq %cl,%r11 + decq %r11 + kmovq %r11,%k1 + + vmovdqu8 (%rdi),%xmm1{%k1}{z} + vpxor %xmm2,%xmm1,%xmm0 + vmovdqu8 %xmm0,(%rsi){%k1} + vmovdqu8 %xmm0,(%r8) + + + +.Laes_cfb128_enc_zero_all: + vpxord %xmm17,%xmm17,%xmm17 + vpxord %xmm18,%xmm18,%xmm18 + vpxord %xmm19,%xmm19,%xmm19 + vpxord %xmm20,%xmm20,%xmm20 + vpxord %xmm21,%xmm21,%xmm21 + vpxord %xmm22,%xmm22,%xmm22 + vpxord %xmm23,%xmm23,%xmm23 + vpxord %xmm24,%xmm24,%xmm24 + vpxord %xmm25,%xmm25,%xmm25 + vpxord %xmm26,%xmm26,%xmm26 + vpxord %xmm27,%xmm27,%xmm27 + vpxord %xmm28,%xmm28,%xmm28 + vpxord %xmm29,%xmm29,%xmm29 + vpxord %xmm30,%xmm30,%xmm30 + vpxord %xmm31,%xmm31,%xmm31 + + vpxor %xmm3,%xmm3,%xmm3 + +.Laes_cfb128_enc_zero_pre: + vpxor %xmm0,%xmm0,%xmm0 + vpxor %xmm1,%xmm1,%xmm1 + vpxor %xmm2,%xmm2,%xmm2 + + movq %rax,(%r9) + + vzeroupper + +.Laes_cfb128_vaes_enc_done: + .byte 0xf3,0xc3 +.cfi_endproc +.size ossl_aes_cfb128_vaes_enc,.-ossl_aes_cfb128_vaes_enc +.globl ossl_aes_cfb128_vaes_dec +.type ossl_aes_cfb128_vaes_dec,@function +.balign 64 +ossl_aes_cfb128_vaes_dec: +.cfi_startproc +.byte 243,15,30,250 + + movq (%r9),%r11 + + + testq %rdx,%rdx + jz .Laes_cfb128_vaes_dec_done + testq %r11,%r11 + jz .Laes_cfb128_dec_mid + + + + + + movq %rcx,%r10 + + movq $0x10,%rcx + subq %r11,%rcx + cmpq %rdx,%rcx + cmovaq %rdx,%rcx + + movq $1,%rax + shlq %cl,%rax + decq %rax + kmovq %rax,%k1 + + leaq (%r11,%rcx,1),%rax + andb $0x0F,%al + + leaq (%r11,%r8,1),%r11 + vmovdqu8 (%r11),%xmm0 + vmovdqu8 (%rdi),%xmm1 + vpxor %xmm0,%xmm1,%xmm2 + vmovdqu8 %xmm2,(%rsi){%k1} + vmovdqu8 %xmm1,(%r11){%k1} + + addq %rcx,%rdi + addq %rcx,%rsi + subq %rcx,%rdx + jz .Laes_cfb128_dec_zero_pre + + movq %r10,%rcx + +.Laes_cfb128_dec_mid: + vbroadcasti32x4 0(%rcx),%zmm17 + vbroadcasti32x4 16(%rcx),%zmm18 + vbroadcasti32x4 32(%rcx),%zmm19 + vbroadcasti32x4 48(%rcx),%zmm20 + vbroadcasti32x4 64(%rcx),%zmm21 + vbroadcasti32x4 80(%rcx),%zmm22 + vbroadcasti32x4 96(%rcx),%zmm23 + vbroadcasti32x4 112(%rcx),%zmm24 + vbroadcasti32x4 128(%rcx),%zmm25 + vbroadcasti32x4 144(%rcx),%zmm26 + vbroadcasti32x4 160(%rcx),%zmm27 + vbroadcasti32x4 176(%rcx),%zmm28 + vbroadcasti32x4 192(%rcx),%zmm29 + vbroadcasti32x4 208(%rcx),%zmm30 + vbroadcasti32x4 224(%rcx),%zmm31 + + movl 240(%rcx),%r11d + + + + + + + vbroadcasti32x4 (%r8),%zmm2 + + cmpq $0x100,%rdx + jb .Laes_cfb128_dec_check_4x + + + + + + +.balign 32 +.Loop_aes_cfb128_dec_mid_16x: + subq $0x100,%rdx + + + + + vmovdqu32 (%rdi),%zmm3 + + vmovdqu32 64(%rdi),%zmm5 + + vmovdqu32 128(%rdi),%zmm1 + + vmovdqu32 192(%rdi),%zmm16 + + + valignq $6,%zmm2,%zmm3,%zmm2 + + valignq $6,%zmm3,%zmm5,%zmm4 + + valignq $6,%zmm5,%zmm1,%zmm0 + + valignq $6,%zmm1,%zmm16,%zmm6 + + leaq 256(%rdi),%rdi + vpxord %zmm17,%zmm2,%zmm2 + vpxord %zmm17,%zmm4,%zmm4 + vpxord %zmm17,%zmm0,%zmm0 + vpxord %zmm17,%zmm6,%zmm6 + + vaesenc %zmm18,%zmm2,%zmm2 + vaesenc %zmm18,%zmm4,%zmm4 + vaesenc %zmm18,%zmm0,%zmm0 + vaesenc %zmm18,%zmm6,%zmm6 + + vaesenc %zmm19,%zmm2,%zmm2 + vaesenc %zmm19,%zmm4,%zmm4 + vaesenc %zmm19,%zmm0,%zmm0 + vaesenc %zmm19,%zmm6,%zmm6 + + vaesenc %zmm20,%zmm2,%zmm2 + vaesenc %zmm20,%zmm4,%zmm4 + vaesenc %zmm20,%zmm0,%zmm0 + vaesenc %zmm20,%zmm6,%zmm6 + + vaesenc %zmm21,%zmm2,%zmm2 + vaesenc %zmm21,%zmm4,%zmm4 + vaesenc %zmm21,%zmm0,%zmm0 + vaesenc %zmm21,%zmm6,%zmm6 + + vaesenc %zmm22,%zmm2,%zmm2 + vaesenc %zmm22,%zmm4,%zmm4 + vaesenc %zmm22,%zmm0,%zmm0 + vaesenc %zmm22,%zmm6,%zmm6 + + vaesenc %zmm23,%zmm2,%zmm2 + vaesenc %zmm23,%zmm4,%zmm4 + vaesenc %zmm23,%zmm0,%zmm0 + vaesenc %zmm23,%zmm6,%zmm6 + + vaesenc %zmm24,%zmm2,%zmm2 + vaesenc %zmm24,%zmm4,%zmm4 + vaesenc %zmm24,%zmm0,%zmm0 + vaesenc %zmm24,%zmm6,%zmm6 + + vaesenc %zmm25,%zmm2,%zmm2 + vaesenc %zmm25,%zmm4,%zmm4 + vaesenc %zmm25,%zmm0,%zmm0 + vaesenc %zmm25,%zmm6,%zmm6 + + vaesenc %zmm26,%zmm2,%zmm2 + vaesenc %zmm26,%zmm4,%zmm4 + vaesenc %zmm26,%zmm0,%zmm0 + vaesenc %zmm26,%zmm6,%zmm6 + + cmpl $0x09,%r11d + ja .Laes_cfb128_dec_mid_16x_192_256 + + vaesenclast %zmm27,%zmm2,%zmm2 + vaesenclast %zmm27,%zmm4,%zmm4 + vaesenclast %zmm27,%zmm0,%zmm0 + vaesenclast %zmm27,%zmm6,%zmm6 + jmp .Laes_cfb128_dec_mid_16x_end + +.balign 32 +.Laes_cfb128_dec_mid_16x_192_256: + + vaesenc %zmm27,%zmm2,%zmm2 + vaesenc %zmm27,%zmm4,%zmm4 + vaesenc %zmm27,%zmm0,%zmm0 + vaesenc %zmm27,%zmm6,%zmm6 + + vaesenc %zmm28,%zmm2,%zmm2 + vaesenc %zmm28,%zmm4,%zmm4 + vaesenc %zmm28,%zmm0,%zmm0 + vaesenc %zmm28,%zmm6,%zmm6 + + cmpl $0x0B,%r11d + ja .Laes_cfb128_dec_mid_16x_256 + + vaesenclast %zmm29,%zmm2,%zmm2 + vaesenclast %zmm29,%zmm4,%zmm4 + vaesenclast %zmm29,%zmm0,%zmm0 + vaesenclast %zmm29,%zmm6,%zmm6 + jmp .Laes_cfb128_dec_mid_16x_end + +.balign 32 +.Laes_cfb128_dec_mid_16x_256: + + vaesenc %zmm29,%zmm2,%zmm2 + vaesenc %zmm29,%zmm4,%zmm4 + vaesenc %zmm29,%zmm0,%zmm0 + vaesenc %zmm29,%zmm6,%zmm6 + + vaesenc %zmm30,%zmm2,%zmm2 + vaesenc %zmm30,%zmm4,%zmm4 + vaesenc %zmm30,%zmm0,%zmm0 + vaesenc %zmm30,%zmm6,%zmm6 + + vaesenclast %zmm31,%zmm2,%zmm2 + vaesenclast %zmm31,%zmm4,%zmm4 + vaesenclast %zmm31,%zmm0,%zmm0 + vaesenclast %zmm31,%zmm6,%zmm6 + +.balign 32 +.Laes_cfb128_dec_mid_16x_end: + + vpxord %zmm3,%zmm2,%zmm2 + vpxord %zmm5,%zmm4,%zmm4 + vpxord %zmm1,%zmm0,%zmm0 + vpxord %zmm16,%zmm6,%zmm6 + + cmpq $0x100,%rdx + + vmovdqu32 %zmm2,(%rsi) + vmovdqu32 %zmm4,64(%rsi) + vmovdqu32 %zmm0,128(%rsi) + vmovdqu32 %zmm6,192(%rsi) + + vmovdqu8 %zmm16,%zmm2 + + leaq 256(%rsi),%rsi + + jae .Loop_aes_cfb128_dec_mid_16x + + vextracti64x2 $3,%zmm16,%xmm2 + vinserti32x4 $3,%xmm2,%zmm2,%zmm2 + + xorl %eax,%eax + + vmovdqu %xmm2,(%r8) + +.Laes_cfb128_dec_check_4x: + cmpq $0x40,%rdx + jb .Laes_cfb128_dec_check_1x + + + + + + + + +.balign 32 +.Loop_aes_cfb128_dec_mid_4x: + subq $0x40,%rdx + + + vmovdqu32 (%rdi),%zmm3 + + + valignq $6,%zmm2,%zmm3,%zmm2 + + leaq 64(%rdi),%rdi + vpxord %zmm17,%zmm2,%zmm2 + vaesenc %zmm18,%zmm2,%zmm2 + vaesenc %zmm19,%zmm2,%zmm2 + vaesenc %zmm20,%zmm2,%zmm2 + vaesenc %zmm21,%zmm2,%zmm2 + vaesenc %zmm22,%zmm2,%zmm2 + vaesenc %zmm23,%zmm2,%zmm2 + vaesenc %zmm24,%zmm2,%zmm2 + vaesenc %zmm25,%zmm2,%zmm2 + vaesenc %zmm26,%zmm2,%zmm2 + + cmpl $0x09,%r11d + ja .Laes_cfb128_dec_mid_4x_192_256 + + vaesenclast %zmm27,%zmm2,%zmm2 + jmp .Laes_cfb128_dec_mid_4x_end + +.balign 32 +.Laes_cfb128_dec_mid_4x_192_256: + + vaesenc %zmm27,%zmm2,%zmm2 + vaesenc %zmm28,%zmm2,%zmm2 + + cmpl $0x0B,%r11d + ja .Laes_cfb128_dec_mid_4x_256 + + vaesenclast %zmm29,%zmm2,%zmm2 + jmp .Laes_cfb128_dec_mid_4x_end + +.balign 32 +.Laes_cfb128_dec_mid_4x_256: + + vaesenc %zmm29,%zmm2,%zmm2 + vaesenc %zmm30,%zmm2,%zmm2 + vaesenclast %zmm31,%zmm2,%zmm2 + +.balign 32 +.Laes_cfb128_dec_mid_4x_end: + vpxord %zmm3,%zmm2,%zmm2 + cmpq $0x40,%rdx + vmovdqu32 %zmm2,(%rsi) + vmovdqu8 %zmm3,%zmm2 + leaq 64(%rsi),%rsi + + jae .Loop_aes_cfb128_dec_mid_4x + + vextracti64x2 $3,%zmm2,%xmm2 + + + xorl %eax,%eax + + vmovdqu %xmm2,(%r8) + +.Laes_cfb128_dec_check_1x: + cmpq $0x10,%rdx + jb .Laes_cfb128_dec_post + + + + + + + +.balign 32 +.Loop_aes_cfb128_dec_mid_1x: + subq $0x10,%rdx + + vmovdqu (%rdi),%xmm3 + leaq 16(%rdi),%rdi + vpxord %xmm17,%xmm2,%xmm2 + vaesenc %xmm18,%xmm2,%xmm2 + vaesenc %xmm19,%xmm2,%xmm2 + vaesenc %xmm20,%xmm2,%xmm2 + vaesenc %xmm21,%xmm2,%xmm2 + vaesenc %xmm22,%xmm2,%xmm2 + vaesenc %xmm23,%xmm2,%xmm2 + vaesenc %xmm24,%xmm2,%xmm2 + vaesenc %xmm25,%xmm2,%xmm2 + vaesenc %xmm26,%xmm2,%xmm2 + + cmpl $0x09,%r11d + ja .Loop_aes_cfb128_dec_mid_1x_inner_192_256 + + vaesenclast %xmm27,%xmm2,%xmm2 + jmp .Loop_aes_cfb128_dec_mid_1x_inner_end + +.balign 32 +.Loop_aes_cfb128_dec_mid_1x_inner_192_256: + + vaesenc %xmm27,%xmm2,%xmm2 + vaesenc %xmm28,%xmm2,%xmm2 + + cmpl $0x0B,%r11d + ja .Loop_aes_cfb128_dec_mid_1x_inner_256 + + vaesenclast %xmm29,%xmm2,%xmm2 + jmp .Loop_aes_cfb128_dec_mid_1x_inner_end + +.balign 32 +.Loop_aes_cfb128_dec_mid_1x_inner_256: + + vaesenc %xmm29,%xmm2,%xmm2 + vaesenc %xmm30,%xmm2,%xmm2 + vaesenclast %xmm31,%xmm2,%xmm2 + +.balign 32 +.Loop_aes_cfb128_dec_mid_1x_inner_end: + vpxor %xmm3,%xmm2,%xmm2 + cmpq $0x10,%rdx + vmovdqu %xmm2,(%rsi) + vmovdqu8 %xmm3,%xmm2 + leaq 16(%rsi),%rsi + jae .Loop_aes_cfb128_dec_mid_1x + + xorl %eax,%eax + + vmovdqu %xmm2,(%r8) + +.Laes_cfb128_dec_post: + + + + + + testq %rdx,%rdx + jz .Laes_cfb128_dec_zero_all + vpxord %xmm17,%xmm2,%xmm2 + vaesenc %xmm18,%xmm2,%xmm2 + vaesenc %xmm19,%xmm2,%xmm2 + vaesenc %xmm20,%xmm2,%xmm2 + vaesenc %xmm21,%xmm2,%xmm2 + vaesenc %xmm22,%xmm2,%xmm2 + vaesenc %xmm23,%xmm2,%xmm2 + vaesenc %xmm24,%xmm2,%xmm2 + vaesenc %xmm25,%xmm2,%xmm2 + vaesenc %xmm26,%xmm2,%xmm2 + + cmpl $0x09,%r11d + ja .Loop_aes_cfb128_dec_post_192_256 + + vaesenclast %xmm27,%xmm2,%xmm2 + jmp .Loop_aes_cfb128_dec_post_end + +.balign 32 +.Loop_aes_cfb128_dec_post_192_256: + + vaesenc %xmm27,%xmm2,%xmm2 + vaesenc %xmm28,%xmm2,%xmm2 + + cmpl $0x0B,%r11d + ja .Loop_aes_cfb128_dec_post_256 + + vaesenclast %xmm29,%xmm2,%xmm2 + jmp .Loop_aes_cfb128_dec_post_end + +.balign 32 +.Loop_aes_cfb128_dec_post_256: + + vaesenc %xmm29,%xmm2,%xmm2 + vaesenc %xmm30,%xmm2,%xmm2 + vaesenclast %xmm31,%xmm2,%xmm2 + +.balign 32 +.Loop_aes_cfb128_dec_post_end: + + movq %rdx,%rax + movq $1,%r11 + movb %dl,%cl + shlq %cl,%r11 + decq %r11 + kmovq %r11,%k1 + + vmovdqu8 (%rdi),%xmm1{%k1}{z} + vpxor %xmm2,%xmm1,%xmm0 + vmovdqu8 %xmm0,(%rsi){%k1} + vpblendmb %xmm1,%xmm2,%xmm2{%k1} + + vmovdqu8 %xmm2,(%r8) + + + +.Laes_cfb128_dec_zero_all: + vpxord %xmm17,%xmm17,%xmm17 + vpxord %xmm18,%xmm18,%xmm18 + vpxord %xmm19,%xmm19,%xmm19 + vpxord %xmm20,%xmm20,%xmm20 + vpxord %xmm21,%xmm21,%xmm21 + vpxord %xmm22,%xmm22,%xmm22 + vpxord %xmm23,%xmm23,%xmm23 + vpxord %xmm24,%xmm24,%xmm24 + vpxord %xmm25,%xmm25,%xmm25 + vpxord %xmm26,%xmm26,%xmm26 + vpxord %xmm27,%xmm27,%xmm27 + vpxord %xmm28,%xmm28,%xmm28 + vpxord %xmm29,%xmm29,%xmm29 + vpxord %xmm30,%xmm30,%xmm30 + vpxord %xmm31,%xmm31,%xmm31 + + vpxord %xmm3,%xmm3,%xmm3 + vpxord %xmm4,%xmm4,%xmm4 + vpxord %xmm5,%xmm5,%xmm5 + vpxord %xmm6,%xmm6,%xmm6 + vpxord %xmm16,%xmm16,%xmm16 + +.Laes_cfb128_dec_zero_pre: + + vpxord %xmm0,%xmm0,%xmm0 + vpxord %xmm1,%xmm1,%xmm1 + vpxord %xmm2,%xmm2,%xmm2 + + vzeroupper + movq %rax,(%r9) + +.Laes_cfb128_vaes_dec_done: + .byte 0xf3,0xc3 +.cfi_endproc +.size ossl_aes_cfb128_vaes_dec,.-ossl_aes_cfb128_vaes_dec + .section ".note.gnu.property", "a" + .p2align 3 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + # "GNU" encoded with .byte, since .asciz isn't supported + # on Solaris. + .byte 0x47 + .byte 0x4e + .byte 0x55 + .byte 0 +1: + .p2align 3 + .long 0xc0000002 + .long 3f - 2f +2: + .long 3 +3: + .p2align 3 +4: diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-x86_64.s index eef97c628..9b09f5a8d 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aes-x86_64.s @@ -2655,7 +2655,7 @@ AES_cbc_encrypt: .byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d .long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe .long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0 -.byte 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .previous .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha1-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha1-x86_64.s index 6e4c90e93..e8d9c3d3f 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha1-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha1-x86_64.s @@ -2728,7 +2728,7 @@ K_XX_XX: .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f .byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 -.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .previous .type aesni_cbc_sha1_enc_shaext,@function diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha256-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha256-x86_64.s index 77187bc39..e7bf3eb19 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha256-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-sha256-x86_64.s @@ -75,7 +75,7 @@ K256: .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f .long 0,0,0,0, 0,0,0,0, -1,-1,-1,-1 .long 0,0,0,0, 0,0,0,0 -.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .previous .type aesni_cbc_sha256_enc_xop,@function diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-x86_64.s index 89774597b..1f876ab29 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/aes/aesni-x86_64.s @@ -4482,7 +4482,7 @@ __aesni_set_encrypt_key: .Lkey_rcon1b: .long 0x1b,0x1b,0x1b,0x1b -.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .previous .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s index 1a91fca68..e12c689d2 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s @@ -1135,6 +1135,7 @@ ossl_extract_multiplier_2x20_win5_avx: vmovdqu %ymm7,224(%rdi) vmovdqu %ymm8,256(%rdi) vmovdqu %ymm9,288(%rdi) + vzeroupper .byte 0xf3,0xc3 .cfi_endproc .size ossl_extract_multiplier_2x20_win5_avx, .-ossl_extract_multiplier_2x20_win5_avx diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s index c40b20939..1ea20ad1e 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s @@ -1265,7 +1265,7 @@ ossl_rsaz_amm52x30_x2_avxifma256: vmovdqu %ymm9,192(%rdi) vmovdqu %ymm10,224(%rdi) - xorl %r15d,%r15d + xorl %r9d,%r9d leaq 16(%r11),%r11 movq $0xfffffffffffff,%rax @@ -1735,6 +1735,7 @@ ossl_extract_multiplier_2x30_win5_avx: vmovdqu %ymm5,416(%rdi) vmovdqu %ymm6,448(%rdi) vmovdqu %ymm7,480(%rdi) + vzeroupper .byte 0xf3,0xc3 .cfi_endproc diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s index 5b5a89797..6d59af4af 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s @@ -1316,7 +1316,7 @@ ossl_rsaz_amm52x40_x2_avxifma256: vmovdqu %ymm11,256(%rdi) vmovdqu %ymm12,288(%rdi) - xorl %r15d,%r15d + xorl %r9d,%r9d movq $0xfffffffffffff,%rax @@ -1889,6 +1889,7 @@ ossl_extract_multiplier_2x40_win5_avx: vmovdqu %ymm7,544(%rdi) vmovdqu %ymm8,576(%rdi) vmovdqu %ymm9,608(%rdi) + vzeroupper .byte 0xf3,0xc3 .cfi_endproc diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-gf2m.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-gf2m.s index 4f259df94..b12a9b87b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-gf2m.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-gf2m.s @@ -307,7 +307,7 @@ bn_GF2m_mul_2x2: .Lend_mul_2x2: .cfi_endproc .size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2 -.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 16 .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont.s index f412eee41..bb01e973f 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont.s @@ -1235,7 +1235,7 @@ bn_mulx4x_mont: .byte 0xf3,0xc3 .cfi_endproc .size bn_mulx4x_mont,.-bn_mulx4x_mont -.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 16 .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont5.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont5.s index 1a4502db8..a49c7d0a7 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont5.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/x86_64-mont5.s @@ -3601,7 +3601,7 @@ bn_gather5: .Linc: .long 0,0, 1,1 .long 2,2, 2,2 -.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .previous .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/ec/x25519-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/ec/x25519-x86_64.s index dd5a6efce..f43ebc8b3 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/ec/x25519-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/ec/x25519-x86_64.s @@ -799,7 +799,7 @@ x25519_fe64_tobytes: .byte 0xf3,0xc3 .cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes -.byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/aesni-gcm-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/aesni-gcm-x86_64.s index 4250ede2b..6709953c1 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/aesni-gcm-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/aesni-gcm-x86_64.s @@ -786,7 +786,7 @@ aesni_gcm_encrypt: .byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .Lone_lsb: .byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -.byte 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .previous .align 64 .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/ghash-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/ghash-x86_64.s index 8073c8801..0c03b7f53 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/ghash-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/modes/ghash-x86_64.s @@ -1852,7 +1852,7 @@ gcm_ghash_avx: .value 0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE .value 0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE -.byte 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .previous .section ".note.gnu.property", "a" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/keccak1600-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/keccak1600-x86_64.s index 38397fb46..2af98c104 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/keccak1600-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/keccak1600-x86_64.s @@ -524,7 +524,7 @@ iotas: .quad 0x0000000080000001 .quad 0x8000000080008008 .size iotas,.-iotas -.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-mb-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-mb-x86_64.s index ea33cad5e..d96489bc2 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-mb-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-mb-x86_64.s @@ -7300,7 +7300,7 @@ K_XX_XX: .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f .byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 -.byte 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .previous .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-x86_64.s index f52bb1bbe..4451319fe 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha1-x86_64.s @@ -5448,7 +5448,7 @@ K_XX_XX: .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f .byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 .previous -.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .align 64 .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-mb-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-mb-x86_64.s index 34f57dcc0..9670c8e54 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-mb-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-mb-x86_64.s @@ -7982,7 +7982,7 @@ K256_shaext: .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 -.byte 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .previous .section ".note.gnu.property", "a" .p2align 3 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-x86_64.s index 593e5e1d4..0aae3f930 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha256-x86_64.s @@ -6,22 +6,21 @@ .align 16 sha256_block_data_order: .cfi_startproc - leaq OPENSSL_ia32cap_P(%rip),%r11 - movl 0(%r11),%r9d - movl 4(%r11),%r10d - movl 8(%r11),%r11d + leaq OPENSSL_ia32cap_P(%rip),%r10 + movq 0(%r10),%r9 + movl 8(%r10),%r11d testl $536870912,%r11d jnz _shaext_shortcut andl $296,%r11d cmpl $296,%r11d je .Lavx2_shortcut - andl $1073741824,%r9d - andl $268435968,%r10d - orl %r9d,%r10d - cmpl $1342177792,%r10d +.Lavx_dispatch: + movq $1152923704703844352,%r11 + andq %r11,%r9 + cmpq %r11,%r9 je .Lavx_shortcut - testl $512,%r10d - jnz .Lssse3_shortcut + btq $41,%r9 + jc .Lssse3_shortcut movq %rsp,%rax .cfi_def_cfa_register %rax pushq %rbx @@ -1771,7 +1770,7 @@ K256: .long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 .previous .type sha256_block_data_order_shaext,@function .align 64 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha512-x86_64.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha512-x86_64.s index 5b50ad727..8cc0fa0c2 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha512-x86_64.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sha/sha512-x86_64.s @@ -6,19 +6,23 @@ .align 16 sha512_block_data_order: .cfi_startproc - leaq OPENSSL_ia32cap_P(%rip),%r11 - movl 0(%r11),%r9d - movl 4(%r11),%r10d - movl 8(%r11),%r11d - testl $2048,%r10d - jnz .Lxop_shortcut - andl $296,%r11d - cmpl $296,%r11d + leaq OPENSSL_ia32cap_P(%rip),%r10 + movq 0(%r10),%r9 + movl 8(%r10),%r11d + movl 20(%r10),%r10d + btq $43,%r9 + jc .Lxop_shortcut + testl $32,%r11d + jz .Lavx_dispatch + testl $1,%r10d + jnz .Lsha512ext_shortcut + andl $264,%r11d + cmpl $264,%r11d je .Lavx2_shortcut - andl $1073741824,%r9d - andl $268435968,%r10d - orl %r9d,%r10d - cmpl $1342177792,%r10d +.Lavx_dispatch: + movq $1152923704703844352,%r11 + andq %r11,%r9 + cmpq %r11,%r9 je .Lavx_shortcut movq %rsp,%rax .cfi_def_cfa_register %rax @@ -1813,7 +1817,52 @@ K512: .quad 0x0001020304050607,0x08090a0b0c0d0e0f .quad 0x0001020304050607,0x08090a0b0c0d0e0f -.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 + + +.align 64 +.type K512_single,@object +K512_single: +.quad 0x428a2f98d728ae22, 0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538, 0x59f111f1b605d019 +.quad 0x923f82a4af194f9b, 0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242, 0x12835b0145706fbe +.quad 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f, 0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235, 0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2, 0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275, 0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5 +.quad 0x983e5152ee66dfab, 0xa831c66d2db43210 +.quad 0xb00327c898fb213f, 0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2, 0xd5a79147930aa725 +.quad 0x06ca6351e003826f, 0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc, 0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df +.quad 0x650a73548baf63de, 0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6, 0x92722c851482353b +.quad 0xa2bfe8a14cf10364, 0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791, 0xc76c51a30654be30 +.quad 0xd192e819d6ef5218, 0xd69906245565a910 +.quad 0xf40e35855771202a, 0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8, 0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc, 0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72, 0x8cc702081a6439ec +.quad 0x90befffa23631e28, 0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915, 0xc67178f2e372532b +.quad 0xca273eceea26619c, 0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba, 0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae, 0x1b710b35131c471b +.quad 0x28db77f523047d84, 0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 .previous .type sha512_block_data_order_xop,@function .align 64 @@ -5461,6 +5510,277 @@ sha512_block_data_order_avx2: .byte 0xf3,0xc3 .cfi_endproc .size sha512_block_data_order_avx2,.-sha512_block_data_order_avx2 +.type sha512_block_data_order_sha512ext,@function +.align 64 +sha512_block_data_order_sha512ext: +.cfi_startproc +.byte 243,15,30,250 +.Lsha512ext_shortcut: + orq %rdx,%rdx + je .Lsha512ext_done + + vbroadcasti128 1280+K512(%rip),%ymm15 + + + + + + + + + + + vmovdqu 0(%rdi),%ymm0 + vmovdqu 32(%rdi),%ymm1 + + vperm2i128 $0x20,%ymm1,%ymm0,%ymm2 + vperm2i128 $0x31,%ymm1,%ymm0,%ymm3 + + vpermq $0x1b,%ymm2,%ymm13 + vpermq $0x1b,%ymm3,%ymm14 + + + leaq K512_single(%rip),%r9 + +.align 32 +.Lsha512ext_block_loop: + + vmovdqa %ymm13,%ymm11 + vmovdqa %ymm14,%ymm12 + + + vmovdqu 0(%rsi),%ymm0 + vpshufb %ymm15,%ymm0,%ymm3 + vpaddq 0(%r9),%ymm3,%ymm0 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 + + + vmovdqu 32(%rsi),%ymm0 + vpshufb %ymm15,%ymm0,%ymm4 + vpaddq 32(%r9),%ymm4,%ymm0 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xdc + + + vmovdqu 64(%rsi),%ymm0 + vpshufb %ymm15,%ymm0,%ymm5 + vpaddq 64(%r9),%ymm5,%ymm0 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xe5 + + + vmovdqu 96(%rsi),%ymm0 + vpshufb %ymm15,%ymm0,%ymm6 + vpaddq 96(%r9),%ymm6,%ymm0 + vpermq $0x1b,%ymm6,%ymm8 + vpermq $0x39,%ymm5,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm8 + vpaddq %ymm8,%ymm3,%ymm3 +.byte 0xc4,0xe2,0x7f,0xcd,0xde +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq 128(%r9),%ymm3,%ymm0 + vpermq $0x1b,%ymm3,%ymm8 + vpermq $0x39,%ymm6,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm4,%ymm4 +.byte 0xc4,0xe2,0x7f,0xcd,0xe3 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq 160(%r9),%ymm4,%ymm0 + vpermq $0x1b,%ymm4,%ymm8 + vpermq $0x39,%ymm3,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm5,%ymm5 +.byte 0xc4,0xe2,0x7f,0xcd,0xec +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq 192(%r9),%ymm5,%ymm0 + vpermq $0x1b,%ymm5,%ymm8 + vpermq $0x39,%ymm4,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm6,%ymm6 +.byte 0xc4,0xe2,0x7f,0xcd,0xf5 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq 224(%r9),%ymm6,%ymm0 + vpermq $0x1b,%ymm6,%ymm8 + vpermq $0x39,%ymm5,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm3,%ymm3 +.byte 0xc4,0xe2,0x7f,0xcd,0xde +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq 256(%r9),%ymm3,%ymm0 + vpermq $0x1b,%ymm3,%ymm8 + vpermq $0x39,%ymm6,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm4,%ymm4 +.byte 0xc4,0xe2,0x7f,0xcd,0xe3 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq 288(%r9),%ymm4,%ymm0 + vpermq $0x1b,%ymm4,%ymm8 + vpermq $0x39,%ymm3,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm5,%ymm5 +.byte 0xc4,0xe2,0x7f,0xcd,0xec +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq 320(%r9),%ymm5,%ymm0 + vpermq $0x1b,%ymm5,%ymm8 + vpermq $0x39,%ymm4,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm6,%ymm6 +.byte 0xc4,0xe2,0x7f,0xcd,0xf5 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq 352(%r9),%ymm6,%ymm0 + vpermq $0x1b,%ymm6,%ymm8 + vpermq $0x39,%ymm5,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm3,%ymm3 +.byte 0xc4,0xe2,0x7f,0xcd,0xde +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq 384(%r9),%ymm3,%ymm0 + vpermq $0x1b,%ymm3,%ymm8 + vpermq $0x39,%ymm6,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm4,%ymm4 +.byte 0xc4,0xe2,0x7f,0xcd,0xe3 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq 416(%r9),%ymm4,%ymm0 + vpermq $0x1b,%ymm4,%ymm8 + vpermq $0x39,%ymm3,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm5,%ymm5 +.byte 0xc4,0xe2,0x7f,0xcd,0xec +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq 448(%r9),%ymm5,%ymm0 + vpermq $0x1b,%ymm5,%ymm8 + vpermq $0x39,%ymm4,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm6,%ymm6 +.byte 0xc4,0xe2,0x7f,0xcd,0xf5 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq 480(%r9),%ymm6,%ymm0 + vpermq $0x1b,%ymm6,%ymm8 + vpermq $0x39,%ymm5,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm3,%ymm3 +.byte 0xc4,0xe2,0x7f,0xcd,0xde +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq 512(%r9),%ymm3,%ymm0 + vpermq $0x1b,%ymm3,%ymm8 + vpermq $0x39,%ymm6,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm4,%ymm4 +.byte 0xc4,0xe2,0x7f,0xcd,0xe3 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 +.byte 0xc4,0xe2,0x7f,0xcc,0xf3 + + + vpaddq 544(%r9),%ymm4,%ymm0 + vpermq $0x1b,%ymm4,%ymm8 + vpermq $0x39,%ymm3,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm5,%ymm5 +.byte 0xc4,0xe2,0x7f,0xcd,0xec +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq 576(%r9),%ymm5,%ymm0 + vpermq $0x1b,%ymm5,%ymm8 + vpermq $0x39,%ymm4,%ymm9 + vpblendd $0x3f,%ymm9,%ymm8,%ymm7 + vpaddq %ymm7,%ymm6,%ymm6 +.byte 0xc4,0xe2,0x7f,0xcd,0xf5 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq 608(%r9),%ymm6,%ymm0 +.byte 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 $0x1,%ymm0,%ymm0,%ymm0 +.byte 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq %ymm12,%ymm14,%ymm14 + vpaddq %ymm11,%ymm13,%ymm13 + addq $128,%rsi + decq %rdx + jnz .Lsha512ext_block_loop + + + + + vperm2i128 $0x31,%ymm14,%ymm13,%ymm1 + vperm2i128 $0x20,%ymm14,%ymm13,%ymm2 + vpermq $0xb1,%ymm1,%ymm1 + vpermq $0xb1,%ymm2,%ymm2 + vmovdqu %ymm1,0(%rdi) + vmovdqu %ymm2,32(%rdi) + + vzeroupper +.Lsha512ext_done: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha512_block_data_order_sha512ext,.-sha512_block_data_order_sha512ext .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sm3/sm3-x86_64.S b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sm3/sm3-x86_64.S new file mode 100644 index 000000000..974e99596 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/sm3/sm3-x86_64.S @@ -0,0 +1,272 @@ +.data +.align 16 +SHUFF_MASK: +.byte 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 + +.text + + + + + + + + +.globl ossl_hwsm3_block_data_order +.type ossl_hwsm3_block_data_order,@function +.align 32 +ossl_hwsm3_block_data_order: +.cfi_startproc +.byte 243,15,30,250 + + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-16 +.cfi_def_cfa_register %rbp +.Lossl_hwsm3_block_data_order_seh_setfp: + +.Lossl_hwsm3_block_data_order_seh_prolog_end: + orq %rdx,%rdx + je .done_hash + + + + + vmovdqu (%rdi),%xmm6 + vmovdqu 16(%rdi),%xmm7 + + vpshufd $0x1B,%xmm6,%xmm0 + vpshufd $0x1B,%xmm7,%xmm1 + vpunpckhqdq %xmm0,%xmm1,%xmm6 + vpunpcklqdq %xmm0,%xmm1,%xmm7 + vpsrld $9,%xmm7,%xmm2 + vpslld $23,%xmm7,%xmm3 + vpxor %xmm3,%xmm2,%xmm1 + vpsrld $19,%xmm7,%xmm4 + vpslld $13,%xmm7,%xmm5 + vpxor %xmm5,%xmm4,%xmm0 + + vpblendd $0x3,%xmm0,%xmm1,%xmm7 + + vmovdqa SHUFF_MASK(%rip),%xmm12 + +.align 32 +.block_loop: + vmovdqa %xmm6,%xmm10 + vmovdqa %xmm7,%xmm11 + + + vmovdqu (%rsi),%xmm2 + vmovdqu 16(%rsi),%xmm3 + vmovdqu 32(%rsi),%xmm4 + vmovdqu 48(%rsi),%xmm5 + vpshufb %xmm12,%xmm2,%xmm2 + vpshufb %xmm12,%xmm3,%xmm3 + vpshufb %xmm12,%xmm4,%xmm4 + vpshufb %xmm12,%xmm5,%xmm5 + + vpalignr $12,%xmm3,%xmm4,%xmm8 + vpsrldq $4,%xmm5,%xmm9 + vsm3msg1 %xmm2,%xmm9,%xmm8 + vpalignr $12,%xmm2,%xmm3,%xmm9 + vpalignr $8,%xmm4,%xmm5,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $0,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $2,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm2 + vpalignr $12,%xmm4,%xmm5,%xmm8 + vpsrldq $4,%xmm2,%xmm9 + vsm3msg1 %xmm3,%xmm9,%xmm8 + vpalignr $12,%xmm3,%xmm4,%xmm9 + vpalignr $8,%xmm5,%xmm2,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $4,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $6,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm3 + vpalignr $12,%xmm5,%xmm2,%xmm8 + vpsrldq $4,%xmm3,%xmm9 + vsm3msg1 %xmm4,%xmm9,%xmm8 + vpalignr $12,%xmm4,%xmm5,%xmm9 + vpalignr $8,%xmm2,%xmm3,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $8,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $10,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm4 + vpalignr $12,%xmm2,%xmm3,%xmm8 + vpsrldq $4,%xmm4,%xmm9 + vsm3msg1 %xmm5,%xmm9,%xmm8 + vpalignr $12,%xmm5,%xmm2,%xmm9 + vpalignr $8,%xmm3,%xmm4,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $12,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $14,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm5 + vpalignr $12,%xmm3,%xmm4,%xmm8 + vpsrldq $4,%xmm5,%xmm9 + vsm3msg1 %xmm2,%xmm9,%xmm8 + vpalignr $12,%xmm2,%xmm3,%xmm9 + vpalignr $8,%xmm4,%xmm5,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $16,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $18,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm2 + vpalignr $12,%xmm4,%xmm5,%xmm8 + vpsrldq $4,%xmm2,%xmm9 + vsm3msg1 %xmm3,%xmm9,%xmm8 + vpalignr $12,%xmm3,%xmm4,%xmm9 + vpalignr $8,%xmm5,%xmm2,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $20,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $22,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm3 + vpalignr $12,%xmm5,%xmm2,%xmm8 + vpsrldq $4,%xmm3,%xmm9 + vsm3msg1 %xmm4,%xmm9,%xmm8 + vpalignr $12,%xmm4,%xmm5,%xmm9 + vpalignr $8,%xmm2,%xmm3,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $24,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $26,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm4 + vpalignr $12,%xmm2,%xmm3,%xmm8 + vpsrldq $4,%xmm4,%xmm9 + vsm3msg1 %xmm5,%xmm9,%xmm8 + vpalignr $12,%xmm5,%xmm2,%xmm9 + vpalignr $8,%xmm3,%xmm4,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $28,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $30,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm5 + vpalignr $12,%xmm3,%xmm4,%xmm8 + vpsrldq $4,%xmm5,%xmm9 + vsm3msg1 %xmm2,%xmm9,%xmm8 + vpalignr $12,%xmm2,%xmm3,%xmm9 + vpalignr $8,%xmm4,%xmm5,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $32,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $34,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm2 + vpalignr $12,%xmm4,%xmm5,%xmm8 + vpsrldq $4,%xmm2,%xmm9 + vsm3msg1 %xmm3,%xmm9,%xmm8 + vpalignr $12,%xmm3,%xmm4,%xmm9 + vpalignr $8,%xmm5,%xmm2,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $36,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $38,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm3 + vpalignr $12,%xmm5,%xmm2,%xmm8 + vpsrldq $4,%xmm3,%xmm9 + vsm3msg1 %xmm4,%xmm9,%xmm8 + vpalignr $12,%xmm4,%xmm5,%xmm9 + vpalignr $8,%xmm2,%xmm3,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $40,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $42,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm4 + vpalignr $12,%xmm2,%xmm3,%xmm8 + vpsrldq $4,%xmm4,%xmm9 + vsm3msg1 %xmm5,%xmm9,%xmm8 + vpalignr $12,%xmm5,%xmm2,%xmm9 + vpalignr $8,%xmm3,%xmm4,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $44,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $46,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm5 + vpalignr $12,%xmm3,%xmm4,%xmm8 + vpsrldq $4,%xmm5,%xmm9 + vsm3msg1 %xmm2,%xmm9,%xmm8 + vpalignr $12,%xmm2,%xmm3,%xmm9 + vpalignr $8,%xmm4,%xmm5,%xmm1 + vsm3msg2 %xmm1,%xmm9,%xmm8 + vpunpcklqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $48,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm3,%xmm2,%xmm1 + vsm3rnds2 $50,%xmm1,%xmm7,%xmm6 + vmovdqa %xmm8,%xmm2 + vpunpcklqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $52,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm4,%xmm3,%xmm1 + vsm3rnds2 $54,%xmm1,%xmm7,%xmm6 + vpunpcklqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $56,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm5,%xmm4,%xmm1 + vsm3rnds2 $58,%xmm1,%xmm7,%xmm6 + vpunpcklqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $60,%xmm1,%xmm6,%xmm7 + vpunpckhqdq %xmm2,%xmm5,%xmm1 + vsm3rnds2 $62,%xmm1,%xmm7,%xmm6 + + vpxor %xmm10,%xmm6,%xmm6 + vpxor %xmm11,%xmm7,%xmm7 + addq $64,%rsi + decq %rdx + jnz .block_loop + + + vpslld $9,%xmm7,%xmm2 + vpsrld $23,%xmm7,%xmm3 + vpxor %xmm3,%xmm2,%xmm1 + vpslld $19,%xmm7,%xmm4 + vpsrld $13,%xmm7,%xmm5 + vpxor %xmm5,%xmm4,%xmm0 + vpblendd $0x3,%xmm0,%xmm1,%xmm7 + vpshufd $0x1B,%xmm6,%xmm0 + vpshufd $0x1B,%xmm7,%xmm1 + + vpunpcklqdq %xmm1,%xmm0,%xmm6 + vpunpckhqdq %xmm1,%xmm0,%xmm7 + + vmovdqu %xmm6,(%rdi) + vmovdqu %xmm7,16(%rdi) +.done_hash: + + popq %rbp +.cfi_restore %rbp + .byte 0xf3,0xc3 +.cfi_endproc + .section ".note.gnu.property", "a" + .p2align 3 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + # "GNU" encoded with .byte, since .asciz isn't supported + # on Solaris. + .byte 0x47 + .byte 0x4e + .byte 0x55 + .byte 0 +1: + .p2align 3 + .long 0xc0000002 + .long 3f - 2f +2: + .long 3 +3: + .p2align 3 +4: diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/x86_64cpuid.s b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/x86_64cpuid.s index 4fb26cc6e..bc7583263 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/x86_64cpuid.s +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/x86_64cpuid.s @@ -1,9 +1,6 @@ .hidden OPENSSL_cpuid_setup -.section .init - call OPENSSL_cpuid_setup - .hidden OPENSSL_ia32cap_P .comm OPENSSL_ia32cap_P,40,4 .text @@ -308,40 +305,6 @@ CRYPTO_memcmp: .byte 0xf3,0xc3 .cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp -.globl OPENSSL_wipe_cpu -.type OPENSSL_wipe_cpu,@function -.align 16 -OPENSSL_wipe_cpu: -.cfi_startproc -.byte 243,15,30,250 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 - pxor %xmm10,%xmm10 - pxor %xmm11,%xmm11 - pxor %xmm12,%xmm12 - pxor %xmm13,%xmm13 - pxor %xmm14,%xmm14 - pxor %xmm15,%xmm15 - xorq %rcx,%rcx - xorq %rdx,%rdx - xorq %rsi,%rsi - xorq %rdi,%rdi - xorq %r8,%r8 - xorq %r9,%r9 - xorq %r10,%r10 - xorq %r11,%r11 - leaq 8(%rsp),%rax - .byte 0xf3,0xc3 -.cfi_endproc -.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm new file mode 100644 index 000000000..5262faa91 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm @@ -0,0 +1,784 @@ +default rel +%define XMMWORD +%define YMMWORD +%define ZMMWORD +section .text code align=64 + +EXTERN OPENSSL_ia32cap_P + + + + + + + + + + + + +global ossl_aes_cfb128_vaes_eligible + + + +ossl_aes_cfb128_vaes_eligible: + +DB 243,15,30,250 + + mov ecx,DWORD[((OPENSSL_ia32cap_P+8))] + xor eax,eax + + + + + and ecx,0x40030000 + cmp ecx,0x40030000 + jne NEAR $L$aes_cfb128_vaes_eligible_done + + mov ecx,DWORD[((OPENSSL_ia32cap_P+12))] + + + + + and ecx,0x200 + cmp ecx,0x200 + cmove eax,ecx + +$L$aes_cfb128_vaes_eligible_done: + DB 0F3h,0C3h ;repret + + +global ossl_aes_cfb128_vaes_enc + + +ossl_aes_cfb128_vaes_enc: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ossl_aes_cfb128_vaes_enc: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + +DB 243,15,30,250 + + mov r11,QWORD[r9] + + + test rdx,rdx + jz NEAR $L$aes_cfb128_vaes_enc_done + + test r11,r11 + jz NEAR $L$aes_cfb128_enc_mid + + + + + + mov r10,rcx + + mov rcx,0x10 + sub rcx,r11 + cmp rcx,rdx + cmova rcx,rdx + + mov rax,1 + shl rax,cl + dec rax + kmovq k1,rax + + mov rax,r11 + add rax,rcx + and al,0x0F + + lea r11,[r8*1+r11] + vmovdqu8 xmm0,XMMWORD[r11] + vmovdqu8 xmm1,XMMWORD[rdi] + vpxor xmm2,xmm1,xmm0 + vmovdqu8 XMMWORD[rsi]{k1},xmm2 + vmovdqu8 XMMWORD[r11]{k1},xmm2 + + add rdi,rcx + add rsi,rcx + sub rdx,rcx + jz NEAR $L$aes_cfb128_enc_zero_pre + + mov rcx,r10 + +$L$aes_cfb128_enc_mid: + vmovdqu8 xmm17,XMMWORD[rcx] + vmovdqu8 xmm18,XMMWORD[16+rcx] + vmovdqu8 xmm19,XMMWORD[32+rcx] + vmovdqu8 xmm20,XMMWORD[48+rcx] + vmovdqu8 xmm21,XMMWORD[64+rcx] + vmovdqu8 xmm22,XMMWORD[80+rcx] + vmovdqu8 xmm23,XMMWORD[96+rcx] + vmovdqu8 xmm24,XMMWORD[112+rcx] + vmovdqu8 xmm25,XMMWORD[128+rcx] + vmovdqu8 xmm26,XMMWORD[144+rcx] + vmovdqu8 xmm27,XMMWORD[160+rcx] + vmovdqu8 xmm28,XMMWORD[176+rcx] + vmovdqu8 xmm29,XMMWORD[192+rcx] + vmovdqu8 xmm30,XMMWORD[208+rcx] + vmovdqu8 xmm31,XMMWORD[224+rcx] + + mov r11d,DWORD[240+rcx] + + + + + + vmovdqu xmm2,XMMWORD[r8] + + cmp rdx,0x10 + jb NEAR $L$aes_cfb128_enc_post + + +$L$oop_aes_cfb128_enc_main: + sub rdx,0x10 + + vmovdqu xmm3,XMMWORD[rdi] + lea rdi,[16+rdi] + vpxord xmm2,xmm2,xmm17 + vaesenc xmm2,xmm2,xmm18 + vaesenc xmm2,xmm2,xmm19 + vaesenc xmm2,xmm2,xmm20 + vaesenc xmm2,xmm2,xmm21 + vaesenc xmm2,xmm2,xmm22 + vaesenc xmm2,xmm2,xmm23 + vaesenc xmm2,xmm2,xmm24 + vaesenc xmm2,xmm2,xmm25 + vaesenc xmm2,xmm2,xmm26 + + cmp r11d,0x09 + ja NEAR $L$aes_cfb128_enc_mid_192_256 + + vaesenclast xmm2,xmm2,xmm27 + jmp NEAR $L$aes_cfb128_enc_mid_end + + +$L$aes_cfb128_enc_mid_192_256: + + vaesenc xmm2,xmm2,xmm27 + vaesenc xmm2,xmm2,xmm28 + + cmp r11d,0x0B + ja NEAR $L$aes_cfb128_enc_mid_256 + + vaesenclast xmm2,xmm2,xmm29 + jmp NEAR $L$aes_cfb128_enc_mid_end + + +$L$aes_cfb128_enc_mid_256: + + vaesenc xmm2,xmm2,xmm29 + vaesenc xmm2,xmm2,xmm30 + vaesenclast xmm2,xmm2,xmm31 + + +$L$aes_cfb128_enc_mid_end: + + vpxor xmm2,xmm2,xmm3 + cmp rdx,0x10 + vmovdqu XMMWORD[rsi],xmm2 + lea rsi,[16+rsi] + jae NEAR $L$oop_aes_cfb128_enc_main + + xor eax,eax + + vmovdqu XMMWORD[r8],xmm2 + +$L$aes_cfb128_enc_post: + + + + + + test rdx,rdx + jz NEAR $L$aes_cfb128_enc_zero_all + vpxord xmm2,xmm2,xmm17 + vaesenc xmm2,xmm2,xmm18 + vaesenc xmm2,xmm2,xmm19 + vaesenc xmm2,xmm2,xmm20 + vaesenc xmm2,xmm2,xmm21 + vaesenc xmm2,xmm2,xmm22 + vaesenc xmm2,xmm2,xmm23 + vaesenc xmm2,xmm2,xmm24 + vaesenc xmm2,xmm2,xmm25 + vaesenc xmm2,xmm2,xmm26 + + cmp r11d,0x09 + ja NEAR $L$aes_cfb128_enc_post_192_256 + + vaesenclast xmm2,xmm2,xmm27 + jmp NEAR $L$aes_cfb128_enc_post_end + + +$L$aes_cfb128_enc_post_192_256: + + vaesenc xmm2,xmm2,xmm27 + vaesenc xmm2,xmm2,xmm28 + + cmp r11d,0x0B + ja NEAR $L$aes_cfb128_enc_post_256 + + vaesenclast xmm2,xmm2,xmm29 + jmp NEAR $L$aes_cfb128_enc_post_end + + +$L$aes_cfb128_enc_post_256: + + vaesenc xmm2,xmm2,xmm29 + vaesenc xmm2,xmm2,xmm30 + vaesenclast xmm2,xmm2,xmm31 + + +$L$aes_cfb128_enc_post_end: + + mov rax,rdx + + mov r11,1 + mov cl,dl + shl r11,cl + dec r11 + kmovq k1,r11 + + vmovdqu8 xmm1{k1}{z},[rdi] + vpxor xmm0,xmm1,xmm2 + vmovdqu8 XMMWORD[rsi]{k1},xmm0 + vmovdqu8 XMMWORD[r8],xmm0 + + + +$L$aes_cfb128_enc_zero_all: + vpxord xmm17,xmm17,xmm17 + vpxord xmm18,xmm18,xmm18 + vpxord xmm19,xmm19,xmm19 + vpxord xmm20,xmm20,xmm20 + vpxord xmm21,xmm21,xmm21 + vpxord xmm22,xmm22,xmm22 + vpxord xmm23,xmm23,xmm23 + vpxord xmm24,xmm24,xmm24 + vpxord xmm25,xmm25,xmm25 + vpxord xmm26,xmm26,xmm26 + vpxord xmm27,xmm27,xmm27 + vpxord xmm28,xmm28,xmm28 + vpxord xmm29,xmm29,xmm29 + vpxord xmm30,xmm30,xmm30 + vpxord xmm31,xmm31,xmm31 + + vpxor xmm3,xmm3,xmm3 + +$L$aes_cfb128_enc_zero_pre: + vpxor xmm0,xmm0,xmm0 + vpxor xmm1,xmm1,xmm1 + vpxor xmm2,xmm2,xmm2 + + mov QWORD[r9],rax + + vzeroupper + +$L$aes_cfb128_vaes_enc_done: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ossl_aes_cfb128_vaes_enc: +global ossl_aes_cfb128_vaes_dec + + +ossl_aes_cfb128_vaes_dec: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ossl_aes_cfb128_vaes_dec: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + +DB 243,15,30,250 + + mov r11,QWORD[r9] + + + test rdx,rdx + jz NEAR $L$aes_cfb128_vaes_dec_done + sub rsp,0x10 + + vmovdqu XMMWORD[rsp],xmm6 + test r11,r11 + jz NEAR $L$aes_cfb128_dec_mid + + + + + + mov r10,rcx + + mov rcx,0x10 + sub rcx,r11 + cmp rcx,rdx + cmova rcx,rdx + + mov rax,1 + shl rax,cl + dec rax + kmovq k1,rax + + lea rax,[rcx*1+r11] + and al,0x0F + + lea r11,[r8*1+r11] + vmovdqu8 xmm0,XMMWORD[r11] + vmovdqu8 xmm1,XMMWORD[rdi] + vpxor xmm2,xmm1,xmm0 + vmovdqu8 XMMWORD[rsi]{k1},xmm2 + vmovdqu8 XMMWORD[r11]{k1},xmm1 + + add rdi,rcx + add rsi,rcx + sub rdx,rcx + jz NEAR $L$aes_cfb128_dec_zero_pre + + mov rcx,r10 + +$L$aes_cfb128_dec_mid: + vbroadcasti32x4 zmm17,XMMWORD[rcx] + vbroadcasti32x4 zmm18,XMMWORD[16+rcx] + vbroadcasti32x4 zmm19,XMMWORD[32+rcx] + vbroadcasti32x4 zmm20,XMMWORD[48+rcx] + vbroadcasti32x4 zmm21,XMMWORD[64+rcx] + vbroadcasti32x4 zmm22,XMMWORD[80+rcx] + vbroadcasti32x4 zmm23,XMMWORD[96+rcx] + vbroadcasti32x4 zmm24,XMMWORD[112+rcx] + vbroadcasti32x4 zmm25,XMMWORD[128+rcx] + vbroadcasti32x4 zmm26,XMMWORD[144+rcx] + vbroadcasti32x4 zmm27,XMMWORD[160+rcx] + vbroadcasti32x4 zmm28,XMMWORD[176+rcx] + vbroadcasti32x4 zmm29,XMMWORD[192+rcx] + vbroadcasti32x4 zmm30,XMMWORD[208+rcx] + vbroadcasti32x4 zmm31,XMMWORD[224+rcx] + + mov r11d,DWORD[240+rcx] + + + + + + + vbroadcasti32x4 zmm2,XMMWORD[r8] + + cmp rdx,0x100 + jb NEAR $L$aes_cfb128_dec_check_4x + + + + + + + +$L$oop_aes_cfb128_dec_mid_16x: + sub rdx,0x100 + + + + + vmovdqu32 zmm3,ZMMWORD[rdi] + + vmovdqu32 zmm5,ZMMWORD[64+rdi] + + vmovdqu32 zmm1,ZMMWORD[128+rdi] + + vmovdqu32 zmm16,ZMMWORD[192+rdi] + + + valignq zmm2,zmm3,zmm2,6 + + valignq zmm4,zmm5,zmm3,6 + + valignq zmm0,zmm1,zmm5,6 + + valignq zmm6,zmm16,zmm1,6 + + lea rdi,[256+rdi] + vpxord zmm2,zmm2,zmm17 + vpxord zmm4,zmm4,zmm17 + vpxord zmm0,zmm0,zmm17 + vpxord zmm6,zmm6,zmm17 + + vaesenc zmm2,zmm2,zmm18 + vaesenc zmm4,zmm4,zmm18 + vaesenc zmm0,zmm0,zmm18 + vaesenc zmm6,zmm6,zmm18 + + vaesenc zmm2,zmm2,zmm19 + vaesenc zmm4,zmm4,zmm19 + vaesenc zmm0,zmm0,zmm19 + vaesenc zmm6,zmm6,zmm19 + + vaesenc zmm2,zmm2,zmm20 + vaesenc zmm4,zmm4,zmm20 + vaesenc zmm0,zmm0,zmm20 + vaesenc zmm6,zmm6,zmm20 + + vaesenc zmm2,zmm2,zmm21 + vaesenc zmm4,zmm4,zmm21 + vaesenc zmm0,zmm0,zmm21 + vaesenc zmm6,zmm6,zmm21 + + vaesenc zmm2,zmm2,zmm22 + vaesenc zmm4,zmm4,zmm22 + vaesenc zmm0,zmm0,zmm22 + vaesenc zmm6,zmm6,zmm22 + + vaesenc zmm2,zmm2,zmm23 + vaesenc zmm4,zmm4,zmm23 + vaesenc zmm0,zmm0,zmm23 + vaesenc zmm6,zmm6,zmm23 + + vaesenc zmm2,zmm2,zmm24 + vaesenc zmm4,zmm4,zmm24 + vaesenc zmm0,zmm0,zmm24 + vaesenc zmm6,zmm6,zmm24 + + vaesenc zmm2,zmm2,zmm25 + vaesenc zmm4,zmm4,zmm25 + vaesenc zmm0,zmm0,zmm25 + vaesenc zmm6,zmm6,zmm25 + + vaesenc zmm2,zmm2,zmm26 + vaesenc zmm4,zmm4,zmm26 + vaesenc zmm0,zmm0,zmm26 + vaesenc zmm6,zmm6,zmm26 + + cmp r11d,0x09 + ja NEAR $L$aes_cfb128_dec_mid_16x_192_256 + + vaesenclast zmm2,zmm2,zmm27 + vaesenclast zmm4,zmm4,zmm27 + vaesenclast zmm0,zmm0,zmm27 + vaesenclast zmm6,zmm6,zmm27 + jmp NEAR $L$aes_cfb128_dec_mid_16x_end + + +$L$aes_cfb128_dec_mid_16x_192_256: + + vaesenc zmm2,zmm2,zmm27 + vaesenc zmm4,zmm4,zmm27 + vaesenc zmm0,zmm0,zmm27 + vaesenc zmm6,zmm6,zmm27 + + vaesenc zmm2,zmm2,zmm28 + vaesenc zmm4,zmm4,zmm28 + vaesenc zmm0,zmm0,zmm28 + vaesenc zmm6,zmm6,zmm28 + + cmp r11d,0x0B + ja NEAR $L$aes_cfb128_dec_mid_16x_256 + + vaesenclast zmm2,zmm2,zmm29 + vaesenclast zmm4,zmm4,zmm29 + vaesenclast zmm0,zmm0,zmm29 + vaesenclast zmm6,zmm6,zmm29 + jmp NEAR $L$aes_cfb128_dec_mid_16x_end + + +$L$aes_cfb128_dec_mid_16x_256: + + vaesenc zmm2,zmm2,zmm29 + vaesenc zmm4,zmm4,zmm29 + vaesenc zmm0,zmm0,zmm29 + vaesenc zmm6,zmm6,zmm29 + + vaesenc zmm2,zmm2,zmm30 + vaesenc zmm4,zmm4,zmm30 + vaesenc zmm0,zmm0,zmm30 + vaesenc zmm6,zmm6,zmm30 + + vaesenclast zmm2,zmm2,zmm31 + vaesenclast zmm4,zmm4,zmm31 + vaesenclast zmm0,zmm0,zmm31 + vaesenclast zmm6,zmm6,zmm31 + + +$L$aes_cfb128_dec_mid_16x_end: + + vpxord zmm2,zmm2,zmm3 + vpxord zmm4,zmm4,zmm5 + vpxord zmm0,zmm0,zmm1 + vpxord zmm6,zmm6,zmm16 + + cmp rdx,0x100 + + vmovdqu32 ZMMWORD[rsi],zmm2 + vmovdqu32 ZMMWORD[64+rsi],zmm4 + vmovdqu32 ZMMWORD[128+rsi],zmm0 + vmovdqu32 ZMMWORD[192+rsi],zmm6 + + vmovdqu8 zmm2,zmm16 + + lea rsi,[256+rsi] + + jae NEAR $L$oop_aes_cfb128_dec_mid_16x + + vextracti64x2 xmm2,zmm16,3 + vinserti32x4 zmm2,zmm2,xmm2,3 + + xor eax,eax + + vmovdqu XMMWORD[r8],xmm2 + +$L$aes_cfb128_dec_check_4x: + cmp rdx,0x40 + jb NEAR $L$aes_cfb128_dec_check_1x + + + + + + + + + +$L$oop_aes_cfb128_dec_mid_4x: + sub rdx,0x40 + + + vmovdqu32 zmm3,ZMMWORD[rdi] + + + valignq zmm2,zmm3,zmm2,6 + + lea rdi,[64+rdi] + vpxord zmm2,zmm2,zmm17 + vaesenc zmm2,zmm2,zmm18 + vaesenc zmm2,zmm2,zmm19 + vaesenc zmm2,zmm2,zmm20 + vaesenc zmm2,zmm2,zmm21 + vaesenc zmm2,zmm2,zmm22 + vaesenc zmm2,zmm2,zmm23 + vaesenc zmm2,zmm2,zmm24 + vaesenc zmm2,zmm2,zmm25 + vaesenc zmm2,zmm2,zmm26 + + cmp r11d,0x09 + ja NEAR $L$aes_cfb128_dec_mid_4x_192_256 + + vaesenclast zmm2,zmm2,zmm27 + jmp NEAR $L$aes_cfb128_dec_mid_4x_end + + +$L$aes_cfb128_dec_mid_4x_192_256: + + vaesenc zmm2,zmm2,zmm27 + vaesenc zmm2,zmm2,zmm28 + + cmp r11d,0x0B + ja NEAR $L$aes_cfb128_dec_mid_4x_256 + + vaesenclast zmm2,zmm2,zmm29 + jmp NEAR $L$aes_cfb128_dec_mid_4x_end + + +$L$aes_cfb128_dec_mid_4x_256: + + vaesenc zmm2,zmm2,zmm29 + vaesenc zmm2,zmm2,zmm30 + vaesenclast zmm2,zmm2,zmm31 + + +$L$aes_cfb128_dec_mid_4x_end: + vpxord zmm2,zmm2,zmm3 + cmp rdx,0x40 + vmovdqu32 ZMMWORD[rsi],zmm2 + vmovdqu8 zmm2,zmm3 + lea rsi,[64+rsi] + + jae NEAR $L$oop_aes_cfb128_dec_mid_4x + + vextracti64x2 xmm2,zmm2,3 + + + xor eax,eax + + vmovdqu XMMWORD[r8],xmm2 + +$L$aes_cfb128_dec_check_1x: + cmp rdx,0x10 + jb NEAR $L$aes_cfb128_dec_post + + + + + + + + +$L$oop_aes_cfb128_dec_mid_1x: + sub rdx,0x10 + + vmovdqu xmm3,XMMWORD[rdi] + lea rdi,[16+rdi] + vpxord xmm2,xmm2,xmm17 + vaesenc xmm2,xmm2,xmm18 + vaesenc xmm2,xmm2,xmm19 + vaesenc xmm2,xmm2,xmm20 + vaesenc xmm2,xmm2,xmm21 + vaesenc xmm2,xmm2,xmm22 + vaesenc xmm2,xmm2,xmm23 + vaesenc xmm2,xmm2,xmm24 + vaesenc xmm2,xmm2,xmm25 + vaesenc xmm2,xmm2,xmm26 + + cmp r11d,0x09 + ja NEAR $L$oop_aes_cfb128_dec_mid_1x_inner_192_256 + + vaesenclast xmm2,xmm2,xmm27 + jmp NEAR $L$oop_aes_cfb128_dec_mid_1x_inner_end + + +$L$oop_aes_cfb128_dec_mid_1x_inner_192_256: + + vaesenc xmm2,xmm2,xmm27 + vaesenc xmm2,xmm2,xmm28 + + cmp r11d,0x0B + ja NEAR $L$oop_aes_cfb128_dec_mid_1x_inner_256 + + vaesenclast xmm2,xmm2,xmm29 + jmp NEAR $L$oop_aes_cfb128_dec_mid_1x_inner_end + + +$L$oop_aes_cfb128_dec_mid_1x_inner_256: + + vaesenc xmm2,xmm2,xmm29 + vaesenc xmm2,xmm2,xmm30 + vaesenclast xmm2,xmm2,xmm31 + + +$L$oop_aes_cfb128_dec_mid_1x_inner_end: + vpxor xmm2,xmm2,xmm3 + cmp rdx,0x10 + vmovdqu XMMWORD[rsi],xmm2 + vmovdqu8 xmm2,xmm3 + lea rsi,[16+rsi] + jae NEAR $L$oop_aes_cfb128_dec_mid_1x + + xor eax,eax + + vmovdqu XMMWORD[r8],xmm2 + +$L$aes_cfb128_dec_post: + + + + + + test rdx,rdx + jz NEAR $L$aes_cfb128_dec_zero_all + vpxord xmm2,xmm2,xmm17 + vaesenc xmm2,xmm2,xmm18 + vaesenc xmm2,xmm2,xmm19 + vaesenc xmm2,xmm2,xmm20 + vaesenc xmm2,xmm2,xmm21 + vaesenc xmm2,xmm2,xmm22 + vaesenc xmm2,xmm2,xmm23 + vaesenc xmm2,xmm2,xmm24 + vaesenc xmm2,xmm2,xmm25 + vaesenc xmm2,xmm2,xmm26 + + cmp r11d,0x09 + ja NEAR $L$oop_aes_cfb128_dec_post_192_256 + + vaesenclast xmm2,xmm2,xmm27 + jmp NEAR $L$oop_aes_cfb128_dec_post_end + + +$L$oop_aes_cfb128_dec_post_192_256: + + vaesenc xmm2,xmm2,xmm27 + vaesenc xmm2,xmm2,xmm28 + + cmp r11d,0x0B + ja NEAR $L$oop_aes_cfb128_dec_post_256 + + vaesenclast xmm2,xmm2,xmm29 + jmp NEAR $L$oop_aes_cfb128_dec_post_end + + +$L$oop_aes_cfb128_dec_post_256: + + vaesenc xmm2,xmm2,xmm29 + vaesenc xmm2,xmm2,xmm30 + vaesenclast xmm2,xmm2,xmm31 + + +$L$oop_aes_cfb128_dec_post_end: + + mov rax,rdx + mov r11,1 + mov cl,dl + shl r11,cl + dec r11 + kmovq k1,r11 + + vmovdqu8 xmm1{k1}{z},[rdi] + vpxor xmm0,xmm1,xmm2 + vmovdqu8 XMMWORD[rsi]{k1},xmm0 + vpblendmb xmm2{k1},xmm2,xmm1 + + vmovdqu8 XMMWORD[r8],xmm2 + + + +$L$aes_cfb128_dec_zero_all: + vpxord xmm17,xmm17,xmm17 + vpxord xmm18,xmm18,xmm18 + vpxord xmm19,xmm19,xmm19 + vpxord xmm20,xmm20,xmm20 + vpxord xmm21,xmm21,xmm21 + vpxord xmm22,xmm22,xmm22 + vpxord xmm23,xmm23,xmm23 + vpxord xmm24,xmm24,xmm24 + vpxord xmm25,xmm25,xmm25 + vpxord xmm26,xmm26,xmm26 + vpxord xmm27,xmm27,xmm27 + vpxord xmm28,xmm28,xmm28 + vpxord xmm29,xmm29,xmm29 + vpxord xmm30,xmm30,xmm30 + vpxord xmm31,xmm31,xmm31 + + vpxord xmm3,xmm3,xmm3 + vpxord xmm4,xmm4,xmm4 + vpxord xmm5,xmm5,xmm5 + vpxord xmm6,xmm6,xmm6 + vpxord xmm16,xmm16,xmm16 + +$L$aes_cfb128_dec_zero_pre: + + vpxord xmm0,xmm0,xmm0 + vpxord xmm1,xmm1,xmm1 + vpxord xmm2,xmm2,xmm2 + + vzeroupper + vmovdqu xmm6,XMMWORD[rsp] + add rsp,16 + + mov QWORD[r9],rax + +$L$aes_cfb128_vaes_dec_done: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_ossl_aes_cfb128_vaes_dec: diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-x86_64.nasm index 5f32da6b1..bffae6ef6 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aes-x86_64.nasm @@ -2701,9 +2701,9 @@ DB 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d DD 0x80808080,0x80808080,0xfefefefe,0xfefefefe DD 0x1b1b1b1b,0x1b1b1b1b,0,0 DB 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32 -DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -DB 62,0 +DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,104 +DB 116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111 +DB 109,47,100,111,116,45,97,115,109,62,0 ALIGN 64 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm index b25ef3f18..94966583c 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm @@ -2794,8 +2794,8 @@ DB 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 DB 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115 DB 116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52 DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32 -DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111 -DB 114,103,62,0 +DB 60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46 +DB 99,111,109,47,100,111,116,45,97,115,109,62,0 ALIGN 64 section .text diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha256-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha256-x86_64.nasm index a30d38b5b..fe59b6227 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha256-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-sha256-x86_64.nasm @@ -83,8 +83,8 @@ K256: DB 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54 DB 32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95 DB 54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98 -DB 121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108 -DB 46,111,114,103,62,0 +DB 121,32,60,104,116,116,112,115,58,47,47,103,105,116,104,117 +DB 98,46,99,111,109,47,100,111,116,45,97,115,109,62,0 ALIGN 64 section .text diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-x86_64.nasm index 55fb980c9..ef96ad34a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-x86_64.nasm @@ -4785,8 +4785,9 @@ $L$key_rcon1b: DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 -DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 -DB 115,108,46,111,114,103,62,0 +DB 32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116 +DB 104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62 +DB 0 ALIGN 64 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-xts-avx512.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-xts-avx512.nasm index cf6644f9e..83de40490 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-xts-avx512.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/aes/aesni-xts-avx512.nasm @@ -111,53 +111,53 @@ $L$_remaining_num_blocks_is_7_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 zmm2{k1},[64+rdi] add rdi,0x70 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -175,53 +175,53 @@ $L$_remaining_num_blocks_is_6_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 ymm2,YMMWORD[64+rdi] add rdi,0x60 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -239,53 +239,53 @@ $L$_remaining_num_blocks_is_5_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu xmm2,XMMWORD[64+rdi] add rdi,0x50 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -302,27 +302,27 @@ $L$_remaining_num_blocks_is_5_hEgxyDlCngwrfFe: $L$_remaining_num_blocks_is_4_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] add rdi,0x40 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi],zmm1 @@ -338,27 +338,27 @@ $L$_remaining_num_blocks_is_3_hEgxyDlCngwrfFe: kmovq k1,r8 vmovdqu8 zmm1{k1},[rdi] add rdi,0x30 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi]{k1},zmm1 @@ -371,27 +371,27 @@ $L$_remaining_num_blocks_is_3_hEgxyDlCngwrfFe: $L$_remaining_num_blocks_is_2_hEgxyDlCngwrfFe: vmovdqu8 ymm1,YMMWORD[rdi] add rdi,0x20 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu YMMWORD[rsi],ymm1 @@ -427,8 +427,8 @@ $L$_remaining_num_blocks_is_1_hEgxyDlCngwrfFe: $L$_start_by16_hEgxyDlCngwrfFe: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 vpshufb zmm1,zmm0,zmm8 @@ -461,7 +461,7 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: vpxorq zmm2,zmm2,zmm10 vpxorq zmm3,zmm3,zmm11 vpxorq zmm4,zmm4,zmm12 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpxorq zmm3,zmm3,zmm0 @@ -470,17 +470,17 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm11,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -489,17 +489,17 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm16,zmm12,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -508,17 +508,17 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm17,zmm15,0x1 vpxord zmm17,zmm17,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -527,7 +527,7 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm18,zmm16,0x1 vpxord zmm18,zmm18,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vaesenclast zmm3,zmm3,zmm0 @@ -555,8 +555,8 @@ $L$_main_loop_run_16_hEgxyDlCngwrfFe: jmp NEAR $L$_do_n_blocks_hEgxyDlCngwrfFe $L$_start_by8_hEgxyDlCngwrfFe: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 vpshufb zmm1,zmm0,zmm8 @@ -575,24 +575,24 @@ $L$_main_loop_run_8_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 zmm2,ZMMWORD[64+rdi] add rdi,0x80 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 vpsrldq zmm13,zmm9,0xf vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm9,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vpsrldq zmm13,zmm10,0xf @@ -600,36 +600,36 @@ $L$_main_loop_run_8_hEgxyDlCngwrfFe: vpslldq zmm16,zmm10,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -717,8 +717,8 @@ $L$_less_than_128_bytes_hEgxyDlCngwrfFe: vpbroadcastq zmm25,r10 cmp rdx,0x10 jb NEAR $L$_ret_hEgxyDlCngwrfFe - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8d,0xaa kmovq k2,r8 mov r8,rdx @@ -754,53 +754,53 @@ $L$_num_blocks_is_7_hEgxyDlCngwrfFe: vmovdqu8 zmm2{k1},[64+rdi] add rdi,0x70 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -828,53 +828,53 @@ $L$_num_blocks_is_6_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 ymm2,YMMWORD[64+rdi] add rdi,96 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -903,53 +903,53 @@ $L$_num_blocks_is_5_hEgxyDlCngwrfFe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 xmm2,XMMWORD[64+rdi] add rdi,80 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -977,27 +977,27 @@ $L$_num_blocks_is_4_hEgxyDlCngwrfFe: vpxord zmm10,zmm7,zmm5 vmovdqu8 zmm1,ZMMWORD[rdi] add rdi,64 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi],zmm1 @@ -1018,27 +1018,27 @@ $L$_num_blocks_is_3_hEgxyDlCngwrfFe: kmovq k1,r8 vmovdqu8 zmm1{k1},[rdi] add rdi,48 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi]{k1},zmm1 @@ -1058,27 +1058,27 @@ $L$_num_blocks_is_2_hEgxyDlCngwrfFe: vmovdqu8 ymm1,YMMWORD[rdi] add rdi,32 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu8 YMMWORD[rsi],ymm1 @@ -1099,27 +1099,27 @@ $L$_num_blocks_is_1_hEgxyDlCngwrfFe: vmovdqu8 xmm1,XMMWORD[rdi] add rdi,16 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu8 XMMWORD[rsi],xmm1 @@ -1269,54 +1269,54 @@ $L$_remaining_num_blocks_is_7_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1339,54 +1339,54 @@ $L$_done_7_remain_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1414,54 +1414,54 @@ $L$_remaining_num_blocks_is_6_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1484,54 +1484,54 @@ $L$_done_6_remain_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1558,54 +1558,54 @@ $L$_remaining_num_blocks_is_5_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1628,54 +1628,54 @@ $L$_done_5_remain_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1701,54 +1701,54 @@ $L$_remaining_num_blocks_is_4_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -1770,54 +1770,54 @@ $L$_done_4_remain_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -2116,8 +2116,8 @@ $L$_done_1_remain_amivrujEyduiFoi: jmp NEAR $L$_ret_amivrujEyduiFoi $L$_start_by16_amivrujEyduiFoi: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 @@ -2158,7 +2158,7 @@ $L$_main_loop_run_16_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 vpxorq zmm3,zmm3,zmm11 vpxorq zmm4,zmm4,zmm12 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpxorq zmm3,zmm3,zmm0 @@ -2167,17 +2167,17 @@ $L$_main_loop_run_16_amivrujEyduiFoi: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm11,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -2186,17 +2186,17 @@ $L$_main_loop_run_16_amivrujEyduiFoi: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm16,zmm12,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -2205,17 +2205,17 @@ $L$_main_loop_run_16_amivrujEyduiFoi: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm17,zmm15,0x1 vpxord zmm17,zmm17,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -2224,7 +2224,7 @@ $L$_main_loop_run_16_amivrujEyduiFoi: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm18,zmm16,0x1 vpxord zmm18,zmm18,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 vaesdeclast zmm3,zmm3,zmm0 @@ -2253,8 +2253,8 @@ $L$_main_loop_run_16_amivrujEyduiFoi: $L$_start_by8_amivrujEyduiFoi: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 @@ -2283,24 +2283,24 @@ $L$_main_loop_run_8_amivrujEyduiFoi: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpsrldq zmm13,zmm9,0xf vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm9,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vpsrldq zmm13,zmm10,0xf @@ -2308,37 +2308,37 @@ $L$_main_loop_run_8_amivrujEyduiFoi: vpslldq zmm16,zmm10,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -3867,73 +3867,73 @@ $L$_remaining_num_blocks_is_7_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 zmm2{k1},[64+rdi] add rdi,0x70 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -3951,73 +3951,73 @@ $L$_remaining_num_blocks_is_6_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 ymm2,YMMWORD[64+rdi] add rdi,0x60 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4035,73 +4035,73 @@ $L$_remaining_num_blocks_is_5_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu xmm2,XMMWORD[64+rdi] add rdi,0x50 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4118,35 +4118,35 @@ $L$_remaining_num_blocks_is_5_wcpqaDvsGlbjGoe: $L$_remaining_num_blocks_is_4_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] add rdi,0x40 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi],zmm1 @@ -4162,35 +4162,35 @@ $L$_remaining_num_blocks_is_3_wcpqaDvsGlbjGoe: kmovq k1,r8 vmovdqu8 zmm1{k1},[rdi] add rdi,0x30 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi]{k1},zmm1 @@ -4203,35 +4203,35 @@ $L$_remaining_num_blocks_is_3_wcpqaDvsGlbjGoe: $L$_remaining_num_blocks_is_2_wcpqaDvsGlbjGoe: vmovdqu8 ymm1,YMMWORD[rdi] add rdi,0x20 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[176+rcx] + vbroadcasti32x4 ymm0,XMMWORD[176+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[192+rcx] + vbroadcasti32x4 ymm0,XMMWORD[192+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[208+rcx] + vbroadcasti32x4 ymm0,XMMWORD[208+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[224+rcx] + vbroadcasti32x4 ymm0,XMMWORD[224+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu YMMWORD[rsi],ymm1 @@ -4271,8 +4271,8 @@ $L$_remaining_num_blocks_is_1_wcpqaDvsGlbjGoe: $L$_start_by16_wcpqaDvsGlbjGoe: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 vpshufb zmm1,zmm0,zmm8 @@ -4305,7 +4305,7 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: vpxorq zmm2,zmm2,zmm10 vpxorq zmm3,zmm3,zmm11 vpxorq zmm4,zmm4,zmm12 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpxorq zmm3,zmm3,zmm0 @@ -4314,17 +4314,17 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm11,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -4333,17 +4333,17 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm16,zmm12,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -4352,17 +4352,17 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm17,zmm15,0x1 vpxord zmm17,zmm17,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 @@ -4371,27 +4371,27 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm18,zmm16,0x1 vpxord zmm18,zmm18,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vaesenc zmm3,zmm3,zmm0 vaesenc zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vaesenclast zmm3,zmm3,zmm0 @@ -4419,8 +4419,8 @@ $L$_main_loop_run_16_wcpqaDvsGlbjGoe: jmp NEAR $L$_do_n_blocks_wcpqaDvsGlbjGoe $L$_start_by8_wcpqaDvsGlbjGoe: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 vpshufb zmm1,zmm0,zmm8 @@ -4439,24 +4439,24 @@ $L$_main_loop_run_8_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 zmm2,ZMMWORD[64+rdi] add rdi,0x80 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 vpsrldq zmm13,zmm9,0xf vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm9,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 vpsrldq zmm13,zmm10,0xf @@ -4464,56 +4464,56 @@ $L$_main_loop_run_8_wcpqaDvsGlbjGoe: vpslldq zmm16,zmm10,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4605,8 +4605,8 @@ $L$_less_than_128_bytes_wcpqaDvsGlbjGoe: vpbroadcastq zmm25,r10 cmp rdx,0x10 jb NEAR $L$_ret_wcpqaDvsGlbjGoe - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8d,0xaa kmovq k2,r8 mov r8,rdx @@ -4642,73 +4642,73 @@ $L$_num_blocks_is_7_wcpqaDvsGlbjGoe: vmovdqu8 zmm2{k1},[64+rdi] add rdi,0x70 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4736,73 +4736,73 @@ $L$_num_blocks_is_6_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 ymm2,YMMWORD[64+rdi] add rdi,96 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4831,73 +4831,73 @@ $L$_num_blocks_is_5_wcpqaDvsGlbjGoe: vmovdqu8 zmm1,ZMMWORD[rdi] vmovdqu8 xmm2,XMMWORD[64+rdi] add rdi,80 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 vpternlogq zmm2,zmm10,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 vaesenc zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vaesenclast zmm2,zmm2,zmm0 vpxorq zmm1,zmm1,zmm9 @@ -4925,35 +4925,35 @@ $L$_num_blocks_is_4_wcpqaDvsGlbjGoe: vpxord zmm10,zmm7,zmm5 vmovdqu8 zmm1,ZMMWORD[rdi] add rdi,64 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi],zmm1 @@ -4974,35 +4974,35 @@ $L$_num_blocks_is_3_wcpqaDvsGlbjGoe: kmovq k1,r8 vmovdqu8 zmm1{k1},[rdi] add rdi,48 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpternlogq zmm1,zmm9,zmm0,0x96 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesenc zmm1,zmm1,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesenclast zmm1,zmm1,zmm0 vpxorq zmm1,zmm1,zmm9 vmovdqu8 ZMMWORD[rsi]{k1},zmm1 @@ -5022,35 +5022,35 @@ $L$_num_blocks_is_2_wcpqaDvsGlbjGoe: vmovdqu8 ymm1,YMMWORD[rdi] add rdi,32 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[176+rcx] + vbroadcasti32x4 ymm0,XMMWORD[176+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[192+rcx] + vbroadcasti32x4 ymm0,XMMWORD[192+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[208+rcx] + vbroadcasti32x4 ymm0,XMMWORD[208+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[224+rcx] + vbroadcasti32x4 ymm0,XMMWORD[224+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu8 YMMWORD[rsi],ymm1 @@ -5071,35 +5071,35 @@ $L$_num_blocks_is_1_wcpqaDvsGlbjGoe: vmovdqu8 xmm1,XMMWORD[rdi] add rdi,16 - vbroadcasti32x4 ymm0,YMMWORD[rcx] + vbroadcasti32x4 ymm0,XMMWORD[rcx] vpternlogq ymm1,ymm9,ymm0,0x96 - vbroadcasti32x4 ymm0,YMMWORD[16+rcx] + vbroadcasti32x4 ymm0,XMMWORD[16+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[32+rcx] + vbroadcasti32x4 ymm0,XMMWORD[32+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[48+rcx] + vbroadcasti32x4 ymm0,XMMWORD[48+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[64+rcx] + vbroadcasti32x4 ymm0,XMMWORD[64+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[80+rcx] + vbroadcasti32x4 ymm0,XMMWORD[80+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[96+rcx] + vbroadcasti32x4 ymm0,XMMWORD[96+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[112+rcx] + vbroadcasti32x4 ymm0,XMMWORD[112+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[128+rcx] + vbroadcasti32x4 ymm0,XMMWORD[128+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[144+rcx] + vbroadcasti32x4 ymm0,XMMWORD[144+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[160+rcx] + vbroadcasti32x4 ymm0,XMMWORD[160+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[176+rcx] + vbroadcasti32x4 ymm0,XMMWORD[176+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[192+rcx] + vbroadcasti32x4 ymm0,XMMWORD[192+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[208+rcx] + vbroadcasti32x4 ymm0,XMMWORD[208+rcx] vaesenc ymm1,ymm1,ymm0 - vbroadcasti32x4 ymm0,YMMWORD[224+rcx] + vbroadcasti32x4 ymm0,XMMWORD[224+rcx] vaesenclast ymm1,ymm1,ymm0 vpxorq ymm1,ymm1,ymm9 vmovdqu8 XMMWORD[rsi],xmm1 @@ -5261,74 +5261,74 @@ $L$_remaining_num_blocks_is_7_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5351,74 +5351,74 @@ $L$_done_7_remain_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5446,74 +5446,74 @@ $L$_remaining_num_blocks_is_6_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5536,74 +5536,74 @@ $L$_done_6_remain_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5630,74 +5630,74 @@ $L$_remaining_num_blocks_is_5_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5720,74 +5720,74 @@ $L$_done_5_remain_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5813,74 +5813,74 @@ $L$_remaining_num_blocks_is_4_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -5902,74 +5902,74 @@ $L$_done_4_remain_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 @@ -6340,8 +6340,8 @@ $L$_done_1_remain_EmbgEptodyewbFa: jmp NEAR $L$_ret_EmbgEptodyewbFa $L$_start_by16_EmbgEptodyewbFa: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 @@ -6382,7 +6382,7 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 vpxorq zmm3,zmm3,zmm11 vpxorq zmm4,zmm4,zmm12 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpxorq zmm3,zmm3,zmm0 @@ -6391,17 +6391,17 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm11,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -6410,17 +6410,17 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm16,zmm12,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -6429,17 +6429,17 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm17,zmm15,0x1 vpxord zmm17,zmm17,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 @@ -6448,27 +6448,27 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm18,zmm16,0x1 vpxord zmm18,zmm18,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vaesdec zmm3,zmm3,zmm0 vaesdec zmm4,zmm4,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 vaesdeclast zmm3,zmm3,zmm0 @@ -6497,8 +6497,8 @@ $L$_main_loop_run_16_EmbgEptodyewbFa: $L$_start_by8_EmbgEptodyewbFa: - vbroadcasti32x4 zmm0,ZMMWORD[rsp] - vbroadcasti32x4 zmm8,ZMMWORD[shufb_15_7] + vbroadcasti32x4 zmm0,XMMWORD[rsp] + vbroadcasti32x4 zmm8,XMMWORD[shufb_15_7] mov r8,0xaa kmovq k2,r8 @@ -6527,24 +6527,24 @@ $L$_main_loop_run_8_EmbgEptodyewbFa: vpxorq zmm2,zmm2,zmm10 - vbroadcasti32x4 zmm0,ZMMWORD[rcx] + vbroadcasti32x4 zmm0,XMMWORD[rcx] vpxorq zmm1,zmm1,zmm0 vpxorq zmm2,zmm2,zmm0 vpsrldq zmm13,zmm9,0xf vpclmulqdq zmm14,zmm13,zmm25,0x0 vpslldq zmm15,zmm9,0x1 vpxord zmm15,zmm15,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[16+rcx] + vbroadcasti32x4 zmm0,XMMWORD[16+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[32+rcx] + vbroadcasti32x4 zmm0,XMMWORD[32+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[48+rcx] + vbroadcasti32x4 zmm0,XMMWORD[48+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 vpsrldq zmm13,zmm10,0xf @@ -6552,57 +6552,57 @@ $L$_main_loop_run_8_EmbgEptodyewbFa: vpslldq zmm16,zmm10,0x1 vpxord zmm16,zmm16,zmm14 - vbroadcasti32x4 zmm0,ZMMWORD[64+rcx] + vbroadcasti32x4 zmm0,XMMWORD[64+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[80+rcx] + vbroadcasti32x4 zmm0,XMMWORD[80+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[96+rcx] + vbroadcasti32x4 zmm0,XMMWORD[96+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[112+rcx] + vbroadcasti32x4 zmm0,XMMWORD[112+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[128+rcx] + vbroadcasti32x4 zmm0,XMMWORD[128+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[144+rcx] + vbroadcasti32x4 zmm0,XMMWORD[144+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[160+rcx] + vbroadcasti32x4 zmm0,XMMWORD[160+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[176+rcx] + vbroadcasti32x4 zmm0,XMMWORD[176+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[192+rcx] + vbroadcasti32x4 zmm0,XMMWORD[192+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[208+rcx] + vbroadcasti32x4 zmm0,XMMWORD[208+rcx] vaesdec zmm1,zmm1,zmm0 vaesdec zmm2,zmm2,zmm0 - vbroadcasti32x4 zmm0,ZMMWORD[224+rcx] + vbroadcasti32x4 zmm0,XMMWORD[224+rcx] vaesdeclast zmm1,zmm1,zmm0 vaesdeclast zmm2,zmm2,zmm0 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm index 47930a955..53d7d6c9b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm @@ -48,6 +48,19 @@ DB 243,15,30,250 push r15 + push rsi + push rdi + lea rsp,[((-168))+rsp] + vmovapd XMMWORD[rsp],xmm6 + vmovapd XMMWORD[16+rsp],xmm7 + vmovapd XMMWORD[32+rsp],xmm8 + vmovapd XMMWORD[48+rsp],xmm9 + vmovapd XMMWORD[64+rsp],xmm10 + vmovapd XMMWORD[80+rsp],xmm11 + vmovapd XMMWORD[96+rsp],xmm12 + vmovapd XMMWORD[112+rsp],xmm13 + vmovapd XMMWORD[128+rsp],xmm14 + vmovapd XMMWORD[144+rsp],xmm15 $L$ossl_rsaz_amm52x20_x1_avxifma256_body: @@ -477,6 +490,19 @@ $L$loop5: vmovdqu YMMWORD[128+rdi],ymm8 vzeroupper + vmovapd xmm6,XMMWORD[rsp] + vmovapd xmm7,XMMWORD[16+rsp] + vmovapd xmm8,XMMWORD[32+rsp] + vmovapd xmm9,XMMWORD[48+rsp] + vmovapd xmm10,XMMWORD[64+rsp] + vmovapd xmm11,XMMWORD[80+rsp] + vmovapd xmm12,XMMWORD[96+rsp] + vmovapd xmm13,XMMWORD[112+rsp] + vmovapd xmm14,XMMWORD[128+rsp] + vmovapd xmm15,XMMWORD[144+rsp] + lea rsp,[168+rsp] + pop rdi + pop rsi mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] @@ -622,6 +648,19 @@ DB 243,15,30,250 push r15 + push rsi + push rdi + lea rsp,[((-168))+rsp] + vmovapd XMMWORD[rsp],xmm6 + vmovapd XMMWORD[16+rsp],xmm7 + vmovapd XMMWORD[32+rsp],xmm8 + vmovapd XMMWORD[48+rsp],xmm9 + vmovapd XMMWORD[64+rsp],xmm10 + vmovapd XMMWORD[80+rsp],xmm11 + vmovapd XMMWORD[96+rsp],xmm12 + vmovapd XMMWORD[112+rsp],xmm13 + vmovapd XMMWORD[128+rsp],xmm14 + vmovapd XMMWORD[144+rsp],xmm15 $L$ossl_rsaz_amm52x20_x2_avxifma256_body: @@ -1070,6 +1109,19 @@ $L$loop20: vmovdqu YMMWORD[288+rdi],ymm12 vzeroupper + vmovapd xmm6,XMMWORD[rsp] + vmovapd xmm7,XMMWORD[16+rsp] + vmovapd xmm8,XMMWORD[32+rsp] + vmovapd xmm9,XMMWORD[48+rsp] + vmovapd xmm10,XMMWORD[64+rsp] + vmovapd xmm11,XMMWORD[80+rsp] + vmovapd xmm12,XMMWORD[96+rsp] + vmovapd xmm13,XMMWORD[112+rsp] + vmovapd xmm14,XMMWORD[128+rsp] + vmovapd xmm15,XMMWORD[144+rsp] + lea rsp,[168+rsp] + pop rdi + pop rsi mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] @@ -1099,6 +1151,19 @@ global ossl_extract_multiplier_2x20_win5_avx ossl_extract_multiplier_2x20_win5_avx: DB 243,15,30,250 + push rsi + push rdi + lea rsp,[((-168))+rsp] + vmovapd XMMWORD[rsp],xmm6 + vmovapd XMMWORD[16+rsp],xmm7 + vmovapd XMMWORD[32+rsp],xmm8 + vmovapd XMMWORD[48+rsp],xmm9 + vmovapd XMMWORD[64+rsp],xmm10 + vmovapd XMMWORD[80+rsp],xmm11 + vmovapd XMMWORD[96+rsp],xmm12 + vmovapd XMMWORD[112+rsp],xmm13 + vmovapd XMMWORD[128+rsp],xmm14 + vmovapd XMMWORD[144+rsp],xmm15 vmovapd ymm14,YMMWORD[$L$ones] vmovq xmm10,r8 vpbroadcastq ymm12,xmm10 @@ -1157,6 +1222,20 @@ $L$loop: vmovdqu YMMWORD[224+rcx],ymm7 vmovdqu YMMWORD[256+rcx],ymm8 vmovdqu YMMWORD[288+rcx],ymm9 + vzeroupper + vmovapd xmm6,XMMWORD[rsp] + vmovapd xmm7,XMMWORD[16+rsp] + vmovapd xmm8,XMMWORD[32+rsp] + vmovapd xmm9,XMMWORD[48+rsp] + vmovapd xmm10,XMMWORD[64+rsp] + vmovapd xmm11,XMMWORD[80+rsp] + vmovapd xmm12,XMMWORD[96+rsp] + vmovapd xmm13,XMMWORD[112+rsp] + vmovapd xmm14,XMMWORD[128+rsp] + vmovapd xmm15,XMMWORD[144+rsp] + lea rsp,[168+rsp] + pop rdi + pop rsi DB 0F3h,0C3h ;repret diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm index 98b10734b..b54c93683 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm @@ -1318,7 +1318,7 @@ $L$loop30: vmovdqu YMMWORD[192+rdi],ymm9 vmovdqu YMMWORD[224+rdi],ymm10 - xor r15d,r15d + xor r9d,r9d lea r11,[16+r11] mov rax,0xfffffffffffff @@ -1692,6 +1692,19 @@ global ossl_extract_multiplier_2x30_win5_avx ossl_extract_multiplier_2x30_win5_avx: DB 243,15,30,250 + push rsi + push rdi + lea rsp,[((-168))+rsp] + vmovapd XMMWORD[rsp],xmm6 + vmovapd XMMWORD[16+rsp],xmm7 + vmovapd XMMWORD[32+rsp],xmm8 + vmovapd XMMWORD[48+rsp],xmm9 + vmovapd XMMWORD[64+rsp],xmm10 + vmovapd XMMWORD[80+rsp],xmm11 + vmovapd XMMWORD[96+rsp],xmm12 + vmovapd XMMWORD[112+rsp],xmm13 + vmovapd XMMWORD[128+rsp],xmm14 + vmovapd XMMWORD[144+rsp],xmm15 vmovapd ymm12,YMMWORD[$L$ones] vmovq xmm8,r8 vpbroadcastq ymm10,xmm8 @@ -1802,6 +1815,20 @@ $L$loop_8_15: vmovdqu YMMWORD[416+rcx],ymm5 vmovdqu YMMWORD[448+rcx],ymm6 vmovdqu YMMWORD[480+rcx],ymm7 + vzeroupper + vmovapd xmm6,XMMWORD[rsp] + vmovapd xmm7,XMMWORD[16+rsp] + vmovapd xmm8,XMMWORD[32+rsp] + vmovapd xmm9,XMMWORD[48+rsp] + vmovapd xmm10,XMMWORD[64+rsp] + vmovapd xmm11,XMMWORD[80+rsp] + vmovapd xmm12,XMMWORD[96+rsp] + vmovapd xmm13,XMMWORD[112+rsp] + vmovapd xmm14,XMMWORD[128+rsp] + vmovapd xmm15,XMMWORD[144+rsp] + lea rsp,[168+rsp] + pop rdi + pop rsi DB 0F3h,0C3h ;repret diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm index 3c7181588..3ce5ac941 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm @@ -1369,7 +1369,7 @@ $L$loop40: vmovdqu YMMWORD[256+rdi],ymm11 vmovdqu YMMWORD[288+rdi],ymm12 - xor r15d,r15d + xor r9d,r9d mov rax,0xfffffffffffff @@ -1838,6 +1838,19 @@ global ossl_extract_multiplier_2x40_win5_avx ossl_extract_multiplier_2x40_win5_avx: DB 243,15,30,250 + push rsi + push rdi + lea rsp,[((-168))+rsp] + vmovapd XMMWORD[rsp],xmm6 + vmovapd XMMWORD[16+rsp],xmm7 + vmovapd XMMWORD[32+rsp],xmm8 + vmovapd XMMWORD[48+rsp],xmm9 + vmovapd XMMWORD[64+rsp],xmm10 + vmovapd XMMWORD[80+rsp],xmm11 + vmovapd XMMWORD[96+rsp],xmm12 + vmovapd XMMWORD[112+rsp],xmm13 + vmovapd XMMWORD[128+rsp],xmm14 + vmovapd XMMWORD[144+rsp],xmm15 vmovapd ymm14,YMMWORD[$L$ones] vmovq xmm10,r8 vpbroadcastq ymm12,xmm10 @@ -1956,6 +1969,20 @@ $L$loop_320: vmovdqu YMMWORD[544+rcx],ymm7 vmovdqu YMMWORD[576+rcx],ymm8 vmovdqu YMMWORD[608+rcx],ymm9 + vzeroupper + vmovapd xmm6,XMMWORD[rsp] + vmovapd xmm7,XMMWORD[16+rsp] + vmovapd xmm8,XMMWORD[32+rsp] + vmovapd xmm9,XMMWORD[48+rsp] + vmovapd xmm10,XMMWORD[64+rsp] + vmovapd xmm11,XMMWORD[80+rsp] + vmovapd xmm12,XMMWORD[96+rsp] + vmovapd xmm13,XMMWORD[112+rsp] + vmovapd xmm14,XMMWORD[128+rsp] + vmovapd xmm15,XMMWORD[144+rsp] + lea rsp,[168+rsp] + pop rdi + pop rsi DB 0F3h,0C3h ;repret diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-gf2m.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-gf2m.nasm index d4367ed02..8e716195f 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-gf2m.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-gf2m.nasm @@ -320,8 +320,8 @@ $L$end_mul_2x2: DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54 DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 -DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 -DB 111,114,103,62,0 +DB 32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98 +DB 46,99,111,109,47,100,111,116,45,97,115,109,62,0 ALIGN 16 EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont.nasm index b4f755d63..9c0038e46 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont.nasm @@ -1299,8 +1299,9 @@ $L$SEH_end_bn_mulx4x_mont: DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83 -DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 -DB 115,108,46,111,114,103,62,0 +DB 32,98,121,32,60,104,116,116,112,115,58,47,47,103,105,116 +DB 104,117,98,46,99,111,109,47,100,111,116,45,97,115,109,62 +DB 0 ALIGN 16 EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont5.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont5.nasm index e6ca66912..6dfc05a9a 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont5.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/x86_64-mont5.nasm @@ -3680,8 +3680,9 @@ DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115 DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111 DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79 -DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111 -DB 112,101,110,115,115,108,46,111,114,103,62,0 +DB 71,65,77,83,32,98,121,32,60,104,116,116,112,115,58,47 +DB 47,103,105,116,104,117,98,46,99,111,109,47,100,111,116,45 +DB 97,115,109,62,0 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/ec/x25519-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/ec/x25519-x86_64.nasm index d5dc6fbc4..6d16af9fb 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/ec/x25519-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/ec/x25519-x86_64.nasm @@ -862,8 +862,9 @@ $L$fe64_to_epilogue: $L$SEH_end_x25519_fe64_tobytes: DB 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101 DB 115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82 -DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 -DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +DB 89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116 +DB 112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47 +DB 100,111,116,45,97,115,109,62,0 EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/aesni-gcm-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/aesni-gcm-x86_64.nasm index 0db04b063..5732f0743 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/aesni-gcm-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/aesni-gcm-x86_64.nasm @@ -865,8 +865,9 @@ $L$one_lsb: DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108 DB 101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82 -DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 -DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +DB 89,80,84,79,71,65,77,83,32,98,121,32,60,104,116,116 +DB 112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47 +DB 100,111,116,45,97,115,109,62,0 section .text ALIGN 64 EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/ghash-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/ghash-x86_64.nasm index 91cd042a3..7dd0b1084 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/ghash-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/modes/ghash-x86_64.nasm @@ -1935,8 +1935,8 @@ $L$rem_8bit: DB 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52 DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32 -DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111 -DB 114,103,62,0 +DB 60,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46 +DB 99,111,109,47,100,111,116,45,97,115,109,62,0 ALIGN 64 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/keccak1600-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/keccak1600-x86_64.nasm index 0264f5373..c85289f8d 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/keccak1600-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/keccak1600-x86_64.nasm @@ -527,5 +527,6 @@ iotas: DB 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111 DB 114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102 DB 111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84 -DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64 -DB 111,112,101,110,115,115,108,46,111,114,103,62,0 +DB 79,71,65,77,83,32,98,121,32,60,104,116,116,112,115,58 +DB 47,47,103,105,116,104,117,98,46,99,111,109,47,100,111,116 +DB 45,97,115,109,62,0 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-mb-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-mb-x86_64.nasm index ac1470cbb..fe041bf14 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-mb-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-mb-x86_64.nasm @@ -7436,8 +7436,9 @@ DB 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 DB 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107 DB 32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120 DB 56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77 -DB 83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110 -DB 115,115,108,46,111,114,103,62,0 +DB 83,32,98,121,32,60,104,116,116,112,115,58,47,47,103,105 +DB 116,104,117,98,46,99,111,109,47,100,111,116,45,97,115,109 +DB 62,0 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-x86_64.nasm index 912918e04..9cfc3d448 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha1-x86_64.nasm @@ -5563,8 +5563,8 @@ section .text DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 DB 102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44 DB 32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60 -DB 97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114 -DB 103,62,0 +DB 104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99 +DB 111,109,47,100,111,116,45,97,115,109,62,0 ALIGN 64 EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm index cfee9855f..25b69763e 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm @@ -8118,8 +8118,9 @@ K256_shaext: DB 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111 DB 99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114 DB 32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71 -DB 65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112 -DB 101,110,115,115,108,46,111,114,103,62,0 +DB 65,77,83,32,98,121,32,60,104,116,116,112,115,58,47,47 +DB 103,105,116,104,117,98,46,99,111,109,47,100,111,116,45,97 +DB 115,109,62,0 section .text EXTERN __imp_RtlVirtualUnwind diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-x86_64.nasm index 8cb6a3178..c51cbba76 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha256-x86_64.nasm @@ -20,22 +20,21 @@ $L$SEH_begin_sha256_block_data_order: - lea r11,[OPENSSL_ia32cap_P] - mov r9d,DWORD[r11] - mov r10d,DWORD[4+r11] - mov r11d,DWORD[8+r11] + lea r10,[OPENSSL_ia32cap_P] + mov r9,QWORD[r10] + mov r11d,DWORD[8+r10] test r11d,536870912 jnz NEAR _shaext_shortcut and r11d,296 cmp r11d,296 je NEAR $L$avx2_shortcut - and r9d,1073741824 - and r10d,268435968 - or r10d,r9d - cmp r10d,1342177792 +$L$avx_dispatch: + mov r11,1152923704703844352 + and r9,r11 + cmp r9,r11 je NEAR $L$avx_shortcut - test r10d,512 - jnz NEAR $L$ssse3_shortcut + bt r9,41 + jc NEAR $L$ssse3_shortcut mov rax,rsp push rbx @@ -1790,8 +1789,8 @@ K256: DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54 DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 -DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 -DB 111,114,103,62,0 +DB 32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98 +DB 46,99,111,109,47,100,111,116,45,97,115,109,62,0 section .text ALIGN 64 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha512-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha512-x86_64.nasm index eab959eaa..08c5c57f8 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha512-x86_64.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sha/sha512-x86_64.nasm @@ -20,19 +20,23 @@ $L$SEH_begin_sha512_block_data_order: - lea r11,[OPENSSL_ia32cap_P] - mov r9d,DWORD[r11] - mov r10d,DWORD[4+r11] - mov r11d,DWORD[8+r11] - test r10d,2048 - jnz NEAR $L$xop_shortcut - and r11d,296 - cmp r11d,296 + lea r10,[OPENSSL_ia32cap_P] + mov r9,QWORD[r10] + mov r11d,DWORD[8+r10] + mov r10d,DWORD[20+r10] + bt r9,43 + jc NEAR $L$xop_shortcut + test r11d,32 + jz NEAR $L$avx_dispatch + test r10d,1 + jnz NEAR $L$sha512ext_shortcut + and r11d,264 + cmp r11d,264 je NEAR $L$avx2_shortcut - and r9d,1073741824 - and r10d,268435968 - or r10d,r9d - cmp r10d,1342177792 +$L$avx_dispatch: + mov r11,1152923704703844352 + and r9,r11 + cmp r9,r11 je NEAR $L$avx_shortcut mov rax,rsp @@ -1832,8 +1836,53 @@ K512: DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54 DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 -DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 -DB 111,114,103,62,0 +DB 32,60,104,116,116,112,115,58,47,47,103,105,116,104,117,98 +DB 46,99,111,109,47,100,111,116,45,97,115,109,62,0 + + +ALIGN 64 + +K512_single: + DQ 0x428a2f98d728ae22,0x7137449123ef65cd + DQ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + DQ 0x3956c25bf348b538,0x59f111f1b605d019 + DQ 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + DQ 0xd807aa98a3030242,0x12835b0145706fbe + DQ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + DQ 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + DQ 0x9bdc06a725c71235,0xc19bf174cf692694 + DQ 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + DQ 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + DQ 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + DQ 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + DQ 0x983e5152ee66dfab,0xa831c66d2db43210 + DQ 0xb00327c898fb213f,0xbf597fc7beef0ee4 + DQ 0xc6e00bf33da88fc2,0xd5a79147930aa725 + DQ 0x06ca6351e003826f,0x142929670a0e6e70 + DQ 0x27b70a8546d22ffc,0x2e1b21385c26c926 + DQ 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + DQ 0x650a73548baf63de,0x766a0abb3c77b2a8 + DQ 0x81c2c92e47edaee6,0x92722c851482353b + DQ 0xa2bfe8a14cf10364,0xa81a664bbc423001 + DQ 0xc24b8b70d0f89791,0xc76c51a30654be30 + DQ 0xd192e819d6ef5218,0xd69906245565a910 + DQ 0xf40e35855771202a,0x106aa07032bbd1b8 + DQ 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + DQ 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + DQ 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + DQ 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + DQ 0x748f82ee5defb2fc,0x78a5636f43172f60 + DQ 0x84c87814a1f0ab72,0x8cc702081a6439ec + DQ 0x90befffa23631e28,0xa4506cebde82bde9 + DQ 0xbef9a3f7b2c67915,0xc67178f2e372532b + DQ 0xca273eceea26619c,0xd186b8c721c0c207 + DQ 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + DQ 0x06f067aa72176fba,0x0a637dc5a2c898a6 + DQ 0x113f9804bef90dae,0x1b710b35131c471b + DQ 0x28db77f523047d84,0x32caab7b40c72493 + DQ 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + DQ 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + DQ 0x5fcb6fab3ad6faec,0x6c44198c4a475817 section .text ALIGN 64 @@ -5530,6 +5579,314 @@ $L$epilogue_avx2: DB 0F3h,0C3h ;repret $L$SEH_end_sha512_block_data_order_avx2: + +ALIGN 64 +sha512_block_data_order_sha512ext: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_sha512_block_data_order_sha512ext: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +DB 243,15,30,250 +$L$sha512ext_shortcut: + or rdx,rdx + je NEAR $L$sha512ext_done + + + sub rsp,144 + + vmovdqu XMMWORD[rsp],xmm6 + vmovdqu XMMWORD[16+rsp],xmm7 + vmovdqu XMMWORD[32+rsp],xmm8 + vmovdqu XMMWORD[48+rsp],xmm9 + vmovdqu XMMWORD[64+rsp],xmm11 + vmovdqu XMMWORD[80+rsp],xmm12 + vmovdqu XMMWORD[96+rsp],xmm13 + vmovdqu XMMWORD[112+rsp],xmm14 + vmovdqu XMMWORD[128+rsp],xmm15 + + vbroadcasti128 ymm15,XMMWORD[((1280+K512))] + + + + + + + + + + + vmovdqu ymm0,YMMWORD[rdi] + vmovdqu ymm1,YMMWORD[32+rdi] + + vperm2i128 ymm2,ymm0,ymm1,0x20 + vperm2i128 ymm3,ymm0,ymm1,0x31 + + vpermq ymm13,ymm2,0x1b + vpermq ymm14,ymm3,0x1b + + + lea r9,[K512_single] + +ALIGN 32 +$L$sha512ext_block_loop: + + vmovdqa ymm11,ymm13 + vmovdqa ymm12,ymm14 + + + vmovdqu ymm0,YMMWORD[rsi] + vpshufb ymm3,ymm0,ymm15 + vpaddq ymm0,ymm3,YMMWORD[r9] +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 + + + vmovdqu ymm0,YMMWORD[32+rsi] + vpshufb ymm4,ymm0,ymm15 + vpaddq ymm0,ymm4,YMMWORD[32+r9] +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xdc + + + vmovdqu ymm0,YMMWORD[64+rsi] + vpshufb ymm5,ymm0,ymm15 + vpaddq ymm0,ymm5,YMMWORD[64+r9] +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xe5 + + + vmovdqu ymm0,YMMWORD[96+rsi] + vpshufb ymm6,ymm0,ymm15 + vpaddq ymm0,ymm6,YMMWORD[96+r9] + vpermq ymm8,ymm6,0x1b + vpermq ymm9,ymm5,0x39 + vpblendd ymm8,ymm8,ymm9,0x3f + vpaddq ymm3,ymm3,ymm8 +DB 0xc4,0xe2,0x7f,0xcd,0xde +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq ymm0,ymm3,YMMWORD[128+r9] + vpermq ymm8,ymm3,0x1b + vpermq ymm9,ymm6,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm4,ymm4,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xe3 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq ymm0,ymm4,YMMWORD[160+r9] + vpermq ymm8,ymm4,0x1b + vpermq ymm9,ymm3,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm5,ymm5,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xec +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq ymm0,ymm5,YMMWORD[192+r9] + vpermq ymm8,ymm5,0x1b + vpermq ymm9,ymm4,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm6,ymm6,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xf5 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq ymm0,ymm6,YMMWORD[224+r9] + vpermq ymm8,ymm6,0x1b + vpermq ymm9,ymm5,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm3,ymm3,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xde +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq ymm0,ymm3,YMMWORD[256+r9] + vpermq ymm8,ymm3,0x1b + vpermq ymm9,ymm6,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm4,ymm4,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xe3 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq ymm0,ymm4,YMMWORD[288+r9] + vpermq ymm8,ymm4,0x1b + vpermq ymm9,ymm3,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm5,ymm5,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xec +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq ymm0,ymm5,YMMWORD[320+r9] + vpermq ymm8,ymm5,0x1b + vpermq ymm9,ymm4,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm6,ymm6,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xf5 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq ymm0,ymm6,YMMWORD[352+r9] + vpermq ymm8,ymm6,0x1b + vpermq ymm9,ymm5,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm3,ymm3,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xde +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq ymm0,ymm3,YMMWORD[384+r9] + vpermq ymm8,ymm3,0x1b + vpermq ymm9,ymm6,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm4,ymm4,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xe3 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xf3 + + vpaddq ymm0,ymm4,YMMWORD[416+r9] + vpermq ymm8,ymm4,0x1b + vpermq ymm9,ymm3,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm5,ymm5,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xec +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xdc + + vpaddq ymm0,ymm5,YMMWORD[448+r9] + vpermq ymm8,ymm5,0x1b + vpermq ymm9,ymm4,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm6,ymm6,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xf5 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xe5 + + vpaddq ymm0,ymm6,YMMWORD[480+r9] + vpermq ymm8,ymm6,0x1b + vpermq ymm9,ymm5,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm3,ymm3,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xde +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xee + + vpaddq ymm0,ymm3,YMMWORD[512+r9] + vpermq ymm8,ymm3,0x1b + vpermq ymm9,ymm6,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm4,ymm4,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xe3 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 +DB 0xc4,0xe2,0x7f,0xcc,0xf3 + + + vpaddq ymm0,ymm4,YMMWORD[544+r9] + vpermq ymm8,ymm4,0x1b + vpermq ymm9,ymm3,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm5,ymm5,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xec +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq ymm0,ymm5,YMMWORD[576+r9] + vpermq ymm8,ymm5,0x1b + vpermq ymm9,ymm4,0x39 + vpblendd ymm7,ymm8,ymm9,0x3f + vpaddq ymm6,ymm6,ymm7 +DB 0xc4,0xe2,0x7f,0xcd,0xf5 +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq ymm0,ymm6,YMMWORD[608+r9] +DB 0xc4,0x62,0x27,0xcb,0xe0 + vperm2i128 ymm0,ymm0,ymm0,0x1 +DB 0xc4,0x62,0x1f,0xcb,0xd8 + + + vpaddq ymm14,ymm14,ymm12 + vpaddq ymm13,ymm13,ymm11 + add rsi,128 + dec rdx + jnz NEAR $L$sha512ext_block_loop + + + + + vperm2i128 ymm1,ymm13,ymm14,0x31 + vperm2i128 ymm2,ymm13,ymm14,0x20 + vpermq ymm1,ymm1,0xb1 + vpermq ymm2,ymm2,0xb1 + vmovdqu YMMWORD[rdi],ymm1 + vmovdqu YMMWORD[32+rdi],ymm2 + + vzeroupper + + + vmovdqu xmm6,XMMWORD[rsp] + vmovdqu xmm7,XMMWORD[16+rsp] + vmovdqu xmm8,XMMWORD[32+rsp] + vmovdqu xmm9,XMMWORD[48+rsp] + vmovdqu xmm11,XMMWORD[64+rsp] + vmovdqu xmm12,XMMWORD[80+rsp] + vmovdqu xmm13,XMMWORD[96+rsp] + vmovdqu xmm14,XMMWORD[112+rsp] + vmovdqu xmm15,XMMWORD[128+rsp] + add rsp,144 + +$L$sha512ext_done: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_sha512_block_data_order_sha512ext: EXTERN __imp_RtlVirtualUnwind ALIGN 16 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sm3/sm3-x86_64.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sm3/sm3-x86_64.nasm new file mode 100644 index 000000000..d1b4bc7b8 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/sm3/sm3-x86_64.nasm @@ -0,0 +1,287 @@ +default rel +%define XMMWORD +%define YMMWORD +%define ZMMWORD +section .data data align=8 + +ALIGN 16 +SHUFF_MASK: +DB 3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12 + +section .text code align=64 + + + + + + + + + +global ossl_hwsm3_block_data_order + +ALIGN 32 +ossl_hwsm3_block_data_order: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_ossl_hwsm3_block_data_order: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + +DB 243,15,30,250 + + push rbp + + +$L$ossl_hwsm3_block_data_order_seh_setfp: + + sub rsp,112 + + vmovdqu XMMWORD[rsp],xmm6 + vmovdqu XMMWORD[16+rsp],xmm7 + vmovdqu XMMWORD[32+rsp],xmm8 + vmovdqu XMMWORD[48+rsp],xmm9 + vmovdqu XMMWORD[64+rsp],xmm10 + vmovdqu XMMWORD[80+rsp],xmm11 + vmovdqu XMMWORD[96+rsp],xmm12 + +$L$ossl_hwsm3_block_data_order_seh_prolog_end: + or rdx,rdx + je NEAR .done_hash + + + + + vmovdqu xmm6,XMMWORD[rdi] + vmovdqu xmm7,XMMWORD[16+rdi] + + vpshufd xmm0,xmm6,0x1B + vpshufd xmm1,xmm7,0x1B + vpunpckhqdq xmm6,xmm1,xmm0 + vpunpcklqdq xmm7,xmm1,xmm0 + vpsrld xmm2,xmm7,9 + vpslld xmm3,xmm7,23 + vpxor xmm1,xmm2,xmm3 + vpsrld xmm4,xmm7,19 + vpslld xmm5,xmm7,13 + vpxor xmm0,xmm4,xmm5 + + vpblendd xmm7,xmm1,xmm0,0x3 + + vmovdqa xmm12,XMMWORD[SHUFF_MASK] + +ALIGN 32 +.block_loop: + vmovdqa xmm10,xmm6 + vmovdqa xmm11,xmm7 + + + vmovdqu xmm2,XMMWORD[rsi] + vmovdqu xmm3,XMMWORD[16+rsi] + vmovdqu xmm4,XMMWORD[32+rsi] + vmovdqu xmm5,XMMWORD[48+rsi] + vpshufb xmm2,xmm2,xmm12 + vpshufb xmm3,xmm3,xmm12 + vpshufb xmm4,xmm4,xmm12 + vpshufb xmm5,xmm5,xmm12 + + vpalignr xmm8,xmm4,xmm3,12 + vpsrldq xmm9,xmm5,4 + vsm3msg1 xmm8,xmm9,xmm2 + vpalignr xmm9,xmm3,xmm2,12 + vpalignr xmm1,xmm5,xmm4,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm7,xmm6,xmm1,0 + vpunpckhqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm6,xmm7,xmm1,2 + vmovdqa xmm2,xmm8 + vpalignr xmm8,xmm5,xmm4,12 + vpsrldq xmm9,xmm2,4 + vsm3msg1 xmm8,xmm9,xmm3 + vpalignr xmm9,xmm4,xmm3,12 + vpalignr xmm1,xmm2,xmm5,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm7,xmm6,xmm1,4 + vpunpckhqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm6,xmm7,xmm1,6 + vmovdqa xmm3,xmm8 + vpalignr xmm8,xmm2,xmm5,12 + vpsrldq xmm9,xmm3,4 + vsm3msg1 xmm8,xmm9,xmm4 + vpalignr xmm9,xmm5,xmm4,12 + vpalignr xmm1,xmm3,xmm2,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm7,xmm6,xmm1,8 + vpunpckhqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm6,xmm7,xmm1,10 + vmovdqa xmm4,xmm8 + vpalignr xmm8,xmm3,xmm2,12 + vpsrldq xmm9,xmm4,4 + vsm3msg1 xmm8,xmm9,xmm5 + vpalignr xmm9,xmm2,xmm5,12 + vpalignr xmm1,xmm4,xmm3,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm7,xmm6,xmm1,12 + vpunpckhqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm6,xmm7,xmm1,14 + vmovdqa xmm5,xmm8 + vpalignr xmm8,xmm4,xmm3,12 + vpsrldq xmm9,xmm5,4 + vsm3msg1 xmm8,xmm9,xmm2 + vpalignr xmm9,xmm3,xmm2,12 + vpalignr xmm1,xmm5,xmm4,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm7,xmm6,xmm1,16 + vpunpckhqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm6,xmm7,xmm1,18 + vmovdqa xmm2,xmm8 + vpalignr xmm8,xmm5,xmm4,12 + vpsrldq xmm9,xmm2,4 + vsm3msg1 xmm8,xmm9,xmm3 + vpalignr xmm9,xmm4,xmm3,12 + vpalignr xmm1,xmm2,xmm5,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm7,xmm6,xmm1,20 + vpunpckhqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm6,xmm7,xmm1,22 + vmovdqa xmm3,xmm8 + vpalignr xmm8,xmm2,xmm5,12 + vpsrldq xmm9,xmm3,4 + vsm3msg1 xmm8,xmm9,xmm4 + vpalignr xmm9,xmm5,xmm4,12 + vpalignr xmm1,xmm3,xmm2,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm7,xmm6,xmm1,24 + vpunpckhqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm6,xmm7,xmm1,26 + vmovdqa xmm4,xmm8 + vpalignr xmm8,xmm3,xmm2,12 + vpsrldq xmm9,xmm4,4 + vsm3msg1 xmm8,xmm9,xmm5 + vpalignr xmm9,xmm2,xmm5,12 + vpalignr xmm1,xmm4,xmm3,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm7,xmm6,xmm1,28 + vpunpckhqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm6,xmm7,xmm1,30 + vmovdqa xmm5,xmm8 + vpalignr xmm8,xmm4,xmm3,12 + vpsrldq xmm9,xmm5,4 + vsm3msg1 xmm8,xmm9,xmm2 + vpalignr xmm9,xmm3,xmm2,12 + vpalignr xmm1,xmm5,xmm4,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm7,xmm6,xmm1,32 + vpunpckhqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm6,xmm7,xmm1,34 + vmovdqa xmm2,xmm8 + vpalignr xmm8,xmm5,xmm4,12 + vpsrldq xmm9,xmm2,4 + vsm3msg1 xmm8,xmm9,xmm3 + vpalignr xmm9,xmm4,xmm3,12 + vpalignr xmm1,xmm2,xmm5,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm7,xmm6,xmm1,36 + vpunpckhqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm6,xmm7,xmm1,38 + vmovdqa xmm3,xmm8 + vpalignr xmm8,xmm2,xmm5,12 + vpsrldq xmm9,xmm3,4 + vsm3msg1 xmm8,xmm9,xmm4 + vpalignr xmm9,xmm5,xmm4,12 + vpalignr xmm1,xmm3,xmm2,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm7,xmm6,xmm1,40 + vpunpckhqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm6,xmm7,xmm1,42 + vmovdqa xmm4,xmm8 + vpalignr xmm8,xmm3,xmm2,12 + vpsrldq xmm9,xmm4,4 + vsm3msg1 xmm8,xmm9,xmm5 + vpalignr xmm9,xmm2,xmm5,12 + vpalignr xmm1,xmm4,xmm3,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm7,xmm6,xmm1,44 + vpunpckhqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm6,xmm7,xmm1,46 + vmovdqa xmm5,xmm8 + vpalignr xmm8,xmm4,xmm3,12 + vpsrldq xmm9,xmm5,4 + vsm3msg1 xmm8,xmm9,xmm2 + vpalignr xmm9,xmm3,xmm2,12 + vpalignr xmm1,xmm5,xmm4,8 + vsm3msg2 xmm8,xmm9,xmm1 + vpunpcklqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm7,xmm6,xmm1,48 + vpunpckhqdq xmm1,xmm2,xmm3 + vsm3rnds2 xmm6,xmm7,xmm1,50 + vmovdqa xmm2,xmm8 + vpunpcklqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm7,xmm6,xmm1,52 + vpunpckhqdq xmm1,xmm3,xmm4 + vsm3rnds2 xmm6,xmm7,xmm1,54 + vpunpcklqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm7,xmm6,xmm1,56 + vpunpckhqdq xmm1,xmm4,xmm5 + vsm3rnds2 xmm6,xmm7,xmm1,58 + vpunpcklqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm7,xmm6,xmm1,60 + vpunpckhqdq xmm1,xmm5,xmm2 + vsm3rnds2 xmm6,xmm7,xmm1,62 + + vpxor xmm6,xmm6,xmm10 + vpxor xmm7,xmm7,xmm11 + add rsi,64 + dec rdx + jnz NEAR .block_loop + + + vpslld xmm2,xmm7,9 + vpsrld xmm3,xmm7,23 + vpxor xmm1,xmm2,xmm3 + vpslld xmm4,xmm7,19 + vpsrld xmm5,xmm7,13 + vpxor xmm0,xmm4,xmm5 + vpblendd xmm7,xmm1,xmm0,0x3 + vpshufd xmm0,xmm6,0x1B + vpshufd xmm1,xmm7,0x1B + + vpunpcklqdq xmm6,xmm0,xmm1 + vpunpckhqdq xmm7,xmm0,xmm1 + + vmovdqu XMMWORD[rdi],xmm6 + vmovdqu XMMWORD[16+rdi],xmm7 +.done_hash: + + + vmovdqu xmm6,XMMWORD[rsp] + vmovdqu xmm7,XMMWORD[16+rsp] + vmovdqu xmm8,XMMWORD[32+rsp] + vmovdqu xmm9,XMMWORD[48+rsp] + vmovdqu xmm10,XMMWORD[64+rsp] + vmovdqu xmm11,XMMWORD[80+rsp] + vmovdqu xmm12,XMMWORD[96+rsp] + add rsp,112 + + pop rbp + + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/x86_64cpuid.nasm b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/x86_64cpuid.nasm index b58086af0..1da3db525 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/x86_64cpuid.nasm +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/x86_64cpuid.nasm @@ -5,9 +5,6 @@ default rel EXTERN OPENSSL_cpuid_setup -section .CRT$XCU rdata align=8 - DQ OPENSSL_cpuid_setup - common OPENSSL_ia32cap_P 40 section .text code align=64 @@ -322,25 +319,6 @@ $L$no_data: DB 0F3h,0C3h ;repret -global OPENSSL_wipe_cpu - -ALIGN 16 -OPENSSL_wipe_cpu: - pxor xmm0,xmm0 - pxor xmm1,xmm1 - pxor xmm2,xmm2 - pxor xmm3,xmm3 - pxor xmm4,xmm4 - pxor xmm5,xmm5 - xor rcx,rcx - xor rdx,rdx - xor r8,r8 - xor r9,r9 - xor r10,r10 - xor r11,r11 - lea rax,[8+rsp] - DB 0F3h,0C3h ;repret - global OPENSSL_instrument_bus ALIGN 16 diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1.h index 8781ae9ba..d763f511d 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/asn1.h.in * - * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -135,9 +135,9 @@ extern "C" { SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) #define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) #define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) -#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) -#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) -#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp)), sk_X509_ALGOR_cmpfunc_thunk)) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_ALGOR_freefunc_thunk)) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n)), sk_X509_ALGOR_cmpfunc_thunk)) #define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) #define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) #define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) @@ -147,7 +147,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) #define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) #define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) #define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) -#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_freefunc_type(freefunc)) #define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) #define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) #define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) @@ -161,42 +161,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) /* clang-format on */ -#define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */ -/* - * This indicates that the ASN1_STRING is not a real value but just a place - * holder for the location where indefinite length constructed data should be - * inserted in the memory buffer - */ -#define ASN1_STRING_FLAG_NDEF 0x010 - -/* - * This flag is used by the CMS code to indicate that a string is not - * complete and is a place holder for content when it had all been accessed. - * The flag will be reset when content has been written to it. - */ - -#define ASN1_STRING_FLAG_CONT 0x020 -/* - * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING - * type. - */ -#define ASN1_STRING_FLAG_MSTRING 0x040 -/* String is embedded and only content should be freed */ -#define ASN1_STRING_FLAG_EMBED 0x080 -/* String should be parsed in RFC 5280's time format */ -#define ASN1_STRING_FLAG_X509_TIME 0x100 /* This is the base type that holds just about everything :-) */ -struct asn1_string_st { - int length; - int type; - unsigned char *data; - /* - * The value of the following field depends on the type being held. It - * is mostly being used for BIT_STRING so if the input data has a - * non-zero 'unused bits' value, it will be handled correctly - */ - long flags; -}; +struct asn1_string_st; /* * ASN1_ENCODING structure: this is used to save the received encoding of an @@ -238,9 +204,9 @@ struct asn1_string_table_st { SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) #define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) #define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) -#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) -#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) -#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp)), sk_ASN1_STRING_TABLE_cmpfunc_thunk)) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_STRING_TABLE_freefunc_thunk)) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n)), sk_ASN1_STRING_TABLE_cmpfunc_thunk)) #define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) #define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) #define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) @@ -250,7 +216,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_T #define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) #define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) #define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) -#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) #define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) #define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) #define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) @@ -264,7 +230,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_T /* clang-format on */ -/* size limits: this stuff is taken straight from RFC2459 */ +/* size limits: this stuff is taken straight from RFC 5280 */ #define ub_name 32768 #define ub_common_name 64 @@ -556,9 +522,9 @@ struct asn1_type_st { SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) #define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) #define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) -#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) -#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) -#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp)), sk_ASN1_TYPE_cmpfunc_thunk)) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_TYPE_freefunc_thunk)) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n)), sk_ASN1_TYPE_cmpfunc_thunk)) #define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) #define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) #define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) @@ -568,7 +534,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) #define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) #define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) #define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) -#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_freefunc_type(freefunc)) #define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) #define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) #define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) @@ -621,9 +587,9 @@ void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) #define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) #define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) -#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) -#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) -#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp)), sk_ASN1_OBJECT_cmpfunc_thunk)) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_OBJECT_freefunc_thunk)) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n)), sk_ASN1_OBJECT_cmpfunc_thunk)) #define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) #define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) #define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) @@ -633,7 +599,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) #define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) #define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) #define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) -#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) #define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) #define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) #define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) @@ -647,7 +613,11 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) /* clang-format on */ -DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) +#ifndef OPENSSL_NO_DEPRECATED_4_0 +OSSL_DEPRECATEDIN_4_0 ASN1_OBJECT *ASN1_OBJECT_new(void); +#endif /* OPENSSL_NO_DEPRECATED_4_0 */ +void ASN1_OBJECT_free(ASN1_OBJECT *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, ASN1_OBJECT, ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); @@ -667,9 +637,6 @@ int ASN1_STRING_length(const ASN1_STRING *x); OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); #endif int ASN1_STRING_type(const ASN1_STRING *x); -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); -#endif const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) @@ -684,14 +651,18 @@ int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_get_length(const ASN1_BIT_STRING *abs, size_t *length, + int *unused_bits); +int ASN1_BIT_STRING_set1(ASN1_BIT_STRING *abs, const uint8_t *data, + size_t length, int unused_bits); /* clang-format off */ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) #define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) #define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) -#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) -#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) -#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp)), sk_ASN1_INTEGER_cmpfunc_thunk)) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_INTEGER_freefunc_thunk)) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n)), sk_ASN1_INTEGER_cmpfunc_thunk)) #define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) #define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) #define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) @@ -701,7 +672,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) #define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) #define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) #define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) -#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) #define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) #define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) #define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) @@ -752,9 +723,9 @@ int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) #define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) #define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) -#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) -#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) -#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp)), sk_ASN1_UTF8STRING_cmpfunc_thunk)) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_UTF8STRING_freefunc_thunk)) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n)), sk_ASN1_UTF8STRING_cmpfunc_thunk)) #define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) #define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) #define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) @@ -764,7 +735,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) #define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) #define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) #define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) -#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) #define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) #define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) #define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) @@ -791,9 +762,9 @@ int UTF8_putc(unsigned char *str, int len, unsigned long value); SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) #define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) #define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) -#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) -#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) -#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp)), sk_ASN1_GENERALSTRING_cmpfunc_thunk)) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_GENERALSTRING_freefunc_thunk)) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n)), sk_ASN1_GENERALSTRING_cmpfunc_thunk)) #define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) #define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) #define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) @@ -803,7 +774,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERA #define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) #define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) #define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) -#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) #define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) #define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) #define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1t.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1t.h index b46e4519f..d17b4ad6c 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1t.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/asn1t.h @@ -886,9 +886,9 @@ DECLARE_ASN1_ITEM(ZLONG) SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) #define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) #define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) -#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) -#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) -#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp)), sk_ASN1_VALUE_cmpfunc_thunk)) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_VALUE_freefunc_thunk)) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n)), sk_ASN1_VALUE_cmpfunc_thunk)) #define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) #define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) #define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) @@ -898,7 +898,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) #define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) #define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) #define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) -#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_freefunc_type(freefunc)) #define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) #define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) #define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/bio.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/bio.h index 6c571fe12..14d2b265e 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/bio.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/bio.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/bio.h.in * - * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -229,6 +229,17 @@ extern "C" { #define BIO_FLAGS_UPLINK 0 #endif +/* the BIO FLAGS values 0x10 to 0x80 are reserved for internal use */ + +/* + * BIO FLAGS in the range 0x0100..0x8000 are BIO-type specific. + * Their meaning is defined by the particular BIO implementation and + * is not shared across different BIO types. The same bit value may + * have a different meaning or no meaning at all in other BIOs. + * Such flags may be part of the public API or internal to the BIO. + */ + +/* This is used with base64 BIO */ #define BIO_FLAGS_BASE64_NO_NL 0x100 /* @@ -240,8 +251,6 @@ extern "C" { #define BIO_FLAGS_NONCLEAR_RST 0x400 #define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x8000 are reserved for internal KTLS flags */ - typedef union bio_addr_st BIO_ADDR; typedef struct bio_addrinfo_st BIO_ADDRINFO; @@ -339,9 +348,9 @@ typedef BIO_info_cb bio_info_cb; /* backward compatibility */ SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) #define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) #define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) -#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) -#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) -#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp)), sk_BIO_cmpfunc_thunk)) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_BIO_freefunc_thunk)) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n)), sk_BIO_cmpfunc_thunk)) #define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) #define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) #define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) @@ -351,7 +360,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) #define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) #define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) #define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) -#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk), ossl_check_BIO_freefunc_type(freefunc)) #define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) #define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) #define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) @@ -498,6 +507,7 @@ typedef struct bio_poll_descriptor_st { #define BIO_C_SET_SOCK_TYPE 157 #define BIO_C_GET_SOCK_TYPE 158 #define BIO_C_GET_DGRAM_BIO 159 +#define BIO_C_SET_SEND_FLAGS 160 #define BIO_set_app_data(s, arg) BIO_set_ex_data(s, 0, arg) #define BIO_get_app_data(s) BIO_get_ex_data(s, 0) @@ -630,7 +640,6 @@ int BIO_read_filename(BIO *b, const char *name); #define BIO_dup_state(b, ret) BIO_ctrl(b, BIO_CTRL_DUP, 0, (char *)(ret)) #define BIO_reset(b) (int)BIO_ctrl(b, BIO_CTRL_RESET, 0, NULL) -#define BIO_eof(b) (int)BIO_ctrl(b, BIO_CTRL_EOF, 0, NULL) #define BIO_set_close(b, c) (int)BIO_ctrl(b, BIO_CTRL_SET_CLOSE, (c), NULL) #define BIO_get_close(b) (int)BIO_ctrl(b, BIO_CTRL_GET_CLOSE, 0, NULL) #define BIO_pending(b) (int)BIO_ctrl(b, BIO_CTRL_PENDING, 0, NULL) @@ -756,6 +765,7 @@ __owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); int BIO_puts(BIO *bp, const char *buf); int BIO_indent(BIO *b, int indent, int max); long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +int BIO_eof(BIO *b); long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); @@ -820,6 +830,7 @@ int BIO_sock_non_fatal_error(int error); int BIO_err_is_non_fatal(unsigned int errcode); int BIO_socket_wait(int fd, int for_read, time_t max_time); #endif +long BIO_set_send_flags(BIO *b, int flags); int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cmp.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cmp.h index f61f16940..5b1144eea 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cmp.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cmp.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cmp.h.in * - * Copyright 2007-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2026 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -225,9 +225,9 @@ typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) #define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) #define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) -#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) -#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp)), sk_OSSL_CMP_CERTSTATUS_cmpfunc_thunk)) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_CERTSTATUS_freefunc_thunk)) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n)), sk_OSSL_CMP_CERTSTATUS_cmpfunc_thunk)) #define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) #define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) #define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) @@ -237,7 +237,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_ #define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) #define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) #define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) -#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) #define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) #define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) #define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) @@ -256,9 +256,9 @@ DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) #define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) #define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) -#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) -#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp)), sk_OSSL_CMP_ITAV_cmpfunc_thunk)) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_ITAV_freefunc_thunk)) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n)), sk_OSSL_CMP_ITAV_cmpfunc_thunk)) #define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) #define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) #define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) @@ -268,7 +268,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) #define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) #define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) #define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) -#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) #define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) #define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) #define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) @@ -287,9 +287,9 @@ typedef struct ossl_cmp_crlstatus_st OSSL_CMP_CRLSTATUS; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CRLSTATUS, OSSL_CMP_CRLSTATUS, OSSL_CMP_CRLSTATUS) #define sk_OSSL_CMP_CRLSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk)) #define sk_OSSL_CMP_CRLSTATUS_value(sk, idx) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk), (idx))) -#define sk_OSSL_CMP_CRLSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp))) -#define sk_OSSL_CMP_CRLSTATUS_new_null() ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_CRLSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CRLSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp)), sk_OSSL_CMP_CRLSTATUS_cmpfunc_thunk)) +#define sk_OSSL_CMP_CRLSTATUS_new_null() ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_CRLSTATUS_freefunc_thunk)) +#define sk_OSSL_CMP_CRLSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp), (n)), sk_OSSL_CMP_CRLSTATUS_cmpfunc_thunk)) #define sk_OSSL_CMP_CRLSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (n)) #define sk_OSSL_CMP_CRLSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk)) #define sk_OSSL_CMP_CRLSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk)) @@ -299,7 +299,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CRLSTATUS, OSSL_CMP_CRLSTATUS, OSSL_CMP_CR #define sk_OSSL_CMP_CRLSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) #define sk_OSSL_CMP_CRLSTATUS_pop(sk) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk))) #define sk_OSSL_CMP_CRLSTATUS_shift(sk) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk))) -#define sk_OSSL_CMP_CRLSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CRLSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CRLSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_freefunc_type(freefunc)) #define sk_OSSL_CMP_CRLSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr), (idx)) #define sk_OSSL_CMP_CRLSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr))) #define sk_OSSL_CMP_CRLSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) @@ -331,9 +331,9 @@ DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) #define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) #define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) -#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) -#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp)), sk_OSSL_CMP_PKISI_cmpfunc_thunk)) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_PKISI_freefunc_thunk)) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n)), sk_OSSL_CMP_PKISI_cmpfunc_thunk)) #define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) #define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) #define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) @@ -343,7 +343,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) #define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) #define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) #define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) -#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) #define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) #define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) #define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) @@ -361,9 +361,9 @@ typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) #define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) #define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) -#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) -#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp)), sk_OSSL_CMP_CERTREPMESSAGE_cmpfunc_thunk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_CERTREPMESSAGE_freefunc_thunk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n)), sk_OSSL_CMP_CERTREPMESSAGE_cmpfunc_thunk)) #define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) #define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) #define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) @@ -373,7 +373,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, O #define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) #define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) #define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) -#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) #define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) #define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) #define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) @@ -393,9 +393,9 @@ typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) #define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) #define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) -#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) -#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp)), sk_OSSL_CMP_CERTRESPONSE_cmpfunc_thunk)) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CMP_CERTRESPONSE_freefunc_thunk)) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n)), sk_OSSL_CMP_CERTRESPONSE_cmpfunc_thunk)) #define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) #define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) #define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) @@ -405,7 +405,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_ #define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) #define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) #define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) -#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) #define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) #define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) #define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) @@ -650,8 +650,9 @@ OSSL_CMP_MSG *OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, const OSSL_CMP_MSG *req); OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); -typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, - const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10, X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cms.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cms.h index 1fb568a8c..1ad0f4adc 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cms.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/cms.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cms.h.in * - * Copyright 2008-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -49,9 +49,9 @@ typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) #define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) #define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) -#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) -#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) -#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp)), sk_CMS_SignerInfo_cmpfunc_thunk)) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CMS_SignerInfo_freefunc_thunk)) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n)), sk_CMS_SignerInfo_cmpfunc_thunk)) #define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) #define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) #define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) @@ -61,7 +61,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) #define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) #define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) #define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) -#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) #define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) #define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) #define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) @@ -75,9 +75,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) #define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) #define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) -#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) -#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) -#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp)), sk_CMS_RecipientEncryptedKey_cmpfunc_thunk)) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CMS_RecipientEncryptedKey_freefunc_thunk)) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n)), sk_CMS_RecipientEncryptedKey_cmpfunc_thunk)) #define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) #define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) #define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) @@ -87,7 +87,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKe #define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) #define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) #define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) -#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) #define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) #define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) #define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) @@ -101,9 +101,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKe SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) #define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) #define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) -#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) -#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) -#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp)), sk_CMS_RecipientInfo_cmpfunc_thunk)) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CMS_RecipientInfo_freefunc_thunk)) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n)), sk_CMS_RecipientInfo_cmpfunc_thunk)) #define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) #define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) #define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) @@ -113,7 +113,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_Recipient #define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) #define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) #define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) -#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) #define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) #define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) #define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) @@ -127,9 +127,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_Recipient SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) #define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) #define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) -#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) -#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) -#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp)), sk_CMS_RevocationInfoChoice_cmpfunc_thunk)) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CMS_RevocationInfoChoice_freefunc_thunk)) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n)), sk_CMS_RevocationInfoChoice_cmpfunc_thunk)) #define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) #define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) #define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) @@ -139,7 +139,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, #define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) #define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) #define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) -#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) #define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) #define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) #define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) @@ -172,6 +172,7 @@ CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq) #define CMS_RECIPINFO_KEK 2 #define CMS_RECIPINFO_PASS 3 #define CMS_RECIPINFO_OTHER 4 +#define CMS_RECIPINFO_KEM 5 /* S/MIME related flags */ @@ -206,6 +207,7 @@ const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); +int CMS_dataFinal_ex(CMS_ContentInfo *cms, BIO *bio, BIO *data); ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); @@ -233,16 +235,13 @@ int CMS_final_digest(CMS_ContentInfo *cms, unsigned int flags); CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags); + const STACK_OF(X509) *certs, BIO *data, unsigned int flags); CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags, OSSL_LIB_CTX *libctx, - const char *propq); + const STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); -CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, - X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, unsigned int flags); +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, + EVP_PKEY *pkey, const STACK_OF(X509) *certs, unsigned int flags); int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); @@ -272,18 +271,17 @@ CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); -int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, +int CMS_verify(CMS_ContentInfo *cms, const STACK_OF(X509) *certs, X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, - STACK_OF(X509) *certs, - X509_STORE *store, unsigned int flags); + const STACK_OF(X509) *certs, X509_STORE *store, unsigned int flags); STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); -CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, +CMS_ContentInfo *CMS_encrypt(const STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); -CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, +CMS_ContentInfo *CMS_encrypt_ex(const STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); @@ -393,7 +391,7 @@ int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno); int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); -int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, +int CMS_set1_signers_certs(CMS_ContentInfo *cms, const STACK_OF(X509) *certs, unsigned int flags); void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, X509 **signer, X509_ALGOR **pdig, @@ -402,9 +400,10 @@ ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); int CMS_SignerInfo_sign(CMS_SignerInfo *si); int CMS_SignerInfo_verify(CMS_SignerInfo *si); int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); +int CMS_SignerInfo_verify_ex(CMS_SignerInfo *si, BIO *chain, BIO *data); BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, - STACK_OF(X509) *scerts, X509_STORE *store, - STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, + const STACK_OF(X509) *scerts, X509_STORE *store, + const STACK_OF(X509) *extra, const STACK_OF(X509_CRL) *crls, unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); @@ -430,7 +429,7 @@ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, +const void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *oid, int lastpos, int type); @@ -451,7 +450,7 @@ int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, +const void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); @@ -503,6 +502,14 @@ int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, ASN1_OCTET_STRING *ukm, int keylen); +int CMS_RecipientInfo_kemri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_kemri_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kemri_get0_ctx(CMS_RecipientInfo *ri); +X509_ALGOR *CMS_RecipientInfo_kemri_get0_kdf_alg(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kemri_set_ukm(CMS_RecipientInfo *ri, + const unsigned char *ukm, + int ukmLength); + /* Backward compatibility for spelling errors. */ #define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM #define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/comp.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/comp.h index 694e76cf3..355852744 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/comp.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/comp.h @@ -69,9 +69,9 @@ typedef struct ssl_comp_st SSL_COMP; SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) #define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) #define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) -#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) -#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) -#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp)), sk_SSL_COMP_cmpfunc_thunk)) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SSL_COMP_freefunc_thunk)) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n)), sk_SSL_COMP_cmpfunc_thunk)) #define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) #define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) #define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) @@ -81,7 +81,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) #define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) #define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) #define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) -#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_freefunc_type(freefunc)) #define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) #define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) #define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/conf.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/conf.h index 4e4ea8f74..4ae67aa37 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/conf.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/conf.h @@ -47,9 +47,9 @@ typedef struct { SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) #define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) #define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) -#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) -#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) -#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp)), sk_CONF_VALUE_cmpfunc_thunk)) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CONF_VALUE_freefunc_thunk)) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n)), sk_CONF_VALUE_cmpfunc_thunk)) #define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) #define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) #define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) @@ -59,7 +59,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) #define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) #define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) #define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) -#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_freefunc_type(freefunc)) #define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) #define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) #define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h index 004e35395..dbd9c3a46 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h @@ -38,8 +38,8 @@ extern "C" { # ifndef OPENSSL_NO_ACVP_TESTS # define OPENSSL_NO_ACVP_TESTS # endif -# ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG +# ifndef OPENSSL_NO_ALLOCFAIL_TESTS +# define OPENSSL_NO_ALLOCFAIL_TESTS # endif # ifndef OPENSSL_NO_APPS # define OPENSSL_NO_APPS @@ -77,9 +77,6 @@ extern "C" { # ifndef OPENSSL_NO_CAMELLIA # define OPENSSL_NO_CAMELLIA # endif -# ifndef OPENSSL_NO_CAPIENG -# define OPENSSL_NO_CAPIENG -# endif # ifndef OPENSSL_NO_CAST # define OPENSSL_NO_CAST # endif @@ -101,9 +98,6 @@ extern "C" { # ifndef OPENSSL_NO_CRYPTO_MDEBUG # define OPENSSL_NO_CRYPTO_MDEBUG # endif -# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# endif # ifndef OPENSSL_NO_CT # define OPENSSL_NO_CT # endif @@ -119,9 +113,6 @@ extern "C" { # ifndef OPENSSL_NO_DES # define OPENSSL_NO_DES # endif -# ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -# endif # ifndef OPENSSL_NO_DGRAM # define OPENSSL_NO_DGRAM # endif @@ -146,9 +137,15 @@ extern "C" { # ifndef OPENSSL_NO_DTLS1_2_METHOD # define OPENSSL_NO_DTLS1_2_METHOD # endif +# ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +# endif # ifndef OPENSSL_NO_EC2M # define OPENSSL_NO_EC2M # endif +# ifndef OPENSSL_NO_EC_EXPLICIT_CURVES +# define OPENSSL_NO_EC_EXPLICIT_CURVES +# endif # ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 # define OPENSSL_NO_EC_NISTP_64_GCC_128 # endif @@ -200,8 +197,8 @@ extern "C" { # ifndef OPENSSL_NO_KTLS # define OPENSSL_NO_KTLS # endif -# ifndef OPENSSL_NO_LOADERENG -# define OPENSSL_NO_LOADERENG +# ifndef OPENSSL_NO_LMS +# define OPENSSL_NO_LMS # endif # ifndef OPENSSL_NO_MD2 # define OPENSSL_NO_MD2 @@ -233,9 +230,6 @@ extern "C" { # ifndef OPENSSL_NO_OCSP # define OPENSSL_NO_OCSP # endif -# ifndef OPENSSL_NO_PADLOCKENG -# define OPENSSL_NO_PADLOCKENG -# endif # ifndef OPENSSL_NO_PIE # define OPENSSL_NO_PIE # endif @@ -305,15 +299,15 @@ extern "C" { # ifndef OPENSSL_NO_SSL_TRACE # define OPENSSL_NO_SSL_TRACE # endif -# ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -# endif -# ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -# endif # ifndef OPENSSL_NO_SSLKEYLOG # define OPENSSL_NO_SSLKEYLOG # endif +# ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +# endif +# ifndef OPENSSL_NO_STATIC_VCRUNTIME +# define OPENSSL_NO_STATIC_VCRUNTIME +# endif # ifndef OPENSSL_NO_STDIO # define OPENSSL_NO_STDIO # endif @@ -374,9 +368,6 @@ extern "C" { # ifndef OPENSSL_NO_ZSTD_DYNAMIC # define OPENSSL_NO_ZSTD_DYNAMIC # endif -# ifndef OPENSSL_NO_DYNAMIC_ENGINE -# define OPENSSL_NO_DYNAMIC_ENGINE -# endif /* clang-format on */ @@ -386,7 +377,10 @@ extern "C" { /* clang-format on */ /* - * The following are cipher-specific, but are part of the public API. + * The UEFI build supports both 32-bit and 64-bit builds from a single run + * of the Configure script. To allow this, they define THIRTY_TWO_BIT and + * SIXTY_FOUR_BIT appropriately for their builds, and we should not touch + * them in that case. */ #if !defined(OPENSSL_SYS_UEFI) /* clang-format off */ @@ -404,6 +398,9 @@ extern "C" { /* clang-format on */ #endif +/* + * The following are cipher-specific, but are part of the public API. + */ /* clang-format off */ # define RC4_INT unsigned int /* clang-format on */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-noec.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-noec.h index 7f933a7fe..0cedd96dd 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-noec.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-noec.h @@ -38,8 +38,8 @@ extern "C" { # ifndef OPENSSL_NO_ACVP_TESTS # define OPENSSL_NO_ACVP_TESTS # endif -# ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG +# ifndef OPENSSL_NO_ALLOCFAIL_TESTS +# define OPENSSL_NO_ALLOCFAIL_TESTS # endif # ifndef OPENSSL_NO_APPS # define OPENSSL_NO_APPS @@ -77,9 +77,6 @@ extern "C" { # ifndef OPENSSL_NO_CAMELLIA # define OPENSSL_NO_CAMELLIA # endif -# ifndef OPENSSL_NO_CAPIENG -# define OPENSSL_NO_CAPIENG -# endif # ifndef OPENSSL_NO_CAST # define OPENSSL_NO_CAST # endif @@ -101,9 +98,6 @@ extern "C" { # ifndef OPENSSL_NO_CRYPTO_MDEBUG # define OPENSSL_NO_CRYPTO_MDEBUG # endif -# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# endif # ifndef OPENSSL_NO_CT # define OPENSSL_NO_CT # endif @@ -119,9 +113,6 @@ extern "C" { # ifndef OPENSSL_NO_DES # define OPENSSL_NO_DES # endif -# ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -# endif # ifndef OPENSSL_NO_DGRAM # define OPENSSL_NO_DGRAM # endif @@ -146,12 +137,18 @@ extern "C" { # ifndef OPENSSL_NO_DTLS1_2_METHOD # define OPENSSL_NO_DTLS1_2_METHOD # endif +# ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +# endif # ifndef OPENSSL_NO_EC # define OPENSSL_NO_EC # endif # ifndef OPENSSL_NO_EC2M # define OPENSSL_NO_EC2M # endif +# ifndef OPENSSL_NO_EC_EXPLICIT_CURVES +# define OPENSSL_NO_EC_EXPLICIT_CURVES +# endif # ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 # define OPENSSL_NO_EC_NISTP_64_GCC_128 # endif @@ -212,8 +209,8 @@ extern "C" { # ifndef OPENSSL_NO_KTLS # define OPENSSL_NO_KTLS # endif -# ifndef OPENSSL_NO_LOADERENG -# define OPENSSL_NO_LOADERENG +# ifndef OPENSSL_NO_LMS +# define OPENSSL_NO_LMS # endif # ifndef OPENSSL_NO_MD2 # define OPENSSL_NO_MD2 @@ -245,9 +242,6 @@ extern "C" { # ifndef OPENSSL_NO_OCSP # define OPENSSL_NO_OCSP # endif -# ifndef OPENSSL_NO_PADLOCKENG -# define OPENSSL_NO_PADLOCKENG -# endif # ifndef OPENSSL_NO_PIE # define OPENSSL_NO_PIE # endif @@ -317,15 +311,15 @@ extern "C" { # ifndef OPENSSL_NO_SSL_TRACE # define OPENSSL_NO_SSL_TRACE # endif -# ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -# endif -# ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -# endif # ifndef OPENSSL_NO_SSLKEYLOG # define OPENSSL_NO_SSLKEYLOG # endif +# ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +# endif +# ifndef OPENSSL_NO_STATIC_VCRUNTIME +# define OPENSSL_NO_STATIC_VCRUNTIME +# endif # ifndef OPENSSL_NO_STDIO # define OPENSSL_NO_STDIO # endif @@ -386,9 +380,6 @@ extern "C" { # ifndef OPENSSL_NO_ZSTD_DYNAMIC # define OPENSSL_NO_ZSTD_DYNAMIC # endif -# ifndef OPENSSL_NO_DYNAMIC_ENGINE -# define OPENSSL_NO_DYNAMIC_ENGINE -# endif /* clang-format on */ @@ -398,7 +389,10 @@ extern "C" { /* clang-format on */ /* - * The following are cipher-specific, but are part of the public API. + * The UEFI build supports both 32-bit and 64-bit builds from a single run + * of the Configure script. To allow this, they define THIRTY_TWO_BIT and + * SIXTY_FOUR_BIT appropriately for their builds, and we should not touch + * them in that case. */ #if !defined(OPENSSL_SYS_UEFI) /* clang-format off */ @@ -416,6 +410,9 @@ extern "C" { /* clang-format on */ #endif +/* + * The following are cipher-specific, but are part of the public API. + */ /* clang-format off */ # define RC4_INT unsigned int /* clang-format on */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/core_names.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/core_names.h index e7e778997..fe4ea8284 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/core_names.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/core_names.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/core_names.h.in * - * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -67,10 +67,15 @@ extern "C" { /* Known KDF names */ #define OSSL_KDF_NAME_HKDF "HKDF" +#define OSSL_KDF_NAME_HKDF_SHA256 "HKDF-SHA256" +#define OSSL_KDF_NAME_HKDF_SHA384 "HKDF-SHA384" +#define OSSL_KDF_NAME_HKDF_SHA512 "HKDF-SHA512" #define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" #define OSSL_KDF_NAME_PBKDF1 "PBKDF1" #define OSSL_KDF_NAME_PBKDF2 "PBKDF2" #define OSSL_KDF_NAME_SCRYPT "SCRYPT" +#define OSSL_KDF_NAME_SNMPKDF "SNMPKDF" +#define OSSL_KDF_NAME_SRTPKDF "SRTPKDF" #define OSSL_KDF_NAME_SSHKDF "SSHKDF" #define OSSL_KDF_NAME_SSKDF "SSKDF" #define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" @@ -114,21 +119,17 @@ extern "C" { #define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" #define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" -/* Provider configuration variables */ -#define OSSL_PKEY_RETAIN_SEED "pkey_retain_seed" - /* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ /* clang-format off */ # define OSSL_ALG_PARAM_ALGORITHM_ID "algorithm-id" # define OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS "algorithm-id-params" # define OSSL_ALG_PARAM_CIPHER "cipher" # define OSSL_ALG_PARAM_DIGEST "digest" -# define OSSL_ALG_PARAM_ENGINE "engine" # define OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR "fips-indicator" # define OSSL_ALG_PARAM_MAC "mac" # define OSSL_ALG_PARAM_PROPERTIES "properties" +# define OSSL_ALG_PARAM_SECURITY_CATEGORY "security-category" # define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -# define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE # define OSSL_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR # define OSSL_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK # define OSSL_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED OSSL_PROV_PARAM_RSA_PKCS15_PAD_DISABLED @@ -167,6 +168,7 @@ extern "C" { # define OSSL_CAPABILITY_TLS_SIGALG_SECURITY_BITS "tls-sigalg-sec-bits" # define OSSL_CAPABILITY_TLS_SIGALG_SIG_NAME "tls-sigalg-sig-name" # define OSSL_CAPABILITY_TLS_SIGALG_SIG_OID "tls-sigalg-sig-oid" +# define OSSL_CIPHER_HMAC_PARAM_MAC OSSL_CIPHER_PARAM_AEAD_TAG # define OSSL_CIPHER_PARAM_AEAD "aead" # define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN # define OSSL_CIPHER_PARAM_AEAD_IV_GENERATED "iv-generated" @@ -186,6 +188,7 @@ extern "C" { # define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" # define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" # define OSSL_CIPHER_PARAM_DECRYPT_ONLY "decrypt-only" +# define OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC "encrypt-then-mac" # define OSSL_CIPHER_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR # define OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK "encrypt-check" # define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" @@ -218,8 +221,15 @@ extern "C" { # define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES # define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" # define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" +# define OSSL_DIGEST_PARAM_CUSTOMIZATION "customization" +# define OSSL_DIGEST_PARAM_FUNCTION_NAME "function-name" # define OSSL_DIGEST_PARAM_MICALG "micalg" +# define OSSL_DIGEST_PARAM_MU_CONTEXT_STRING "context-string" +# define OSSL_DIGEST_PARAM_MU_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_DIGEST_PARAM_MU_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_DIGEST_PARAM_MU_PUB_KEY "pub" # define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" +# define OSSL_DIGEST_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES # define OSSL_DIGEST_PARAM_SIZE "size" # define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" # define OSSL_DIGEST_PARAM_XOF "xof" @@ -303,6 +313,10 @@ extern "C" { # define OSSL_KDF_PARAM_SECRET "secret" # define OSSL_KDF_PARAM_SEED "seed" # define OSSL_KDF_PARAM_SIZE "size" +# define OSSL_KDF_PARAM_SNMPKDF_EID "eid" +# define OSSL_KDF_PARAM_SRTPKDF_INDEX "index" +# define OSSL_KDF_PARAM_SRTPKDF_KDR "kdr" +# define OSSL_KDF_PARAM_SRTPKDF_LABEL "label" # define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" # define OSSL_KDF_PARAM_SSHKDF_TYPE "type" # define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" @@ -359,6 +373,8 @@ extern "C" { # define OSSL_PKEY_PARAM_ALGORITHM_ID_PARAMS OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS # define OSSL_PKEY_PARAM_BITS "bits" # define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_PKEY_PARAM_CMS_KEMRI_KDF_ALGORITHM "kemri-kdf-alg" +# define OSSL_PKEY_PARAM_CMS_RI_TYPE "ri-type" # define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" # define OSSL_PKEY_PARAM_DHKEM_IKM "dhkem-ikm" # define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" @@ -377,6 +393,7 @@ extern "C" { # define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" # define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" # define OSSL_PKEY_PARAM_EC_ENCODING "encoding" +# define OSSL_PKEY_PARAM_EC_FIELD_DEGREE "field-degree" # define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" # define OSSL_PKEY_PARAM_EC_GENERATOR "generator" # define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" @@ -388,7 +405,6 @@ extern "C" { # define OSSL_PKEY_PARAM_EC_PUB_Y "qy" # define OSSL_PKEY_PARAM_EC_SEED "seed" # define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -# define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE # define OSSL_PKEY_PARAM_FFC_COFACTOR "j" # define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST # define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES @@ -427,10 +443,13 @@ extern "C" { # define OSSL_PKEY_PARAM_ML_KEM_PREFER_SEED "ml-kem.prefer_seed" # define OSSL_PKEY_PARAM_ML_KEM_RETAIN_SEED "ml-kem.retain_seed" # define OSSL_PKEY_PARAM_ML_KEM_SEED "seed" +# define OSSL_PKEY_PARAM_OUTPUT_FORMATS "output_formats" # define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" # define OSSL_PKEY_PARAM_PRIV_KEY "priv" # define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES # define OSSL_PKEY_PARAM_PUB_KEY "pub" +# define OSSL_PKEY_PARAM_RSA_A "rsa-a" +# define OSSL_PKEY_PARAM_RSA_B "rsa-b" # define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS # define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" # define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 "rsa-coefficient1" @@ -485,6 +504,7 @@ extern "C" { # define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" # define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" # define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" +# define OSSL_PKEY_PARAM_SECURITY_CATEGORY OSSL_ALG_PARAM_SECURITY_CATEGORY # define OSSL_PKEY_PARAM_SLH_DSA_SEED "seed" # define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH OSSL_PKEY_PARAM_USE_COFACTOR_FLAG # define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" @@ -559,6 +579,7 @@ extern "C" { # define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" # define OSSL_SIGNATURE_PARAM_SIGNATURE "signature" # define OSSL_SIGNATURE_PARAM_TEST_ENTROPY "test-entropy" +# define OSSL_SIGNATURE_PARAM_TLS_VERSION "tls-version" # define OSSL_SKEY_PARAM_KEY_LENGTH "key-length" # define OSSL_SKEY_PARAM_RAW_BYTES "raw-bytes" # define OSSL_STORE_PARAM_ALIAS "alias" diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crmf.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crmf.h index 1bdaf2181..5b0af8ec1 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crmf.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crmf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crmf.h.in * - * Copyright 2007-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2026 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -59,9 +59,9 @@ DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) #define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) #define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) -#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) -#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp)), sk_OSSL_CRMF_MSG_cmpfunc_thunk)) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CRMF_MSG_freefunc_thunk)) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n)), sk_OSSL_CRMF_MSG_cmpfunc_thunk)) #define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) #define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) #define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) @@ -71,7 +71,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) #define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) #define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) #define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) -#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) #define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) #define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) #define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) @@ -91,9 +91,9 @@ DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, OSSL_CRMF_ATTRIBUTETYPEANDVALUE, OSSL_CRMF_ATTRIBUTETYPEANDVALUE) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_value(sk, idx) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (idx))) -#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new(cmp) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp))) -#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_null() ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new(cmp) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp)), sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_cmpfunc_thunk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_null() ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_thunk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp), (n)), sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_cmpfunc_thunk)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (n)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) @@ -103,7 +103,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, OSSL_CRMF_ATTRIBUT #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop(sk) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_shift(sk) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))) -#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk),ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_type(freefunc)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr), (idx)) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_set(sk, idx, ptr) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (idx), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr))) #define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) @@ -128,9 +128,9 @@ DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) #define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) #define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) -#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) -#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) -#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp)), sk_OSSL_CRMF_CERTID_cmpfunc_thunk)) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_CRMF_CERTID_freefunc_thunk)) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n)), sk_OSSL_CRMF_CERTID_cmpfunc_thunk)) #define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) #define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) #define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) @@ -140,7 +140,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTI #define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) #define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) #define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) -#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) #define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) #define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) #define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) @@ -267,7 +267,7 @@ EVP_PKEY *OSSL_CRMF_ENCRYPTEDKEY_get1_pkey(const OSSL_CRMF_ENCRYPTEDKEY *encrypt X509_STORE *ts, STACK_OF(X509) *extra, EVP_PKEY *pkey, X509 *cert, ASN1_OCTET_STRING *secret, OSSL_LIB_CTX *libctx, const char *propq); -int OSSL_CRMF_MSG_centralkeygen_requested(const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr); +int OSSL_CRMF_MSG_centralkeygen_requested(const OSSL_CRMF_MSG *crm, const X509_REQ *p10); #ifndef OPENSSL_NO_CMS OSSL_CRMF_ENCRYPTEDKEY *OSSL_CRMF_ENCRYPTEDKEY_init_envdata(CMS_EnvelopedData *envdata); #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crypto.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crypto.h index 89444371c..554ba9922 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crypto.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/crypto.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crypto.h.in * - * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the Apache License 2.0 (the "License"). You may not use @@ -96,6 +96,7 @@ int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock); int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_store_int(int *dst, int val, CRYPTO_RWLOCK *lock); /* No longer needed, so this is a no-op */ #define OPENSSL_malloc_init() \ @@ -106,13 +107,25 @@ int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock); CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_zalloc(num) \ CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_malloc_array(num, size) \ + CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_calloc(num, size) \ + CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_aligned_alloc(num, alignment, freeptr) \ CRYPTO_aligned_alloc(num, alignment, freeptr, \ OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_aligned_alloc_array(num, size, alignment, freeptr) \ + CRYPTO_aligned_alloc_array(num, size, alignment, freeptr, \ + OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_realloc(addr, num) \ CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_clear_realloc(addr, old_num, num) \ CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_realloc_array(addr, num, size) \ + CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_clear_realloc_array(addr, old_num, num, size) \ + CRYPTO_clear_realloc_array(addr, old_num, num, size, \ + OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_clear_free(addr, num) \ CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_free(addr) \ @@ -127,6 +140,10 @@ int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock); CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_secure_zalloc(num) \ CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_secure_malloc_array(num, size) \ + CRYPTO_secure_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE) +#define OPENSSL_secure_calloc(num, size) \ + CRYPTO_secure_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_secure_free(addr) \ CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) #define OPENSSL_secure_clear_free(addr, num) \ @@ -202,9 +219,9 @@ struct crypto_ex_data_st { SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) #define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) #define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) -#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) -#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) -#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp)), sk_void_cmpfunc_thunk)) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_void_freefunc_thunk)) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n)), sk_void_cmpfunc_thunk)) #define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) #define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) #define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) @@ -214,7 +231,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) #define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) #define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) #define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) -#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk), ossl_check_void_freefunc_type(freefunc)) #define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) #define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) #define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) @@ -362,9 +379,16 @@ void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc_array(size_t num, size_t size, + const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_calloc(size_t num, size_t size, + const char *file, int line); OSSL_CRYPTO_ALLOC void *CRYPTO_aligned_alloc(size_t num, size_t align, void **freeptr, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_aligned_alloc_array(size_t num, size_t size, + size_t align, void **freeptr, + const char *file, int line); void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); char *CRYPTO_strdup(const char *str, const char *file, int line); char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); @@ -373,11 +397,19 @@ void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, const char *file, int line); +void *CRYPTO_realloc_array(void *addr, size_t num, size_t size, + const char *file, int line); +void *CRYPTO_clear_realloc_array(void *addr, size_t old_num, size_t num, + size_t size, const char *file, int line); int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); int CRYPTO_secure_malloc_done(void); OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc_array(size_t num, size_t size, + const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_calloc(size_t num, size_t size, + const char *file, int line); void CRYPTO_secure_free(void *ptr, const char *file, int line); void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line); @@ -479,13 +511,6 @@ int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len); #define OPENSSL_INIT_LOAD_CONFIG 0x00000040L #define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L #define OPENSSL_INIT_ASYNC 0x00000100L -#define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L -#define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L -#define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L -#define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L -#define OPENSSL_INIT_ENGINE_CAPI 0x00002000L -#define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L -#define OPENSSL_INIT_ENGINE_AFALG 0x00008000L /* FREE: 0x00010000L */ #define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ @@ -499,15 +524,22 @@ int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len); /* FREE: 0x80000000L */ /* Max OPENSSL_INIT flag value is 0x80000000 */ -/* openssl and dasync not counted as builtin */ -#define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ - (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ - | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | OPENSSL_INIT_ENGINE_PADLOCK) +/* ENGINEs are no longer available */ +#define OPENSSL_INIT_ENGINE_ALL_BUILTIN 0 + +#ifdef OPENSSL_ENGINE_STUBS +#define OPENSSL_INIT_ENGINE_RDRAND 0 +#define OPENSSL_INIT_ENGINE_DYNAMIC 0 +#define OPENSSL_INIT_ENGINE_OPENSSL 0 +#define OPENSSL_INIT_ENGINE_CRYPTODEV 0 +#define OPENSSL_INIT_ENGINE_CAPI 0 +#define OPENSSL_INIT_ENGINE_PADLOCK 0 +#define OPENSSL_INIT_ENGINE_AFALG 0 +#endif /* Library initialisation functions */ void OPENSSL_cleanup(void); int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); -int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ct.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ct.h index 74b60ebe3..1120dfe88 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ct.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ct.h @@ -44,9 +44,9 @@ extern "C" { SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) #define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) #define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) -#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) -#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) -#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp)), sk_SCT_cmpfunc_thunk)) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SCT_freefunc_thunk)) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n)), sk_SCT_cmpfunc_thunk)) #define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) #define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) #define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) @@ -56,7 +56,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) #define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) #define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) #define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) -#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk), ossl_check_SCT_freefunc_type(freefunc)) #define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) #define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) #define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) @@ -70,9 +70,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) #define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) #define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) -#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) -#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) -#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp)), sk_CTLOG_cmpfunc_thunk)) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_CTLOG_freefunc_thunk)) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n)), sk_CTLOG_cmpfunc_thunk)) #define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) #define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) #define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) @@ -82,7 +82,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) #define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) #define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) #define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) -#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_freefunc_type(freefunc)) #define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) #define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) #define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/e_os2.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/e_os2.h new file mode 100644 index 000000000..e4dd68cc4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/e_os2.h @@ -0,0 +1,293 @@ +/* + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_E_OS2_H +#define OPENSSL_E_OS2_H +#pragma once + +#include +#ifndef OPENSSL_NO_DEPRECATED_3_0 +#define HEADER_E_OS2_H +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +#define OPENSSL_SYS_UNIX + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +#if defined(OPENSSL_SYS_MSDOS) +#undef OPENSSL_SYS_UNIX +#endif + +/* + * For 32 bit environment, there seems to be the CygWin environment and then + * all the others that try to do the same thing Microsoft does... + */ +/* + * UEFI lives here because it might be built with a Microsoft toolchain and + * we need to avoid the false positive match on Windows. + */ +#if defined(OPENSSL_SYS_UEFI) +#undef OPENSSL_SYS_UNIX +#elif defined(OPENSSL_SYS_UWIN) +#undef OPENSSL_SYS_UNIX +#define OPENSSL_SYS_WIN32_UWIN +#else +#if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) +#define OPENSSL_SYS_WIN32_CYGWIN +#else +#if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) +#undef OPENSSL_SYS_UNIX +#if !defined(OPENSSL_SYS_WIN32) +#define OPENSSL_SYS_WIN32 +#endif +#endif +#if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) +#undef OPENSSL_SYS_UNIX +#if !defined(OPENSSL_SYS_WIN64) +#define OPENSSL_SYS_WIN64 +#endif +#endif +#if defined(OPENSSL_SYS_WINNT) +#undef OPENSSL_SYS_UNIX +#endif +#if defined(OPENSSL_SYS_WINCE) +#undef OPENSSL_SYS_UNIX +#endif +#endif +#endif + +/* Anything that tries to look like Microsoft is "Windows" */ +#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +#undef OPENSSL_SYS_UNIX +#define OPENSSL_SYS_WINDOWS +#ifndef OPENSSL_SYS_MSDOS +#define OPENSSL_SYS_MSDOS +#endif +#endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementer how he or she will link the application, so it + * requires some macro to be used. + */ +#ifdef OPENSSL_SYS_WINDOWS +#ifndef OPENSSL_OPT_WINDLL +#if defined(_WINDLL) /* This is used when building OpenSSL to \ + * indicate that DLL linkage should be used */ +#define OPENSSL_OPT_WINDLL +#endif +#endif +#endif + +/* ------------------------------- OpenVMS -------------------------------- */ +#if defined(__VMS) || defined(VMS) +#if !defined(OPENSSL_SYS_VMS) +#undef OPENSSL_SYS_UNIX +#define OPENSSL_SYS_VMS +#endif +#if defined(__DECC) +#define OPENSSL_SYS_VMS_DECC +#elif defined(__DECCXX) +#define OPENSSL_SYS_VMS_DECC +#define OPENSSL_SYS_VMS_DECCXX +#else +#define OPENSSL_SYS_VMS_NODECC +#endif +#endif + +/* -------------------------------- Unix ---------------------------------- */ +#ifdef OPENSSL_SYS_UNIX +#if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) +#define OPENSSL_SYS_LINUX +#endif +#if defined(_AIX) && !defined(OPENSSL_SYS_AIX) +#define OPENSSL_SYS_AIX +#endif +#endif + +/* -------------------------------- VOS ----------------------------------- */ +#if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) +#define OPENSSL_SYS_VOS +#ifdef __HPPA__ +#define OPENSSL_SYS_VOS_HPPA +#endif +#ifdef __IA32__ +#define OPENSSL_SYS_VOS_IA32 +#endif +#endif + +/* ---------------------------- HP NonStop -------------------------------- */ +#ifdef __TANDEM +#ifdef _STRING +#include +#endif +#define OPENSSL_USE_BUILD_DATE +#if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +#define SPT_THREAD_SIGNAL 1 +#define SPT_THREAD_AWARE 1 +#include +#elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +#include +#endif +#endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/*- + * OPENSSL_EXTERN is normally used to declare a symbol with possible extra + * attributes to handle its presence in a shared library. + * OPENSSL_EXPORT is used to define a symbol with extra possible attributes + * to make it visible in a shared library. + * Care needs to be taken when a header file is used both to declare and + * define symbols. Basically, for any library that exports some global + * variables, the following code must be present in the header file that + * declares them, before OPENSSL_EXTERN is used: + * + * #ifdef SOME_BUILD_FLAG_MACRO + * # undef OPENSSL_EXTERN + * # define OPENSSL_EXTERN OPENSSL_EXPORT + * #endif + * + * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN + * have some generally sensible values. + */ + +#if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +#define OPENSSL_EXPORT extern __declspec(dllexport) +#define OPENSSL_EXTERN extern __declspec(dllimport) +#else +#define OPENSSL_EXPORT extern +#define OPENSSL_EXTERN extern +#endif + +#if defined(UNUSEDRESULT_DEBUG) +#define __owur __attribute__((__warn_unused_result__)) +#else +#define __owur +#endif + +/* Standard integer types */ +#define OPENSSL_NO_INTTYPES_H +#define OPENSSL_NO_STDINT_H +#if defined(OPENSSL_SYS_UEFI) +typedef INT8 int8_t; +typedef UINT8 uint8_t; +typedef INT16 int16_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef INT64 int64_t; +typedef UINT64 uint64_t; +typedef UINTN uintptr_t; +#ifndef OSSL_SSIZE_MAX +typedef INTN ossl_ssize_t; +#define OSSL_SSIZE_MAX MAX_INTN +#endif +#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__osf__) || defined(__sgi) || defined(__hpux) || defined(OPENSSL_SYS_VMS) || defined(__OpenBSD__) +#include +#undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +#undef OPENSSL_NO_STDINT_H +#elif defined(OPENSSL_SYS_TANDEM) +#include +#include +#else +#include +#undef OPENSSL_NO_STDINT_H +#endif + +#if defined(_WIN32) && !defined(OSSL_SSIZE_MAX) +#ifdef _WIN64 +typedef int64_t ossl_ssize_t; +#define OSSL_SSIZE_MAX INT64_MAX +#else +typedef int ossl_ssize_t; +#define OSSL_SSIZE_MAX INT_MAX +#endif +#endif + +#ifndef OSSL_SSIZE_MAX +#include +typedef ssize_t ossl_ssize_t; +#if defined(SSIZE_MAX) +#define OSSL_SSIZE_MAX SSIZE_MAX +#elif defined(_POSIX_SSIZE_MAX) +#define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +#else +#define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX >> 1)) +#endif +#endif + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +#else +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; +#endif + +/* ossl_inline: portable inline definition usable in public headers */ +#if !defined(inline) && !defined(__cplusplus) +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* just use inline */ +#define ossl_inline inline +#elif defined(__GNUC__) && __GNUC__ >= 2 +#define ossl_inline __inline__ +#elif defined(_MSC_VER) +/* + * Visual Studio: inline is available in C++ only, however + * __inline is available for C, see + * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx + */ +#define ossl_inline __inline +#else +#define ossl_inline +#endif +#else +#define ossl_inline inline +#endif + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__cplusplus) +#define ossl_noreturn _Noreturn +#elif defined(__GNUC__) && __GNUC__ >= 2 +#define ossl_noreturn __attribute__((noreturn)) +#else +#define ossl_noreturn +#endif + +/* ossl_unused: portable unused attribute for use in public headers */ +#if defined(__GNUC__) +#define ossl_unused __attribute__((unused)) +#else +#define ossl_unused +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/err.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/err.h index 9370364dd..e121693b1 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/err.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -50,25 +50,6 @@ extern "C" { #define ERR_TXT_MALLOCED 0x01 #define ERR_TXT_STRING 0x02 -#if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) -#define ERR_FLAG_MARK 0x01 -#define ERR_FLAG_CLEAR 0x02 - -#define ERR_NUM_ERRORS 16 -struct err_state_st { - int err_flags[ERR_NUM_ERRORS]; - int err_marks[ERR_NUM_ERRORS]; - unsigned long err_buffer[ERR_NUM_ERRORS]; - char *err_data[ERR_NUM_ERRORS]; - size_t err_data_size[ERR_NUM_ERRORS]; - int err_data_flags[ERR_NUM_ERRORS]; - char *err_file[ERR_NUM_ERRORS]; - int err_line[ERR_NUM_ERRORS]; - char *err_func[ERR_NUM_ERRORS]; - int top, bottom; -}; -#endif - /* library */ #define ERR_LIB_NONE 1 #define ERR_LIB_SYS 2 @@ -280,34 +261,6 @@ static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) #define ERR_PACK(lib, func, reason) \ ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK))) -#ifndef OPENSSL_NO_DEPRECATED_3_0 -#define SYS_F_FOPEN 0 -#define SYS_F_CONNECT 0 -#define SYS_F_GETSERVBYNAME 0 -#define SYS_F_SOCKET 0 -#define SYS_F_IOCTLSOCKET 0 -#define SYS_F_BIND 0 -#define SYS_F_LISTEN 0 -#define SYS_F_ACCEPT 0 -#define SYS_F_WSASTARTUP 0 -#define SYS_F_OPENDIR 0 -#define SYS_F_FREAD 0 -#define SYS_F_GETADDRINFO 0 -#define SYS_F_GETNAMEINFO 0 -#define SYS_F_SETSOCKOPT 0 -#define SYS_F_GETSOCKOPT 0 -#define SYS_F_GETSOCKNAME 0 -#define SYS_F_GETHOSTBYNAME 0 -#define SYS_F_FFLUSH 0 -#define SYS_F_OPEN 0 -#define SYS_F_CLOSE 0 -#define SYS_F_IOCTL 0 -#define SYS_F_STAT 0 -#define SYS_F_FCNTL 0 -#define SYS_F_FSTAT 0 -#define SYS_F_SENDFILE 0 -#endif - /* * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. */ @@ -486,15 +439,6 @@ int ERR_unload_strings(int lib, ERR_STRING_DATA *str); while (0) \ continue #endif -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); -#endif -#ifndef OPENSSL_NO_DEPRECATED_1_0_0 -OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); -#endif -#ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); -#endif int ERR_get_next_error_library(void); diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ess.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ess.h index d3ffed0a6..a9caadd58 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ess.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ess.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ess.h.in * - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -36,9 +36,9 @@ typedef struct ESS_signing_cert ESS_SIGNING_CERT; SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) #define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) #define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) -#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) -#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) -#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp)), sk_ESS_CERT_ID_cmpfunc_thunk)) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ESS_CERT_ID_freefunc_thunk)) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n)), sk_ESS_CERT_ID_cmpfunc_thunk)) #define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) #define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) #define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) @@ -48,7 +48,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) #define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) #define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) #define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) -#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) #define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) #define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) #define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) @@ -69,9 +69,9 @@ typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) #define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) #define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) -#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) -#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) -#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp)), sk_ESS_CERT_ID_V2_cmpfunc_thunk)) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ESS_CERT_ID_V2_freefunc_thunk)) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n)), sk_ESS_CERT_ID_V2_cmpfunc_thunk)) #define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) #define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) #define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) @@ -81,7 +81,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) #define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) #define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) #define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) -#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) #define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) #define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) #define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) @@ -124,7 +124,12 @@ int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, const ESS_SIGNING_CERT_V2 *ssv2, const STACK_OF(X509) *chain, int require_signing_cert); - +int OSSL_ESS_check_signing_certs_ex(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + OSSL_LIB_CTX *libctx, + const char *propq, + int require_signing_cert); #ifdef __cplusplus } #endif diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ocsp.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ocsp.h index 2b68386bd..f5446c9d4 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ocsp.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ocsp.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ocsp.h.in * - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -97,9 +97,9 @@ typedef struct ocsp_request_st OCSP_REQUEST; SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) #define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) #define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) -#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) -#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) -#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp)), sk_OCSP_CERTID_cmpfunc_thunk)) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OCSP_CERTID_freefunc_thunk)) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n)), sk_OCSP_CERTID_cmpfunc_thunk)) #define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) #define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) #define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) @@ -109,7 +109,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) #define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) #define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) #define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) -#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_freefunc_type(freefunc)) #define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) #define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) #define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) @@ -123,9 +123,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) #define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) #define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) -#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) -#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) -#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp)), sk_OCSP_ONEREQ_cmpfunc_thunk)) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OCSP_ONEREQ_freefunc_thunk)) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n)), sk_OCSP_ONEREQ_cmpfunc_thunk)) #define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) #define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) #define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) @@ -135,7 +135,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) #define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) #define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) #define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) -#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) #define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) #define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) #define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) @@ -165,9 +165,9 @@ typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) #define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) #define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) -#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) -#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) -#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp)), sk_OCSP_RESPID_cmpfunc_thunk)) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OCSP_RESPID_freefunc_thunk)) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n)), sk_OCSP_RESPID_cmpfunc_thunk)) #define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) #define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) #define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) @@ -177,7 +177,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) #define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) #define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) #define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) -#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_freefunc_type(freefunc)) #define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) #define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) #define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) @@ -204,9 +204,9 @@ typedef struct ocsp_single_response_st OCSP_SINGLERESP; SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) #define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) #define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) -#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) -#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) -#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp)), sk_OCSP_SINGLERESP_cmpfunc_thunk)) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OCSP_SINGLERESP_freefunc_thunk)) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n)), sk_OCSP_SINGLERESP_cmpfunc_thunk)) #define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) #define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) #define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) @@ -216,7 +216,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) #define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) #define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) #define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) -#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) #define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) #define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) #define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) @@ -320,7 +320,7 @@ int OCSP_request_sign(OCSP_REQUEST *req, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); + const STACK_OF(X509) *certs, unsigned long flags); int OCSP_response_status(OCSP_RESPONSE *resp); OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); @@ -329,7 +329,7 @@ const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, - STACK_OF(X509) *extra_certs); + const STACK_OF(X509) *extra_certs); int OCSP_resp_count(OCSP_BASICRESP *bs); OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); @@ -355,7 +355,7 @@ int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); -int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, +int OCSP_request_verify(OCSP_REQUEST *req, const STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); #define OCSP_parse_url(url, host, port, path, ssl) \ @@ -381,10 +381,10 @@ OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); int OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); + const STACK_OF(X509) *certs, unsigned long flags); int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, - STACK_OF(X509) *certs, unsigned long flags); + const STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, const char *propq); @@ -406,24 +406,24 @@ int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, int lastpos); int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); -X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +const X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, int *idx); int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, unsigned long flags); -int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, const X509_EXTENSION *ex, int loc); int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +const X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, unsigned long flags); -int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, const X509_EXTENSION *ex, int loc); int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); @@ -431,13 +431,13 @@ int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, int lastpos); int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, int lastpos); -X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +const X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, int *idx); int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, int crit, unsigned long flags); -int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, const X509_EXTENSION *ex, int loc); int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); @@ -445,13 +445,13 @@ int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, int lastpos); int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, int lastpos); -X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +const X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, int *idx); int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, int crit, unsigned long flags); -int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, const X509_EXTENSION *ex, int loc); const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) @@ -477,7 +477,7 @@ const char *OCSP_crl_reason_str(long s); int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); -int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, +int OCSP_basic_verify(OCSP_BASICRESP *bs, const STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags); #ifdef __cplusplus diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/opensslv.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/opensslv.h index b18fda8dd..43619151c 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/opensslv.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/opensslv.h @@ -28,13 +28,13 @@ extern "C" { * These macros express version number MAJOR.MINOR.PATCH exactly */ /* clang-format off */ -# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MAJOR 4 /* clang-format on */ /* clang-format off */ -# define OPENSSL_VERSION_MINOR 5 +# define OPENSSL_VERSION_MINOR 0 /* clang-format on */ /* clang-format off */ -# define OPENSSL_VERSION_PATCH 5 +# define OPENSSL_VERSION_PATCH 0 /* clang-format on */ /* @@ -46,7 +46,7 @@ extern "C" { /* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ /* clang-format off */ -# define OPENSSL_VERSION_PRE_RELEASE "" +# define OPENSSL_VERSION_PRE_RELEASE "-beta1" /* clang-format on */ /* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ /* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ @@ -68,7 +68,7 @@ extern "C" { * This is defined in free form. */ /* clang-format off */ -# define OPENSSL_SHLIB_VERSION 3 +# define OPENSSL_SHLIB_VERSION 4 /* clang-format on */ /* @@ -87,10 +87,10 @@ extern "C" { * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ /* clang-format off */ -# define OPENSSL_VERSION_STR "3.5.5" +# define OPENSSL_VERSION_STR "4.0.0" /* clang-format on */ /* clang-format off */ -# define OPENSSL_FULL_VERSION_STR "3.5.5" +# define OPENSSL_FULL_VERSION_STR "4.0.0-beta1" /* clang-format on */ /* @@ -99,7 +99,7 @@ extern "C" { * These strings are defined separately to allow them to be parsable. */ /* clang-format off */ -# define OPENSSL_RELEASE_DATE "27 Jan 2026" +# define OPENSSL_RELEASE_DATE "24 Mar 2026" /* clang-format on */ /* @@ -107,7 +107,7 @@ extern "C" { */ /* clang-format off */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.5.5 27 Jan 2026" +# define OPENSSL_VERSION_TEXT "OpenSSL 4.0.0-beta1 24 Mar 2026" /* clang-format on */ /* clang-format off */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs12.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs12.h index 171fa5149..66209c0b4 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs12.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs12.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs12.h.in * - * Copyright 1999-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -46,8 +46,14 @@ extern "C" { #define PKCS12_MAC_KEY_LENGTH 20 -/* The macro is expected to be used only internally. Kept for backwards compatibility. */ -#define PKCS12_SALT_LEN 8 +/* + * The macro is expected to be used only internally. Kept for + * backwards compatibility. NIST requires 16, previous value was + * 8. Allow to override this at compile time. + */ +#ifndef PKCS12_SALT_LEN +#define PKCS12_SALT_LEN 16 +#endif /* It's not clear if these are actually needed... */ #define PKCS12_key_gen PKCS12_key_gen_utf8 @@ -68,9 +74,9 @@ typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) #define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) #define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) -#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) -#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) -#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp)), sk_PKCS12_SAFEBAG_cmpfunc_thunk)) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_PKCS12_SAFEBAG_freefunc_thunk)) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n)), sk_PKCS12_SAFEBAG_cmpfunc_thunk)) #define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) #define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) #define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) @@ -80,7 +86,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) #define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) #define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) #define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) -#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) #define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) #define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) #define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) @@ -118,11 +124,11 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; #endif #ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, +OSSL_DEPRECATEDIN_1_1_0 const ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid); #endif -ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +const ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); int PKCS12_mac_present(const PKCS12 *p12); void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, const X509_ALGOR **pmacalg, @@ -208,7 +214,7 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); -int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); @@ -223,7 +229,7 @@ int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, const unsigned char *bytes, int len); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); -ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, +const ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); const STACK_OF(X509_ATTRIBUTE) * diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs7.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs7.h index a88cb93d0..45991c95f 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs7.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/pkcs7.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs7.h.in * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -71,9 +71,9 @@ typedef struct pkcs7_signer_info_st { SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) #define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) #define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) -#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) -#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) -#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp)), sk_PKCS7_SIGNER_INFO_cmpfunc_thunk)) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_PKCS7_SIGNER_INFO_freefunc_thunk)) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n)), sk_PKCS7_SIGNER_INFO_cmpfunc_thunk)) #define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) #define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) #define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) @@ -83,7 +83,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_ #define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) #define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) #define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) -#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) #define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) #define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) #define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) @@ -109,9 +109,9 @@ typedef struct pkcs7_recip_info_st { SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) #define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) #define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) -#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) -#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) -#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp)), sk_PKCS7_RECIP_INFO_cmpfunc_thunk)) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_PKCS7_RECIP_INFO_freefunc_thunk)) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n)), sk_PKCS7_RECIP_INFO_cmpfunc_thunk)) #define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) #define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) #define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) @@ -121,7 +121,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INF #define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) #define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) #define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) -#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) #define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) #define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) #define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) @@ -225,9 +225,9 @@ typedef struct pkcs7_st { SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) #define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) #define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) -#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) -#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) -#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp)), sk_PKCS7_cmpfunc_thunk)) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_PKCS7_freefunc_thunk)) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n)), sk_PKCS7_cmpfunc_thunk)) #define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) #define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) #define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) @@ -237,7 +237,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) #define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) #define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) #define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) -#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_freefunc_type(freefunc)) #define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) #define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) #define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) @@ -355,7 +355,7 @@ int PKCS7_content_new(PKCS7 *p7, int nid); int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, - X509 *signer); + const X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); @@ -378,36 +378,33 @@ int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); -ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +const ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); -ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); +const ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +const ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); -PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, const STACK_OF(X509) *certs, BIO *data, int flags); -PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, - BIO *data, int flags, OSSL_LIB_CTX *libctx, - const char *propq); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, const STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, const char *propq); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md, int flags); int PKCS7_final(PKCS7 *p7, BIO *data, int flags); -int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, +int PKCS7_verify(PKCS7 *p7, const STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int flags); -STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, - int flags); -PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, - int flags); -PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, const STACK_OF(X509) *certs, int flags); +PKCS7 *PKCS7_encrypt(const STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); +PKCS7 *PKCS7_encrypt_ex(const STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags, OSSL_LIB_CTX *libctx, const char *propq); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/safestack.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/safestack.h index 16b6e3150..5f7c6c67b 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/safestack.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/safestack.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/safestack.h.in * - * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -33,34 +33,47 @@ extern "C" { #define STACK_OF(type) struct stack_st_##type /* Helper macro for internal use */ -#define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ - STACK_OF(t1); \ - typedef int (*sk_##t1##_compfunc)(const t3 *const *a, const t3 *const *b); \ - typedef void (*sk_##t1##_freefunc)(t3 * a); \ - typedef t3 *(*sk_##t1##_copyfunc)(const t3 *a); \ - static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ - { \ - return ptr; \ - } \ - static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ - { \ - return (const OPENSSL_STACK *)sk; \ - } \ - static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ - { \ - return (OPENSSL_STACK *)sk; \ - } \ - static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ - { \ - return (OPENSSL_sk_compfunc)cmp; \ - } \ - static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ - { \ - return (OPENSSL_sk_copyfunc)cpy; \ - } \ - static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ - { \ - return (OPENSSL_sk_freefunc)fr; \ +#define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 *const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 * a); \ + typedef t3 *(*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_inline void sk_##t1##_freefunc_thunk(OPENSSL_sk_freefunc freefunc_arg, void *ptr) \ + { \ + sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc)freefunc_arg; \ + freefunc((t3 *)ptr); \ + } \ + static ossl_inline int sk_##t1##_cmpfunc_thunk(int (*cmp)(const void *, const void *), const void *a, const void *b) \ + { \ + int (*realcmp)(const t3 *const *a, const t3 *const *b) = (int (*)(const t3 *const *a, const t3 *const *b))(cmp); \ + const t3 *const *at = (const t3 *const *)a; \ + const t3 *const *bt = (const t3 *const *)b; \ + \ + return realcmp(at, bt); \ + } \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ } #define SKM_DEFINE_STACK_OF(t1, t2, t3) \ @@ -68,6 +81,19 @@ extern "C" { typedef int (*sk_##t1##_compfunc)(const t3 *const *a, const t3 *const *b); \ typedef void (*sk_##t1##_freefunc)(t3 * a); \ typedef t3 *(*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_inline void sk_##t1##_freefunc_thunk(OPENSSL_sk_freefunc freefunc_arg, void *ptr) \ + { \ + sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc)freefunc_arg; \ + freefunc((t3 *)ptr); \ + } \ + static ossl_inline int sk_##t1##_cmpfunc_thunk(int (*cmp)(const void *, const void *), const void *a, const void *b) \ + { \ + int (*realcmp)(const t3 *const *a, const t3 *const *b) = (int (*)(const t3 *const *a, const t3 *const *b))(cmp); \ + const t3 *const *at = (const t3 *const *)a; \ + const t3 *const *bt = (const t3 *const *)b; \ + \ + return realcmp(at, bt); \ + } \ static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ { \ return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ @@ -78,15 +104,30 @@ extern "C" { } \ static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ { \ - return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + OPENSSL_STACK *ret = OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + OPENSSL_sk_set_cmp_thunks(ret, sk_##t1##_cmpfunc_thunk); \ + return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk); \ } \ static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + OPENSSL_STACK *ret = OPENSSL_sk_new_null(); \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + \ + return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk); \ } \ static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + OPENSSL_STACK *ret = OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + OPENSSL_sk_set_cmp_thunks(ret, sk_##t1##_cmpfunc_thunk); \ + return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk); \ } \ static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ { \ @@ -127,6 +168,11 @@ extern "C" { } \ static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ { \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk); \ + \ OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ } \ static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ @@ -137,17 +183,18 @@ extern "C" { { \ return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ } \ - static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_find(const STACK_OF(t1) *sk, t2 *ptr) \ { \ - return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + return OPENSSL_sk_find((const OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(const STACK_OF(t1) *sk, t2 *ptr) \ { \ - return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + return OPENSSL_sk_find_ex((const OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + static ossl_unused ossl_inline int sk_##t1##_find_all(const STACK_OF(t1) *sk, t2 *ptr, \ + int *pnum) \ { \ - return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + return OPENSSL_sk_find_all((const OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ } \ static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ @@ -208,9 +255,9 @@ typedef const char *OPENSSL_CSTRING; SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) #define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) #define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) -#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) -#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) -#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp)), sk_OPENSSL_STRING_cmpfunc_thunk)) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_STRING_freefunc_thunk)) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n)), sk_OPENSSL_STRING_cmpfunc_thunk)) #define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) #define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) #define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) @@ -220,7 +267,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) #define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) #define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) #define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) -#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) #define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) #define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) #define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) @@ -234,9 +281,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) #define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) #define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) -#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) -#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) -#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp)), sk_OPENSSL_CSTRING_cmpfunc_thunk)) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_CSTRING_freefunc_thunk)) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n)), sk_OPENSSL_CSTRING_cmpfunc_thunk)) #define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) #define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) #define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) @@ -246,7 +293,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) #define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) #define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) #define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) -#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) #define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) #define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) #define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) @@ -270,9 +317,9 @@ typedef void *OPENSSL_BLOCK; SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) #define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) #define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) -#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) -#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) -#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp)), sk_OPENSSL_BLOCK_cmpfunc_thunk)) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_BLOCK_freefunc_thunk)) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n)), sk_OPENSSL_BLOCK_cmpfunc_thunk)) #define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) #define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) #define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) @@ -282,7 +329,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) #define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) #define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) #define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) -#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) #define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) #define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) #define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/srp.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/srp.h index 5a4df171f..e1c049ac5 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/srp.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/srp.h @@ -50,9 +50,9 @@ typedef struct SRP_gN_cache_st { SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) #define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) #define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) -#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) -#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) -#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp)), sk_SRP_gN_cache_cmpfunc_thunk)) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SRP_gN_cache_freefunc_thunk)) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n)), sk_SRP_gN_cache_cmpfunc_thunk)) #define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) #define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) #define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) @@ -62,7 +62,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) #define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) #define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) #define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) -#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_freefunc_type(freefunc)) #define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) #define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) #define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) @@ -91,9 +91,9 @@ typedef struct SRP_user_pwd_st { SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) #define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) #define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) -#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) -#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) -#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp)), sk_SRP_user_pwd_cmpfunc_thunk)) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SRP_user_pwd_freefunc_thunk)) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n)), sk_SRP_user_pwd_cmpfunc_thunk)) #define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) #define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) #define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) @@ -103,7 +103,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) #define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) #define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) #define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) -#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_freefunc_type(freefunc)) #define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) #define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) #define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) @@ -152,9 +152,9 @@ typedef struct SRP_gN_st { SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) #define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) #define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) -#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) -#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) -#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp)), sk_SRP_gN_cmpfunc_thunk)) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SRP_gN_freefunc_thunk)) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n)), sk_SRP_gN_cmpfunc_thunk)) #define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) #define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) #define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) @@ -164,7 +164,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) #define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) #define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) #define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) -#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_freefunc_type(freefunc)) #define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) #define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) #define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ssl.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ssl.h index 58ca8136b..00ecc3f06 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ssl.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ssl.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ssl.h.in * - * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -45,6 +45,9 @@ #include #include #include +#ifndef OPENSSL_NO_ECH +#include +#endif #ifndef OPENSSL_NO_STDIO #include #endif @@ -77,7 +80,6 @@ extern "C" { #define SSL_TXT_LOW "LOW" #define SSL_TXT_MEDIUM "MEDIUM" #define SSL_TXT_HIGH "HIGH" -#define SSL_TXT_FIPS "FIPS" #define SSL_TXT_aNULL "aNULL" #define SSL_TXT_eNULL "eNULL" @@ -162,7 +164,6 @@ extern "C" { #define SSL_TXT_SHA256 "SHA256" #define SSL_TXT_SHA384 "SHA384" -#define SSL_TXT_SSLV3 "SSLv3" #define SSL_TXT_TLSV1 "TLSv1" #define SSL_TXT_TLSV1_1 "TLSv1.1" #define SSL_TXT_TLSV1_2 "TLSv1.2" @@ -249,9 +250,9 @@ typedef struct srtp_protection_profile_st { SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) #define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) #define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) -#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) -#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) -#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp)), sk_SRTP_PROTECTION_PROFILE_cmpfunc_thunk)) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SRTP_PROTECTION_PROFILE_freefunc_thunk)) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n)), sk_SRTP_PROTECTION_PROFILE_cmpfunc_thunk)) #define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) #define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) #define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) @@ -261,7 +262,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, S #define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) #define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) #define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) -#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) #define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) #define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) #define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) @@ -403,13 +404,16 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); #define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) /* * Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + * Modifies SSL_OP_SERVER_PREFERENCE */ #define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) /* - * Set on servers to choose the cipher according to server's preferences. + * Set on servers to choose cipher, curve or group according to server's + * preferences. */ -#define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) +#define SSL_OP_SERVER_PREFERENCE SSL_OP_BIT(22) +/* Equivalent definition for backwards compatibility: */ +#define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_SERVER_PREFERENCE /* * If set, a server will allow a client to issue an SSLv3.0 version * number as latest version supported in the premaster secret, even when @@ -448,8 +452,29 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); #define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) /* Enable KTLS TX zerocopy on Linux */ #define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) - #define SSL_OP_PREFER_NO_DHE_KEX SSL_OP_BIT(35) +#define SSL_OP_LEGACY_EC_POINT_FORMATS SSL_OP_BIT(36) + +#ifndef OPENSSL_NO_ECH +/* Set this to tell client to emit greased ECH values */ +#define SSL_OP_ECH_GREASE SSL_OP_BIT(37) +/* + * If this is set then the server side will attempt trial decryption + * of ECHs even if there is no matching ECH config_id. That's a bit + * inefficient, but more privacy friendly. + */ +#define SSL_OP_ECH_TRIALDECRYPT SSL_OP_BIT(38) +/* + * If set, clients will ignore the supplied ECH config_id and replace + * that with a random value. + */ +#define SSL_OP_ECH_IGNORE_CID SSL_OP_BIT(39) +/* + * If set, servers will add GREASEy ECHConfig values to those sent + * in retry_configs. + */ +#define SSL_OP_ECH_GREASE_RETRY_CONFIG SSL_OP_BIT(40) +#endif /* * Option "collections." @@ -773,9 +798,6 @@ void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, EVP_PKEY **pkey)); int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey); -#ifndef OPENSSL_NO_ENGINE -__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); -#endif void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb)(SSL *ssl, unsigned char @@ -826,7 +848,7 @@ void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, #endif __owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, + const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len); @@ -849,6 +871,10 @@ void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, void *arg); void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len); +void SSL_CTX_get0_alpn_protos(SSL_CTX *ctx, const unsigned char **protos, + unsigned int *protos_len); +void SSL_get0_alpn_protos(SSL *ssl, const unsigned char **protos, + unsigned int *protos_len); #ifndef OPENSSL_NO_PSK /* @@ -1001,9 +1027,9 @@ extern "C" { SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) #define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) #define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) -#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) -#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) -#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp)), sk_SSL_CIPHER_cmpfunc_thunk)) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SSL_CIPHER_freefunc_thunk)) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n)), sk_SSL_CIPHER_cmpfunc_thunk)) #define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) #define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) #define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) @@ -1013,7 +1039,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) #define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) #define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) #define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) -#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_freefunc_type(freefunc)) #define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) #define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) #define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) @@ -1242,6 +1268,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) #define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION #define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION #define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +#ifndef OPENSSL_NO_ECH +#define SSL_AD_ECH_REQUIRED TLS1_AD_ECH_REQUIRED +#endif #define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION #define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE #define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME @@ -1390,6 +1419,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) #define SSL_CTRL_GET0_IMPLEMENTED_GROUPS 139 #define SSL_CTRL_GET_SIGNATURE_NAME 140 #define SSL_CTRL_GET_PEER_SIGNATURE_NAME 141 +#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP_EX 142 +#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP_EX 143 #define SSL_CERT_SET_FIRST 1 #define SSL_CERT_SET_NEXT 2 #define SSL_CERT_SET_SERVER 3 @@ -1876,6 +1907,9 @@ int SSL_up_ref(SSL *s); int SSL_is_dtls(const SSL *s); int SSL_is_tls(const SSL *s); int SSL_is_quic(const SSL *s); +int SSL_CTX_is_quic(const SSL_CTX *c); +int SSL_CTX_is_server(const SSL_CTX *c); + __owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, unsigned int sid_ctx_len); @@ -1884,8 +1918,14 @@ __owur int SSL_set_purpose(SSL *ssl, int purpose); __owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); __owur int SSL_set_trust(SSL *ssl, int trust); -__owur int SSL_set1_host(SSL *s, const char *host); -__owur int SSL_add1_host(SSL *s, const char *host); +#ifndef OPENSSL_NO_DEPRECATED_4_0 +OSSL_DEPRECATEDIN_4_0 __owur int SSL_set1_host(SSL *s, const char *host); +OSSL_DEPRECATEDIN_4_0 __owur int SSL_add1_host(SSL *s, const char *host); +#endif /* OPENSSL_NO_DEPRECATED_4_0 */ +__owur int SSL_set1_dnsname(SSL *s, const char *dnsname); +__owur int SSL_add1_dnsname(SSL *s, const char *dnsname); +__owur int SSL_set1_ipaddr(SSL *s, const char *ipaddr); +__owur int SSL_add1_ipaddr(SSL *s, const char *ipaddr); __owur const char *SSL_get0_peername(SSL *s); void SSL_set_hostflags(SSL *s, unsigned int flags); @@ -1965,7 +2005,9 @@ typedef int (*SSL_new_pending_conn_cb_fn)(SSL_CTX *ctx, SSL *new_ssl, void SSL_CTX_set_new_pending_conn_cb(SSL_CTX *c, SSL_new_pending_conn_cb_fn cb, void *arg); -int SSL_client_hello_isv2(SSL *s); +#ifndef OPENSSL_NO_DEPRECATED_4_0 +OSSL_DEPRECATEDIN_4_0 int SSL_client_hello_isv2(SSL *s); +#endif unsigned int SSL_client_hello_get0_legacy_version(SSL *s); size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); @@ -2043,14 +2085,6 @@ OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); #endif -#ifndef OPENSSL_NO_SSL3_METHOD -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); -#endif -#endif - #define SSLv23_method TLS_method #define SSLv23_server_method TLS_server_method #define SSLv23_client_method TLS_client_method @@ -2060,47 +2094,6 @@ __owur const SSL_METHOD *TLS_method(void); __owur const SSL_METHOD *TLS_server_method(void); __owur const SSL_METHOD *TLS_client_method(void); -#ifndef OPENSSL_NO_TLS1_METHOD -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); -#endif -#endif - -#ifndef OPENSSL_NO_TLS1_1_METHOD -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); -#endif -#endif - -#ifndef OPENSSL_NO_TLS1_2_METHOD -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); -#endif -#endif - -#ifndef OPENSSL_NO_DTLS1_METHOD -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); -#endif -#endif - -#ifndef OPENSSL_NO_DTLS1_2_METHOD -/* DTLSv1.2 */ -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); -OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); -#endif -#endif - __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ __owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ __owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ @@ -2352,6 +2345,7 @@ size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); /* QUIC support */ int SSL_handle_events(SSL *s); __owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); +__owur int SSL_get_peer_addr(SSL *ssl, BIO_ADDR *peer_addr); __owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); __owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); __owur int SSL_net_read_desired(SSL *s); @@ -2412,6 +2406,8 @@ __owur SSL *SSL_new_stream(SSL *s, uint64_t flags); __owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); #define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) +#define SSL_ACCEPT_STREAM_UNI (1U << 1) +#define SSL_ACCEPT_STREAM_BIDI (1U << 2) __owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); __owur size_t SSL_get_accept_stream_queue_len(SSL *s); @@ -2626,6 +2622,8 @@ void SSL_trace(int write_p, int version, int content_type, int DTLSv1_listen(SSL *s, BIO_ADDR *client); #endif +int SSL_listen_ex(SSL *listener, SSL *new_conn); + #ifndef OPENSSL_NO_CT /* diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ui.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ui.h index 40878b480..bce5958be 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ui.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/ui.h @@ -296,9 +296,9 @@ typedef struct ui_string_st UI_STRING; SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) #define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) #define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) -#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) -#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) -#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp)), sk_UI_STRING_cmpfunc_thunk)) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_UI_STRING_freefunc_thunk)) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n)), sk_UI_STRING_cmpfunc_thunk)) #define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) #define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) #define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) @@ -308,7 +308,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) #define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) #define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) #define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) -#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_freefunc_type(freefunc)) #define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) #define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) #define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509.h index b5ebf6f0b..90082fd34 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509.h.in * - * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the Apache License 2.0 (the "License"). You may not use @@ -55,9 +55,9 @@ extern "C" { SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) #define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) #define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) -#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) -#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) -#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp)), sk_X509_NAME_cmpfunc_thunk)) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_NAME_freefunc_thunk)) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n)), sk_X509_NAME_cmpfunc_thunk)) #define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) #define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) #define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) @@ -67,7 +67,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) #define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) #define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) #define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) -#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_freefunc_type(freefunc)) #define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) #define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) #define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) @@ -81,9 +81,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) #define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) #define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) -#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) -#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) -#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp)), sk_X509_cmpfunc_thunk)) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_freefunc_thunk)) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n)), sk_X509_cmpfunc_thunk)) #define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) #define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) #define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) @@ -93,7 +93,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) #define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) #define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) #define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) -#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk), ossl_check_X509_freefunc_type(freefunc)) #define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) #define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) #define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) @@ -107,9 +107,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) #define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) #define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) -#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) -#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) -#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp)), sk_X509_REVOKED_cmpfunc_thunk)) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_REVOKED_freefunc_thunk)) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n)), sk_X509_REVOKED_cmpfunc_thunk)) #define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) #define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) #define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) @@ -119,7 +119,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) #define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) #define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) #define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) -#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_freefunc_type(freefunc)) #define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) #define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) #define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) @@ -133,9 +133,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) #define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) #define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) -#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) -#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) -#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp)), sk_X509_CRL_cmpfunc_thunk)) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_CRL_freefunc_thunk)) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n)), sk_X509_CRL_cmpfunc_thunk)) #define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) #define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) #define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) @@ -145,7 +145,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) #define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) #define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) #define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) -#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_freefunc_type(freefunc)) #define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) #define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) #define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) @@ -208,9 +208,9 @@ typedef struct X509_name_entry_st X509_NAME_ENTRY; SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) #define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) #define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) -#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) -#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) -#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp)), sk_X509_NAME_ENTRY_cmpfunc_thunk)) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_NAME_ENTRY_freefunc_thunk)) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n)), sk_X509_NAME_ENTRY_cmpfunc_thunk)) #define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) #define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) #define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) @@ -220,7 +220,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) #define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) #define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) #define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) -#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) #define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) #define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) #define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) @@ -241,9 +241,9 @@ typedef struct X509_extension_st X509_EXTENSION; SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) #define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) #define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) -#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) -#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) -#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp)), sk_X509_EXTENSION_cmpfunc_thunk)) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_EXTENSION_freefunc_thunk)) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n)), sk_X509_EXTENSION_cmpfunc_thunk)) #define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) #define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) #define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) @@ -253,7 +253,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) #define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) #define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) #define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) -#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_freefunc_type(freefunc)) #define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) #define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) #define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) @@ -272,9 +272,9 @@ typedef struct x509_attributes_st X509_ATTRIBUTE; SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) #define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) #define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) -#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) -#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) -#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp)), sk_X509_ATTRIBUTE_cmpfunc_thunk)) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_ATTRIBUTE_freefunc_thunk)) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n)), sk_X509_ATTRIBUTE_cmpfunc_thunk)) #define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) #define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) #define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) @@ -284,7 +284,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) #define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) #define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) #define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) -#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) #define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) #define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) #define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) @@ -396,9 +396,9 @@ typedef struct X509_info_st { SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) #define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) #define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) -#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) -#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) -#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp)), sk_X509_INFO_cmpfunc_thunk)) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_INFO_freefunc_thunk)) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n)), sk_X509_INFO_cmpfunc_thunk)) #define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) #define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) #define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) @@ -408,7 +408,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) #define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) #define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) #define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) -#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_freefunc_type(freefunc)) #define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) #define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) #define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) @@ -521,8 +521,8 @@ void *X509_CRL_get_meth_data(X509_CRL *crl); const char *X509_verify_cert_error_string(long n); -int X509_verify(X509 *a, EVP_PKEY *r); -int X509_self_signed(X509 *cert, int verify_signature); +int X509_verify(const X509 *a, EVP_PKEY *r); +int X509_self_signed(const X509 *cert, int verify_signature); int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, const char *propq); @@ -535,7 +535,7 @@ char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); -int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); +int NETSCAPE_SPKI_print(BIO *out, const NETSCAPE_SPKI *spki); int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); int X509_signature_print(BIO *bp, const X509_ALGOR *alg, @@ -682,20 +682,25 @@ int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, const void **ppval, const X509_ALGOR *algor); -void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); DECLARE_ASN1_DUP_FUNCTION(X509_NAME) DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) -int X509_cmp_time(const ASN1_TIME *s, time_t *t); -int X509_cmp_current_time(const ASN1_TIME *s); -int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, - const ASN1_TIME *start, const ASN1_TIME *end); -ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +#ifndef OPENSSL_NO_DEPRECATED_4_0 +OSSL_DEPRECATEDIN_4_0 int X509_cmp_time(const ASN1_TIME *s, const time_t *t); +OSSL_DEPRECATEDIN_4_0 int X509_cmp_current_time(const ASN1_TIME *s); +OSSL_DEPRECATEDIN_4_0 int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, + const ASN1_TIME *end); +#endif +int X509_check_certificate_times(const X509_VERIFY_PARAM *vpm, const X509 *x, + int *error); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, const time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, - int offset_day, long offset_sec, time_t *t); + int offset_day, long offset_sec, const time_t *t); ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); const char *X509_get_default_cert_area(void); @@ -705,8 +710,8 @@ const char *X509_get_default_cert_dir_env(void); const char *X509_get_default_cert_file_env(void); const char *X509_get_default_private_dir(void); -X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); +X509_REQ *X509_to_X509_REQ(const X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(const X509_REQ *r, int days, EVP_PKEY *pkey); DECLARE_ASN1_FUNCTIONS(X509_ALGOR) DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) @@ -718,8 +723,8 @@ X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); -int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); -long X509_get_pathlen(X509 *x); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, const STACK_OF(X509) *chain); +long X509_get_pathlen(const X509 *x); DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, OSSL_LIB_CTX *libctx, const char *propq); @@ -777,7 +782,7 @@ int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, int secbits, uint32_t flags); -int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, +int X509_get_signature_info(const X509 *x, int *mdnid, int *pknid, int *secbits, uint32_t *flags); void X509_get0_signature(const ASN1_BIT_STRING **psig, @@ -785,14 +790,14 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig, int X509_get_signature_nid(const X509 *x); void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); -ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_distinguishing_id(const X509 *x); void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); int X509_alias_set1(X509 *x, const unsigned char *name, int len); int X509_keyid_set1(X509 *x, const unsigned char *id, int len); -unsigned char *X509_alias_get0(X509 *x, int *len); -unsigned char *X509_keyid_get0(X509 *x, int *len); +const unsigned char *X509_alias_get0(const X509 *x, int *len); +const unsigned char *X509_keyid_get0(const X509 *x, int *len); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) @@ -802,7 +807,7 @@ X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **ret, const ASN1_INTEGER *serial); -int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, const X509 *x); X509_PKEY *X509_PKEY_new(void); void X509_PKEY_free(X509_PKEY *a); @@ -852,16 +857,15 @@ int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); int X509_set_issuer_name(X509 *x, const X509_NAME *name); -X509_NAME *X509_get_issuer_name(const X509 *a); +const X509_NAME *X509_get_issuer_name(const X509 *a); int X509_set_subject_name(X509 *x, const X509_NAME *name); -X509_NAME *X509_get_subject_name(const X509 *a); +const X509_NAME *X509_get_subject_name(const X509 *a); const ASN1_TIME *X509_get0_notBefore(const X509 *x); -ASN1_TIME *X509_getm_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(X509 *x); int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); const ASN1_TIME *X509_get0_notAfter(const X509 *x); -ASN1_TIME *X509_getm_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(X509 *x); int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); -int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); int X509_up_ref(X509 *x); int X509_get_signature_type(const X509 *x); @@ -872,25 +876,26 @@ int X509_get_signature_type(const X509 *x); #define X509_set_notAfter X509_set1_notAfter #endif +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +EVP_PKEY *X509_get_pubkey(const X509 *x); /* deprecated */ +EVP_PKEY *X509_get0_pubkey(const X509 *x); /* * This one is only used so that a binary form can output, as in * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) */ -X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, const ASN1_BIT_STRING **psuid); const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); -EVP_PKEY *X509_get0_pubkey(const X509 *x); -EVP_PKEY *X509_get_pubkey(X509 *x); -ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +const ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); #define X509_REQ_VERSION_1 0 long X509_REQ_get_version(const X509_REQ *req); int X509_REQ_set_version(X509_REQ *x, long version); -X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +const X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); @@ -899,13 +904,13 @@ int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); -EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); /* deprecated */ EVP_PKEY *X509_REQ_get0_pubkey(const X509_REQ *req); -X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(const X509_REQ *req); int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); -STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(OSSL_FUTURE_CONST X509_REQ *req); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(const X509_REQ *req); int X509_REQ_add_extensions_nid(X509_REQ *req, const STACK_OF(X509_EXTENSION) *exts, int nid); int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); @@ -948,9 +953,10 @@ const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); #endif -X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); -STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(const X509_CRL *crl); +const X509_ALGOR *X509_CRL_get0_tbs_sigalg(const X509_CRL *crl); void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); int X509_CRL_get_signature_nid(const X509_CRL *crl); @@ -970,24 +976,24 @@ int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); int X509_check_private_key(const X509 *cert, const EVP_PKEY *pkey); int X509_chain_check_suiteb(int *perror_depth, - X509 *x, STACK_OF(X509) *chain, + const X509 *x, STACK_OF(X509) *chain, unsigned long flags); int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_and_serial_hash(X509 *a); +unsigned long X509_issuer_and_serial_hash(const X509 *a); int X509_issuer_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_name_hash(X509 *a); +unsigned long X509_issuer_name_hash(const X509 *a); int X509_subject_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_subject_name_hash(X509 *x); +unsigned long X509_subject_name_hash(const X509 *x); #ifndef OPENSSL_NO_MD5 -unsigned long X509_issuer_name_hash_old(X509 *a); -unsigned long X509_subject_name_hash_old(X509 *x); +unsigned long X509_issuer_name_hash_old(const X509 *a); +unsigned long X509_subject_name_hash_old(const X509 *x); #endif #define X509_ADD_FLAG_DEFAULT 0 @@ -995,8 +1001,8 @@ unsigned long X509_subject_name_hash_old(X509 *x); #define X509_ADD_FLAG_PREPEND 0x2 #define X509_ADD_FLAG_NO_DUP 0x4 #define X509_ADD_FLAG_NO_SS 0x8 -int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); -int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); +int X509_add_cert(STACK_OF(X509) *sk, const X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, const STACK_OF(X509) *certs, int flags); int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); @@ -1011,35 +1017,32 @@ unsigned long X509_NAME_hash_old(const X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); -int X509_aux_print(BIO *out, X509 *x, int indent); +int X509_aux_print(BIO *out, const X509 *x, int indent); #ifndef OPENSSL_NO_STDIO -int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print_fp(FILE *bp, X509 *x); +int X509_print_ex_fp(FILE *bp, const X509 *x, unsigned long nmflag, unsigned long cflag); +int X509_print_fp(FILE *bp, const X509 *x); int X509_CRL_print_fp(FILE *bp, X509_CRL *x); -int X509_REQ_print_fp(FILE *bp, X509_REQ *req); -int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, - unsigned long flags); +int X509_REQ_print_fp(FILE *bp, const X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, unsigned long flags); #endif int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); -int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, - unsigned long flags); -int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print(BIO *bp, X509 *x); -int X509_ocspid_print(BIO *bp, X509 *x); -int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); -int X509_CRL_print(BIO *bp, X509_CRL *x); -int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, - unsigned long cflag); -int X509_REQ_print(BIO *bp, X509_REQ *req); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, unsigned long flags); +int X509_print_ex(BIO *bp, const X509 *x, unsigned long nmflag, unsigned long cflag); +int X509_print(BIO *bp, const X509 *x); +int X509_ocspid_print(BIO *bp, const X509 *x); +int X509_CRL_print_ex(BIO *out, const X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, const X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, const X509_REQ *x, unsigned long nmflag, unsigned long cflag); +int X509_REQ_print(BIO *bp, const X509_REQ *req); int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, - char *buf, int len); -int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, - char *buf, int len); +#if !defined(OPENSSL_NO_DEPRECATED_4_0) +OSSL_DEPRECATEDIN_4_0 int X509_NAME_get_text_by_NID(const X509_NAME *name, + int nid, char *buf, int len); +OSSL_DEPRECATEDIN_4_0 int X509_NAME_get_text_by_OBJ(const X509_NAME *name, + const ASN1_OBJECT *obj, char *buf, int len); +#endif /* !defined(OPENSSL_NO_DEPRECATED_4_0) */ /* * NOTE: you should be passing -1, not 0 as lastpos. The functions that use @@ -1048,7 +1051,7 @@ int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); -X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +const X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, int loc, int set); @@ -1076,8 +1079,8 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, const unsigned char *bytes, int len); -ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); -ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +const ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +const ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, @@ -1090,10 +1093,11 @@ int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, const ASN1_OBJECT *obj, int lastpos); int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, int crit, int lastpos); -X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +const X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_extension(STACK_OF(X509_EXTENSION) **x, int loc); STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, - X509_EXTENSION *ex, int loc); + const X509_EXTENSION *ex, int loc); STACK_OF(X509_EXTENSION) *X509v3_add_extensions(STACK_OF(X509_EXTENSION) **target, const STACK_OF(X509_EXTENSION) *exts); @@ -1101,9 +1105,9 @@ int X509_get_ext_count(const X509 *x); int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); -X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +const X509_EXTENSION *X509_get_ext(const X509 *x, int loc); X509_EXTENSION *X509_delete_ext(X509 *x, int loc); -int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +int X509_add_ext(X509 *x, const X509_EXTENSION *ex, int loc); void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, unsigned long flags); @@ -1113,9 +1117,9 @@ int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, int lastpos); int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); -X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +const X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); -int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +int X509_CRL_add_ext(X509_CRL *x, const X509_EXTENSION *ex, int loc); void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, unsigned long flags); @@ -1126,7 +1130,7 @@ int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, int lastpos); int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, int lastpos); -X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +const X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, @@ -1142,9 +1146,9 @@ X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, ASN1_OCTET_STRING *data); int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); -int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); -ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); -ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, const ASN1_OCTET_STRING *data); +const ASN1_OBJECT *X509_EXTENSION_get_object(const X509_EXTENSION *ex); +const ASN1_OCTET_STRING *X509_EXTENSION_get_data(const X509_EXTENSION *ne); int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); @@ -1173,7 +1177,7 @@ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) int type, const unsigned char *bytes, int len); -void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, +const void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, const ASN1_OBJECT *obj, int lastpos, int type); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, int atrtype, const void *data, @@ -1189,11 +1193,11 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len); -void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, - void *data); +const void *X509_ATTRIBUTE_get0_data(const X509_ATTRIBUTE *attr, int idx, + int atrtype, void *data); int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); -ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); -ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); +const ASN1_OBJECT *X509_ATTRIBUTE_get0_object(const X509_ATTRIBUTE *attr); +const ASN1_TYPE *X509_ATTRIBUTE_get0_type(const X509_ATTRIBUTE *attr, int idx); int EVP_PKEY_get_attr_count(const EVP_PKEY *key); int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); @@ -1213,9 +1217,9 @@ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const unsigned char *bytes, int len); /* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, +X509 *X509_find_by_issuer_and_serial(const STACK_OF(X509) *sk, const X509_NAME *name, const ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); +X509 *X509_find_by_subject(const STACK_OF(X509) *sk, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_acert.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_acert.h index ade8f6fa4..805704237 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_acert.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_acert.h @@ -138,9 +138,9 @@ typedef struct OSSL_IETF_ATTR_SYNTAX_st OSSL_IETF_ATTR_SYNTAX; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_IETF_ATTR_SYNTAX_VALUE, OSSL_IETF_ATTR_SYNTAX_VALUE, OSSL_IETF_ATTR_SYNTAX_VALUE) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_value(sk, idx) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_value(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (idx))) -#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new(cmp) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp))) -#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_null() ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new_null()) -#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp), (n))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new(cmp) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp)), sk_OSSL_IETF_ATTR_SYNTAX_VALUE_cmpfunc_thunk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_null() ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_thunk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp), (n)), sk_OSSL_IETF_ATTR_SYNTAX_VALUE_cmpfunc_thunk)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (n)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) @@ -150,7 +150,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_IETF_ATTR_SYNTAX_VALUE, OSSL_IETF_ATTR_SYNTAX_ #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_pop(sk) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_pop(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_shift(sk) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_shift(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))) -#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk),ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_type(freefunc)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_type(freefunc)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr), (idx)) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_set(sk, idx, ptr) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_set(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (idx), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr))) #define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) @@ -208,9 +208,9 @@ typedef STACK_OF(OSSL_TARGETS) OSSL_TARGETING_INFORMATION; SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGET, OSSL_TARGET, OSSL_TARGET) #define sk_OSSL_TARGET_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TARGET_sk_type(sk)) #define sk_OSSL_TARGET_value(sk, idx) ((OSSL_TARGET *)OPENSSL_sk_value(ossl_check_const_OSSL_TARGET_sk_type(sk), (idx))) -#define sk_OSSL_TARGET_new(cmp) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new(ossl_check_OSSL_TARGET_compfunc_type(cmp))) -#define sk_OSSL_TARGET_new_null() ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new_null()) -#define sk_OSSL_TARGET_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGET_compfunc_type(cmp), (n))) +#define sk_OSSL_TARGET_new(cmp) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_TARGET_compfunc_type(cmp)), sk_OSSL_TARGET_cmpfunc_thunk)) +#define sk_OSSL_TARGET_new_null() ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_TARGET_freefunc_thunk)) +#define sk_OSSL_TARGET_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGET_compfunc_type(cmp), (n)), sk_OSSL_TARGET_cmpfunc_thunk)) #define sk_OSSL_TARGET_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TARGET_sk_type(sk), (n)) #define sk_OSSL_TARGET_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TARGET_sk_type(sk)) #define sk_OSSL_TARGET_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TARGET_sk_type(sk)) @@ -220,7 +220,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGET, OSSL_TARGET, OSSL_TARGET) #define sk_OSSL_TARGET_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) #define sk_OSSL_TARGET_pop(sk) ((OSSL_TARGET *)OPENSSL_sk_pop(ossl_check_OSSL_TARGET_sk_type(sk))) #define sk_OSSL_TARGET_shift(sk) ((OSSL_TARGET *)OPENSSL_sk_shift(ossl_check_OSSL_TARGET_sk_type(sk))) -#define sk_OSSL_TARGET_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGET_sk_type(sk),ossl_check_OSSL_TARGET_freefunc_type(freefunc)) +#define sk_OSSL_TARGET_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_freefunc_type(freefunc)) #define sk_OSSL_TARGET_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr), (idx)) #define sk_OSSL_TARGET_set(sk, idx, ptr) ((OSSL_TARGET *)OPENSSL_sk_set(ossl_check_OSSL_TARGET_sk_type(sk), (idx), ossl_check_OSSL_TARGET_type(ptr))) #define sk_OSSL_TARGET_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) @@ -238,9 +238,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGET, OSSL_TARGET, OSSL_TARGET) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGETS, OSSL_TARGETS, OSSL_TARGETS) #define sk_OSSL_TARGETS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TARGETS_sk_type(sk)) #define sk_OSSL_TARGETS_value(sk, idx) ((OSSL_TARGETS *)OPENSSL_sk_value(ossl_check_const_OSSL_TARGETS_sk_type(sk), (idx))) -#define sk_OSSL_TARGETS_new(cmp) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new(ossl_check_OSSL_TARGETS_compfunc_type(cmp))) -#define sk_OSSL_TARGETS_new_null() ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new_null()) -#define sk_OSSL_TARGETS_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGETS_compfunc_type(cmp), (n))) +#define sk_OSSL_TARGETS_new(cmp) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_TARGETS_compfunc_type(cmp)), sk_OSSL_TARGETS_cmpfunc_thunk)) +#define sk_OSSL_TARGETS_new_null() ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_TARGETS_freefunc_thunk)) +#define sk_OSSL_TARGETS_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGETS_compfunc_type(cmp), (n)), sk_OSSL_TARGETS_cmpfunc_thunk)) #define sk_OSSL_TARGETS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TARGETS_sk_type(sk), (n)) #define sk_OSSL_TARGETS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TARGETS_sk_type(sk)) #define sk_OSSL_TARGETS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TARGETS_sk_type(sk)) @@ -250,7 +250,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGETS, OSSL_TARGETS, OSSL_TARGETS) #define sk_OSSL_TARGETS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) #define sk_OSSL_TARGETS_pop(sk) ((OSSL_TARGETS *)OPENSSL_sk_pop(ossl_check_OSSL_TARGETS_sk_type(sk))) #define sk_OSSL_TARGETS_shift(sk) ((OSSL_TARGETS *)OPENSSL_sk_shift(ossl_check_OSSL_TARGETS_sk_type(sk))) -#define sk_OSSL_TARGETS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGETS_sk_type(sk),ossl_check_OSSL_TARGETS_freefunc_type(freefunc)) +#define sk_OSSL_TARGETS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_freefunc_type(freefunc)) #define sk_OSSL_TARGETS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr), (idx)) #define sk_OSSL_TARGETS_set(sk, idx, ptr) ((OSSL_TARGETS *)OPENSSL_sk_set(ossl_check_OSSL_TARGETS_sk_type(sk), (idx), ossl_check_OSSL_TARGETS_type(ptr))) #define sk_OSSL_TARGETS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) @@ -275,9 +275,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ISSUER_SERIAL, OSSL_ISSUER_SERIAL, OSSL_ISSUER_SERIAL) #define sk_OSSL_ISSUER_SERIAL_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk)) #define sk_OSSL_ISSUER_SERIAL_value(sk, idx) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_value(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk), (idx))) -#define sk_OSSL_ISSUER_SERIAL_new(cmp) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp))) -#define sk_OSSL_ISSUER_SERIAL_new_null() ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new_null()) -#define sk_OSSL_ISSUER_SERIAL_new_reserve(cmp, n) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp), (n))) +#define sk_OSSL_ISSUER_SERIAL_new(cmp) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp)), sk_OSSL_ISSUER_SERIAL_cmpfunc_thunk)) +#define sk_OSSL_ISSUER_SERIAL_new_null() ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_ISSUER_SERIAL_freefunc_thunk)) +#define sk_OSSL_ISSUER_SERIAL_new_reserve(cmp, n) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp), (n)), sk_OSSL_ISSUER_SERIAL_cmpfunc_thunk)) #define sk_OSSL_ISSUER_SERIAL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (n)) #define sk_OSSL_ISSUER_SERIAL_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk)) #define sk_OSSL_ISSUER_SERIAL_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk)) @@ -287,7 +287,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ISSUER_SERIAL, OSSL_ISSUER_SERIAL, OSSL_ISSUER #define sk_OSSL_ISSUER_SERIAL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) #define sk_OSSL_ISSUER_SERIAL_pop(sk) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_pop(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk))) #define sk_OSSL_ISSUER_SERIAL_shift(sk) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_shift(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk))) -#define sk_OSSL_ISSUER_SERIAL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk),ossl_check_OSSL_ISSUER_SERIAL_freefunc_type(freefunc)) +#define sk_OSSL_ISSUER_SERIAL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_freefunc_type(freefunc)) #define sk_OSSL_ISSUER_SERIAL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr), (idx)) #define sk_OSSL_ISSUER_SERIAL_set(sk, idx, ptr) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_set(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (idx), ossl_check_OSSL_ISSUER_SERIAL_type(ptr))) #define sk_OSSL_ISSUER_SERIAL_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_vfy.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_vfy.h index 4743f82bc..90e628663 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_vfy.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509_vfy.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -40,6 +40,8 @@ extern "C" { #endif +DEFINE_STACK_OF(OCSP_RESPONSE) + /*- SSL_CTX -> X509_STORE -> X509_LOOKUP @@ -72,9 +74,9 @@ typedef enum { SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) #define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) #define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) -#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) -#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) -#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp)), sk_X509_LOOKUP_cmpfunc_thunk)) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_LOOKUP_freefunc_thunk)) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n)), sk_X509_LOOKUP_cmpfunc_thunk)) #define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) #define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) #define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) @@ -84,7 +86,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) #define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) #define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) #define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) -#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_freefunc_type(freefunc)) #define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) #define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) #define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) @@ -98,9 +100,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) #define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) #define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) -#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) -#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) -#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp)), sk_X509_OBJECT_cmpfunc_thunk)) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_OBJECT_freefunc_thunk)) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n)), sk_X509_OBJECT_cmpfunc_thunk)) #define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) #define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) #define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) @@ -110,7 +112,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) #define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) #define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) #define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) -#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_freefunc_type(freefunc)) #define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) #define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) #define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) @@ -124,9 +126,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) #define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) #define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) -#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) -#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) -#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp)), sk_X509_VERIFY_PARAM_cmpfunc_thunk)) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_VERIFY_PARAM_freefunc_thunk)) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n)), sk_X509_VERIFY_PARAM_cmpfunc_thunk)) #define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) #define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) #define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) @@ -136,7 +138,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_P #define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) #define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) #define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) -#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) #define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) #define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) #define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) @@ -154,7 +156,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_P typedef struct x509_trust_st { int trust; int flags; - int (*check_trust)(struct x509_trust_st *, X509 *, int); + int (*check_trust)(struct x509_trust_st *, const X509 *, int); char *name; int arg1; void *arg2; @@ -163,9 +165,9 @@ typedef struct x509_trust_st { SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) #define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) #define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) -#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) -#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) -#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp)), sk_X509_TRUST_cmpfunc_thunk)) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_TRUST_freefunc_thunk)) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n)), sk_X509_TRUST_cmpfunc_thunk)) #define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) #define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) #define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) @@ -175,7 +177,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) #define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) #define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) #define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) -#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_freefunc_type(freefunc)) #define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) #define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) #define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) @@ -222,7 +224,7 @@ int X509_TRUST_set(int *t, int trust); int X509_TRUST_get_count(void); X509_TRUST *X509_TRUST_get0(int idx); int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int), +int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, const X509 *, int), const char *name, int arg1, void *arg2); void X509_TRUST_cleanup(void); int X509_TRUST_get_flags(const X509_TRUST *xp); @@ -234,16 +236,16 @@ int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); void X509_trust_clear(X509 *x); void X509_reject_clear(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); +const STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(const X509 *x); +const STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(const X509 *x); -int (*X509_TRUST_set_default(int (*trust)(int, X509 *, int)))(int, X509 *, +int (*X509_TRUST_set_default(int (*trust)(int, const X509 *, int)))(int, const X509 *, int); -int X509_check_trust(X509 *x, int id, int flags); +int X509_check_trust(const X509 *x, int id, int flags); int X509_verify_cert(X509_STORE_CTX *ctx); int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, +STACK_OF(X509) *X509_build_chain(const X509 *target, STACK_OF(X509) *certs, X509_STORE *store, int with_self_signed, OSSL_LIB_CTX *libctx, const char *propq); @@ -253,9 +255,9 @@ typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, - X509_STORE_CTX *ctx, X509 *x); + X509_STORE_CTX *ctx, const X509 *x); typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, - X509 *x, X509 *issuer); + const X509 *x, const X509 *issuer); typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); @@ -264,7 +266,7 @@ typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); typedef STACK_OF(X509) - *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + *(*X509_STORE_CTX_lookup_certs_fn)(const X509_STORE_CTX *ctx, const X509_NAME *nm); typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, @@ -420,6 +422,18 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); #define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 #define X509_V_ERR_RPK_UNTRUSTED 95 +/* additional OCSP status errors */ +#define X509_V_ERR_OCSP_RESP_INVALID 96 +#define X509_V_ERR_OCSP_SIGNATURE_FAILURE 97 +#define X509_V_ERR_OCSP_NOT_YET_VALID 98 +#define X509_V_ERR_OCSP_HAS_EXPIRED 99 +#define X509_V_ERR_OCSP_NO_RESPONSE 100 +#define X509_V_ERR_CRL_VERIFY_FAILED 101 + +/* additional AKID errors */ +#define X509_V_ERR_EMPTY_AUTHORITY_KEY_IDENTIFIER 102 +#define X509_V_ERR_AKID_ISSUER_SERIAL_NOT_PAIRED 103 + /* Certificate verify flags */ #ifndef OPENSSL_NO_DEPRECATED_1_1_0 #define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ @@ -471,6 +485,11 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); /* Do not check certificate/CRL validity against current time */ #define X509_V_FLAG_NO_CHECK_TIME 0x200000 +/* Verify OCSP stapling response for server certificate */ +#define X509_V_FLAG_OCSP_RESP_CHECK 0x400000 +/* Verify OCSP stapling responses for whole chain */ +#define X509_V_FLAG_OCSP_RESP_CHECK_ALL 0x800000 + #define X509_VP_FLAG_DEFAULT 0x1 #define X509_VP_FLAG_OVERWRITE 0x2 #define X509_VP_FLAG_RESET_FLAGS 0x4 @@ -503,10 +522,13 @@ void X509_STORE_free(X509_STORE *xs); int X509_STORE_lock(X509_STORE *xs); int X509_STORE_unlock(X509_STORE *xs); int X509_STORE_up_ref(X509_STORE *xs); +#ifndef OPENSSL_NO_DEPRECATED_4_0 +OSSL_DEPRECATEDIN_4_0_FOR("Use X509_STORE_get1_objects") STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); +#endif STACK_OF(X509_OBJECT) *X509_STORE_get1_objects(X509_STORE *xs); STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, +STACK_OF(X509) *X509_STORE_CTX_get1_certs(const X509_STORE_CTX *xs, const X509_NAME *nm); STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, const X509_NAME *nm); @@ -569,11 +591,11 @@ void *X509_STORE_get_ex_data(const X509_STORE *xs, int idx); X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); X509_STORE_CTX *X509_STORE_CTX_new(void); -int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, const X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, - X509 *target, STACK_OF(X509) *untrusted); + const X509 *target, STACK_OF(X509) *untrusted); int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, EVP_PKEY *rpk); void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); @@ -694,7 +716,7 @@ int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *xs, X509 *x); +int X509_STORE_add_cert(X509_STORE *xs, const X509 *x); int X509_STORE_add_crl(X509_STORE *xs, X509_CRL *x); int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, @@ -774,6 +796,9 @@ void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); void X509_STORE_CTX_set0_rpk(X509_STORE_CTX *ctx, EVP_PKEY *target); void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +#ifndef OPENSSL_NO_OCSP +void X509_STORE_CTX_set_ocsp_resp(X509_STORE_CTX *ctx, STACK_OF(OCSP_RESPONSE) *sk); +#endif int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, @@ -834,6 +859,8 @@ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); +void X509_VERIFY_PARAM_set1_host_input_validation(X509_VERIFY_PARAM *param, + int (*validate_host)(const char *name, size_t len)); void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); @@ -842,11 +869,29 @@ void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); +int X509_VERIFY_PARAM_set1_rfc822(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_add1_rfc822(X509_VERIFY_PARAM *param, + const char *email, size_t len); +void X509_VERIFY_PARAM_set1_rfc822_input_validation(X509_VERIFY_PARAM *param, + int (*validate_rfc822)(const char *name, size_t len)); +int X509_VERIFY_PARAM_set1_smtputf8(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_add1_smtputf8(X509_VERIFY_PARAM *param, + const char *email, size_t len); +void X509_VERIFY_PARAM_set1_smtputf8_input_validation(X509_VERIFY_PARAM *param, + int (*validate_smtputf8)(const char *name, size_t len)); char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, - const unsigned char *ip, size_t iplen); + const uint8_t *ip, size_t iplen); +void X509_VERIFY_PARAM_set1_ip_input_validation(X509_VERIFY_PARAM *param, + int (*validate_ip)(const uint8_t *name, size_t len)); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc); +int X509_VERIFY_PARAM_add1_ip(X509_VERIFY_PARAM *param, + const uint8_t *ip, size_t len); +int X509_VERIFY_PARAM_add1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509v3.h b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509v3.h index aebf75105..1151bc06c 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509v3.h +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/include/openssl/x509v3.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509v3.h.in * - * Copyright 1999-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2026 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,9 +114,9 @@ typedef struct v3_ext_method X509V3_EXT_METHOD; SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) #define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) #define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) -#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) -#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) -#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp)), sk_X509V3_EXT_METHOD_cmpfunc_thunk)) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509V3_EXT_METHOD_freefunc_thunk)) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n)), sk_X509V3_EXT_METHOD_cmpfunc_thunk)) #define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) #define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) #define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) @@ -126,7 +126,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_ME #define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) #define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) #define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) -#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) #define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) #define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) #define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) @@ -215,9 +215,9 @@ int GENERAL_NAME_set1_X509_NAME(GENERAL_NAME **tgt, const X509_NAME *src); SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) #define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) #define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) -#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) -#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) -#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp)), sk_ACCESS_DESCRIPTION_cmpfunc_thunk)) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ACCESS_DESCRIPTION_freefunc_thunk)) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n)), sk_ACCESS_DESCRIPTION_cmpfunc_thunk)) #define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) #define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) #define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) @@ -227,7 +227,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESC #define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) #define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) #define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) -#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) #define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) #define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) #define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) @@ -241,9 +241,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESC SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) #define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) #define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) -#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) -#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) -#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp)), sk_GENERAL_NAME_cmpfunc_thunk)) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_GENERAL_NAME_freefunc_thunk)) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n)), sk_GENERAL_NAME_cmpfunc_thunk)) #define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) #define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) #define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) @@ -253,7 +253,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) #define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) #define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) #define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) -#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_freefunc_type(freefunc)) #define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) #define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) #define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) @@ -276,9 +276,9 @@ typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) #define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) #define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) -#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) -#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) -#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp)), sk_GENERAL_NAMES_cmpfunc_thunk)) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_GENERAL_NAMES_freefunc_thunk)) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n)), sk_GENERAL_NAMES_cmpfunc_thunk)) #define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) #define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) #define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) @@ -288,7 +288,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) #define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) #define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) #define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) -#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) #define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) #define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) #define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) @@ -338,9 +338,9 @@ struct DIST_POINT_st { SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) #define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) #define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) -#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) -#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) -#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp)), sk_DIST_POINT_cmpfunc_thunk)) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_DIST_POINT_freefunc_thunk)) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n)), sk_DIST_POINT_cmpfunc_thunk)) #define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) #define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) #define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) @@ -350,7 +350,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) #define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) #define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) #define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) -#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_freefunc_type(freefunc)) #define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) #define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) #define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) @@ -383,9 +383,9 @@ typedef struct SXNET_ID_st { SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) #define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) #define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) -#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) -#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) -#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp)), sk_SXNETID_cmpfunc_thunk)) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_SXNETID_freefunc_thunk)) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n)), sk_SXNETID_cmpfunc_thunk)) #define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) #define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) #define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) @@ -395,7 +395,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) #define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) #define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) #define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) -#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_freefunc_type(freefunc)) #define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) #define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) #define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) @@ -444,9 +444,9 @@ typedef struct POLICYQUALINFO_st { SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) #define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) #define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) -#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) -#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) -#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp)), sk_POLICYQUALINFO_cmpfunc_thunk)) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_POLICYQUALINFO_freefunc_thunk)) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n)), sk_POLICYQUALINFO_cmpfunc_thunk)) #define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) #define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) #define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) @@ -456,7 +456,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) #define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) #define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) #define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) -#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) #define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) #define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) #define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) @@ -479,9 +479,9 @@ typedef struct POLICYINFO_st { SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) #define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) #define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) -#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) -#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) -#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp)), sk_POLICYINFO_cmpfunc_thunk)) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_POLICYINFO_freefunc_thunk)) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n)), sk_POLICYINFO_cmpfunc_thunk)) #define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) #define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) #define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) @@ -491,7 +491,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) #define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) #define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) #define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) -#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_freefunc_type(freefunc)) #define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) #define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) #define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) @@ -516,9 +516,9 @@ typedef struct POLICY_MAPPING_st { SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) #define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) #define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) -#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) -#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) -#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp)), sk_POLICY_MAPPING_cmpfunc_thunk)) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_POLICY_MAPPING_freefunc_thunk)) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n)), sk_POLICY_MAPPING_cmpfunc_thunk)) #define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) #define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) #define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) @@ -528,7 +528,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) #define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) #define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) #define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) -#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) #define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) #define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) #define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) @@ -554,9 +554,9 @@ typedef struct GENERAL_SUBTREE_st { SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) #define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) #define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) -#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) -#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) -#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp)), sk_GENERAL_SUBTREE_cmpfunc_thunk)) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_GENERAL_SUBTREE_freefunc_thunk)) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n)), sk_GENERAL_SUBTREE_cmpfunc_thunk)) #define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) #define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) #define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) @@ -566,7 +566,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) #define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) #define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) #define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) -#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) #define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) #define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) #define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) @@ -683,11 +683,17 @@ struct ISSUING_DIST_POINT_st { #define EXFLAG_FRESHEST 0x1000 #define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ +#define EXFLAG_NO_FINGERPRINT 0x100000 + +/* + * The following flags are no longer used. On X509_V_FLAG_X509_STRICT they were + * previously enforced as checks on critical extensions but this behavior has + * been removed. + */ #define EXFLAG_BCONS_CRITICAL 0x10000 #define EXFLAG_AKID_CRITICAL 0x20000 #define EXFLAG_SKID_CRITICAL 0x40000 #define EXFLAG_SAN_CRITICAL 0x80000 -#define EXFLAG_NO_FINGERPRINT 0x100000 /* https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3 */ #define KU_DIGITAL_SIGNATURE X509v3_KU_DIGITAL_SIGNATURE @@ -736,9 +742,9 @@ typedef struct x509_purpose_st { SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) #define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) #define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) -#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) -#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) -#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp)), sk_X509_PURPOSE_cmpfunc_thunk)) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_PURPOSE_freefunc_thunk)) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n)), sk_X509_PURPOSE_cmpfunc_thunk)) #define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) #define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) #define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) @@ -748,7 +754,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) #define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) #define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) #define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) -#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_freefunc_type(freefunc)) #define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) #define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) #define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) @@ -885,8 +891,8 @@ DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); -int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); -int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check(const X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(const X509 *x, NAME_CONSTRAINTS *nc); DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) @@ -979,11 +985,11 @@ int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); int X509V3_EXT_add_alias(int nid_to, int nid_from); void X509V3_EXT_cleanup(void); -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get(const X509_EXTENSION *ext); const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); int X509V3_add_standard_extensions(void); STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); -void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_EXT_d2i(const X509_EXTENSION *ext); void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx); @@ -999,7 +1005,7 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml); -int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, +int X509V3_EXT_print(BIO *out, const X509_EXTENSION *ext, unsigned long flag, int indent); #ifndef OPENSSL_NO_STDIO int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); @@ -1008,22 +1014,22 @@ int X509V3_extensions_print(BIO *out, const char *title, const STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent); -int X509_check_ca(X509 *x); -int X509_check_purpose(X509 *x, int id, int ca); -int X509_supported_extension(X509_EXTENSION *ex); -int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_ca(const X509 *x); +int X509_check_purpose(const X509 *x, int id, int ca); +int X509_supported_extension(const X509_EXTENSION *ex); +int X509_check_issued(const X509 *issuer, const X509 *subject); int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); void X509_set_proxy_flag(X509 *x); void X509_set_proxy_pathlen(X509 *x, long l); -long X509_get_proxy_pathlen(X509 *x); +long X509_get_proxy_pathlen(const X509 *x); -uint32_t X509_get_extension_flags(X509 *x); -uint32_t X509_get_key_usage(X509 *x); -uint32_t X509_get_extended_key_usage(X509 *x); -const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); -const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); -const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); -const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); +uint32_t X509_get_extension_flags(const X509 *x); +uint32_t X509_get_key_usage(const X509 *x); +uint32_t X509_get_extended_key_usage(const X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(const X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(const X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(const X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(const X509 *x); int X509_PURPOSE_get_count(void); int X509_PURPOSE_get_unused_id(OSSL_LIB_CTX *libctx); @@ -1041,10 +1047,10 @@ char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); int X509_PURPOSE_set(int *p, int purpose); -STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); -STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +STACK_OF(OPENSSL_STRING) *X509_get1_email(const X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(const X509_REQ *x); void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); -STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(const X509 *x); /* Flags for X509_check_* functions */ @@ -1069,13 +1075,13 @@ STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); */ #define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 -int X509_check_host(X509 *x, const char *chk, size_t chklen, +int X509_check_host(const X509 *x, const char *chk, size_t chklen, unsigned int flags, char **peername); -int X509_check_email(X509 *x, const char *chk, size_t chklen, +int X509_check_email(const X509 *x, const char *chk, size_t chklen, unsigned int flags); -int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, +int X509_check_ip(const X509 *x, const unsigned char *chk, size_t chklen, unsigned int flags); -int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); +int X509_check_ip_asc(const X509 *x, const char *ipasc, unsigned int flags); ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); @@ -1087,9 +1093,9 @@ void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) #define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) #define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) -#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) -#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) -#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp)), sk_X509_POLICY_NODE_cmpfunc_thunk)) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_X509_POLICY_NODE_freefunc_thunk)) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n)), sk_X509_POLICY_NODE_cmpfunc_thunk)) #define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) #define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) #define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) @@ -1099,7 +1105,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NOD #define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) #define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) #define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) -#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) #define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) #define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) #define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) @@ -1133,9 +1139,9 @@ typedef struct ASIdOrRange_st { SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) #define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) #define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) -#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) -#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) -#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp)), sk_ASIdOrRange_cmpfunc_thunk)) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASIdOrRange_freefunc_thunk)) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n)), sk_ASIdOrRange_cmpfunc_thunk)) #define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) #define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) #define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) @@ -1145,7 +1151,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) #define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) #define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) #define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) -#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_freefunc_type(freefunc)) #define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) #define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) #define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) @@ -1200,9 +1206,9 @@ typedef struct IPAddressOrRange_st { SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) #define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) #define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) -#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) -#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) -#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp)), sk_IPAddressOrRange_cmpfunc_thunk)) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_IPAddressOrRange_freefunc_thunk)) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n)), sk_IPAddressOrRange_cmpfunc_thunk)) #define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) #define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) #define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) @@ -1212,7 +1218,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRang #define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) #define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) #define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) -#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_freefunc_type(freefunc)) #define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) #define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) #define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) @@ -1248,9 +1254,9 @@ typedef struct IPAddressFamily_st { SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) #define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) #define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) -#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) -#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) -#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp)), sk_IPAddressFamily_cmpfunc_thunk)) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_IPAddressFamily_freefunc_thunk)) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n)), sk_IPAddressFamily_cmpfunc_thunk)) #define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) #define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) #define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) @@ -1260,7 +1266,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) #define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) #define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) #define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) -#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_freefunc_type(freefunc)) #define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) #define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) #define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) @@ -1305,17 +1311,17 @@ int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, ASN1_INTEGER *min, ASN1_INTEGER *max); int X509v3_addr_add_inherit(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi); + unsigned afi, const unsigned *safi); int X509v3_addr_add_prefix(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, + unsigned afi, const unsigned *safi, unsigned char *a, const int prefixlen); int X509v3_addr_add_range(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, + unsigned afi, const unsigned *safi, unsigned char *min, unsigned char *max); unsigned X509v3_addr_get_afi(const IPAddressFamily *f); -int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, +int X509v3_addr_get_range(IPAddressOrRange *aor, unsigned afi, unsigned char *min, unsigned char *max, - const int length); + int length); /* * Canonical forms. @@ -1338,10 +1344,10 @@ int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); */ int X509v3_asid_validate_path(X509_STORE_CTX *); int X509v3_addr_validate_path(X509_STORE_CTX *); -int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, +int X509v3_asid_validate_resource_set(const STACK_OF(X509) *chain, ASIdentifiers *ext, int allow_inheritance); -int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, +int X509v3_addr_validate_resource_set(const STACK_OF(X509) *chain, IPAddrBlocks *ext, int allow_inheritance); #endif /* OPENSSL_NO_RFC3779 */ @@ -1350,9 +1356,9 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) #define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) #define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) -#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) -#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) -#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp)), sk_ASN1_STRING_cmpfunc_thunk)) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ASN1_STRING_freefunc_thunk)) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n)), sk_ASN1_STRING_cmpfunc_thunk)) #define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) #define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) #define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) @@ -1362,7 +1368,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) #define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) #define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) #define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) -#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_freefunc_type(freefunc)) #define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) #define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) #define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) @@ -1391,9 +1397,9 @@ DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) #define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) #define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) -#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) -#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) -#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp)), sk_PROFESSION_INFO_cmpfunc_thunk)) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_PROFESSION_INFO_freefunc_thunk)) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n)), sk_PROFESSION_INFO_cmpfunc_thunk)) #define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) #define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) #define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) @@ -1403,7 +1409,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) #define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) #define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) #define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) -#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) #define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) #define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) #define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) @@ -1417,9 +1423,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) #define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) #define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) -#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) -#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) -#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp)), sk_ADMISSIONS_cmpfunc_thunk)) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_ADMISSIONS_freefunc_thunk)) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n)), sk_ADMISSIONS_cmpfunc_thunk)) #define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) #define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) #define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) @@ -1429,7 +1435,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) #define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) #define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) #define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) -#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_freefunc_type(freefunc)) #define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) #define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) #define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) @@ -1504,9 +1510,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_USER_NOTICE_SYNTAX) SKM_DEFINE_STACK_OF_INTERNAL(USERNOTICE, USERNOTICE, USERNOTICE) #define sk_USERNOTICE_num(sk) OPENSSL_sk_num(ossl_check_const_USERNOTICE_sk_type(sk)) #define sk_USERNOTICE_value(sk, idx) ((USERNOTICE *)OPENSSL_sk_value(ossl_check_const_USERNOTICE_sk_type(sk), (idx))) -#define sk_USERNOTICE_new(cmp) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new(ossl_check_USERNOTICE_compfunc_type(cmp))) -#define sk_USERNOTICE_new_null() ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new_null()) -#define sk_USERNOTICE_new_reserve(cmp, n) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new_reserve(ossl_check_USERNOTICE_compfunc_type(cmp), (n))) +#define sk_USERNOTICE_new(cmp) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_USERNOTICE_compfunc_type(cmp)), sk_USERNOTICE_cmpfunc_thunk)) +#define sk_USERNOTICE_new_null() ((STACK_OF(USERNOTICE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_USERNOTICE_freefunc_thunk)) +#define sk_USERNOTICE_new_reserve(cmp, n) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_USERNOTICE_compfunc_type(cmp), (n)), sk_USERNOTICE_cmpfunc_thunk)) #define sk_USERNOTICE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_USERNOTICE_sk_type(sk), (n)) #define sk_USERNOTICE_free(sk) OPENSSL_sk_free(ossl_check_USERNOTICE_sk_type(sk)) #define sk_USERNOTICE_zero(sk) OPENSSL_sk_zero(ossl_check_USERNOTICE_sk_type(sk)) @@ -1516,7 +1522,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(USERNOTICE, USERNOTICE, USERNOTICE) #define sk_USERNOTICE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) #define sk_USERNOTICE_pop(sk) ((USERNOTICE *)OPENSSL_sk_pop(ossl_check_USERNOTICE_sk_type(sk))) #define sk_USERNOTICE_shift(sk) ((USERNOTICE *)OPENSSL_sk_shift(ossl_check_USERNOTICE_sk_type(sk))) -#define sk_USERNOTICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_USERNOTICE_sk_type(sk),ossl_check_USERNOTICE_freefunc_type(freefunc)) +#define sk_USERNOTICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_freefunc_type(freefunc)) #define sk_USERNOTICE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr), (idx)) #define sk_USERNOTICE_set(sk, idx, ptr) ((USERNOTICE *)OPENSSL_sk_set(ossl_check_USERNOTICE_sk_type(sk), (idx), ossl_check_USERNOTICE_type(ptr))) #define sk_USERNOTICE_find(sk, ptr) OPENSSL_sk_find(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) @@ -1543,9 +1549,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_ROLE_SPEC_CERT_ID) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ROLE_SPEC_CERT_ID, OSSL_ROLE_SPEC_CERT_ID, OSSL_ROLE_SPEC_CERT_ID) #define sk_OSSL_ROLE_SPEC_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) #define sk_OSSL_ROLE_SPEC_CERT_ID_value(sk, idx) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_value(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (idx))) -#define sk_OSSL_ROLE_SPEC_CERT_ID_new(cmp) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp))) -#define sk_OSSL_ROLE_SPEC_CERT_ID_new_null() ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new_null()) -#define sk_OSSL_ROLE_SPEC_CERT_ID_new_reserve(cmp, n) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp), (n))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new(cmp) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp)), sk_OSSL_ROLE_SPEC_CERT_ID_cmpfunc_thunk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new_null() ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_ROLE_SPEC_CERT_ID_freefunc_thunk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new_reserve(cmp, n) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp), (n)), sk_OSSL_ROLE_SPEC_CERT_ID_cmpfunc_thunk)) #define sk_OSSL_ROLE_SPEC_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (n)) #define sk_OSSL_ROLE_SPEC_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) #define sk_OSSL_ROLE_SPEC_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) @@ -1555,7 +1561,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ROLE_SPEC_CERT_ID, OSSL_ROLE_SPEC_CERT_ID, OSS #define sk_OSSL_ROLE_SPEC_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) #define sk_OSSL_ROLE_SPEC_CERT_ID_pop(sk) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_pop(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk))) #define sk_OSSL_ROLE_SPEC_CERT_ID_shift(sk) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_shift(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk))) -#define sk_OSSL_ROLE_SPEC_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk),ossl_check_OSSL_ROLE_SPEC_CERT_ID_freefunc_type(freefunc)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_freefunc_type(freefunc)) #define sk_OSSL_ROLE_SPEC_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr), (idx)) #define sk_OSSL_ROLE_SPEC_CERT_ID_set(sk, idx, ptr) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_set(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (idx), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr))) #define sk_OSSL_ROLE_SPEC_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) @@ -1793,9 +1799,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_TIME_PERIOD) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TIME_PERIOD, OSSL_TIME_PERIOD, OSSL_TIME_PERIOD) #define sk_OSSL_TIME_PERIOD_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk)) #define sk_OSSL_TIME_PERIOD_value(sk, idx) ((OSSL_TIME_PERIOD *)OPENSSL_sk_value(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk), (idx))) -#define sk_OSSL_TIME_PERIOD_new(cmp) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp))) -#define sk_OSSL_TIME_PERIOD_new_null() ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new_null()) -#define sk_OSSL_TIME_PERIOD_new_reserve(cmp, n) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp), (n))) +#define sk_OSSL_TIME_PERIOD_new(cmp) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp)), sk_OSSL_TIME_PERIOD_cmpfunc_thunk)) +#define sk_OSSL_TIME_PERIOD_new_null() ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_TIME_PERIOD_freefunc_thunk)) +#define sk_OSSL_TIME_PERIOD_new_reserve(cmp, n) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp), (n)), sk_OSSL_TIME_PERIOD_cmpfunc_thunk)) #define sk_OSSL_TIME_PERIOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), (n)) #define sk_OSSL_TIME_PERIOD_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TIME_PERIOD_sk_type(sk)) #define sk_OSSL_TIME_PERIOD_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TIME_PERIOD_sk_type(sk)) @@ -1805,7 +1811,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TIME_PERIOD, OSSL_TIME_PERIOD, OSSL_TIME_PERIO #define sk_OSSL_TIME_PERIOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) #define sk_OSSL_TIME_PERIOD_pop(sk) ((OSSL_TIME_PERIOD *)OPENSSL_sk_pop(ossl_check_OSSL_TIME_PERIOD_sk_type(sk))) #define sk_OSSL_TIME_PERIOD_shift(sk) ((OSSL_TIME_PERIOD *)OPENSSL_sk_shift(ossl_check_OSSL_TIME_PERIOD_sk_type(sk))) -#define sk_OSSL_TIME_PERIOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TIME_PERIOD_sk_type(sk),ossl_check_OSSL_TIME_PERIOD_freefunc_type(freefunc)) +#define sk_OSSL_TIME_PERIOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_freefunc_type(freefunc)) #define sk_OSSL_TIME_PERIOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr), (idx)) #define sk_OSSL_TIME_PERIOD_set(sk, idx, ptr) ((OSSL_TIME_PERIOD *)OPENSSL_sk_set(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), (idx), ossl_check_OSSL_TIME_PERIOD_type(ptr))) #define sk_OSSL_TIME_PERIOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) @@ -1823,9 +1829,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TIME_PERIOD, OSSL_TIME_PERIOD, OSSL_TIME_PERIO SKM_DEFINE_STACK_OF_INTERNAL(OSSL_DAY_TIME_BAND, OSSL_DAY_TIME_BAND, OSSL_DAY_TIME_BAND) #define sk_OSSL_DAY_TIME_BAND_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk)) #define sk_OSSL_DAY_TIME_BAND_value(sk, idx) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_value(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk), (idx))) -#define sk_OSSL_DAY_TIME_BAND_new(cmp) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp))) -#define sk_OSSL_DAY_TIME_BAND_new_null() ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new_null()) -#define sk_OSSL_DAY_TIME_BAND_new_reserve(cmp, n) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp), (n))) +#define sk_OSSL_DAY_TIME_BAND_new(cmp) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp)), sk_OSSL_DAY_TIME_BAND_cmpfunc_thunk)) +#define sk_OSSL_DAY_TIME_BAND_new_null() ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_DAY_TIME_BAND_freefunc_thunk)) +#define sk_OSSL_DAY_TIME_BAND_new_reserve(cmp, n) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp), (n)), sk_OSSL_DAY_TIME_BAND_cmpfunc_thunk)) #define sk_OSSL_DAY_TIME_BAND_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), (n)) #define sk_OSSL_DAY_TIME_BAND_free(sk) OPENSSL_sk_free(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk)) #define sk_OSSL_DAY_TIME_BAND_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk)) @@ -1835,7 +1841,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_DAY_TIME_BAND, OSSL_DAY_TIME_BAND, OSSL_DAY_TI #define sk_OSSL_DAY_TIME_BAND_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) #define sk_OSSL_DAY_TIME_BAND_pop(sk) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_pop(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk))) #define sk_OSSL_DAY_TIME_BAND_shift(sk) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_shift(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk))) -#define sk_OSSL_DAY_TIME_BAND_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk),ossl_check_OSSL_DAY_TIME_BAND_freefunc_type(freefunc)) +#define sk_OSSL_DAY_TIME_BAND_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_freefunc_type(freefunc)) #define sk_OSSL_DAY_TIME_BAND_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr), (idx)) #define sk_OSSL_DAY_TIME_BAND_set(sk, idx, ptr) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_set(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), (idx), ossl_check_OSSL_DAY_TIME_BAND_type(ptr))) #define sk_OSSL_DAY_TIME_BAND_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) @@ -1887,9 +1893,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_MAPPINGS) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ATTRIBUTE_MAPPING, OSSL_ATTRIBUTE_MAPPING, OSSL_ATTRIBUTE_MAPPING) #define sk_OSSL_ATTRIBUTE_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) #define sk_OSSL_ATTRIBUTE_MAPPING_value(sk, idx) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_value(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (idx))) -#define sk_OSSL_ATTRIBUTE_MAPPING_new(cmp) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp))) -#define sk_OSSL_ATTRIBUTE_MAPPING_new_null() ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new_null()) -#define sk_OSSL_ATTRIBUTE_MAPPING_new_reserve(cmp, n) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp), (n))) +#define sk_OSSL_ATTRIBUTE_MAPPING_new(cmp) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp)), sk_OSSL_ATTRIBUTE_MAPPING_cmpfunc_thunk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_new_null() ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_ATTRIBUTE_MAPPING_freefunc_thunk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_new_reserve(cmp, n) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp), (n)), sk_OSSL_ATTRIBUTE_MAPPING_cmpfunc_thunk)) #define sk_OSSL_ATTRIBUTE_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (n)) #define sk_OSSL_ATTRIBUTE_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) #define sk_OSSL_ATTRIBUTE_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) @@ -1899,7 +1905,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ATTRIBUTE_MAPPING, OSSL_ATTRIBUTE_MAPPING, OSS #define sk_OSSL_ATTRIBUTE_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) #define sk_OSSL_ATTRIBUTE_MAPPING_pop(sk) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_pop(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk))) #define sk_OSSL_ATTRIBUTE_MAPPING_shift(sk) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_shift(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk))) -#define sk_OSSL_ATTRIBUTE_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk),ossl_check_OSSL_ATTRIBUTE_MAPPING_freefunc_type(freefunc)) +#define sk_OSSL_ATTRIBUTE_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_freefunc_type(freefunc)) #define sk_OSSL_ATTRIBUTE_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr), (idx)) #define sk_OSSL_ATTRIBUTE_MAPPING_set(sk, idx, ptr) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_set(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (idx), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr))) #define sk_OSSL_ATTRIBUTE_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) @@ -1939,9 +1945,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_ALLOWED_ATTRIBUTES_SYNTAX) SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIBUTES_CHOICE) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_value(sk, idx) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_value(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (idx))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new_null()) -#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp), (n))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp)), sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_cmpfunc_thunk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_freefunc_thunk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp), (n)), sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_cmpfunc_thunk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (n)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) @@ -1951,7 +1957,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIB #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_pop(sk) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_pop(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk))) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_shift(sk) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_shift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk),ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_freefunc_type(freefunc)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_freefunc_type(freefunc)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr), (idx)) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_set(sk, idx, ptr) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_set(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (idx), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr))) #define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) @@ -1969,9 +1975,9 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIB SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_ITEM, OSSL_ALLOWED_ATTRIBUTES_ITEM, OSSL_ALLOWED_ATTRIBUTES_ITEM) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_value(sk, idx) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_value(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (idx))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new_null()) -#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp), (n))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp)), sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_cmpfunc_thunk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_freefunc_thunk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp), (n)), sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_cmpfunc_thunk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (n)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) @@ -1981,7 +1987,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_ITEM, OSSL_ALLOWED_ATTRIBUT #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_pop(sk) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_pop(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk))) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_shift(sk) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_shift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk))) -#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk),ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_freefunc_type(freefunc)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_freefunc_type(freefunc)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr), (idx)) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_set(sk, idx, ptr) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_set(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (idx), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr))) #define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/der/der_hkdf_gen.c b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/der/der_hkdf_gen.c new file mode 100644 index 000000000..17564386e --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/der/der_hkdf_gen.c @@ -0,0 +1,39 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from providers/common/der/der_hkdf_gen.c.in + * + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "prov/der_hkdf.h" + +/* Well known OIDs precompiled */ +/* clang-format off */ + +/* + * id-alg-hkdf-with-sha256 OBJECT IDENTIFIER ::= { id-alg 28 } + */ +const unsigned char ossl_der_oid_id_alg_hkdf_with_sha256[DER_OID_SZ_id_alg_hkdf_with_sha256] = { + DER_OID_V_id_alg_hkdf_with_sha256 +}; + +/* + * id-alg-hkdf-with-sha384 OBJECT IDENTIFIER ::= { id-alg 29 } + */ +const unsigned char ossl_der_oid_id_alg_hkdf_with_sha384[DER_OID_SZ_id_alg_hkdf_with_sha384] = { + DER_OID_V_id_alg_hkdf_with_sha384 +}; + +/* + * id-alg-hkdf-with-sha512 OBJECT IDENTIFIER ::= { id-alg 30 } + */ +const unsigned char ossl_der_oid_id_alg_hkdf_with_sha512[DER_OID_SZ_id_alg_hkdf_with_sha512] = { + DER_OID_V_id_alg_hkdf_with_sha512 +}; + +/* clang-format on */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/include/prov/der_hkdf.h b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/include/prov/der_hkdf.h new file mode 100644 index 000000000..218850f43 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/common/include/prov/der_hkdf.h @@ -0,0 +1,39 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from providers/common/include/prov/der_hkdf.h.in + * + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/der.h" + +/* Well known OIDs precompiled */ +/* clang-format off */ + +/* + * id-alg-hkdf-with-sha256 OBJECT IDENTIFIER ::= { id-alg 28 } + */ +#define DER_OID_V_id_alg_hkdf_with_sha256 DER_P_OBJECT, 11, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x10, 0x03, 0x1C +#define DER_OID_SZ_id_alg_hkdf_with_sha256 13 +extern const unsigned char ossl_der_oid_id_alg_hkdf_with_sha256[DER_OID_SZ_id_alg_hkdf_with_sha256]; + +/* + * id-alg-hkdf-with-sha384 OBJECT IDENTIFIER ::= { id-alg 29 } + */ +#define DER_OID_V_id_alg_hkdf_with_sha384 DER_P_OBJECT, 11, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x10, 0x03, 0x1D +#define DER_OID_SZ_id_alg_hkdf_with_sha384 13 +extern const unsigned char ossl_der_oid_id_alg_hkdf_with_sha384[DER_OID_SZ_id_alg_hkdf_with_sha384]; + +/* + * id-alg-hkdf-with-sha512 OBJECT IDENTIFIER ::= { id-alg 30 } + */ +#define DER_OID_V_id_alg_hkdf_with_sha512 DER_P_OBJECT, 11, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x10, 0x03, 0x1E +#define DER_OID_SZ_id_alg_hkdf_with_sha512 13 +extern const unsigned char ossl_der_oid_id_alg_hkdf_with_sha512[DER_OID_SZ_id_alg_hkdf_with_sha512]; + +/* clang-format on */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/rsa_enc.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/rsa_enc.inc new file mode 100644 index 000000000..3db42a2a4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/rsa_enc.inc @@ -0,0 +1,439 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_get_ctx_params_list +static const OSSL_PARAM rsa_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST, NULL, 0), + OSSL_PARAM_octet_ptr(OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL, NULL, 0), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION, NULL), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_get_ctx_params_st +struct rsa_get_ctx_params_st { + OSSL_PARAM *imrej; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *label; + OSSL_PARAM *mgf1; + OSSL_PARAM *negver; + OSSL_PARAM *oaep; + OSSL_PARAM *pad; + OSSL_PARAM *tlsver; +}; +#endif + +#ifndef rsa_get_ctx_params_decoder +static int rsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct rsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST */ + if (ossl_unlikely(r->oaep != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->oaep = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'i': + if (ossl_likely(strcmp("mplicit-rejection", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION */ + if (ossl_unlikely(r->imrej != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->imrej = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("gf1-digest", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST */ + if (ossl_unlikely(r->mgf1 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mgf1 = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("aep-label", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL */ + if (ossl_unlikely(r->label != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->label = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("ad-mode", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_PAD_MODE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("lient-version", s + 5) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION */ + if (ossl_unlikely(r->tlsver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsver = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("egotiated-version", s + 5) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION */ + if (ossl_unlikely(r->negver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->negver = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_set_ctx_params_list +static const OSSL_PARAM rsa_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_octet_string(OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL, NULL, 0), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION, NULL), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL), + OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_set_ctx_params_st +struct rsa_set_ctx_params_st { + OSSL_PARAM *imrej; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_pad; +# endif + OSSL_PARAM *label; + OSSL_PARAM *mgf1; + OSSL_PARAM *mgf1_pq; + OSSL_PARAM *negver; + OSSL_PARAM *oaep; + OSSL_PARAM *oaep_pq; + OSSL_PARAM *pad; + OSSL_PARAM *tlsver; +}; +#endif + +#ifndef rsa_set_ctx_params_decoder +static int rsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct rsa_set_ctx_params_st *r, int *count) +{ + const char *s; + + *count = 0; + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': + if (ossl_likely(strcmp("props", s + 7) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS */ + if (ossl_unlikely(r->oaep_pq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->oaep_pq = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->oaep != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->oaep = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'i': + if (ossl_likely(strcmp("mplicit-rejection", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION */ + if (ossl_unlikely(r->imrej != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->imrej = (OSSL_PARAM *)p; + } + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'g': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '1': + switch(s[4]) { + default: + break; + case '-': + switch(s[5]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 6) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST */ + if (ossl_unlikely(r->mgf1 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1 = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 6) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS */ + if (ossl_unlikely(r->mgf1_pq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1_pq = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'o': + if (ossl_likely(strcmp("aep-label", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL */ + if (ossl_unlikely(r->label != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->label = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("ad-mode", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_PAD_MODE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->pad = (OSSL_PARAM *)p; + } + break; + case 'r': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("sa-pkcs15-pad-disabled", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED */ + if (ossl_unlikely(r->ind_pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_pad = (OSSL_PARAM *)p; + } +# endif + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("lient-version", s + 5) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION */ + if (ossl_unlikely(r->tlsver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->tlsver = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("egotiated-version", s + 5) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION */ + if (ossl_unlikely(r->negver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->negver = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/sm2_enc.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/sm2_enc.inc new file mode 100644 index 000000000..c3e06a8c6 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/asymciphers/sm2_enc.inc @@ -0,0 +1,102 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sm2_get_ctx_params_list +static const OSSL_PARAM sm2_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef sm2_get_ctx_params_st +struct sm2_get_ctx_params_st { + OSSL_PARAM *digest; +}; +#endif + +#ifndef sm2_get_ctx_params_decoder +static int sm2_get_ctx_params_decoder + (const OSSL_PARAM *p, struct sm2_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("digest", s + 0) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sm2_set_ctx_params_list +static const OSSL_PARAM sm2_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef sm2_set_ctx_params_st +struct sm2_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *propq; +}; +#endif + +#ifndef sm2_set_ctx_params_decoder +static int sm2_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sm2_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_ASYM_CIPHER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.inc new file mode 100644 index 000000000..07a111be2 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.inc @@ -0,0 +1,492 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_cbc_hmac_sha_set_ctx_params_list +static const OSSL_PARAM aes_cbc_hmac_sha_set_ctx_params_list[] = { +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC, NULL, 0), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN, NULL, 0), +# endif + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_MAC_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD, NULL, 0), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS_VERSION, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_cbc_hmac_sha_set_ctx_params_st +struct aes_cbc_hmac_sha_set_ctx_params_st { +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *enc; +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *enc_in; +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *ileave; +# endif + OSSL_PARAM *key; + OSSL_PARAM *keylen; +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *maxfrag; +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *mb_aad; +# endif + OSSL_PARAM *tlsaad; + OSSL_PARAM *tlsver; +}; +#endif + +#ifndef aes_cbc_hmac_sha_set_ctx_params_decoder +static int aes_cbc_hmac_sha_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_cbc_hmac_sha_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ackey", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_MAC_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + if (ossl_likely(strcmp("version", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_VERSION */ + if (ossl_unlikely(r->tlsver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsver = (OSSL_PARAM *)p; + } + break; + case '1': + switch(s[4]) { + default: + break; + case 'm': + switch(s[5]) { + default: + break; + case 'u': + switch(s[6]) { + default: + break; + case 'l': + switch(s[7]) { + default: + break; + case 't': + switch(s[8]) { + default: + break; + case 'i': + switch(s[9]) { + default: + break; + case '_': + switch(s[10]) { + default: + break; + case 'a': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("ad", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD */ + if (ossl_unlikely(r->mb_aad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mb_aad = (OSSL_PARAM *)p; + } +# endif + break; + case 'e': + switch(s[11]) { + default: + break; + case 'n': + switch(s[12]) { + default: + break; + case 'c': + switch(s[13]) { + default: + break; + case 'i': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("n", s + 14) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN */ + if (ossl_unlikely(r->enc_in != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->enc_in = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_unlikely(r->enc != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->enc = (OSSL_PARAM *)p; +# endif + break; + } + break; + } + break; + } + break; + case 'i': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("nterleave", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE */ + if (ossl_unlikely(r->ileave != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ileave = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("axsndfrag", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT */ + if (ossl_unlikely(r->maxfrag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxfrag = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + } + break; + } + break; + } + break; + } + break; + } + break; + } + break; + case 'a': + if (ossl_likely(strcmp("ad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD */ + if (ossl_unlikely(r->tlsaad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsaad = (OSSL_PARAM *)p; + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_cbc_hmac_sha_get_ctx_params_list +static const OSSL_PARAM aes_cbc_hmac_sha_get_ctx_params_list[] = { +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN, NULL), +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN, NULL), +# endif + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_cbc_hmac_sha_get_ctx_params_st +struct aes_cbc_hmac_sha_get_ctx_params_st { +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *enclen; +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *inter; +# endif + OSSL_PARAM *iv; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *max; +# endif +# if !defined(OPENSSL_NO_MULTIBLOCK) + OSSL_PARAM *packlen; +# endif + OSSL_PARAM *pad; + OSSL_PARAM *upd_iv; +}; +#endif + +#ifndef aes_cbc_hmac_sha_get_ctx_params_decoder +static int aes_cbc_hmac_sha_get_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_cbc_hmac_sha_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '1': + switch(s[4]) { + default: + break; + case 'm': + switch(s[5]) { + default: + break; + case 'u': + switch(s[6]) { + default: + break; + case 'l': + switch(s[7]) { + default: + break; + case 't': + switch(s[8]) { + default: + break; + case 'i': + switch(s[9]) { + default: + break; + case '_': + switch(s[10]) { + default: + break; + case 'a': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("adpacklen", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN */ + if (ossl_unlikely(r->packlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->packlen = (OSSL_PARAM *)p; + } +# endif + break; + case 'e': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("nclen", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN */ + if (ossl_unlikely(r->enclen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->enclen = (OSSL_PARAM *)p; + } +# endif + break; + case 'i': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("nterleave", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE */ + if (ossl_unlikely(r->inter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->inter = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': +# if !defined(OPENSSL_NO_MULTIBLOCK) + if (ossl_likely(strcmp("axbufsz", s + 11) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE */ + if (ossl_unlikely(r->max != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->max = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + } + break; + } + break; + } + break; + } + break; + } + break; + } + break; + case 'a': + if (ossl_likely(strcmp("adpad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->upd_iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->upd_iv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.inc new file mode 100644 index 000000000..ca881c6ae --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.inc @@ -0,0 +1,179 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_cbc_hmac_sha_etm_set_ctx_params_list +static const OSSL_PARAM aes_cbc_hmac_sha_etm_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_MAC_KEY, NULL, 0), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_HMAC_PARAM_MAC, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_cbc_hmac_sha_etm_set_ctx_params_st +struct aes_cbc_hmac_sha_etm_set_ctx_params_st { + OSSL_PARAM *key; + OSSL_PARAM *keylen; + OSSL_PARAM *mac; +}; +#endif + +#ifndef aes_cbc_hmac_sha_etm_set_ctx_params_decoder +static int aes_cbc_hmac_sha_etm_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_cbc_hmac_sha_etm_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ackey", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_MAC_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ag", s + 1) == 0)) { + /* OSSL_CIPHER_HMAC_PARAM_MAC */ + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_cbc_hmac_sha_etm_get_ctx_params_list +static const OSSL_PARAM aes_cbc_hmac_sha_etm_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_HMAC_PARAM_MAC, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_cbc_hmac_sha_etm_get_ctx_params_st +struct aes_cbc_hmac_sha_etm_get_ctx_params_st { + OSSL_PARAM *iv; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *mac; + OSSL_PARAM *upd_iv; +}; +#endif + +#ifndef aes_cbc_hmac_sha_etm_get_ctx_params_decoder +static int aes_cbc_hmac_sha_etm_get_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_cbc_hmac_sha_etm_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ag", s + 1) == 0)) { + /* OSSL_CIPHER_HMAC_PARAM_MAC */ + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->upd_iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->upd_iv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_gcm_siv.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_gcm_siv.inc new file mode 100644 index 000000000..204546616 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_gcm_siv.inc @@ -0,0 +1,158 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_aes_gcm_siv_get_ctx_params_list +static const OSSL_PARAM ossl_aes_gcm_siv_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_aes_gcm_siv_get_ctx_params_st +struct ossl_aes_gcm_siv_get_ctx_params_st { + OSSL_PARAM *keylen; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; +}; +#endif + +#ifndef ossl_aes_gcm_siv_get_ctx_params_decoder +static int ossl_aes_gcm_siv_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ossl_aes_gcm_siv_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_gcm_siv_set_ctx_params_list +static const OSSL_PARAM aes_gcm_siv_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_SPEED, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_gcm_siv_set_ctx_params_st +struct aes_gcm_siv_set_ctx_params_st { + OSSL_PARAM *keylen; + OSSL_PARAM *speed; + OSSL_PARAM *tag; +}; +#endif + +#ifndef aes_gcm_siv_set_ctx_params_decoder +static int aes_gcm_siv_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_gcm_siv_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("peed", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_SPEED */ + if (ossl_unlikely(r->speed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->speed = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ag", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_ocb.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_ocb.inc new file mode 100644 index 000000000..6e7610fab --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_ocb.inc @@ -0,0 +1,204 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_ocb_set_ctx_params_list +static const OSSL_PARAM aes_ocb_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_ocb_set_ctx_params_st +struct aes_ocb_set_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *tag; +}; +#endif + +#ifndef aes_ocb_set_ctx_params_decoder +static int aes_ocb_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_ocb_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ag", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_ocb_get_ctx_params_list +static const OSSL_PARAM aes_ocb_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_ocb_get_ctx_params_st +struct aes_ocb_get_ctx_params_st { + OSSL_PARAM *iv; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; + OSSL_PARAM *upd_iv; +}; +#endif + +#ifndef aes_ocb_get_ctx_params_decoder +static int aes_ocb_get_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_ocb_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->upd_iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->upd_iv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_siv.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_siv.inc new file mode 100644 index 000000000..3742702dd --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_siv.inc @@ -0,0 +1,158 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_siv_get_ctx_params_list +static const OSSL_PARAM aes_siv_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_siv_get_ctx_params_st +struct aes_siv_get_ctx_params_st { + OSSL_PARAM *keylen; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; +}; +#endif + +#ifndef aes_siv_get_ctx_params_decoder +static int aes_siv_get_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_siv_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_siv_set_ctx_params_list +static const OSSL_PARAM aes_siv_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_SPEED, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_siv_set_ctx_params_st +struct aes_siv_set_ctx_params_st { + OSSL_PARAM *keylen; + OSSL_PARAM *speed; + OSSL_PARAM *tag; +}; +#endif + +#ifndef aes_siv_set_ctx_params_decoder +static int aes_siv_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_siv_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("peed", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_SPEED */ + if (ossl_unlikely(r->speed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->speed = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ag", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_wrp.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_wrp.inc new file mode 100644 index 000000000..a7a4f84d4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_wrp.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_wrap_set_ctx_params_list +static const OSSL_PARAM aes_wrap_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_wrap_set_ctx_params_st +struct aes_wrap_set_ctx_params_st { + OSSL_PARAM *keylen; +}; +#endif + +#ifndef aes_wrap_set_ctx_params_decoder +static int aes_wrap_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_wrap_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("keylen", s + 0) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_xts.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_xts.inc new file mode 100644 index 000000000..b8ab7190a --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_aes_xts.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef aes_xts_set_ctx_params_list +static const OSSL_PARAM aes_xts_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef aes_xts_set_ctx_params_st +struct aes_xts_set_ctx_params_st { + OSSL_PARAM *keylen; +}; +#endif + +#ifndef aes_xts_set_ctx_params_decoder +static int aes_xts_set_ctx_params_decoder + (const OSSL_PARAM *p, struct aes_xts_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("keylen", s + 0) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20.inc new file mode 100644 index 000000000..316428976 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20.inc @@ -0,0 +1,133 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef chacha20_get_ctx_params_list +static const OSSL_PARAM chacha20_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef chacha20_get_ctx_params_st +struct chacha20_get_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *upd_iv; +}; +#endif + +#ifndef chacha20_get_ctx_params_decoder +static int chacha20_get_ctx_params_decoder + (const OSSL_PARAM *p, struct chacha20_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->upd_iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->upd_iv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef chacha20_set_ctx_params_list +static const OSSL_PARAM chacha20_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef chacha20_set_ctx_params_st +struct chacha20_set_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; +}; +#endif + +#ifndef chacha20_set_ctx_params_decoder +static int chacha20_set_ctx_params_decoder + (const OSSL_PARAM *p, struct chacha20_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20_poly1305.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20_poly1305.inc new file mode 100644 index 000000000..af7308ee5 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_chacha20_poly1305.inc @@ -0,0 +1,225 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef chacha20_poly1305_get_ctx_params_list +static const OSSL_PARAM chacha20_poly1305_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef chacha20_poly1305_get_ctx_params_st +struct chacha20_poly1305_get_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *pad; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; +}; +#endif + +#ifndef chacha20_poly1305_get_ctx_params_decoder +static int chacha20_poly1305_get_ctx_params_decoder + (const OSSL_PARAM *p, struct chacha20_poly1305_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + break; + case 'l': + if (ossl_likely(strcmp("saadpad", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef chacha20_poly1305_set_ctx_params_list +static const OSSL_PARAM chacha20_poly1305_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef chacha20_poly1305_set_ctx_params_st +struct chacha20_poly1305_set_ctx_params_st { + OSSL_PARAM *aad; + OSSL_PARAM *fixed; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *tag; +}; +#endif + +#ifndef chacha20_poly1305_set_ctx_params_decoder +static int chacha20_poly1305_set_ctx_params_decoder + (const OSSL_PARAM *p, struct chacha20_poly1305_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("g", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD */ + if (ossl_unlikely(r->aad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aad = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("vfixed", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED */ + if (ossl_unlikely(r->fixed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->fixed = (OSSL_PARAM *)p; + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_null.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_null.inc new file mode 100644 index 000000000..2b712f9f0 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_null.inc @@ -0,0 +1,115 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef null_get_ctx_params_list +static const OSSL_PARAM null_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_ptr(OSSL_CIPHER_PARAM_TLS_MAC, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef null_get_ctx_params_st +struct null_get_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *mac; +}; +#endif + +#ifndef null_get_ctx_params_decoder +static int null_get_ctx_params_decoder + (const OSSL_PARAM *p, struct null_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ls-mac", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_MAC */ + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef null_set_ctx_params_list +static const OSSL_PARAM null_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS_MAC_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef null_set_ctx_params_st +struct null_set_ctx_params_st { + OSSL_PARAM *macsize; +}; +#endif + +#ifndef null_set_ctx_params_decoder +static int null_set_ctx_params_decoder + (const OSSL_PARAM *p, struct null_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("tls-mac-size", s + 0) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_MAC_SIZE */ + if (ossl_unlikely(r->macsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->macsize = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_rc4_hmac_md5.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_rc4_hmac_md5.inc new file mode 100644 index 000000000..4f14c1f46 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_rc4_hmac_md5.inc @@ -0,0 +1,187 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rc4_hmac_md5_get_ctx_params_list +static const OSSL_PARAM rc4_hmac_md5_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef rc4_hmac_md5_get_ctx_params_st +struct rc4_hmac_md5_get_ctx_params_st { + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *pad; +}; +#endif + +#ifndef rc4_hmac_md5_get_ctx_params_decoder +static int rc4_hmac_md5_get_ctx_params_decoder + (const OSSL_PARAM *p, struct rc4_hmac_md5_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("lsaadpad", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rc4_hmac_md5_set_ctx_params_list +static const OSSL_PARAM rc4_hmac_md5_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_MAC_KEY, NULL, 0), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS_VERSION, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef rc4_hmac_md5_set_ctx_params_st +struct rc4_hmac_md5_set_ctx_params_st { + OSSL_PARAM *aad; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *mackey; + OSSL_PARAM *tlsver; +}; +#endif + +#ifndef rc4_hmac_md5_set_ctx_params_decoder +static int rc4_hmac_md5_set_ctx_params_decoder + (const OSSL_PARAM *p, struct rc4_hmac_md5_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ackey", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_MAC_KEY */ + if (ossl_unlikely(r->mackey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mackey = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + if (ossl_likely(strcmp("version", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_VERSION */ + if (ossl_unlikely(r->tlsver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsver = (OSSL_PARAM *)p; + } + break; + case 'a': + if (ossl_likely(strcmp("ad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD */ + if (ossl_unlikely(r->aad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aad = (OSSL_PARAM *)p; + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_sm4_xts.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_sm4_xts.inc new file mode 100644 index 000000000..a1ef728c1 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/cipher_sm4_xts.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sm4_xts_set_ctx_params_list +static const OSSL_PARAM sm4_xts_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_CIPHER_PARAM_XTS_STANDARD, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef sm4_xts_set_ctx_params_st +struct sm4_xts_set_ctx_params_st { + OSSL_PARAM *std; +}; +#endif + +#ifndef sm4_xts_set_ctx_params_decoder +static int sm4_xts_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sm4_xts_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("xts_standard", s + 0) == 0)) { + /* OSSL_CIPHER_PARAM_XTS_STANDARD */ + if (ossl_unlikely(r->std != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->std = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon.inc new file mode 100644 index 000000000..2804a48fa --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon.inc @@ -0,0 +1,542 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_cipher_generic_get_params_list +static const OSSL_PARAM ossl_cipher_generic_get_params_list[] = { + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_MODE, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_BLOCK_SIZE, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_AEAD, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_CUSTOM_IV, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_CTS, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_HAS_RAND_KEY, NULL), + OSSL_PARAM_int(OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_cipher_generic_get_params_st +struct ossl_cipher_generic_get_params_st { + OSSL_PARAM *aead; + OSSL_PARAM *bsize; + OSSL_PARAM *cts; + OSSL_PARAM *custiv; + OSSL_PARAM *etm; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *mb; + OSSL_PARAM *mode; + OSSL_PARAM *rand; +}; +#endif + +#ifndef ossl_cipher_generic_get_params_decoder +static int ossl_cipher_generic_get_params_decoder + (const OSSL_PARAM *p, struct ossl_cipher_generic_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ead", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD */ + if (ossl_unlikely(r->aead != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aead = (OSSL_PARAM *)p; + } + break; + case 'b': + if (ossl_likely(strcmp("locksize", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 'c': + switch(s[1]) { + default: + break; + case 't': + if (ossl_likely(strcmp("s", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_CTS */ + if (ossl_unlikely(r->cts != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cts = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("stom-iv", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_CUSTOM_IV */ + if (ossl_unlikely(r->custiv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->custiv = (OSSL_PARAM *)p; + } + } + break; + case 'e': + if (ossl_likely(strcmp("ncrypt-then-mac", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC */ + if (ossl_unlikely(r->etm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->etm = (OSSL_PARAM *)p; + } + break; + case 'h': + if (ossl_likely(strcmp("as-randkey", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_HAS_RAND_KEY */ + if (ossl_unlikely(r->rand != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->rand = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ls-multi", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK */ + if (ossl_unlikely(r->mb != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mb = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cipher_generic_get_ctx_params_list +static const OSSL_PARAM cipher_generic_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_PADDING, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_NUM, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_TLS_MAC, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef cipher_generic_get_ctx_params_st +struct cipher_generic_get_ctx_params_st { + OSSL_PARAM *iv; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *num; + OSSL_PARAM *pad; + OSSL_PARAM *tlsmac; + OSSL_PARAM *updiv; +}; +#endif + +#ifndef cipher_generic_get_ctx_params_decoder +static int cipher_generic_get_ctx_params_decoder + (const OSSL_PARAM *p, struct cipher_generic_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("um", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_NUM */ + if (ossl_unlikely(r->num != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->num = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("adding", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_PADDING */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ls-mac", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_MAC */ + if (ossl_unlikely(r->tlsmac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsmac = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->updiv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->updiv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cipher_generic_set_ctx_params_list +static const OSSL_PARAM cipher_generic_set_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_PADDING, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_NUM, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_USE_BITS, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS_VERSION, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS_MAC_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef cipher_generic_set_ctx_params_st +struct cipher_generic_set_ctx_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *num; + OSSL_PARAM *pad; + OSSL_PARAM *tlsmacsize; + OSSL_PARAM *tlsvers; +}; +#endif + +#ifndef cipher_generic_set_ctx_params_decoder +static int cipher_generic_set_ctx_params_decoder + (const OSSL_PARAM *p, struct cipher_generic_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'n': + if (ossl_likely(strcmp("um", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_NUM */ + if (ossl_unlikely(r->num != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->num = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("adding", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_PADDING */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'm': + if (ossl_likely(strcmp("ac-size", s + 5) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_MAC_SIZE */ + if (ossl_unlikely(r->tlsmacsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsmacsize = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ersion", s + 5) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_VERSION */ + if (ossl_unlikely(r->tlsvers != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsvers = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("se-bits", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_USE_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cipher_var_keylen_set_ctx_params_list +static const OSSL_PARAM cipher_var_keylen_set_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_PADDING, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_NUM, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_USE_BITS, NULL), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_TLS_VERSION, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_TLS_MAC_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef cipher_var_keylen_set_ctx_params_st +struct cipher_var_keylen_set_ctx_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *keylen; + OSSL_PARAM *num; + OSSL_PARAM *pad; + OSSL_PARAM *tlsmacsize; + OSSL_PARAM *tlsvers; +}; +#endif + +#ifndef cipher_var_keylen_set_ctx_params_decoder +static int cipher_var_keylen_set_ctx_params_decoder + (const OSSL_PARAM *p, struct cipher_var_keylen_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("um", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_NUM */ + if (ossl_unlikely(r->num != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->num = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("adding", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_PADDING */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'm': + if (ossl_likely(strcmp("ac-size", s + 5) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_MAC_SIZE */ + if (ossl_unlikely(r->tlsmacsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsmacsize = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ersion", s + 5) == 0)) { + /* OSSL_CIPHER_PARAM_TLS_VERSION */ + if (ossl_unlikely(r->tlsvers != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsvers = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("se-bits", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_USE_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_ccm.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_ccm.inc new file mode 100644 index 000000000..e1df621e3 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_ccm.inc @@ -0,0 +1,245 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_cipher_ccm_set_ctx_params_list +static const OSSL_PARAM ossl_cipher_ccm_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_cipher_ccm_set_ctx_params_st +struct ossl_cipher_ccm_set_ctx_params_st { + OSSL_PARAM *aad; + OSSL_PARAM *fixed; + OSSL_PARAM *ivlen; + OSSL_PARAM *tag; +}; +#endif + +#ifndef ossl_cipher_ccm_set_ctx_params_decoder +static int ossl_cipher_ccm_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ossl_cipher_ccm_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("g", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD */ + if (ossl_unlikely(r->aad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aad = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("vfixed", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED */ + if (ossl_unlikely(r->fixed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->fixed = (OSSL_PARAM *)p; + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_cipher_ccm_get_ctx_params_list +static const OSSL_PARAM ossl_cipher_ccm_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_cipher_ccm_get_ctx_params_st +struct ossl_cipher_ccm_get_ctx_params_st { + OSSL_PARAM *iv; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *pad; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; + OSSL_PARAM *updiv; +}; +#endif + +#ifndef ossl_cipher_ccm_get_ctx_params_decoder +static int ossl_cipher_ccm_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ossl_cipher_ccm_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + break; + case 'l': + if (ossl_likely(strcmp("saadpad", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->updiv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->updiv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_gcm.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_gcm.inc new file mode 100644 index 000000000..433d384d4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/ciphers/ciphercommon_gcm.inc @@ -0,0 +1,304 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_cipher_gcm_get_ctx_params_list +static const OSSL_PARAM ossl_cipher_gcm_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_UPDATED_IV, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN, NULL, 0), + OSSL_PARAM_uint(OSSL_CIPHER_PARAM_AEAD_IV_GENERATED, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_cipher_gcm_get_ctx_params_st +struct ossl_cipher_gcm_get_ctx_params_st { + OSSL_PARAM *gen; + OSSL_PARAM *iv; + OSSL_PARAM *ivgen; + OSSL_PARAM *ivlen; + OSSL_PARAM *keylen; + OSSL_PARAM *pad; + OSSL_PARAM *tag; + OSSL_PARAM *taglen; + OSSL_PARAM *updiv; +}; +#endif + +#ifndef ossl_cipher_gcm_get_ctx_params_decoder +static int ossl_cipher_gcm_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ossl_cipher_gcm_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + switch(s[1]) { + default: + break; + case 'v': + switch(s[2]) { + default: + break; + case '-': + if (ossl_likely(strcmp("generated", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_IV_GENERATED */ + if (ossl_unlikely(r->gen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->gen = (OSSL_PARAM *)p; + } + break; + case 'l': + if (ossl_likely(strcmp("en", s + 3) == 0)) { + /* OSSL_CIPHER_PARAM_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("eylen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_KEYLEN */ + if (ossl_unlikely(r->keylen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->keylen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAGLEN */ + if (ossl_unlikely(r->taglen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->taglen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + } + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("adpad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("vgen", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN */ + if (ossl_unlikely(r->ivgen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivgen = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_UPDATED_IV */ + if (ossl_unlikely(r->updiv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->updiv = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ossl_cipher_gcm_set_ctx_params_list +static const OSSL_PARAM ossl_cipher_gcm_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN, NULL), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED, NULL, 0), + OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ossl_cipher_gcm_set_ctx_params_st +struct ossl_cipher_gcm_set_ctx_params_st { + OSSL_PARAM *aad; + OSSL_PARAM *fixed; + OSSL_PARAM *inviv; + OSSL_PARAM *ivlen; + OSSL_PARAM *tag; +}; +#endif + +#ifndef ossl_cipher_gcm_set_ctx_params_decoder +static int ossl_cipher_gcm_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ossl_cipher_gcm_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("vlen", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_IVLEN */ + if (ossl_unlikely(r->ivlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ivlen = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("g", s + 2) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TAG */ + if (ossl_unlikely(r->tag != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tag = (OSSL_PARAM *)p; + } + break; + case 'l': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ad", s + 4) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_AAD */ + if (ossl_unlikely(r->aad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aad = (OSSL_PARAM *)p; + } + break; + case 'i': + switch(s[4]) { + default: + break; + case 'v': + switch(s[5]) { + default: + break; + case 'f': + if (ossl_likely(strcmp("ixed", s + 6) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED */ + if (ossl_unlikely(r->fixed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->fixed = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nv", s + 6) == 0)) { + /* OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV */ + if (ossl_unlikely(r->inviv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->inviv = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/blake2_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/blake2_prov.inc new file mode 100644 index 000000000..8fa2e8bb3 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/blake2_prov.inc @@ -0,0 +1,84 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef blake_get_ctx_params_list +static const OSSL_PARAM blake_get_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef blake_get_ctx_params_st +struct blake_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef blake_get_ctx_params_decoder +static int blake_get_ctx_params_decoder + (const OSSL_PARAM *p, struct blake_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef blake_set_ctx_params_list +static const OSSL_PARAM blake_set_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef blake_set_ctx_params_st +struct blake_set_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef blake_set_ctx_params_decoder +static int blake_set_ctx_params_decoder + (const OSSL_PARAM *p, struct blake_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/cshake_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/cshake_prov.inc new file mode 100644 index 000000000..d90dc2690 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/cshake_prov.inc @@ -0,0 +1,157 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cshake_set_ctx_params_list +static const OSSL_PARAM cshake_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_XOFLEN, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_DIGEST_PARAM_FUNCTION_NAME, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DIGEST_PARAM_CUSTOMIZATION, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DIGEST_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef cshake_set_ctx_params_st +struct cshake_set_ctx_params_st { + OSSL_PARAM *custom; + OSSL_PARAM *func; + OSSL_PARAM *propq; + OSSL_PARAM *xoflen; +}; +#endif + +#ifndef cshake_set_ctx_params_decoder +static int cshake_set_ctx_params_decoder + (const OSSL_PARAM *p, struct cshake_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ustomization", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_CUSTOMIZATION */ + if (ossl_unlikely(r->custom != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->custom = (OSSL_PARAM *)p; + } + break; + case 'f': + if (ossl_likely(strcmp("unction-name", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_FUNCTION_NAME */ + if (ossl_unlikely(r->func != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->func = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("oflen", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOFLEN */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cshake_get_ctx_params_list +static const OSSL_PARAM cshake_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_XOFLEN, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef cshake_get_ctx_params_st +struct cshake_get_ctx_params_st { + OSSL_PARAM *size; + OSSL_PARAM *xoflen; +}; +#endif + +#ifndef cshake_get_ctx_params_decoder +static int cshake_get_ctx_params_decoder + (const OSSL_PARAM *p, struct cshake_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("oflen", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOFLEN */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/digestcommon.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/digestcommon.inc new file mode 100644 index 000000000..ce85d992b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/digestcommon.inc @@ -0,0 +1,91 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef digest_default_get_params_list +static const OSSL_PARAM digest_default_get_params_list[] = { + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_BLOCK_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_int(OSSL_DIGEST_PARAM_XOF, NULL), + OSSL_PARAM_int(OSSL_DIGEST_PARAM_ALGID_ABSENT, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef digest_default_get_params_st +struct digest_default_get_params_st { + OSSL_PARAM *aldid; + OSSL_PARAM *bsize; + OSSL_PARAM *size; + OSSL_PARAM *xof; +}; +#endif + +#ifndef digest_default_get_params_decoder +static int digest_default_get_params_decoder + (const OSSL_PARAM *p, struct digest_default_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lgid-absent", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_ALGID_ABSENT */ + if (ossl_unlikely(r->aldid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->aldid = (OSSL_PARAM *)p; + } + break; + case 'b': + if (ossl_likely(strcmp("locksize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("of", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOF */ + if (ossl_unlikely(r->xof != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xof = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/mdc2_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/mdc2_prov.inc new file mode 100644 index 000000000..0aab33f9f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/mdc2_prov.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mdc2_set_ctx_params_list +static const OSSL_PARAM mdc2_set_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_DIGEST_PARAM_PAD_TYPE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef mdc2_set_ctx_params_st +struct mdc2_set_ctx_params_st { + OSSL_PARAM *pad; +}; +#endif + +#ifndef mdc2_set_ctx_params_decoder +static int mdc2_set_ctx_params_decoder + (const OSSL_PARAM *p, struct mdc2_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("pad-type", s + 0) == 0)) { + /* OSSL_DIGEST_PARAM_PAD_TYPE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/ml_dsa_mu_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/ml_dsa_mu_prov.inc new file mode 100644 index 000000000..fe6ba0b96 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/ml_dsa_mu_prov.inc @@ -0,0 +1,151 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_mu_get_ctx_params_list +static const OSSL_PARAM ml_dsa_mu_get_ctx_params_list[] = { + OSSL_PARAM_uint(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_XOFLEN, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_mu_get_ctx_params_st +struct ml_dsa_mu_get_ctx_params_st { + OSSL_PARAM *size; + OSSL_PARAM *xoflen; +}; +#endif + +#ifndef ml_dsa_mu_get_ctx_params_decoder +static int ml_dsa_mu_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_mu_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("oflen", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOFLEN */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_mu_set_ctx_params_list +static const OSSL_PARAM ml_dsa_mu_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_DIGEST_PARAM_MU_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DIGEST_PARAM_MU_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_DIGEST_PARAM_MU_PUB_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DIGEST_PARAM_MU_DIGEST, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_mu_set_ctx_params_st +struct ml_dsa_mu_set_ctx_params_st { + OSSL_PARAM *ctx; + OSSL_PARAM *digestname; + OSSL_PARAM *propq; + OSSL_PARAM *pubkey; +}; +#endif + +#ifndef ml_dsa_mu_set_ctx_params_decoder +static int ml_dsa_mu_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_mu_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ontext-string", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_MU_CONTEXT_STRING */ + if (ossl_unlikely(r->ctx != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ctx = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_MU_DIGEST */ + if (ossl_unlikely(r->digestname != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digestname = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_DIGEST_PARAM_MU_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_DIGEST_PARAM_MU_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha2_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha2_prov.inc new file mode 100644 index 000000000..fd5edad52 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha2_prov.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sha1_set_ctx_params_list +static const OSSL_PARAM sha1_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_DIGEST_PARAM_SSL3_MS, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef sha1_set_ctx_params_st +struct sha1_set_ctx_params_st { + OSSL_PARAM *ssl3_ms; +}; +#endif + +#ifndef sha1_set_ctx_params_decoder +static int sha1_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sha1_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("ssl3-ms", s + 0) == 0)) { + /* OSSL_DIGEST_PARAM_SSL3_MS */ + if (ossl_unlikely(r->ssl3_ms != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ssl3_ms = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha3_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha3_prov.inc new file mode 100644 index 000000000..a295d9bd0 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/digests/sha3_prov.inc @@ -0,0 +1,119 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef shake_get_ctx_params_list +static const OSSL_PARAM shake_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_XOFLEN, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef shake_get_ctx_params_st +struct shake_get_ctx_params_st { + OSSL_PARAM *size; + OSSL_PARAM *xoflen; +}; +#endif + +#ifndef shake_get_ctx_params_decoder +static int shake_get_ctx_params_decoder + (const OSSL_PARAM *p, struct shake_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("oflen", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOFLEN */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef shake_set_ctx_params_list +static const OSSL_PARAM shake_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_XOFLEN, NULL), + OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef shake_set_ctx_params_st +struct shake_set_ctx_params_st { + OSSL_PARAM *xoflen; +}; +#endif + +#ifndef shake_set_ctx_params_decoder +static int shake_set_ctx_params_decoder + (const OSSL_PARAM *p, struct shake_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_SIZE */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("oflen", s + 1) == 0)) { + /* OSSL_DIGEST_PARAM_XOFLEN */ + if (ossl_unlikely(r->xoflen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xoflen = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_der2key.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_der2key.inc new file mode 100644 index 000000000..947165bc5 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_der2key.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef der2key_set_ctx_params_list +static const OSSL_PARAM der2key_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DECODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef der2key_set_ctx_params_st +struct der2key_set_ctx_params_st { + OSSL_PARAM *propq; +}; +#endif + +#ifndef der2key_set_ctx_params_decoder +static int der2key_set_ctx_params_decoder + (const OSSL_PARAM *p, struct der2key_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("properties", s + 0) == 0)) { + /* OSSL_DECODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_epki2pki.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_epki2pki.inc new file mode 100644 index 000000000..834e3cef1 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_epki2pki.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef epki2pki_set_ctx_params_list +static const OSSL_PARAM epki2pki_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DECODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef epki2pki_set_ctx_params_st +struct epki2pki_set_ctx_params_st { + OSSL_PARAM *propq; +}; +#endif + +#ifndef epki2pki_set_ctx_params_decoder +static int epki2pki_set_ctx_params_decoder + (const OSSL_PARAM *p, struct epki2pki_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("properties", s + 0) == 0)) { + /* OSSL_DECODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pem2der.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pem2der.inc new file mode 100644 index 000000000..a4b265373 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pem2der.inc @@ -0,0 +1,65 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pem2der_set_ctx_params_list +static const OSSL_PARAM pem2der_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DECODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_OBJECT_PARAM_DATA_STRUCTURE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef pem2der_set_ctx_params_st +struct pem2der_set_ctx_params_st { + OSSL_PARAM *ds; + OSSL_PARAM *propq; +}; +#endif + +#ifndef pem2der_set_ctx_params_decoder +static int pem2der_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pem2der_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("ata-structure", s + 1) == 0)) { + /* OSSL_OBJECT_PARAM_DATA_STRUCTURE */ + if (ossl_unlikely(r->ds != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ds = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_DECODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pvk2key.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pvk2key.inc new file mode 100644 index 000000000..d9d4b0ec9 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_pvk2key.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pvk2key_set_ctx_params_list +static const OSSL_PARAM pvk2key_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DECODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef pvk2key_set_ctx_params_st +struct pvk2key_set_ctx_params_st { + OSSL_PARAM *propq; +}; +#endif + +#ifndef pvk2key_set_ctx_params_decoder +static int pvk2key_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pvk2key_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("properties", s + 0) == 0)) { + /* OSSL_DECODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_spki2typespki.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_spki2typespki.inc new file mode 100644 index 000000000..f2f593ca7 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/decode_spki2typespki.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef spki2typespki_set_ctx_params_list +static const OSSL_PARAM spki2typespki_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DECODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef spki2typespki_set_ctx_params_st +struct spki2typespki_set_ctx_params_st { + OSSL_PARAM *propq; +}; +#endif + +#ifndef spki2typespki_set_ctx_params_decoder +static int spki2typespki_set_ctx_params_decoder + (const OSSL_PARAM *p, struct spki2typespki_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("properties", s + 0) == 0)) { + /* OSSL_DECODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2any.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2any.inc new file mode 100644 index 000000000..6e26a8e4c --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2any.inc @@ -0,0 +1,91 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef key2any_set_ctx_params_list +static const OSSL_PARAM key2any_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_ENCODER_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_ENCODER_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_int(OSSL_ENCODER_PARAM_SAVE_PARAMETERS, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_OUTPUT_FORMATS, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef key2any_set_ctx_params_st +struct key2any_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *output_formats; + OSSL_PARAM *propq; + OSSL_PARAM *svprm; +}; +#endif + +#ifndef key2any_set_ctx_params_decoder +static int key2any_set_ctx_params_decoder + (const OSSL_PARAM *p, struct key2any_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_ENCODER_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("utput_formats", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_OUTPUT_FORMATS */ + if (ossl_unlikely(r->output_formats != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->output_formats = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_ENCODER_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ave-parameters", s + 1) == 0)) { + /* OSSL_ENCODER_PARAM_SAVE_PARAMETERS */ + if (ossl_unlikely(r->svprm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->svprm = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2ms.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2ms.inc new file mode 100644 index 000000000..e3863dd1b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/encode_decode/encode_key2ms.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef key2pvk_set_ctx_params_list +static const OSSL_PARAM key2pvk_set_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_ENCODER_PARAM_ENCRYPT_LEVEL, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef key2pvk_set_ctx_params_st +struct key2pvk_set_ctx_params_st { + OSSL_PARAM *enclvl; +}; +#endif + +#ifndef key2pvk_set_ctx_params_decoder +static int key2pvk_set_ctx_params_decoder + (const OSSL_PARAM *p, struct key2pvk_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("encrypt-level", s + 0) == 0)) { + /* OSSL_ENCODER_PARAM_ENCRYPT_LEVEL */ + if (ossl_unlikely(r->enclvl != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->enclvl = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/dh_exch.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/dh_exch.inc new file mode 100644 index 000000000..abb6f0090 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/dh_exch.inc @@ -0,0 +1,349 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dh_set_ctx_params_list +static const OSSL_PARAM dh_set_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_PAD, NULL), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN, NULL), + OSSL_PARAM_octet_string(OSSL_EXCHANGE_PARAM_KDF_UKM, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CEK_ALG, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dh_set_ctx_params_st +struct dh_set_ctx_params_st { + OSSL_PARAM *cekalg; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *kdf; + OSSL_PARAM *len; + OSSL_PARAM *pad; + OSSL_PARAM *propq; + OSSL_PARAM *ukm; +}; +#endif + +#ifndef dh_set_ctx_params_decoder +static int dh_set_ctx_params_decoder + (const OSSL_PARAM *p, struct dh_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ekalg", s + 1) == 0)) { + /* OSSL_KDF_PARAM_CEK_ALG */ + if (ossl_unlikely(r->cekalg != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cekalg = (OSSL_PARAM *)p; + } + break; + case 'd': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("igest-check", s + 1) == 0)) { + /* OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': + switch(s[1]) { + default: + break; + case 'd': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'd': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 'g': + switch(s[7]) { + default: + break; + case 'e': + switch(s[8]) { + default: + break; + case 's': + switch(s[9]) { + default: + break; + case 't': + switch(s[10]) { + default: + break; + case '-': + if (ossl_likely(strcmp("props", s + 11) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'o': + if (ossl_likely(strcmp("utlen", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_OUTLEN */ + if (ossl_unlikely(r->len != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->len = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_TYPE */ + if (ossl_unlikely(r->kdf != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdf = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("km", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_UKM */ + if (ossl_unlikely(r->ukm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ukm = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("y-check", s + 2) == 0)) { + /* OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + case 'p': + if (ossl_likely(strcmp("ad", s + 1) == 0)) { + /* OSSL_EXCHANGE_PARAM_PAD */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dh_get_ctx_params_list +static const OSSL_PARAM dh_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST, NULL, 0), + OSSL_PARAM_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN, NULL), + OSSL_PARAM_octet_ptr(OSSL_EXCHANGE_PARAM_KDF_UKM, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CEK_ALG, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dh_get_ctx_params_st +struct dh_get_ctx_params_st { + OSSL_PARAM *cekalg; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *kdf; + OSSL_PARAM *len; + OSSL_PARAM *ukm; +}; +#endif + +#ifndef dh_get_ctx_params_decoder +static int dh_get_ctx_params_decoder + (const OSSL_PARAM *p, struct dh_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ekalg", s + 1) == 0)) { + /* OSSL_KDF_PARAM_CEK_ALG */ + if (ossl_unlikely(r->cekalg != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cekalg = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': + switch(s[1]) { + default: + break; + case 'd': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("utlen", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_OUTLEN */ + if (ossl_unlikely(r->len != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->len = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_TYPE */ + if (ossl_unlikely(r->kdf != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdf = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("km", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_UKM */ + if (ossl_unlikely(r->ukm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ukm = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecdh_exch.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecdh_exch.inc new file mode 100644 index 000000000..d9e95e106 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecdh_exch.inc @@ -0,0 +1,426 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecdh_set_ctx_params_list +static const OSSL_PARAM ecdh_set_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN, NULL), + OSSL_PARAM_octet_string(OSSL_EXCHANGE_PARAM_KDF_UKM, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecdh_set_ctx_params_st +struct ecdh_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_cofac; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *kdf; + OSSL_PARAM *len; + OSSL_PARAM *mode; + OSSL_PARAM *propq; + OSSL_PARAM *ukm; +}; +#endif + +#ifndef ecdh_set_ctx_params_decoder +static int ecdh_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ecdh_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("igest-check", s + 1) == 0)) { + /* OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 'e': + switch(s[1]) { + default: + break; + case 'c': + switch(s[2]) { + default: + break; + case 'd': + switch(s[3]) { + default: + break; + case 'h': + switch(s[4]) { + default: + break; + case '-': + switch(s[5]) { + default: + break; + case 'c': + switch(s[6]) { + default: + break; + case 'o': + switch(s[7]) { + default: + break; + case 'f': + switch(s[8]) { + default: + break; + case 'a': + switch(s[9]) { + default: + break; + case 'c': + switch(s[10]) { + default: + break; + case 't': + switch(s[11]) { + default: + break; + case 'o': + switch(s[12]) { + default: + break; + case 'r': + switch(s[13]) { + default: + break; + case '-': + switch(s[14]) { + default: + break; + case 'c': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("heck", s + 15) == 0)) { + /* OSSL_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK */ + if (ossl_unlikely(r->ind_cofac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_cofac = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 15) == 0)) { + /* OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'd': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'd': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 'g': + switch(s[7]) { + default: + break; + case 'e': + switch(s[8]) { + default: + break; + case 's': + switch(s[9]) { + default: + break; + case 't': + switch(s[10]) { + default: + break; + case '-': + if (ossl_likely(strcmp("props", s + 11) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'o': + if (ossl_likely(strcmp("utlen", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_OUTLEN */ + if (ossl_unlikely(r->len != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->len = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_TYPE */ + if (ossl_unlikely(r->kdf != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdf = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("km", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_UKM */ + if (ossl_unlikely(r->ukm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ukm = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("y-check", s + 2) == 0)) { + /* OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecdh_get_ctx_params_list +static const OSSL_PARAM ecdh_get_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST, NULL, 0), + OSSL_PARAM_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN, NULL), + OSSL_PARAM_octet_ptr(OSSL_EXCHANGE_PARAM_KDF_UKM, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecdh_get_ctx_params_st +struct ecdh_get_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *kdf; + OSSL_PARAM *len; + OSSL_PARAM *mode; + OSSL_PARAM *ukm; +}; +#endif + +#ifndef ecdh_get_ctx_params_decoder +static int ecdh_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ecdh_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("cdh-cofactor-mode", s + 1) == 0)) { + /* OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': + switch(s[1]) { + default: + break; + case 'd': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("utlen", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_OUTLEN */ + if (ossl_unlikely(r->len != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->len = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_TYPE */ + if (ossl_unlikely(r->kdf != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdf = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("km", s + 5) == 0)) { + /* OSSL_EXCHANGE_PARAM_KDF_UKM */ + if (ossl_unlikely(r->ukm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ukm = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecx_exch.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecx_exch.inc new file mode 100644 index 000000000..258d9b7c6 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/exchange/ecx_exch.inc @@ -0,0 +1,57 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecx_get_ctx_params_list +static const OSSL_PARAM ecx_get_ctx_params_list[] = { +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecx_get_ctx_params_st +struct ecx_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# else + int dummy; /* unused */ +# endif +}; +#endif + +#ifndef ecx_get_ctx_params_decoder +static int ecx_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ecx_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("fips-indicator", s + 0) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# else + ; +# endif + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/include/prov/blake2_params.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/include/prov/blake2_params.inc new file mode 100644 index 000000000..8983edb1b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/include/prov/blake2_params.inc @@ -0,0 +1,154 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + +#include +#include "internal/common.h" + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef blake2_get_ctx_list +static const OSSL_PARAM blake2_get_ctx_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef blake2_get_ctx_st +struct blake2_get_ctx_st { + OSSL_PARAM *bsize; + OSSL_PARAM *size; +}; +#endif + +#ifndef blake2_get_ctx_decoder +static int blake2_get_ctx_decoder + (const OSSL_PARAM *p, struct blake2_get_ctx_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("lock-size", s + 1) == 0)) { + /* OSSL_MAC_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef blake2_mac_set_ctx_list +static const OSSL_PARAM blake2_mac_set_ctx_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_CUSTOM, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_SALT, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef blake2_mac_set_ctx_st +struct blake2_mac_set_ctx_st { + OSSL_PARAM *cust; + OSSL_PARAM *key; + OSSL_PARAM *salt; + OSSL_PARAM *size; +}; +#endif + +#ifndef blake2_mac_set_ctx_decoder +static int blake2_mac_set_ctx_decoder + (const OSSL_PARAM *p, struct blake2_mac_set_ctx_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ustom", s + 1) == 0)) { + /* OSSL_MAC_PARAM_CUSTOM */ + if (ossl_unlikely(r->cust != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cust = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("ey", s + 1) == 0)) { + /* OSSL_MAC_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lt", s + 2) == 0)) { + /* OSSL_MAC_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ze", s + 2) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/argon2.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/argon2.inc new file mode 100644 index 000000000..df4639865 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/argon2.inc @@ -0,0 +1,242 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef argon2_set_ctx_params_list +static const OSSL_PARAM argon2_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SECRET, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_ARGON2_AD, NULL, 0), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_ITER, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_THREADS, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_ARGON2_LANES, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_ARGON2_MEMCOST, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_EARLY_CLEAN, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_ARGON2_VERSION, NULL), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef argon2_set_ctx_params_st +struct argon2_set_ctx_params_st { + OSSL_PARAM *ad; + OSSL_PARAM *eclean; + OSSL_PARAM *iter; + OSSL_PARAM *lanes; + OSSL_PARAM *mem; + OSSL_PARAM *propq; + OSSL_PARAM *pw; + OSSL_PARAM *salt; + OSSL_PARAM *secret; + OSSL_PARAM *size; + OSSL_PARAM *thrds; + OSSL_PARAM *vers; +}; +#endif + +#ifndef argon2_set_ctx_params_decoder +static int argon2_set_ctx_params_decoder + (const OSSL_PARAM *p, struct argon2_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("d", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ARGON2_AD */ + if (ossl_unlikely(r->ad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ad = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("arly_clean", s + 1) == 0)) { + /* OSSL_KDF_PARAM_EARLY_CLEAN */ + if (ossl_unlikely(r->eclean != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->eclean = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ter", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ITER */ + if (ossl_unlikely(r->iter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iter = (OSSL_PARAM *)p; + } + break; + case 'l': + if (ossl_likely(strcmp("anes", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ARGON2_LANES */ + if (ossl_unlikely(r->lanes != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->lanes = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("emcost", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ARGON2_MEMCOST */ + if (ossl_unlikely(r->mem != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mem = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lt", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("cret", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SECRET */ + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ze", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + break; + case 't': + if (ossl_likely(strcmp("hreads", s + 1) == 0)) { + /* OSSL_KDF_PARAM_THREADS */ + if (ossl_unlikely(r->thrds != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->thrds = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ersion", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ARGON2_VERSION */ + if (ossl_unlikely(r->vers != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->vers = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef argon2_get_ctx_params_list +static const OSSL_PARAM argon2_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef argon2_get_ctx_params_st +struct argon2_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef argon2_get_ctx_params_decoder +static int argon2_get_ctx_params_decoder + (const OSSL_PARAM *p, struct argon2_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hkdf.inc new file mode 100644 index 000000000..d0fac9f99 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hkdf.inc @@ -0,0 +1,612 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hkdf_set_ctx_params_list +static const OSSL_PARAM hkdf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_MODE, NULL), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef hkdf_set_ctx_params_st +struct hkdf_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *info[HKDF_MAX_INFOS]; + int num_info; + OSSL_PARAM *key; + OSSL_PARAM *mode; + OSSL_PARAM *propq; + OSSL_PARAM *salt; +}; +#endif + +#ifndef hkdf_set_ctx_params_decoder +static int hkdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct hkdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->num_info >= HKDF_MAX_INFOS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, HKDF_MAX_INFOS); + return 0; + } + r->info[r->num_info++] = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 1) == 0)) { + /* OSSL_KDF_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hkdf_get_ctx_params_list +static const OSSL_PARAM hkdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_MODE, NULL), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef hkdf_get_ctx_params_st +struct hkdf_get_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *info; + OSSL_PARAM *mode; + OSSL_PARAM *salt; + OSSL_PARAM *size; +}; +#endif + +#ifndef hkdf_get_ctx_params_decoder +static int hkdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct hkdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->info != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->info = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 1) == 0)) { + /* OSSL_KDF_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lt", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ze", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hkdf_fixed_digest_set_ctx_params_list +static const OSSL_PARAM hkdf_fixed_digest_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_MODE, NULL), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef hkdf_fixed_digest_set_ctx_params_st +struct hkdf_fixed_digest_set_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *info[HKDF_MAX_INFOS]; + int num_info; + OSSL_PARAM *key; + OSSL_PARAM *mode; + OSSL_PARAM *salt; +}; +#endif + +#ifndef hkdf_fixed_digest_set_ctx_params_decoder +static int hkdf_fixed_digest_set_ctx_params_decoder + (const OSSL_PARAM *p, struct hkdf_fixed_digest_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->num_info >= HKDF_MAX_INFOS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, HKDF_MAX_INFOS); + return 0; + } + r->info[r->num_info++] = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 1) == 0)) { + /* OSSL_KDF_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kdf_tls1_3_set_ctx_params_list +static const OSSL_PARAM kdf_tls1_3_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_MODE, NULL), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PREFIX, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_LABEL, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_DATA, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef kdf_tls1_3_set_ctx_params_st +struct kdf_tls1_3_set_ctx_params_st { + OSSL_PARAM *data; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *key; + OSSL_PARAM *label; + OSSL_PARAM *mode; + OSSL_PARAM *prefix; + OSSL_PARAM *propq; + OSSL_PARAM *salt; +}; +#endif + +#ifndef kdf_tls1_3_set_ctx_params_decoder +static int kdf_tls1_3_set_ctx_params_decoder + (const OSSL_PARAM *p, struct kdf_tls1_3_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ta", s + 2) == 0)) { + /* OSSL_KDF_PARAM_DATA */ + if (ossl_unlikely(r->data != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->data = (OSSL_PARAM *)p; + } + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'l': + if (ossl_likely(strcmp("abel", s + 1) == 0)) { + /* OSSL_KDF_PARAM_LABEL */ + if (ossl_unlikely(r->label != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->label = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ode", s + 1) == 0)) { + /* OSSL_KDF_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("fix", s + 3) == 0)) { + /* OSSL_KDF_PARAM_PREFIX */ + if (ossl_unlikely(r->prefix != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->prefix = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hmacdrbg_kdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hmacdrbg_kdf.inc new file mode 100644 index 000000000..e5cf11aa8 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/hmacdrbg_kdf.inc @@ -0,0 +1,146 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hmac_drbg_kdf_get_ctx_params_list +static const OSSL_PARAM hmac_drbg_kdf_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MAC, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef hmac_drbg_kdf_get_ctx_params_st +struct hmac_drbg_kdf_get_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *mac; +}; +#endif + +#ifndef hmac_drbg_kdf_get_ctx_params_decoder +static int hmac_drbg_kdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct hmac_drbg_kdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ac", s + 1) == 0)) { + /* OSSL_KDF_PARAM_MAC */ + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hmac_drbg_kdf_set_ctx_params_list +static const OSSL_PARAM hmac_drbg_kdf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_HMACDRBG_ENTROPY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_HMACDRBG_NONCE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef hmac_drbg_kdf_set_ctx_params_st +struct hmac_drbg_kdf_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *ent; + OSSL_PARAM *nonce; + OSSL_PARAM *propq; +}; +#endif + +#ifndef hmac_drbg_kdf_set_ctx_params_decoder +static int hmac_drbg_kdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct hmac_drbg_kdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ntropy", s + 1) == 0)) { + /* OSSL_KDF_PARAM_HMACDRBG_ENTROPY */ + if (ossl_unlikely(r->ent != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ent = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("once", s + 1) == 0)) { + /* OSSL_KDF_PARAM_HMACDRBG_NONCE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/kbkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/kbkdf.inc new file mode 100644 index 000000000..0486cd5cf --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/kbkdf.inc @@ -0,0 +1,322 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kbkdf_set_ctx_params_list +static const OSSL_PARAM kbkdf_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SEED, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MAC, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MODE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_KBKDF_USE_L, NULL), + OSSL_PARAM_int(OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR, NULL), + OSSL_PARAM_int(OSSL_KDF_PARAM_KBKDF_R, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef kbkdf_set_ctx_params_st +struct kbkdf_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *info[KBKDF_MAX_INFOS]; + int num_info; + OSSL_PARAM *key; + OSSL_PARAM *mac; + OSSL_PARAM *mode; + OSSL_PARAM *propq; + OSSL_PARAM *r; + OSSL_PARAM *salt; + OSSL_PARAM *seed; + OSSL_PARAM *sep; + OSSL_PARAM *use_l; +}; +#endif + +#ifndef kbkdf_set_ctx_params_decoder +static int kbkdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct kbkdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_KDF_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->num_info >= KBKDF_MAX_INFOS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, KBKDF_MAX_INFOS); + return 0; + } + r->info[r->num_info++] = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("c", s + 2) == 0)) { + /* OSSL_KDF_PARAM_MAC */ + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("de", s + 2) == 0)) { + /* OSSL_KDF_PARAM_MODE */ + if (ossl_unlikely(r->mode != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mode = (OSSL_PARAM *)p; + } + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 'r': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->r != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->r = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lt", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ed", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + break; + case 'u': + switch(s[1]) { + default: + break; + case 's': + switch(s[2]) { + default: + break; + case 'e': + switch(s[3]) { + default: + break; + case '-': + switch(s[4]) { + default: + break; + case 'l': + switch(s[5]) { + default: + break; + case '\0': + if (ossl_unlikely(r->use_l != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->use_l = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("eparator", s + 5) == 0)) { + /* OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR */ + if (ossl_unlikely(r->sep != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sep = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kbkdf_get_ctx_params_list +static const OSSL_PARAM kbkdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef kbkdf_get_ctx_params_st +struct kbkdf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef kbkdf_get_ctx_params_decoder +static int kbkdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct kbkdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/krb5kdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/krb5kdf.inc new file mode 100644 index 000000000..237bf3cbb --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/krb5kdf.inc @@ -0,0 +1,133 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef krb5kdf_set_ctx_params_list +static const OSSL_PARAM krb5kdf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_CONSTANT, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef krb5kdf_set_ctx_params_st +struct krb5kdf_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *cnst; + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef krb5kdf_set_ctx_params_decoder +static int krb5kdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct krb5kdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + switch(s[1]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("pher", s + 2) == 0)) { + /* OSSL_KDF_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("nstant", s + 2) == 0)) { + /* OSSL_KDF_PARAM_CONSTANT */ + if (ossl_unlikely(r->cnst != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cnst = (OSSL_PARAM *)p; + } + } + break; + case 'k': + if (ossl_likely(strcmp("ey", s + 1) == 0)) { + /* OSSL_KDF_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef krb5kdf_get_ctx_params_list +static const OSSL_PARAM krb5kdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef krb5kdf_get_ctx_params_st +struct krb5kdf_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef krb5kdf_get_ctx_params_decoder +static int krb5kdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct krb5kdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf1.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf1.inc new file mode 100644 index 000000000..f5450c2e8 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf1.inc @@ -0,0 +1,146 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pbkdf1_set_ctx_params_list +static const OSSL_PARAM pbkdf1_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_uint64(OSSL_KDF_PARAM_ITER, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pbkdf1_set_ctx_params_st +struct pbkdf1_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *iter; + OSSL_PARAM *propq; + OSSL_PARAM *pw; + OSSL_PARAM *salt; +}; +#endif + +#ifndef pbkdf1_set_ctx_params_decoder +static int pbkdf1_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pbkdf1_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ter", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ITER */ + if (ossl_unlikely(r->iter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iter = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pbkdf1_get_ctx_params_list +static const OSSL_PARAM pbkdf1_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pbkdf1_get_ctx_params_st +struct pbkdf1_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef pbkdf1_get_ctx_params_decoder +static int pbkdf1_get_ctx_params_decoder + (const OSSL_PARAM *p, struct pbkdf1_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf2.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf2.inc new file mode 100644 index 000000000..bfe1c10d4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pbkdf2.inc @@ -0,0 +1,183 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pbkdf2_set_ctx_params_list +static const OSSL_PARAM pbkdf2_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_uint64(OSSL_KDF_PARAM_ITER, NULL), + OSSL_PARAM_int(OSSL_KDF_PARAM_PKCS5, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pbkdf2_set_ctx_params_st +struct pbkdf2_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *iter; + OSSL_PARAM *pkcs5; + OSSL_PARAM *propq; + OSSL_PARAM *pw; + OSSL_PARAM *salt; +}; +#endif + +#ifndef pbkdf2_set_ctx_params_decoder +static int pbkdf2_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pbkdf2_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ter", s + 1) == 0)) { + /* OSSL_KDF_PARAM_ITER */ + if (ossl_unlikely(r->iter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iter = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("cs5", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PKCS5 */ + if (ossl_unlikely(r->pkcs5 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pkcs5 = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pbkdf2_get_ctx_params_list +static const OSSL_PARAM pbkdf2_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef pbkdf2_get_ctx_params_st +struct pbkdf2_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef pbkdf2_get_ctx_params_decoder +static int pbkdf2_get_ctx_params_decoder + (const OSSL_PARAM *p, struct pbkdf2_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pkcs12kdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pkcs12kdf.inc new file mode 100644 index 000000000..d52865d98 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pkcs12kdf.inc @@ -0,0 +1,166 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pkcs12_set_ctx_params_list +static const OSSL_PARAM pkcs12_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_uint64(OSSL_KDF_PARAM_ITER, NULL), + OSSL_PARAM_int(OSSL_KDF_PARAM_PKCS12_ID, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pkcs12_set_ctx_params_st +struct pkcs12_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *iter; + OSSL_PARAM *p12id; + OSSL_PARAM *propq; + OSSL_PARAM *pw; + OSSL_PARAM *salt; +}; +#endif + +#ifndef pkcs12_set_ctx_params_decoder +static int pkcs12_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pkcs12_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + switch(s[1]) { + default: + break; + case 'd': + switch(s[2]) { + default: + break; + case '\0': + if (ossl_unlikely(r->p12id != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->p12id = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("er", s + 2) == 0)) { + /* OSSL_KDF_PARAM_ITER */ + if (ossl_unlikely(r->iter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iter = (OSSL_PARAM *)p; + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pkcs12_get_ctx_params_list +static const OSSL_PARAM pkcs12_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pkcs12_get_ctx_params_st +struct pkcs12_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef pkcs12_get_ctx_params_decoder +static int pkcs12_get_ctx_params_decoder + (const OSSL_PARAM *p, struct pkcs12_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pvkkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pvkkdf.inc new file mode 100644 index 000000000..df035a1b6 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/pvkkdf.inc @@ -0,0 +1,133 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pvk_set_ctx_params_list +static const OSSL_PARAM pvk_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef pvk_set_ctx_params_st +struct pvk_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *pass; + OSSL_PARAM *propq; + OSSL_PARAM *salt; +}; +#endif + +#ifndef pvk_set_ctx_params_decoder +static int pvk_set_ctx_params_decoder + (const OSSL_PARAM *p, struct pvk_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pass != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pass = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef pvk_get_ctx_params_list +static const OSSL_PARAM pvk_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef pvk_get_ctx_params_st +struct pvk_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef pvk_get_ctx_params_decoder +static int pvk_get_ctx_params_decoder + (const OSSL_PARAM *p, struct pvk_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/scrypt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/scrypt.inc new file mode 100644 index 000000000..34f0050d2 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/scrypt.inc @@ -0,0 +1,173 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef scrypt_set_ctx_params_list +static const OSSL_PARAM scrypt_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_uint64(OSSL_KDF_PARAM_SCRYPT_N, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_SCRYPT_R, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_SCRYPT_P, NULL), + OSSL_PARAM_uint64(OSSL_KDF_PARAM_SCRYPT_MAXMEM, NULL), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef scrypt_set_ctx_params_st +struct scrypt_set_ctx_params_st { + OSSL_PARAM *maxmem; + OSSL_PARAM *n; + OSSL_PARAM *p; + OSSL_PARAM *propq; + OSSL_PARAM *pw; + OSSL_PARAM *r; + OSSL_PARAM *salt; +}; +#endif + +#ifndef scrypt_set_ctx_params_decoder +static int scrypt_set_ctx_params_decoder + (const OSSL_PARAM *p, struct scrypt_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'm': + if (ossl_likely(strcmp("axmem_bytes", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SCRYPT_MAXMEM */ + if (ossl_unlikely(r->maxmem != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxmem = (OSSL_PARAM *)p; + } + break; + case 'n': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->n != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->n = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->p != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->p = (OSSL_PARAM *)p; + } + break; + case 'r': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->r != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->r = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef scrypt_get_ctx_params_list +static const OSSL_PARAM scrypt_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef scrypt_get_ctx_params_st +struct scrypt_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef scrypt_get_ctx_params_decoder +static int scrypt_get_ctx_params_decoder + (const OSSL_PARAM *p, struct scrypt_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/snmpkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/snmpkdf.inc new file mode 100644 index 000000000..99369dbf8 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/snmpkdf.inc @@ -0,0 +1,133 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef snmp_set_ctx_params_list +static const OSSL_PARAM snmp_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SNMPKDF_EID, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_PASSWORD, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef snmp_set_ctx_params_st +struct snmp_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *eid; + OSSL_PARAM *propq; + OSSL_PARAM *pw; +}; +#endif + +#ifndef snmp_set_ctx_params_decoder +static int snmp_set_ctx_params_decoder + (const OSSL_PARAM *p, struct snmp_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("id", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SNMPKDF_EID */ + if (ossl_unlikely(r->eid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->eid = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ss", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PASSWORD */ + if (ossl_unlikely(r->pw != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pw = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef snmp_get_ctx_params_list +static const OSSL_PARAM snmp_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef snmp_get_ctx_params_st +struct snmp_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef snmp_get_ctx_params_decoder +static int snmp_get_ctx_params_decoder + (const OSSL_PARAM *p, struct snmp_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/srtpkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/srtpkdf.inc new file mode 100644 index 000000000..b18c2f1d7 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/srtpkdf.inc @@ -0,0 +1,172 @@ +/* + * Copyright 2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef srtp_set_ctx_params_list +static const OSSL_PARAM srtp_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SRTPKDF_INDEX, NULL, 0), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_SRTPKDF_KDR, NULL), + OSSL_PARAM_uint32(OSSL_KDF_PARAM_LABEL, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef srtp_set_ctx_params_st +struct srtp_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *index; + OSSL_PARAM *kdr; + OSSL_PARAM *key; + OSSL_PARAM *label; + OSSL_PARAM *propq; + OSSL_PARAM *salt; +}; +#endif + +#ifndef srtp_set_ctx_params_decoder +static int srtp_set_ctx_params_decoder + (const OSSL_PARAM *p, struct srtp_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_KDF_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("ndex", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SRTPKDF_INDEX */ + if (ossl_unlikely(r->index != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->index = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("r", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SRTPKDF_KDR */ + if (ossl_unlikely(r->kdr != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdr = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("y", s + 2) == 0)) { + /* OSSL_KDF_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + break; + case 'l': + if (ossl_likely(strcmp("abel", s + 1) == 0)) { + /* OSSL_KDF_PARAM_LABEL */ + if (ossl_unlikely(r->label != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->label = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("alt", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef srtp_get_ctx_params_list +static const OSSL_PARAM srtp_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef srtp_get_ctx_params_st +struct srtp_get_ctx_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef srtp_get_ctx_params_decoder +static int srtp_get_ctx_params_decoder + (const OSSL_PARAM *p, struct srtp_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sshkdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sshkdf.inc new file mode 100644 index 000000000..2dfb49f6d --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sshkdf.inc @@ -0,0 +1,255 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sshkdf_set_ctx_params_list +static const OSSL_PARAM sshkdf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SSHKDF_XCGHASH, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SSHKDF_SESSION_ID, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_SSHKDF_TYPE, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sshkdf_set_ctx_params_st +struct sshkdf_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *key; + OSSL_PARAM *propq; + OSSL_PARAM *sid; + OSSL_PARAM *type; + OSSL_PARAM *xcg; +}; +#endif + +#ifndef sshkdf_set_ctx_params_decoder +static int sshkdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sshkdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ession_id", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SSHKDF_SESSION_ID */ + if (ossl_unlikely(r->sid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sid = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SSHKDF_TYPE */ + if (ossl_unlikely(r->type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->type = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("cghash", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SSHKDF_XCGHASH */ + if (ossl_unlikely(r->xcg != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xcg = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sshkdf_get_ctx_params_list +static const OSSL_PARAM sshkdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sshkdf_get_ctx_params_st +struct sshkdf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef sshkdf_get_ctx_params_decoder +static int sshkdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct sshkdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sskdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sskdf.inc new file mode 100644 index 000000000..dca2a3dc7 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/sskdf.inc @@ -0,0 +1,252 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sskdf_set_ctx_params_list +static const OSSL_PARAM sskdf_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SECRET, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_MAC, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SALT, NULL, 0), + OSSL_PARAM_size_t(OSSL_KDF_PARAM_MAC_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sskdf_set_ctx_params_st +struct sskdf_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *info[SSKDF_MAX_INFOS]; + int num_info; + OSSL_PARAM *mac; + OSSL_PARAM *propq; + OSSL_PARAM *salt; + OSSL_PARAM *secret; + OSSL_PARAM *size; +}; +#endif + +#ifndef sskdf_set_ctx_params_decoder +static int sskdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sskdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->num_info >= SSKDF_MAX_INFOS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, SSKDF_MAX_INFOS); + return 0; + } + r->info[r->num_info++] = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + } + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'l': + if (ossl_likely(strcmp("en", s + 4) == 0)) { + /* OSSL_KDF_PARAM_MAC_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->mac != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mac = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lt", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SALT */ + if (ossl_unlikely(r->salt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->salt = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("cret", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SECRET */ + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sskdf_get_ctx_params_list +static const OSSL_PARAM sskdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sskdf_get_ctx_params_st +struct sskdf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef sskdf_get_ctx_params_decoder +static int sskdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct sskdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/tls1_prf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/tls1_prf.inc new file mode 100644 index 000000000..a60f15dda --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/tls1_prf.inc @@ -0,0 +1,247 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef tls1prf_set_ctx_params_list +static const OSSL_PARAM tls1prf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SECRET, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SEED, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_EMS_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef tls1prf_set_ctx_params_st +struct tls1prf_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_e; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *propq; + OSSL_PARAM *secret; + OSSL_PARAM *seed[TLSPRF_MAX_SEEDS]; + int num_seed; +}; +#endif + +#ifndef tls1prf_set_ctx_params_decoder +static int tls1prf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct tls1prf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ms_check", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_EMS_CHECK */ + if (ossl_unlikely(r->ind_e != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_e = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ret", s + 3) == 0)) { + /* OSSL_KDF_PARAM_SECRET */ + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("d", s + 3) == 0)) { + /* OSSL_KDF_PARAM_SEED */ + if (ossl_unlikely(r->num_seed >= TLSPRF_MAX_SEEDS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, TLSPRF_MAX_SEEDS); + return 0; + } + r->seed[r->num_seed++] = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef tls1prf_get_ctx_params_list +static const OSSL_PARAM tls1prf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef tls1prf_get_ctx_params_st +struct tls1prf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef tls1prf_get_ctx_params_decoder +static int tls1prf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct tls1prf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x942kdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x942kdf.inc new file mode 100644 index 000000000..840c5e7f6 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x942kdf.inc @@ -0,0 +1,345 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sshkdf_set_ctx_params_list +static const OSSL_PARAM sshkdf_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SECRET, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_UKM, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_X942_ACVPINFO, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_X942_PARTYUINFO, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_X942_PARTYVINFO, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_X942_SUPP_PUBINFO, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_X942_SUPP_PRIVINFO, NULL, 0), + OSSL_PARAM_int(OSSL_KDF_PARAM_X942_USE_KEYBITS, NULL), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_CEK_ALG, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sshkdf_set_ctx_params_st +struct sshkdf_set_ctx_params_st { + OSSL_PARAM *acvp; + OSSL_PARAM *cekalg; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *kbits; + OSSL_PARAM *priv; + OSSL_PARAM *propq; + OSSL_PARAM *pub; + OSSL_PARAM *secret; + OSSL_PARAM *uinfo; + OSSL_PARAM *vinfo; +}; +#endif + +#ifndef sshkdf_set_ctx_params_decoder +static int sshkdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sshkdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("cvp-info", s + 1) == 0)) { + /* OSSL_KDF_PARAM_X942_ACVPINFO */ + if (ossl_unlikely(r->acvp != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->acvp = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ekalg", s + 1) == 0)) { + /* OSSL_KDF_PARAM_CEK_ALG */ + if (ossl_unlikely(r->cekalg != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cekalg = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_KDF_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'r': + switch(s[3]) { + default: + break; + case 't': + switch(s[4]) { + default: + break; + case 'y': + switch(s[5]) { + default: + break; + case 'u': + if (ossl_likely(strcmp("-info", s + 6) == 0)) { + /* OSSL_KDF_PARAM_X942_PARTYUINFO */ + if (ossl_unlikely(r->uinfo != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->uinfo = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("-info", s + 6) == 0)) { + /* OSSL_KDF_PARAM_X942_PARTYVINFO */ + if (ossl_unlikely(r->vinfo != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->vinfo = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("cret", s + 2) == 0)) { + /* OSSL_KDF_PARAM_SECRET */ + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + break; + case 'u': + switch(s[2]) { + default: + break; + case 'p': + switch(s[3]) { + default: + break; + case 'p': + switch(s[4]) { + default: + break; + case '-': + switch(s[5]) { + default: + break; + case 'p': + switch(s[6]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("ivinfo", s + 7) == 0)) { + /* OSSL_KDF_PARAM_X942_SUPP_PRIVINFO */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("binfo", s + 7) == 0)) { + /* OSSL_KDF_PARAM_X942_SUPP_PUBINFO */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + break; + case 'u': + switch(s[1]) { + default: + break; + case 'k': + if (ossl_likely(strcmp("m", s + 2) == 0)) { + /* OSSL_KDF_PARAM_UKM */ + if (ossl_unlikely(r->uinfo != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->uinfo = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("e-keybits", s + 2) == 0)) { + /* OSSL_KDF_PARAM_X942_USE_KEYBITS */ + if (ossl_unlikely(r->kbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kbits = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sshkdf_get_ctx_params_list +static const OSSL_PARAM sshkdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef sshkdf_get_ctx_params_st +struct sshkdf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef sshkdf_get_ctx_params_decoder +static int sshkdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct sshkdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x963kdf.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x963kdf.inc new file mode 100644 index 000000000..ca1ebc742 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kdfs/x963kdf.inc @@ -0,0 +1,242 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef x963kdf_get_ctx_params_list +static const OSSL_PARAM x963kdf_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef x963kdf_get_ctx_params_st +struct x963kdf_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef x963kdf_get_ctx_params_decoder +static int x963kdf_get_ctx_params_decoder + (const OSSL_PARAM *p, struct x963kdf_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef x963kdf_set_ctx_params_list +static const OSSL_PARAM x963kdf_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_SECRET, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_DIGEST, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef x963kdf_set_ctx_params_st +struct x963kdf_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *info[SSKDF_MAX_INFOS]; + int num_info; + OSSL_PARAM *propq; + OSSL_PARAM *secret; +}; +#endif + +#ifndef x963kdf_set_ctx_params_decoder +static int x963kdf_set_ctx_params_decoder + (const OSSL_PARAM *p, struct x963kdf_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'i': + if (ossl_likely(strcmp("nfo", s + 1) == 0)) { + /* OSSL_KDF_PARAM_INFO */ + if (ossl_unlikely(r->num_info >= SSKDF_MAX_INFOS)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS, + "param %s present >%d times", s, SSKDF_MAX_INFOS); + return 0; + } + r->info[r->num_info++] = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_KDF_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ecret", s + 1) == 0)) { + /* OSSL_KDF_PARAM_SECRET */ + if (ossl_unlikely(r->secret != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secret = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ec_kem.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ec_kem.inc new file mode 100644 index 000000000..c21fc695f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ec_kem.inc @@ -0,0 +1,65 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef eckem_set_ctx_params_list +static const OSSL_PARAM eckem_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KEM_PARAM_OPERATION, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KEM_PARAM_IKME, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef eckem_set_ctx_params_st +struct eckem_set_ctx_params_st { + OSSL_PARAM *ikme; + OSSL_PARAM *op; +}; +#endif + +#ifndef eckem_set_ctx_params_decoder +static int eckem_set_ctx_params_decoder + (const OSSL_PARAM *p, struct eckem_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("kme", s + 1) == 0)) { + /* OSSL_KEM_PARAM_IKME */ + if (ossl_unlikely(r->ikme != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ikme = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("peration", s + 1) == 0)) { + /* OSSL_KEM_PARAM_OPERATION */ + if (ossl_unlikely(r->op != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->op = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ecx_kem.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ecx_kem.inc new file mode 100644 index 000000000..e0ddbdfeb --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ecx_kem.inc @@ -0,0 +1,65 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecxkem_set_ctx_params_list +static const OSSL_PARAM ecxkem_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KEM_PARAM_OPERATION, NULL, 0), + OSSL_PARAM_octet_string(OSSL_KEM_PARAM_IKME, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ecxkem_set_ctx_params_st +struct ecxkem_set_ctx_params_st { + OSSL_PARAM *ikme; + OSSL_PARAM *op; +}; +#endif + +#ifndef ecxkem_set_ctx_params_decoder +static int ecxkem_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ecxkem_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("kme", s + 1) == 0)) { + /* OSSL_KEM_PARAM_IKME */ + if (ossl_unlikely(r->ikme != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ikme = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("peration", s + 1) == 0)) { + /* OSSL_KEM_PARAM_OPERATION */ + if (ossl_unlikely(r->op != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->op = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ml_kem_kem.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ml_kem_kem.inc new file mode 100644 index 000000000..c463dd71c --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/ml_kem_kem.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_set_ctx_params_list +static const OSSL_PARAM ml_kem_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_KEM_PARAM_IKME, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_set_ctx_params_st +struct ml_kem_set_ctx_params_st { + OSSL_PARAM *ikme; +}; +#endif + +#ifndef ml_kem_set_ctx_params_decoder +static int ml_kem_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_kem_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("ikme", s + 0) == 0)) { + /* OSSL_KEM_PARAM_IKME */ + if (ossl_unlikely(r->ikme != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ikme = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/rsa_kem.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/rsa_kem.inc new file mode 100644 index 000000000..7ae1ab38f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/kem/rsa_kem.inc @@ -0,0 +1,118 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsakem_get_ctx_params_list +static const OSSL_PARAM rsakem_get_ctx_params_list[] = { +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KEM_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsakem_get_ctx_params_st +struct rsakem_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# else + int dummy; /* unused */ +# endif +}; +#endif + +#ifndef rsakem_get_ctx_params_decoder +static int rsakem_get_ctx_params_decoder + (const OSSL_PARAM *p, struct rsakem_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("fips-indicator", s + 0) == 0)) { + /* OSSL_KEM_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# else + ; +# endif + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsakem_set_ctx_params_list +static const OSSL_PARAM rsakem_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_KEM_PARAM_OPERATION, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KEM_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsakem_set_ctx_params_st +struct rsakem_set_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *op; +}; +#endif + +#ifndef rsakem_set_ctx_params_decoder +static int rsakem_set_ctx_params_decoder + (const OSSL_PARAM *p, struct rsakem_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_KEM_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'o': + if (ossl_likely(strcmp("peration", s + 1) == 0)) { + /* OSSL_KEM_PARAM_OPERATION */ + if (ossl_unlikely(r->op != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->op = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dh_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dh_kmgmt.inc new file mode 100644 index 000000000..12a439415 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dh_kmgmt.inc @@ -0,0 +1,732 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dh_get_params_list +static const OSSL_PARAM dh_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_P, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_Q, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_G, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_COFACTOR, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_GINDEX, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_H, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_DH_PRIV_LEN, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_FFC_SEED, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef dh_get_params_st +struct dh_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *encpubkey; + OSSL_PARAM *ffp.cofactor; + OSSL_PARAM *ffp.g; + OSSL_PARAM *ffp.g_index; + OSSL_PARAM *ffp.group_name; + OSSL_PARAM *ffp.h; + OSSL_PARAM *ffp.p; + OSSL_PARAM *ffp.p_counter; + OSSL_PARAM *ffp.q; + OSSL_PARAM *ffp.seed; + OSSL_PARAM *maxsize; + OSSL_PARAM *privkey; + OSSL_PARAM *privlen; + OSSL_PARAM *pubkey; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; +}; +#endif + +#ifndef dh_get_params_decoder +static int dh_get_params_decoder + (const OSSL_PARAM *p, struct dh_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->encpubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->encpubkey = (OSSL_PARAM *)p; + } + break; + case 'g': + switch(s[1]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("ndex", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_GINDEX */ + if (ossl_unlikely(r->ffp.g_index != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.g_index = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("oup", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_GROUP_NAME */ + if (ossl_unlikely(r->ffp.group_name != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.group_name = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->ffp.g != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.g = (OSSL_PARAM *)p; + } + break; + case 'h': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_H */ + if (ossl_unlikely(r->ffp.h != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.h = (OSSL_PARAM *)p; + } + break; + case 'j': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->ffp.cofactor != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.cofactor = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PCOUNTER */ + if (ossl_unlikely(r->ffp.p_counter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.p_counter = (OSSL_PARAM *)p; + } + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + switch(s[3]) { + default: + break; + case 'v': + switch(s[4]) { + default: + break; + case '_': + if (ossl_likely(strcmp("len", s + 5) == 0)) { + /* OSSL_PKEY_PARAM_DH_PRIV_LEN */ + if (ossl_unlikely(r->privlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privlen = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->ffp.p != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.p = (OSSL_PARAM *)p; + } + break; + case 'q': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->ffp.q != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.q = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + break; + case 'e': + if (ossl_likely(strcmp("d", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_FFC_SEED */ + if (ossl_unlikely(r->ffp.seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.seed = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dh_set_params_list +static const OSSL_PARAM dh_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef dh_set_params_st +struct dh_set_params_st { + OSSL_PARAM *encpubkey; +}; +#endif + +#ifndef dh_set_params_decoder +static int dh_set_params_decoder + (const OSSL_PARAM *p, struct dh_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("encoded-pub-key", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->encpubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->encpubkey = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dhx_gen_set_params_list +static const OSSL_PARAM dhx_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_DH_PRIV_LEN, NULL), + OSSL_PARAM_size_t(OSSL_PKEY_PARAM_FFC_PBITS, NULL), + OSSL_PARAM_size_t(OSSL_PKEY_PARAM_FFC_QBITS, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_GINDEX, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_FFC_SEED, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_H, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef dhx_gen_set_params_st +struct dhx_gen_set_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *g_index; + OSSL_PARAM *group_name; + OSSL_PARAM *h; + OSSL_PARAM *p_counter; + OSSL_PARAM *pbits; + OSSL_PARAM *privlen; + OSSL_PARAM *propq; + OSSL_PARAM *qbits; + OSSL_PARAM *seed; + OSSL_PARAM *type; +}; +#endif + +#ifndef dhx_gen_set_params_decoder +static int dhx_gen_set_params_decoder + (const OSSL_PARAM *p, struct dhx_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'g': + switch(s[1]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("ndex", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_GINDEX */ + if (ossl_unlikely(r->g_index != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->g_index = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("oup", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_GROUP_NAME */ + if (ossl_unlikely(r->group_name != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->group_name = (OSSL_PARAM *)p; + } + } + break; + case 'h': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_H */ + if (ossl_unlikely(r->h != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->h = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PBITS */ + if (ossl_unlikely(r->pbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PCOUNTER */ + if (ossl_unlikely(r->p_counter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->p_counter = (OSSL_PARAM *)p; + } + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("v_len", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_DH_PRIV_LEN */ + if (ossl_unlikely(r->privlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privlen = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST_PROPS */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + break; + case 'q': + if (ossl_likely(strcmp("bits", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_QBITS */ + if (ossl_unlikely(r->qbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->qbits = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("feprime-generator", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_DH_GENERATOR */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'e': + if (ossl_likely(strcmp("ed", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_TYPE */ + if (ossl_unlikely(r->type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->type = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dh_gen_set_params_list +static const OSSL_PARAM dh_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_DH_PRIV_LEN, NULL), + OSSL_PARAM_size_t(OSSL_PKEY_PARAM_FFC_PBITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_DH_GENERATOR, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef dh_gen_set_params_st +struct dh_gen_set_params_st { + OSSL_PARAM *generator; + OSSL_PARAM *group_name; + OSSL_PARAM *pbits; + OSSL_PARAM *privlen; + OSSL_PARAM *type; +}; +#endif + +#ifndef dh_gen_set_params_decoder +static int dh_gen_set_params_decoder + (const OSSL_PARAM *p, struct dh_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'g': + switch(s[1]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("ndex", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_GINDEX */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'r': + if (ossl_likely(strcmp("oup", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_GROUP_NAME */ + if (ossl_unlikely(r->group_name != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->group_name = (OSSL_PARAM *)p; + } + } + break; + case 'h': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_H */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PBITS */ + if (ossl_unlikely(r->pbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PCOUNTER */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("v_len", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_DH_PRIV_LEN */ + if (ossl_unlikely(r->privlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privlen = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST_PROPS */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + } + } + break; + case 'q': + if (ossl_likely(strcmp("bits", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_QBITS */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("feprime-generator", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_DH_GENERATOR */ + if (ossl_unlikely(r->generator != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->generator = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ed", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_SEED */ + ERR_raise_data(ERR_LIB_PROV, ERR_R_UNSUPPORTED, + "param %s is unsupported", s); + return 0; + } + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_TYPE */ + if (ossl_unlikely(r->type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->type = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dsa_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dsa_kmgmt.inc new file mode 100644 index 000000000..22e40892f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/dsa_kmgmt.inc @@ -0,0 +1,510 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_get_params_list +static const OSSL_PARAM dsa_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_DEFAULT_DIGEST, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_P, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_Q, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_G, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_COFACTOR, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_GINDEX, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_H, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_FFC_SEED, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_get_params_st +struct dsa_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *digest; + OSSL_PARAM *ffp.cofactor; + OSSL_PARAM *ffp.g; + OSSL_PARAM *ffp.g_index; + OSSL_PARAM *ffp.h; + OSSL_PARAM *ffp.p; + OSSL_PARAM *ffp.p_counter; + OSSL_PARAM *ffp.q; + OSSL_PARAM *ffp.seed; + OSSL_PARAM *maxsize; + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; +}; +#endif + +#ifndef dsa_get_params_decoder +static int dsa_get_params_decoder + (const OSSL_PARAM *p, struct dsa_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("efault-digest", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_DEFAULT_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'g': + switch(s[1]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("ndex", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_GINDEX */ + if (ossl_unlikely(r->ffp.g_index != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.g_index = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->ffp.g != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.g = (OSSL_PARAM *)p; + } + break; + case 'h': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_H */ + if (ossl_unlikely(r->ffp.h != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.h = (OSSL_PARAM *)p; + } + break; + case 'j': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->ffp.cofactor != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.cofactor = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PCOUNTER */ + if (ossl_unlikely(r->ffp.p_counter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.p_counter = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->ffp.p != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.p = (OSSL_PARAM *)p; + } + break; + case 'q': + switch(s[1]) { + default: + break; + case '\0': + if (ossl_unlikely(r->ffp.q != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.q = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + break; + case 'e': + if (ossl_likely(strcmp("d", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_FFC_SEED */ + if (ossl_unlikely(r->ffp.seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ffp.seed = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_gen_set_params_list +static const OSSL_PARAM dsa_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE, NULL, 0), + OSSL_PARAM_size_t(OSSL_PKEY_PARAM_FFC_PBITS, NULL), + OSSL_PARAM_size_t(OSSL_PKEY_PARAM_FFC_QBITS, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST_PROPS, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_GINDEX, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_FFC_SEED, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_FFC_H, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_PKEY_PARAM_FIPS_SIGN_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_gen_set_params_st +struct dsa_gen_set_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *g_index; + OSSL_PARAM *h; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_sign; +# endif + OSSL_PARAM *p_counter; + OSSL_PARAM *pbits; + OSSL_PARAM *propq; + OSSL_PARAM *qbits; + OSSL_PARAM *seed; + OSSL_PARAM *type; +}; +#endif + +#ifndef dsa_gen_set_params_decoder +static int dsa_gen_set_params_decoder + (const OSSL_PARAM *p, struct dsa_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'g': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_GINDEX */ + if (ossl_unlikely(r->g_index != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->g_index = (OSSL_PARAM *)p; + } + break; + case 'h': + if (ossl_likely(strcmp("index", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_H */ + if (ossl_unlikely(r->h != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->h = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PBITS */ + if (ossl_unlikely(r->pbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_PCOUNTER */ + if (ossl_unlikely(r->p_counter != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->p_counter = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_DIGEST_PROPS */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 'q': + if (ossl_likely(strcmp("bits", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_QBITS */ + if (ossl_unlikely(r->qbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->qbits = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ed", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FFC_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + break; + case 'i': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("gn-check", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_FIPS_SIGN_CHECK */ + if (ossl_unlikely(r->ind_sign != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_sign = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + case 't': + if (ossl_likely(strcmp("ype", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FFC_TYPE */ + if (ossl_unlikely(r->type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->type = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_gen_get_params_list +static const OSSL_PARAM dsa_gen_get_params_list[] = { +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_gen_get_params_st +struct dsa_gen_get_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# else + int dummy; /* unused */ +# endif +}; +#endif + +#ifndef dsa_gen_get_params_decoder +static int dsa_gen_get_params_decoder + (const OSSL_PARAM *p, struct dsa_gen_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("fips-indicator", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# else + ; +# endif + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ecx_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ecx_kmgmt.inc new file mode 100644 index 000000000..e754be22f --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ecx_kmgmt.inc @@ -0,0 +1,562 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecx_imexport_types_list +static const OSSL_PARAM ecx_imexport_types_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ecx_imexport_types_st +struct ecx_imexport_types_st { + OSSL_PARAM *priv; + OSSL_PARAM *pub; +}; +#endif + +#ifndef ecx_imexport_types_decoder +static int ecx_imexport_types_decoder + (const OSSL_PARAM *p, struct ecx_imexport_types_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecx_get_params_list +static const OSSL_PARAM ecx_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecx_get_params_st +struct ecx_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *encpub; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *priv; + OSSL_PARAM *pub; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; + OSSL_PARAM *size; +}; +#endif + +#ifndef ecx_get_params_decoder +static int ecx_get_params_decoder + (const OSSL_PARAM *p, struct ecx_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->encpub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->encpub = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ed_get_params_list +static const OSSL_PARAM ed_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_MANDATORY_DIGEST, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ed_get_params_st +struct ed_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *digest; + OSSL_PARAM *priv; + OSSL_PARAM *pub; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; + OSSL_PARAM *size; +}; +#endif + +#ifndef ed_get_params_decoder +static int ed_get_params_decoder + (const OSSL_PARAM *p, struct ed_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'n': + if (ossl_likely(strcmp("datory-digest", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MANDATORY_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("-size", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecx_set_params_list +static const OSSL_PARAM ecx_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ecx_set_params_st +struct ecx_set_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *pub; +}; +#endif + +#ifndef ecx_set_params_decoder +static int ecx_set_params_decoder + (const OSSL_PARAM *p, struct ecx_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecx_gen_set_params_list +static const OSSL_PARAM ecx_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_KDF_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_DHKEM_IKM, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ecx_gen_set_params_st +struct ecx_gen_set_params_st { + OSSL_PARAM *group; + OSSL_PARAM *ikm; + OSSL_PARAM *kdfpropq; +}; +#endif + +#ifndef ecx_gen_set_params_decoder +static int ecx_gen_set_params_decoder + (const OSSL_PARAM *p, struct ecx_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("hkem-ikm", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_DHKEM_IKM */ + if (ossl_unlikely(r->ikm != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ikm = (OSSL_PARAM *)p; + } + break; + case 'g': + if (ossl_likely(strcmp("roup", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_GROUP_NAME */ + if (ossl_unlikely(r->group != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->group = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_KDF_PARAM_PROPERTIES */ + if (ossl_unlikely(r->kdfpropq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kdfpropq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/lms_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/lms_kmgmt.inc new file mode 100644 index 000000000..c7d0266c6 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/lms_kmgmt.inc @@ -0,0 +1,151 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef lms_import_list +static const OSSL_PARAM lms_import_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef lms_import_st +struct lms_import_st { + OSSL_PARAM *pub; +}; +#endif + +#ifndef lms_import_decoder +static int lms_import_decoder + (const OSSL_PARAM *p, struct lms_import_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("pub", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef lms_get_params_list +static const OSSL_PARAM lms_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_MANDATORY_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef lms_get_params_st +struct lms_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *dgstp; + OSSL_PARAM *maxsize; + OSSL_PARAM *pubkey; + OSSL_PARAM *secbits; +}; +#endif + +#ifndef lms_get_params_decoder +static int lms_get_params_decoder + (const OSSL_PARAM *p, struct lms_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'n': + if (ossl_likely(strcmp("datory-digest", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MANDATORY_DIGEST */ + if (ossl_unlikely(r->dgstp != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->dgstp = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("-size", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("ub", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ecurity-bits", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mac_legacy_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mac_legacy_kmgmt.inc new file mode 100644 index 000000000..f97954e67 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mac_legacy_kmgmt.inc @@ -0,0 +1,397 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mac_import_list +static const OSSL_PARAM mac_import_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mac_import_st +struct mac_import_st { + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef mac_import_decoder +static int mac_import_decoder + (const OSSL_PARAM *p, struct mac_import_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("v", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cmac_import_list +static const OSSL_PARAM cmac_import_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef cmac_import_st +struct cmac_import_st { + OSSL_PARAM *cipher; + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef cmac_import_decoder +static int cmac_import_decoder + (const OSSL_PARAM *p, struct cmac_import_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("v", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mac_get_params_list +static const OSSL_PARAM mac_get_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mac_get_params_st +struct mac_get_params_st { + OSSL_PARAM *key; +}; +#endif + +#ifndef mac_get_params_decoder +static int mac_get_params_decoder + (const OSSL_PARAM *p, struct mac_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("priv", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cmac_get_params_list +static const OSSL_PARAM cmac_get_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef cmac_get_params_st +struct cmac_get_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *key; +}; +#endif + +#ifndef cmac_get_params_decoder +static int cmac_get_params_decoder + (const OSSL_PARAM *p, struct cmac_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("riv", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mac_set_params_list +static const OSSL_PARAM mac_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mac_set_params_st +struct mac_set_params_st { + OSSL_PARAM *key; +}; +#endif + +#ifndef mac_set_params_decoder +static int mac_set_params_decoder + (const OSSL_PARAM *p, struct mac_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("priv", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mac_gen_set_params_list +static const OSSL_PARAM mac_gen_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mac_gen_set_params_st +struct mac_gen_set_params_st { + OSSL_PARAM *key; +}; +#endif + +#ifndef mac_gen_set_params_decoder +static int mac_gen_set_params_decoder + (const OSSL_PARAM *p, struct mac_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("priv", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cmac_gen_set_params_list +static const OSSL_PARAM cmac_gen_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef cmac_gen_set_params_st +struct cmac_gen_set_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef cmac_gen_set_params_decoder +static int cmac_gen_set_params_decoder + (const OSSL_PARAM *p, struct cmac_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'i': + if (ossl_likely(strcmp("v", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'o': + if (ossl_likely(strcmp("perties", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_dsa_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_dsa_kmgmt.inc new file mode 100644 index 000000000..d23e4ca40 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_dsa_kmgmt.inc @@ -0,0 +1,331 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_key_type_params_list +static const OSSL_PARAM ml_dsa_key_type_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_DSA_SEED, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_key_type_params_st +struct ml_dsa_key_type_params_st { + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_dsa_key_type_params_decoder +static int ml_dsa_key_type_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_key_type_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("eed", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ML_DSA_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_get_params_list +static const OSSL_PARAM ml_dsa_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_MANDATORY_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_DSA_SEED, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_get_params_st +struct ml_dsa_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *dgstp; + OSSL_PARAM *maxsize; + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_dsa_get_params_decoder +static int ml_dsa_get_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'n': + if (ossl_likely(strcmp("datory-digest", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MANDATORY_DIGEST */ + if (ossl_unlikely(r->dgstp != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->dgstp = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("-size", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + break; + case 'e': + if (ossl_likely(strcmp("d", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_ML_DSA_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_gen_set_params_list +static const OSSL_PARAM ml_dsa_gen_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_DSA_SEED, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_gen_set_params_st +struct ml_dsa_gen_set_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_dsa_gen_set_params_decoder +static int ml_dsa_gen_set_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("eed", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ML_DSA_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_kem_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_kem_kmgmt.inc new file mode 100644 index 000000000..cb03f228d --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/ml_kem_kmgmt.inc @@ -0,0 +1,384 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_key_type_params_list +static const OSSL_PARAM ml_kem_key_type_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_KEM_SEED, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_key_type_params_st +struct ml_kem_key_type_params_st { + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_kem_key_type_params_decoder +static int ml_kem_key_type_params_decoder + (const OSSL_PARAM *p, struct ml_kem_key_type_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("eed", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ML_KEM_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_get_params_list +static const OSSL_PARAM ml_kem_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_KEM_SEED, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_int(OSSL_PKEY_PARAM_CMS_RI_TYPE, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_CMS_KEMRI_KDF_ALGORITHM, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_get_params_st +struct ml_kem_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *encpubkey; + OSSL_PARAM *kemri_kdf_alg; + OSSL_PARAM *maxsize; + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; + OSSL_PARAM *ri_type; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_kem_get_params_decoder +static int ml_kem_get_params_decoder + (const OSSL_PARAM *p, struct ml_kem_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->encpubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->encpubkey = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("emri-kdf-alg", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_CMS_KEMRI_KDF_ALGORITHM */ + if (ossl_unlikely(r->kemri_kdf_alg != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kemri_kdf_alg = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + break; + case 'r': + if (ossl_likely(strcmp("i-type", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_CMS_RI_TYPE */ + if (ossl_unlikely(r->ri_type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ri_type = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + break; + case 'e': + if (ossl_likely(strcmp("d", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_ML_KEM_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_set_params_list +static const OSSL_PARAM ml_kem_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_set_params_st +struct ml_kem_set_params_st { + OSSL_PARAM *pub; +}; +#endif + +#ifndef ml_kem_set_params_decoder +static int ml_kem_set_params_decoder + (const OSSL_PARAM *p, struct ml_kem_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("encoded-pub-key", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_gen_set_params_list +static const OSSL_PARAM ml_kem_gen_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_KEM_SEED, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_gen_set_params_st +struct ml_kem_gen_set_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *seed; +}; +#endif + +#ifndef ml_kem_gen_set_params_decoder +static int ml_kem_gen_set_params_decoder + (const OSSL_PARAM *p, struct ml_kem_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("eed", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ML_KEM_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mlx_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mlx_kmgmt.inc new file mode 100644 index 000000000..402446886 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/mlx_kmgmt.inc @@ -0,0 +1,314 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_kem_import_export_list +static const OSSL_PARAM ml_kem_import_export_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_kem_import_export_st +struct ml_kem_import_export_st { + OSSL_PARAM *privkey; + OSSL_PARAM *pubkey; +}; +#endif + +#ifndef ml_kem_import_export_decoder +static int ml_kem_import_export_decoder + (const OSSL_PARAM *p, struct ml_kem_import_export_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->privkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->privkey = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pubkey != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pubkey = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mlx_get_params_list +static const OSSL_PARAM mlx_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mlx_get_params_st +struct mlx_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *maxsize; + OSSL_PARAM *priv; + OSSL_PARAM *pub; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; +}; +#endif + +#ifndef mlx_get_params_decoder +static int mlx_get_params_decoder + (const OSSL_PARAM *p, struct mlx_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("riv", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mlx_set_params_list +static const OSSL_PARAM mlx_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mlx_set_params_st +struct mlx_set_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *pub; +}; +#endif + +#ifndef mlx_set_params_decoder +static int mlx_set_params_decoder + (const OSSL_PARAM *p, struct mlx_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef mlx_gen_set_params_list +static const OSSL_PARAM mlx_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef mlx_gen_set_params_st +struct mlx_gen_set_params_st { + OSSL_PARAM *propq; +}; +#endif + +#ifndef mlx_gen_set_params_decoder +static int mlx_gen_set_params_decoder + (const OSSL_PARAM *p, struct mlx_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("properties", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/slh_dsa_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/slh_dsa_kmgmt.inc new file mode 100644 index 000000000..216ee2ad3 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/slh_dsa_kmgmt.inc @@ -0,0 +1,305 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef slh_dsa_import_list +static const OSSL_PARAM slh_dsa_import_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef slh_dsa_import_st +struct slh_dsa_import_st { + OSSL_PARAM *priv; + OSSL_PARAM *pub; +}; +#endif + +#ifndef slh_dsa_import_decoder +static int slh_dsa_import_decoder + (const OSSL_PARAM *p, struct slh_dsa_import_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef slh_dsa_get_params_list +static const OSSL_PARAM slh_dsa_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_MANDATORY_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef slh_dsa_get_params_st +struct slh_dsa_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *mandgst; + OSSL_PARAM *maxsize; + OSSL_PARAM *priv; + OSSL_PARAM *pub; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; +}; +#endif + +#ifndef slh_dsa_get_params_decoder +static int slh_dsa_get_params_decoder + (const OSSL_PARAM *p, struct slh_dsa_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'n': + if (ossl_likely(strcmp("datory-digest", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MANDATORY_DIGEST */ + if (ossl_unlikely(r->mandgst != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mandgst = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("-size", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->maxsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxsize = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef slh_dsa_gen_set_params_list +static const OSSL_PARAM slh_dsa_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_SLH_DSA_SEED, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef slh_dsa_gen_set_params_st +struct slh_dsa_gen_set_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *seed; +}; +#endif + +#ifndef slh_dsa_gen_set_params_decoder +static int slh_dsa_gen_set_params_decoder + (const OSSL_PARAM *p, struct slh_dsa_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("eed", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_SLH_DSA_SEED */ + if (ossl_unlikely(r->seed != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seed = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/template_kmgmt.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/template_kmgmt.inc new file mode 100644 index 000000000..216058d49 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/keymgmt/template_kmgmt.inc @@ -0,0 +1,283 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef template_key_types_list +static const OSSL_PARAM template_key_types_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef template_key_types_st +struct template_key_types_st { + OSSL_PARAM *priv_key; + OSSL_PARAM *pub_key; +}; +#endif + +#ifndef template_key_types_decoder +static int template_key_types_decoder + (const OSSL_PARAM *p, struct template_key_types_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("iv", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PRIV_KEY */ + if (ossl_unlikely(r->priv_key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->priv_key = (OSSL_PARAM *)p; + } + break; + case 'u': + if (ossl_likely(strcmp("b", s + 2) == 0)) { + /* OSSL_PKEY_PARAM_PUB_KEY */ + if (ossl_unlikely(r->pub_key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub_key = (OSSL_PARAM *)p; + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef template_get_params_list +static const OSSL_PARAM template_get_params_list[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef template_get_params_st +struct template_get_params_st { + OSSL_PARAM *bits; + OSSL_PARAM *encpub; + OSSL_PARAM *secbits; + OSSL_PARAM *seccat; + OSSL_PARAM *size; +}; +#endif + +#ifndef template_get_params_decoder +static int template_get_params_decoder + (const OSSL_PARAM *p, struct template_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_BITS */ + if (ossl_unlikely(r->bits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bits = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ncoded-pub-key", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->encpub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->encpub = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax-size", s + 1) == 0)) { + /* OSSL_PKEY_PARAM_MAX_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'c': + switch(s[3]) { + default: + break; + case 'u': + switch(s[4]) { + default: + break; + case 'r': + switch(s[5]) { + default: + break; + case 'i': + switch(s[6]) { + default: + break; + case 't': + switch(s[7]) { + default: + break; + case 'y': + switch(s[8]) { + default: + break; + case '-': + switch(s[9]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("its", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_BITS */ + if (ossl_unlikely(r->secbits != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->secbits = (OSSL_PARAM *)p; + } + break; + case 'c': + if (ossl_likely(strcmp("ategory", s + 10) == 0)) { + /* OSSL_PKEY_PARAM_SECURITY_CATEGORY */ + if (ossl_unlikely(r->seccat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->seccat = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef template_set_params_list +static const OSSL_PARAM template_set_params_list[] = { + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef template_set_params_st +struct template_set_params_st { + OSSL_PARAM *pub; +}; +#endif + +#ifndef template_set_params_decoder +static int template_set_params_decoder + (const OSSL_PARAM *p, struct template_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("encoded-pub-key", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY */ + if (ossl_unlikely(r->pub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pub = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef template_gen_set_params_list +static const OSSL_PARAM template_gen_set_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef template_gen_set_params_st +struct template_gen_set_params_st { + OSSL_PARAM *name; +}; +#endif + +#ifndef template_gen_set_params_decoder +static int template_gen_set_params_decoder + (const OSSL_PARAM *p, struct template_gen_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("group", s + 0) == 0)) { + /* OSSL_PKEY_PARAM_GROUP_NAME */ + if (ossl_unlikely(r->name != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->name = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/cmac_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/cmac_prov.inc new file mode 100644 index 000000000..12d5914b7 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/cmac_prov.inc @@ -0,0 +1,171 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cmac_get_ctx_params_list +static const OSSL_PARAM cmac_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef cmac_get_ctx_params_st +struct cmac_get_ctx_params_st { + OSSL_PARAM *bsize; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef cmac_get_ctx_params_decoder +static int cmac_get_ctx_params_decoder + (const OSSL_PARAM *p, struct cmac_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("lock-size", s + 1) == 0)) { + /* OSSL_MAC_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef cmac_set_ctx_params_list +static const OSSL_PARAM cmac_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef cmac_set_ctx_params_st +struct cmac_set_ctx_params_st { + OSSL_PARAM *cipher; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_ec; +# endif + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef cmac_set_ctx_params_decoder +static int cmac_set_ctx_params_decoder + (const OSSL_PARAM *p, struct cmac_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_MAC_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ncrypt-check", s + 1) == 0)) { + /* OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK */ + if (ossl_unlikely(r->ind_ec != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_ec = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': + if (ossl_likely(strcmp("ey", s + 1) == 0)) { + /* OSSL_MAC_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_MAC_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/gmac_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/gmac_prov.inc new file mode 100644 index 000000000..dce74687c --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/gmac_prov.inc @@ -0,0 +1,128 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef gmac_get_params_list +static const OSSL_PARAM gmac_get_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef gmac_get_params_st +struct gmac_get_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef gmac_get_params_decoder +static int gmac_get_params_decoder + (const OSSL_PARAM *p, struct gmac_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef gmac_set_ctx_params_list +static const OSSL_PARAM gmac_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_IV, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef gmac_set_ctx_params_st +struct gmac_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *iv; + OSSL_PARAM *key; + OSSL_PARAM *propq; +}; +#endif + +#ifndef gmac_set_ctx_params_decoder +static int gmac_set_ctx_params_decoder + (const OSSL_PARAM *p, struct gmac_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_MAC_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("v", s + 1) == 0)) { + /* OSSL_MAC_PARAM_IV */ + if (ossl_unlikely(r->iv != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->iv = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("ey", s + 1) == 0)) { + /* OSSL_MAC_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_MAC_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/hmac_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/hmac_prov.inc new file mode 100644 index 000000000..d5e826ce0 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/hmac_prov.inc @@ -0,0 +1,196 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hmac_get_ctx_params_list +static const OSSL_PARAM hmac_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef hmac_get_ctx_params_st +struct hmac_get_ctx_params_st { + OSSL_PARAM *bsize; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef hmac_get_ctx_params_decoder +static int hmac_get_ctx_params_decoder + (const OSSL_PARAM *p, struct hmac_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("lock-size", s + 1) == 0)) { + /* OSSL_MAC_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef hmac_set_ctx_params_list +static const OSSL_PARAM hmac_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_TLS_DATA_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_MAC_PARAM_FIPS_KEY_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef hmac_set_ctx_params_st +struct hmac_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif + OSSL_PARAM *key; + OSSL_PARAM *propq; + OSSL_PARAM *tlssize; +}; +#endif + +#ifndef hmac_set_ctx_params_decoder +static int hmac_set_ctx_params_decoder + (const OSSL_PARAM *p, struct hmac_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_MAC_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_MAC_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_MAC_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ls-data-size", s + 1) == 0)) { + /* OSSL_MAC_PARAM_TLS_DATA_SIZE */ + if (ossl_unlikely(r->tlssize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlssize = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/kmac_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/kmac_prov.inc new file mode 100644 index 000000000..8931d4e97 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/kmac_prov.inc @@ -0,0 +1,270 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kmac_new_list +static const OSSL_PARAM kmac_new_list[] = { + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef kmac_new_st +struct kmac_new_st { + OSSL_PARAM *digest; + OSSL_PARAM *propq; +}; +#endif + +#ifndef kmac_new_decoder +static int kmac_new_decoder + (const OSSL_PARAM *p, struct kmac_new_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_MAC_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_MAC_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kmac_get_ctx_params_list +static const OSSL_PARAM kmac_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef kmac_get_ctx_params_st +struct kmac_get_ctx_params_st { + OSSL_PARAM *bsize; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *size; +}; +#endif + +#ifndef kmac_get_ctx_params_decoder +static int kmac_get_ctx_params_decoder + (const OSSL_PARAM *p, struct kmac_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'b': + if (ossl_likely(strcmp("lock-size", s + 1) == 0)) { + /* OSSL_MAC_PARAM_BLOCK_SIZE */ + if (ossl_unlikely(r->bsize != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->bsize = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef kmac_set_ctx_params_list +static const OSSL_PARAM kmac_set_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_MAC_PARAM_XOF, NULL), + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_CUSTOM, NULL, 0), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_MAC_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_MAC_PARAM_FIPS_NO_SHORT_MAC, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef kmac_set_ctx_params_st +struct kmac_set_ctx_params_st { + OSSL_PARAM *custom; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_sht; +# endif + OSSL_PARAM *key; + OSSL_PARAM *size; + OSSL_PARAM *xof; +}; +#endif + +#ifndef kmac_set_ctx_params_decoder +static int kmac_set_ctx_params_decoder + (const OSSL_PARAM *p, struct kmac_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ustom", s + 1) == 0)) { + /* OSSL_MAC_PARAM_CUSTOM */ + if (ossl_unlikely(r->custom != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->custom = (OSSL_PARAM *)p; + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 'y': + switch(s[3]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 4) == 0)) { + /* OSSL_MAC_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + } + } + break; + case 'n': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("o-short-mac", s + 1) == 0)) { + /* OSSL_MAC_PARAM_FIPS_NO_SHORT_MAC */ + if (ossl_unlikely(r->ind_sht != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_sht = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case 'x': + if (ossl_likely(strcmp("of", s + 1) == 0)) { + /* OSSL_MAC_PARAM_XOF */ + if (ossl_unlikely(r->xof != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->xof = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/poly1305_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/poly1305_prov.inc new file mode 100644 index 000000000..80f433568 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/poly1305_prov.inc @@ -0,0 +1,84 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef poly1305_get_params_list +static const OSSL_PARAM poly1305_get_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef poly1305_get_params_st +struct poly1305_get_params_st { + OSSL_PARAM *size; +}; +#endif + +#ifndef poly1305_get_params_decoder +static int poly1305_get_params_decoder + (const OSSL_PARAM *p, struct poly1305_get_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("size", s + 0) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef poly1305_set_ctx_params_list +static const OSSL_PARAM poly1305_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef poly1305_set_ctx_params_st +struct poly1305_set_ctx_params_st { + OSSL_PARAM *key; +}; +#endif + +#ifndef poly1305_set_ctx_params_decoder +static int poly1305_set_ctx_params_decoder + (const OSSL_PARAM *p, struct poly1305_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("key", s + 0) == 0)) { + /* OSSL_MAC_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/siphash_prov.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/siphash_prov.inc new file mode 100644 index 000000000..0964c8632 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/macs/siphash_prov.inc @@ -0,0 +1,159 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef siphash_get_ctx_params_list +static const OSSL_PARAM siphash_get_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_uint(OSSL_MAC_PARAM_C_ROUNDS, NULL), + OSSL_PARAM_uint(OSSL_MAC_PARAM_D_ROUNDS, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef siphash_get_ctx_params_st +struct siphash_get_ctx_params_st { + OSSL_PARAM *c; + OSSL_PARAM *d; + OSSL_PARAM *size; +}; +#endif + +#ifndef siphash_get_ctx_params_decoder +static int siphash_get_ctx_params_decoder + (const OSSL_PARAM *p, struct siphash_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("-rounds", s + 1) == 0)) { + /* OSSL_MAC_PARAM_C_ROUNDS */ + if (ossl_unlikely(r->c != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->c = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("-rounds", s + 1) == 0)) { + /* OSSL_MAC_PARAM_D_ROUNDS */ + if (ossl_unlikely(r->d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->d = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef siphash_set_params_list +static const OSSL_PARAM siphash_set_params_list[] = { + OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL), + OSSL_PARAM_octet_string(OSSL_MAC_PARAM_KEY, NULL, 0), + OSSL_PARAM_uint(OSSL_MAC_PARAM_C_ROUNDS, NULL), + OSSL_PARAM_uint(OSSL_MAC_PARAM_D_ROUNDS, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef siphash_set_params_st +struct siphash_set_params_st { + OSSL_PARAM *c; + OSSL_PARAM *d; + OSSL_PARAM *key; + OSSL_PARAM *size; +}; +#endif + +#ifndef siphash_set_params_decoder +static int siphash_set_params_decoder + (const OSSL_PARAM *p, struct siphash_set_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("-rounds", s + 1) == 0)) { + /* OSSL_MAC_PARAM_C_ROUNDS */ + if (ossl_unlikely(r->c != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->c = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("-rounds", s + 1) == 0)) { + /* OSSL_MAC_PARAM_D_ROUNDS */ + if (ossl_unlikely(r->d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->d = (OSSL_PARAM *)p; + } + break; + case 'k': + if (ossl_likely(strcmp("ey", s + 1) == 0)) { + /* OSSL_MAC_PARAM_KEY */ + if (ossl_unlikely(r->key != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->key = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ize", s + 1) == 0)) { + /* OSSL_MAC_PARAM_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_ctr.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_ctr.inc new file mode 100644 index 000000000..4daa23056 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_ctr.inc @@ -0,0 +1,507 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_ctr_get_ctx_params_list +static const OSSL_PARAM drbg_ctr_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_int(OSSL_DRBG_PARAM_USE_DF, NULL), + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_PERSLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ADINLEN, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_COUNTER, NULL), + OSSL_PARAM_time_t(OSSL_DRBG_PARAM_RESEED_TIME, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_ctr_get_ctx_params_st +struct drbg_ctr_get_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *df; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *maxadlen; + OSSL_PARAM *maxentlen; + OSSL_PARAM *maxnonlen; + OSSL_PARAM *maxperlen; + OSSL_PARAM *maxreq; + OSSL_PARAM *minentlen; + OSSL_PARAM *minnonlen; + OSSL_PARAM *reseed_cnt; + OSSL_PARAM *reseed_int; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef drbg_ctr_get_ctx_params_decoder +static int drbg_ctr_get_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_ctr_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'x': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("dinlen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ADINLEN */ + if (ossl_unlikely(r->maxadlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxadlen = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ENTROPYLEN */ + if (ossl_unlikely(r->maxentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_NONCELEN */ + if (ossl_unlikely(r->maxnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxnonlen = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("erslen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_PERSLEN */ + if (ossl_unlikely(r->maxperlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxperlen = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equest", s + 5) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'i': + switch(s[2]) { + default: + break; + case 'n': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_ENTROPYLEN */ + if (ossl_unlikely(r->minentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_NONCELEN */ + if (ossl_unlikely(r->minnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minnonlen = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_COUNTER */ + if (ossl_unlikely(r->reseed_cnt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_cnt = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[8]) { + default: + break; + case 'i': + switch(s[9]) { + default: + break; + case 'm': + switch(s[10]) { + default: + break; + case 'e': + switch(s[11]) { + default: + break; + case '_': + if (ossl_likely(strcmp("interval", s + 12) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_int != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_int = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("se_derivation_function", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_USE_DF */ + if (ossl_unlikely(r->df != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->df = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_ctr_set_ctx_params_list +static const OSSL_PARAM drbg_ctr_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_CIPHER, NULL, 0), + OSSL_PARAM_int(OSSL_DRBG_PARAM_USE_DF, NULL), + OSSL_PARAM_utf8_string(OSSL_PROV_PARAM_CORE_PROV_NAME, NULL, 0), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_ctr_set_ctx_params_st +struct drbg_ctr_set_ctx_params_st { + OSSL_PARAM *cipher; + OSSL_PARAM *df; + OSSL_PARAM *propq; + OSSL_PARAM *prov; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; +}; +#endif + +#ifndef drbg_ctr_set_ctx_params_decoder +static int drbg_ctr_set_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_ctr_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ipher", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_CIPHER */ + if (ossl_unlikely(r->cipher != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->cipher = (OSSL_PARAM *)p; + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'o': + switch(s[3]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("erties", s + 4) == 0)) { + /* OSSL_DRBG_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ider-name", s + 4) == 0)) { + /* OSSL_PROV_PARAM_CORE_PROV_NAME */ + if (ossl_unlikely(r->prov != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->prov = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ime_interval", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + break; + case 'u': + if (ossl_likely(strcmp("se_derivation_function", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_USE_DF */ + if (ossl_unlikely(r->df != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->df = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hash.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hash.inc new file mode 100644 index 000000000..258a8c25b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hash.inc @@ -0,0 +1,527 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_hash_get_ctx_params_list +static const OSSL_PARAM drbg_hash_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_PERSLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ADINLEN, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_COUNTER, NULL), + OSSL_PARAM_time_t(OSSL_DRBG_PARAM_RESEED_TIME, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_hash_get_ctx_params_st +struct drbg_hash_get_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *maxadlen; + OSSL_PARAM *maxentlen; + OSSL_PARAM *maxnonlen; + OSSL_PARAM *maxperlen; + OSSL_PARAM *maxreq; + OSSL_PARAM *minentlen; + OSSL_PARAM *minnonlen; + OSSL_PARAM *reseed_cnt; + OSSL_PARAM *reseed_int; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef drbg_hash_get_ctx_params_decoder +static int drbg_hash_get_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_hash_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'x': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("dinlen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ADINLEN */ + if (ossl_unlikely(r->maxadlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxadlen = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ENTROPYLEN */ + if (ossl_unlikely(r->maxentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_NONCELEN */ + if (ossl_unlikely(r->maxnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxnonlen = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("erslen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_PERSLEN */ + if (ossl_unlikely(r->maxperlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxperlen = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equest", s + 5) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'i': + switch(s[2]) { + default: + break; + case 'n': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_ENTROPYLEN */ + if (ossl_unlikely(r->minentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_NONCELEN */ + if (ossl_unlikely(r->minnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minnonlen = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_COUNTER */ + if (ossl_unlikely(r->reseed_cnt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_cnt = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[8]) { + default: + break; + case 'i': + switch(s[9]) { + default: + break; + case 'm': + switch(s[10]) { + default: + break; + case 'e': + switch(s[11]) { + default: + break; + case '_': + if (ossl_likely(strcmp("interval", s + 12) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_int != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_int = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_hash_set_ctx_params_list +static const OSSL_PARAM drbg_hash_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PROV_PARAM_CORE_PROV_NAME, NULL, 0), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_hash_set_ctx_params_st +struct drbg_hash_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif + OSSL_PARAM *propq; + OSSL_PARAM *prov; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; +}; +#endif + +#ifndef drbg_hash_set_ctx_params_decoder +static int drbg_hash_set_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_hash_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'o': + switch(s[3]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("erties", s + 4) == 0)) { + /* OSSL_DRBG_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ider-name", s + 4) == 0)) { + /* OSSL_PROV_PARAM_CORE_PROV_NAME */ + if (ossl_unlikely(r->prov != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->prov = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ime_interval", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hmac.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hmac.inc new file mode 100644 index 000000000..d4e6a553a --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/drbg_hmac.inc @@ -0,0 +1,527 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_hmac_get_ctx_params_list +static const OSSL_PARAM drbg_hmac_get_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ENTROPYLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_NONCELEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_PERSLEN, NULL), + OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ADINLEN, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_COUNTER, NULL), + OSSL_PARAM_time_t(OSSL_DRBG_PARAM_RESEED_TIME, NULL), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_hmac_get_ctx_params_st +struct drbg_hmac_get_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *maxadlen; + OSSL_PARAM *maxentlen; + OSSL_PARAM *maxnonlen; + OSSL_PARAM *maxperlen; + OSSL_PARAM *maxreq; + OSSL_PARAM *minentlen; + OSSL_PARAM *minnonlen; + OSSL_PARAM *reseed_cnt; + OSSL_PARAM *reseed_int; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef drbg_hmac_get_ctx_params_decoder +static int drbg_hmac_get_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_hmac_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_DRBG_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'a': + switch(s[2]) { + default: + break; + case 'x': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("dinlen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ADINLEN */ + if (ossl_unlikely(r->maxadlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxadlen = (OSSL_PARAM *)p; + } + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_ENTROPYLEN */ + if (ossl_unlikely(r->maxentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_NONCELEN */ + if (ossl_unlikely(r->maxnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxnonlen = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("erslen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MAX_PERSLEN */ + if (ossl_unlikely(r->maxperlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxperlen = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equest", s + 5) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'i': + switch(s[2]) { + default: + break; + case 'n': + switch(s[3]) { + default: + break; + case '_': + switch(s[4]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_ENTROPYLEN */ + if (ossl_unlikely(r->minentlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minentlen = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("oncelen", s + 5) == 0)) { + /* OSSL_DRBG_PARAM_MIN_NONCELEN */ + if (ossl_unlikely(r->minnonlen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->minnonlen = (OSSL_PARAM *)p; + } + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ounter", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_COUNTER */ + if (ossl_unlikely(r->reseed_cnt != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_cnt = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[8]) { + default: + break; + case 'i': + switch(s[9]) { + default: + break; + case 'm': + switch(s[10]) { + default: + break; + case 'e': + switch(s[11]) { + default: + break; + case '_': + if (ossl_likely(strcmp("interval", s + 12) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_int != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_int = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + } + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef drbg_hmac_set_ctx_params_list +static const OSSL_PARAM drbg_hmac_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_PROV_PARAM_CORE_PROV_NAME, NULL, 0), + OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), + OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_KDF_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef drbg_hmac_set_ctx_params_st +struct drbg_hmac_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif + OSSL_PARAM *propq; + OSSL_PARAM *prov; + OSSL_PARAM *reseed_req; + OSSL_PARAM *reseed_time; +}; +#endif + +#ifndef drbg_hmac_set_ctx_params_decoder +static int drbg_hmac_set_ctx_params_decoder + (const OSSL_PARAM *p, struct drbg_hmac_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_KDF_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'r': + switch(s[2]) { + default: + break; + case 'o': + switch(s[3]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("erties", s + 4) == 0)) { + /* OSSL_DRBG_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 'v': + if (ossl_likely(strcmp("ider-name", s + 4) == 0)) { + /* OSSL_PROV_PARAM_CORE_PROV_NAME */ + if (ossl_unlikely(r->prov != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->prov = (OSSL_PARAM *)p; + } + } + } + } + break; + case 'r': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 'e': + switch(s[5]) { + default: + break; + case 'd': + switch(s[6]) { + default: + break; + case '_': + switch(s[7]) { + default: + break; + case 'r': + if (ossl_likely(strcmp("equests", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_REQUESTS */ + if (ossl_unlikely(r->reseed_req != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_req = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("ime_interval", s + 8) == 0)) { + /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */ + if (ossl_unlikely(r->reseed_time != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->reseed_time = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/fips_crng_test.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/fips_crng_test.inc new file mode 100644 index 000000000..0ffe7fc5b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/fips_crng_test.inc @@ -0,0 +1,107 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef crng_test_get_ctx_params_list +static const OSSL_PARAM crng_test_get_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef crng_test_get_ctx_params_st +struct crng_test_get_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *maxreq; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef crng_test_get_ctx_params_decoder +static int crng_test_get_ctx_params_decoder + (const OSSL_PARAM *p, struct crng_test_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + if (ossl_likely(strcmp("ax_request", s + 1) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src.inc new file mode 100644 index 000000000..a67546810 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src.inc @@ -0,0 +1,88 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef seed_src_get_ctx_params_list +static const OSSL_PARAM seed_src_get_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef seed_src_get_ctx_params_st +struct seed_src_get_ctx_params_st { + OSSL_PARAM *maxreq; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef seed_src_get_ctx_params_decoder +static int seed_src_get_ctx_params_decoder + (const OSSL_PARAM *p, struct seed_src_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'm': + if (ossl_likely(strcmp("ax_request", s + 1) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src_jitter.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src_jitter.inc new file mode 100644 index 000000000..94e57c58a --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/seed_src_jitter.inc @@ -0,0 +1,88 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef jitter_get_ctx_params_list +static const OSSL_PARAM jitter_get_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef jitter_get_ctx_params_st +struct jitter_get_ctx_params_st { + OSSL_PARAM *maxreq; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef jitter_get_ctx_params_decoder +static int jitter_get_ctx_params_decoder + (const OSSL_PARAM *p, struct jitter_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'm': + if (ossl_likely(strcmp("ax_request", s + 1) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/test_rng.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/test_rng.inc new file mode 100644 index 000000000..0e703e2e1 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/rands/test_rng.inc @@ -0,0 +1,239 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef test_rng_get_ctx_params_list +static const OSSL_PARAM test_rng_get_ctx_params_list[] = { + OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_GENERATE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef test_rng_get_ctx_params_st +struct test_rng_get_ctx_params_st { + OSSL_PARAM *gen; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *maxreq; + OSSL_PARAM *state; + OSSL_PARAM *str; +}; +#endif + +#ifndef test_rng_get_ctx_params_decoder +static int test_rng_get_ctx_params_decoder + (const OSSL_PARAM *p, struct test_rng_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'g': + if (ossl_likely(strcmp("enerate", s + 1) == 0)) { + /* OSSL_RAND_PARAM_GENERATE */ + if (ossl_unlikely(r->gen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->gen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax_request", s + 1) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 't': + switch(s[2]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("te", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STATE */ + if (ossl_unlikely(r->state != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->state = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("ength", s + 3) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef test_rng_set_ctx_params_list +static const OSSL_PARAM test_rng_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY, NULL, 0), + OSSL_PARAM_octet_string(OSSL_RAND_PARAM_TEST_NONCE, NULL, 0), + OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), + OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL), + OSSL_PARAM_uint(OSSL_RAND_PARAM_GENERATE, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef test_rng_set_ctx_params_st +struct test_rng_set_ctx_params_st { + OSSL_PARAM *ent; + OSSL_PARAM *gen; + OSSL_PARAM *maxreq; + OSSL_PARAM *nonce; + OSSL_PARAM *str; +}; +#endif + +#ifndef test_rng_set_ctx_params_decoder +static int test_rng_set_ctx_params_decoder + (const OSSL_PARAM *p, struct test_rng_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'g': + if (ossl_likely(strcmp("enerate", s + 1) == 0)) { + /* OSSL_RAND_PARAM_GENERATE */ + if (ossl_unlikely(r->gen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->gen = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("ax_request", s + 1) == 0)) { + /* OSSL_RAND_PARAM_MAX_REQUEST */ + if (ossl_unlikely(r->maxreq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->maxreq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("trength", s + 1) == 0)) { + /* OSSL_RAND_PARAM_STRENGTH */ + if (ossl_unlikely(r->str != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->str = (OSSL_PARAM *)p; + } + break; + case 't': + switch(s[1]) { + default: + break; + case 'e': + switch(s[2]) { + default: + break; + case 's': + switch(s[3]) { + default: + break; + case 't': + switch(s[4]) { + default: + break; + case '_': + switch(s[5]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ntropy", s + 6) == 0)) { + /* OSSL_RAND_PARAM_TEST_ENTROPY */ + if (ossl_unlikely(r->ent != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ent = (OSSL_PARAM *)p; + } + break; + case 'n': + if (ossl_likely(strcmp("once", s + 6) == 0)) { + /* OSSL_RAND_PARAM_TEST_NONCE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/dsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/dsa_sig.inc new file mode 100644 index 000000000..ab633a743 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/dsa_sig.inc @@ -0,0 +1,382 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_get_ctx_params_list +static const OSSL_PARAM dsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_get_ctx_params_st +struct dsa_get_ctx_params_st { + OSSL_PARAM *algid; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *nonce; +}; +#endif + +#ifndef dsa_get_ctx_params_decoder +static int dsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct dsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lgorithm-id", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->algid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->algid = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_set_ctx_params_list +static const OSSL_PARAM dsa_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_set_ctx_params_st +struct dsa_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_sign; +# endif + OSSL_PARAM *nonce; + OSSL_PARAM *propq; +}; +#endif + +#ifndef dsa_set_ctx_params_decoder +static int dsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct dsa_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ign-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK */ + if (ossl_unlikely(r->ind_sign != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_sign = (OSSL_PARAM *)p; + } +# endif + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef dsa_sigalg_set_ctx_params_list +static const OSSL_PARAM dsa_sigalg_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE, NULL, 0), + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef dsa_sigalg_set_ctx_params_st +struct dsa_sigalg_set_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_sign; +# endif + OSSL_PARAM *nonce; + OSSL_PARAM *sig; +}; +#endif + +#ifndef dsa_sigalg_set_ctx_params_decoder +static int dsa_sigalg_set_ctx_params_decoder + (const OSSL_PARAM *p, struct dsa_sigalg_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("igest-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 's': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'n': + switch(s[4]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 5) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK */ + if (ossl_unlikely(r->ind_sign != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_sign = (OSSL_PARAM *)p; + } +# endif + break; + case 'a': + if (ossl_likely(strcmp("ture", s + 5) == 0)) { + /* OSSL_SIGNATURE_PARAM_SIGNATURE */ + if (ossl_unlikely(r->sig != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sig = (OSSL_PARAM *)p; + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ecdsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ecdsa_sig.inc new file mode 100644 index 000000000..bd937b9e4 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ecdsa_sig.inc @@ -0,0 +1,451 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecdsa_get_ctx_params_list +static const OSSL_PARAM ecdsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecdsa_get_ctx_params_st +struct ecdsa_get_ctx_params_st { + OSSL_PARAM *algid; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *nonce; + OSSL_PARAM *size; +# if defined(FIPS_MODULE) + OSSL_PARAM *verify; +# endif +}; +#endif + +#ifndef ecdsa_get_ctx_params_decoder +static int ecdsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ecdsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lgorithm-id", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->algid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->algid = (OSSL_PARAM *)p; + } + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': + if (ossl_likely(strcmp("size", s + 7) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 'v': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("erify-message", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE */ + if (ossl_unlikely(r->verify != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->verify = (OSSL_PARAM *)p; + } +# endif + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecdsa_set_ctx_params_list +static const OSSL_PARAM ecdsa_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), +# if !defined(OPENSSL_NO_ACVP_TESTS) + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_KAT, NULL), +# endif + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecdsa_set_ctx_params_st +struct ecdsa_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if !defined(OPENSSL_NO_ACVP_TESTS) + OSSL_PARAM *kat; +# endif + OSSL_PARAM *nonce; + OSSL_PARAM *propq; + OSSL_PARAM *size; +}; +#endif + +#ifndef ecdsa_set_ctx_params_decoder +static int ecdsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ecdsa_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': + switch(s[7]) { + default: + break; + case 'c': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("heck", s + 8) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + if (ossl_likely(strcmp("ize", s + 8) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'k': + switch(s[1]) { + default: + break; + case 'a': +# if !defined(OPENSSL_NO_ACVP_TESTS) + if (ossl_likely(strcmp("t", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_KAT */ + if (ossl_unlikely(r->kat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kat = (OSSL_PARAM *)p; + } +# endif + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("y-check", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ecdsa_sigalg_set_ctx_params_list +static const OSSL_PARAM ecdsa_sigalg_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE, NULL, 0), +# if !defined(OPENSSL_NO_ACVP_TESTS) + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_KAT, NULL), +# endif + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_NONCE_TYPE, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef ecdsa_sigalg_set_ctx_params_st +struct ecdsa_sigalg_set_ctx_params_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if !defined(OPENSSL_NO_ACVP_TESTS) + OSSL_PARAM *kat; +# endif + OSSL_PARAM *nonce; + OSSL_PARAM *sig; +}; +#endif + +#ifndef ecdsa_sigalg_set_ctx_params_decoder +static int ecdsa_sigalg_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ecdsa_sigalg_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("igest-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': + switch(s[1]) { + default: + break; + case 'a': +# if !defined(OPENSSL_NO_ACVP_TESTS) + if (ossl_likely(strcmp("t", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_KAT */ + if (ossl_unlikely(r->kat != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->kat = (OSSL_PARAM *)p; + } +# endif + break; + case 'e': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("y-check", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + case 'n': + if (ossl_likely(strcmp("once-type", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_NONCE_TYPE */ + if (ossl_unlikely(r->nonce != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->nonce = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ignature", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_SIGNATURE */ + if (ossl_unlikely(r->sig != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sig = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/eddsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/eddsa_sig.inc new file mode 100644 index 000000000..cba0a4c5a --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/eddsa_sig.inc @@ -0,0 +1,139 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef eddsa_get_ctx_params_list +static const OSSL_PARAM eddsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef eddsa_get_ctx_params_st +struct eddsa_get_ctx_params_st { + OSSL_PARAM *id; +}; +#endif + +#ifndef eddsa_get_ctx_params_decoder +static int eddsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct eddsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("algorithm-id", s + 0) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->id != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->id = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef eddsa_set_ctx_params_list +static const OSSL_PARAM eddsa_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_INSTANCE, NULL, 0), + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef eddsa_set_ctx_params_st +struct eddsa_set_ctx_params_st { + OSSL_PARAM *ctx; + OSSL_PARAM *inst; +}; +#endif + +#ifndef eddsa_set_ctx_params_decoder +static int eddsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct eddsa_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ontext-string", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_CONTEXT_STRING */ + if (ossl_unlikely(r->ctx != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ctx = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nstance", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_INSTANCE */ + if (ossl_unlikely(r->inst != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->inst = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef eddsa_set_variant_ctx_params_list +static const OSSL_PARAM eddsa_set_variant_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef eddsa_set_variant_ctx_params_st +struct eddsa_set_variant_ctx_params_st { + OSSL_PARAM *ctx; +}; +#endif + +#ifndef eddsa_set_variant_ctx_params_decoder +static int eddsa_set_variant_ctx_params_decoder + (const OSSL_PARAM *p, struct eddsa_set_variant_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("context-string", s + 0) == 0)) { + /* OSSL_SIGNATURE_PARAM_CONTEXT_STRING */ + if (ossl_unlikely(r->ctx != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ctx = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ml_dsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ml_dsa_sig.inc new file mode 100644 index 000000000..759adae55 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/ml_dsa_sig.inc @@ -0,0 +1,262 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_set_ctx_params_list +static const OSSL_PARAM ml_dsa_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_TEST_ENTROPY, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_DETERMINISTIC, NULL), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING, NULL), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_MU, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_set_ctx_params_st +struct ml_dsa_set_ctx_params_st { + OSSL_PARAM *ctx; + OSSL_PARAM *det; + OSSL_PARAM *ent; + OSSL_PARAM *msgenc; + OSSL_PARAM *mu; +}; +#endif + +#ifndef ml_dsa_set_ctx_params_decoder +static int ml_dsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ontext-string", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_CONTEXT_STRING */ + if (ossl_unlikely(r->ctx != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ctx = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("eterministic", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_DETERMINISTIC */ + if (ossl_unlikely(r->det != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->det = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ssage-encoding", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING */ + if (ossl_unlikely(r->msgenc != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->msgenc = (OSSL_PARAM *)p; + } + break; + case 'u': + switch(s[2]) { + default: + break; + case '\0': + if (ossl_unlikely(r->mu != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mu = (OSSL_PARAM *)p; + } + } + break; + case 't': + if (ossl_likely(strcmp("est-entropy", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_TEST_ENTROPY */ + if (ossl_unlikely(r->ent != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ent = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_verifymsg_set_ctx_params_list +static const OSSL_PARAM ml_dsa_verifymsg_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_TEST_ENTROPY, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_DETERMINISTIC, NULL), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING, NULL), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_MU, NULL), + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_verifymsg_set_ctx_params_st +struct ml_dsa_verifymsg_set_ctx_params_st { + OSSL_PARAM *ctx; + OSSL_PARAM *det; + OSSL_PARAM *ent; + OSSL_PARAM *msgenc; + OSSL_PARAM *mu; + OSSL_PARAM *sig; +}; +#endif + +#ifndef ml_dsa_verifymsg_set_ctx_params_decoder +static int ml_dsa_verifymsg_set_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_verifymsg_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ontext-string", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_CONTEXT_STRING */ + if (ossl_unlikely(r->ctx != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ctx = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("eterministic", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_DETERMINISTIC */ + if (ossl_unlikely(r->det != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->det = (OSSL_PARAM *)p; + } + break; + case 'm': + switch(s[1]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("ssage-encoding", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING */ + if (ossl_unlikely(r->msgenc != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->msgenc = (OSSL_PARAM *)p; + } + break; + case 'u': + switch(s[2]) { + default: + break; + case '\0': + if (ossl_unlikely(r->mu != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mu = (OSSL_PARAM *)p; + } + } + break; + case 's': + if (ossl_likely(strcmp("ignature", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_SIGNATURE */ + if (ossl_unlikely(r->sig != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sig = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("est-entropy", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_TEST_ENTROPY */ + if (ossl_unlikely(r->ent != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ent = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef ml_dsa_get_ctx_params_list +static const OSSL_PARAM ml_dsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef ml_dsa_get_ctx_params_st +struct ml_dsa_get_ctx_params_st { + OSSL_PARAM *id; +}; +#endif + +#ifndef ml_dsa_get_ctx_params_decoder +static int ml_dsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct ml_dsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("algorithm-id", s + 0) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->id != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->id = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/rsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/rsa_sig.inc new file mode 100644 index 000000000..ee0c38e07 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/rsa_sig.inc @@ -0,0 +1,642 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_get_ctx_params_list +static const OSSL_PARAM rsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_get_ctx_params_st +struct rsa_get_ctx_params_st { + OSSL_PARAM *algid; + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind; +# endif + OSSL_PARAM *mgf1; + OSSL_PARAM *pad; + OSSL_PARAM *slen; +# if defined(FIPS_MODULE) + OSSL_PARAM *verify; +# endif +}; +#endif + +#ifndef rsa_get_ctx_params_decoder +static int rsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct rsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lgorithm-id", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->algid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->algid = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST */ + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + break; + case 'f': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR */ + if (ossl_unlikely(r->ind != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->ind = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + if (ossl_likely(strcmp("gf1-digest", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_MGF1_DIGEST */ + if (ossl_unlikely(r->mgf1 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->mgf1 = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("ad-mode", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_PAD_MODE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->pad = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("altlen", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_PSS_SALTLEN */ + if (ossl_unlikely(r->slen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->slen = (OSSL_PARAM *)p; + } + break; + case 'v': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("erify-message", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE */ + if (ossl_unlikely(r->verify != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->verify = (OSSL_PARAM *)p; + } +# endif + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_set_ctx_params_list +static const OSSL_PARAM rsa_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_set_ctx_params_st +struct rsa_set_ctx_params_st { + OSSL_PARAM *digest; +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_slen; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_xpad; +# endif + OSSL_PARAM *mgf1; + OSSL_PARAM *mgf1pq; + OSSL_PARAM *pad; + OSSL_PARAM *propq; + OSSL_PARAM *slen; +}; +#endif + +#ifndef rsa_set_ctx_params_decoder +static int rsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct rsa_set_ctx_params_st *r, int *count) +{ + const char *s; + + *count = 0; + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("check", s + 7) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'g': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '1': + switch(s[4]) { + default: + break; + case '-': + switch(s[5]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 6) == 0)) { + /* OSSL_SIGNATURE_PARAM_MGF1_DIGEST */ + if (ossl_unlikely(r->mgf1 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1 = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 6) == 0)) { + /* OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES */ + if (ossl_unlikely(r->mgf1pq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1pq = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'p': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("d-mode", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_PAD_MODE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->pad = (OSSL_PARAM *)p; + } + break; + case 'r': + if (ossl_likely(strcmp("operties", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->propq = (OSSL_PARAM *)p; + } + } + break; + case 'r': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("sa-pss-saltlen-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK */ + if (ossl_unlikely(r->ind_slen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_slen = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ltlen", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_PSS_SALTLEN */ + if (ossl_unlikely(r->slen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->slen = (OSSL_PARAM *)p; + } + break; + case 'i': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("gn-x931-pad-check", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK */ + if (ossl_unlikely(r->ind_xpad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_xpad = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_set_ctx_params_no_digest_list +static const OSSL_PARAM rsa_set_ctx_params_no_digest_list[] = { + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL), +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK, NULL), +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK, NULL), +# endif + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_set_ctx_params_no_digest_st +struct rsa_set_ctx_params_no_digest_st { +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_d; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_k; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_slen; +# endif +# if defined(FIPS_MODULE) + OSSL_PARAM *ind_xpad; +# endif + OSSL_PARAM *mgf1; + OSSL_PARAM *mgf1pq; + OSSL_PARAM *pad; + OSSL_PARAM *slen; +}; +#endif + +#ifndef rsa_set_ctx_params_no_digest_decoder +static int rsa_set_ctx_params_no_digest_decoder + (const OSSL_PARAM *p, struct rsa_set_ctx_params_no_digest_st *r, int *count) +{ + const char *s; + + *count = 0; + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("igest-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK */ + if (ossl_unlikely(r->ind_d != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_d = (OSSL_PARAM *)p; + } +# endif + break; + case 'k': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("ey-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK */ + if (ossl_unlikely(r->ind_k != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_k = (OSSL_PARAM *)p; + } +# endif + break; + case 'm': + switch(s[1]) { + default: + break; + case 'g': + switch(s[2]) { + default: + break; + case 'f': + switch(s[3]) { + default: + break; + case '1': + switch(s[4]) { + default: + break; + case '-': + switch(s[5]) { + default: + break; + case 'd': + if (ossl_likely(strcmp("igest", s + 6) == 0)) { + /* OSSL_SIGNATURE_PARAM_MGF1_DIGEST */ + if (ossl_unlikely(r->mgf1 != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1 = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 6) == 0)) { + /* OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES */ + if (ossl_unlikely(r->mgf1pq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->mgf1pq = (OSSL_PARAM *)p; + } + } + } + } + } + } + break; + case 'p': + if (ossl_likely(strcmp("ad-mode", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_PAD_MODE */ + if (ossl_unlikely(r->pad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->pad = (OSSL_PARAM *)p; + } + break; + case 'r': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("sa-pss-saltlen-check", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK */ + if (ossl_unlikely(r->ind_slen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_slen = (OSSL_PARAM *)p; + } +# endif + break; + case 's': + switch(s[1]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("ltlen", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_PSS_SALTLEN */ + if (ossl_unlikely(r->slen != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->slen = (OSSL_PARAM *)p; + } + break; + case 'i': +# if defined(FIPS_MODULE) + if (ossl_likely(strcmp("gn-x931-pad-check", s + 2) == 0)) { + /* OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK */ + if (ossl_unlikely(r->ind_xpad != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + ++*count; + r->ind_xpad = (OSSL_PARAM *)p; + } +# endif + break; + } + break; + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef rsa_sigalg_set_ctx_params_list +static const OSSL_PARAM rsa_sigalg_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_SIGNATURE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef rsa_sigalg_set_ctx_params_st +struct rsa_sigalg_set_ctx_params_st { + OSSL_PARAM *sig; +}; +#endif + +#ifndef rsa_sigalg_set_ctx_params_decoder +static int rsa_sigalg_set_ctx_params_decoder + (const OSSL_PARAM *p, struct rsa_sigalg_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("signature", s + 0) == 0)) { + /* OSSL_SIGNATURE_PARAM_SIGNATURE */ + if (ossl_unlikely(r->sig != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sig = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/slh_dsa_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/slh_dsa_sig.inc new file mode 100644 index 000000000..f4ac6c4e0 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/slh_dsa_sig.inc @@ -0,0 +1,128 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef slh_dsa_set_ctx_params_list +static const OSSL_PARAM slh_dsa_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_CONTEXT_STRING, NULL, 0), + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_TEST_ENTROPY, NULL, 0), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_DETERMINISTIC, NULL), + OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef slh_dsa_set_ctx_params_st +struct slh_dsa_set_ctx_params_st { + OSSL_PARAM *context; + OSSL_PARAM *det; + OSSL_PARAM *entropy; + OSSL_PARAM *msgenc; +}; +#endif + +#ifndef slh_dsa_set_ctx_params_decoder +static int slh_dsa_set_ctx_params_decoder + (const OSSL_PARAM *p, struct slh_dsa_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'c': + if (ossl_likely(strcmp("ontext-string", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_CONTEXT_STRING */ + if (ossl_unlikely(r->context != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->context = (OSSL_PARAM *)p; + } + break; + case 'd': + if (ossl_likely(strcmp("eterministic", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_DETERMINISTIC */ + if (ossl_unlikely(r->det != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->det = (OSSL_PARAM *)p; + } + break; + case 'm': + if (ossl_likely(strcmp("essage-encoding", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING */ + if (ossl_unlikely(r->msgenc != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->msgenc = (OSSL_PARAM *)p; + } + break; + case 't': + if (ossl_likely(strcmp("est-entropy", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_TEST_ENTROPY */ + if (ossl_unlikely(r->entropy != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->entropy = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef slh_dsa_get_ctx_params_list +static const OSSL_PARAM slh_dsa_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef slh_dsa_get_ctx_params_st +struct slh_dsa_get_ctx_params_st { + OSSL_PARAM *algid; +}; +#endif + +#ifndef slh_dsa_get_ctx_params_decoder +static int slh_dsa_get_ctx_params_decoder + (const OSSL_PARAM *p, struct slh_dsa_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("algorithm-id", s + 0) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->algid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->algid = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/sm2_sig.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/sm2_sig.inc new file mode 100644 index 000000000..9ca4ecc3a --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/signature/sm2_sig.inc @@ -0,0 +1,213 @@ +/* + * Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sm2sig_get_ctx_params_list +static const OSSL_PARAM sm2sig_get_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), + OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef sm2sig_get_ctx_params_st +struct sm2sig_get_ctx_params_st { + OSSL_PARAM *algid; + OSSL_PARAM *digest; + OSSL_PARAM *size; +}; +#endif + +#ifndef sm2sig_get_ctx_params_decoder +static int sm2sig_get_ctx_params_decoder + (const OSSL_PARAM *p, struct sm2sig_get_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'a': + if (ossl_likely(strcmp("lgorithm-id", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_ALGORITHM_ID */ + if (ossl_unlikely(r->algid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->algid = (OSSL_PARAM *)p; + } + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': + if (ossl_likely(strcmp("size", s + 7) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + } + } + } + return 1; +} +#endif +/* End of machine generated */ + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef sm2sig_set_ctx_params_list +static const OSSL_PARAM sm2sig_set_ctx_params_list[] = { + OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), + OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), + OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_DIST_ID, NULL, 0), + OSSL_PARAM_uint(OSSL_SIGNATURE_PARAM_TLS_VERSION, NULL), + OSSL_PARAM_END +}; +#endif + +#ifndef sm2sig_set_ctx_params_st +struct sm2sig_set_ctx_params_st { + OSSL_PARAM *digest; + OSSL_PARAM *distid; + OSSL_PARAM *size; + OSSL_PARAM *tlsver; +}; +#endif + +#ifndef sm2sig_set_ctx_params_decoder +static int sm2sig_set_ctx_params_decoder + (const OSSL_PARAM *p, struct sm2sig_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'd': + switch(s[1]) { + default: + break; + case 'i': + switch(s[2]) { + default: + break; + case 'g': + switch(s[3]) { + default: + break; + case 'e': + switch(s[4]) { + default: + break; + case 's': + switch(s[5]) { + default: + break; + case 't': + switch(s[6]) { + default: + break; + case '-': + if (ossl_likely(strcmp("size", s + 7) == 0)) { + /* OSSL_SIGNATURE_PARAM_DIGEST_SIZE */ + if (ossl_unlikely(r->size != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->size = (OSSL_PARAM *)p; + } + break; + case '\0': + if (ossl_unlikely(r->digest != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->digest = (OSSL_PARAM *)p; + } + } + } + } + break; + case 's': + if (ossl_likely(strcmp("tid", s + 3) == 0)) { + /* OSSL_PKEY_PARAM_DIST_ID */ + if (ossl_unlikely(r->distid != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->distid = (OSSL_PARAM *)p; + } + } + } + break; + case 't': + if (ossl_likely(strcmp("ls-version", s + 1) == 0)) { + /* OSSL_SIGNATURE_PARAM_TLS_VERSION */ + if (ossl_unlikely(r->tlsver != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->tlsver = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/skeymgmt/generic.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/skeymgmt/generic.inc new file mode 100644 index 000000000..b7431563b --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/skeymgmt/generic.inc @@ -0,0 +1,46 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef generic_skey_import_list +static const OSSL_PARAM generic_skey_import_list[] = { + OSSL_PARAM_octet_string(OSSL_SKEY_PARAM_RAW_BYTES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef generic_skey_import_st +struct generic_skey_import_st { + OSSL_PARAM *raw_bytes; +}; +#endif + +#ifndef generic_skey_import_decoder +static int generic_skey_import_decoder + (const OSSL_PARAM *p, struct generic_skey_import_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("raw-bytes", s + 0) == 0)) { + /* OSSL_SKEY_PARAM_RAW_BYTES */ + if (ossl_unlikely(r->raw_bytes != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->raw_bytes = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store.inc new file mode 100644 index 000000000..1f57d9a59 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store.inc @@ -0,0 +1,90 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef file_set_ctx_params_list +static const OSSL_PARAM file_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_STORE_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_int(OSSL_STORE_PARAM_EXPECT, NULL), + OSSL_PARAM_octet_string(OSSL_STORE_PARAM_SUBJECT, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_STORE_PARAM_INPUT_TYPE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef file_set_ctx_params_st +struct file_set_ctx_params_st { + OSSL_PARAM *expect; + OSSL_PARAM *propq; + OSSL_PARAM *sub; + OSSL_PARAM *type; +}; +#endif + +#ifndef file_set_ctx_params_decoder +static int file_set_ctx_params_decoder + (const OSSL_PARAM *p, struct file_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'e': + if (ossl_likely(strcmp("xpect", s + 1) == 0)) { + /* OSSL_STORE_PARAM_EXPECT */ + if (ossl_unlikely(r->expect != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->expect = (OSSL_PARAM *)p; + } + break; + case 'i': + if (ossl_likely(strcmp("nput-type", s + 1) == 0)) { + /* OSSL_STORE_PARAM_INPUT_TYPE */ + if (ossl_unlikely(r->type != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->type = (OSSL_PARAM *)p; + } + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_STORE_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ubject", s + 1) == 0)) { + /* OSSL_STORE_PARAM_SUBJECT */ + if (ossl_unlikely(r->sub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sub = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store_any2obj.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store_any2obj.inc new file mode 100644 index 000000000..e04bf8797 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/file_store_any2obj.inc @@ -0,0 +1,47 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef any2obj_set_ctx_params_list +static const OSSL_PARAM any2obj_set_ctx_params_list[] = { + OSSL_PARAM_utf8_string(OSSL_OBJECT_PARAM_DATA_STRUCTURE, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef any2obj_set_ctx_params_st +struct any2obj_set_ctx_params_st { + OSSL_PARAM *datastruct; +}; +#endif + +#ifndef any2obj_set_ctx_params_decoder +static int any2obj_set_ctx_params_decoder + (const OSSL_PARAM *p, struct any2obj_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + if (ossl_likely(strcmp("data-structure", s + 0) == 0)) { + /* OSSL_OBJECT_PARAM_DATA_STRUCTURE */ + if (ossl_unlikely(r->datastruct != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->datastruct = (OSSL_PARAM *)p; + } + return 1; +} +#endif +/* End of machine generated */ diff --git a/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/winstore_store.inc b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/winstore_store.inc new file mode 100644 index 000000000..d6ca52731 --- /dev/null +++ b/OpensslPkg/Library/OpensslLib/OpensslGen/providers/implementations/storemgmt/winstore_store.inc @@ -0,0 +1,65 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the \"License\"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +/* Machine generated by util/perl/OpenSSL/paramnames.pm */ +#ifndef winstore_set_ctx_params_list +static const OSSL_PARAM winstore_set_ctx_params_list[] = { + OSSL_PARAM_octet_string(OSSL_STORE_PARAM_SUBJECT, NULL, 0), + OSSL_PARAM_utf8_string(OSSL_STORE_PARAM_PROPERTIES, NULL, 0), + OSSL_PARAM_END +}; +#endif + +#ifndef winstore_set_ctx_params_st +struct winstore_set_ctx_params_st { + OSSL_PARAM *propq; + OSSL_PARAM *sub; +}; +#endif + +#ifndef winstore_set_ctx_params_decoder +static int winstore_set_ctx_params_decoder + (const OSSL_PARAM *p, struct winstore_set_ctx_params_st *r) +{ + const char *s; + + memset(r, 0, sizeof(*r)); + if (p != NULL) + for (; (s = p->key) != NULL; p++) + switch(s[0]) { + default: + break; + case 'p': + if (ossl_likely(strcmp("roperties", s + 1) == 0)) { + /* OSSL_STORE_PARAM_PROPERTIES */ + if (ossl_unlikely(r->propq != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->propq = (OSSL_PARAM *)p; + } + break; + case 's': + if (ossl_likely(strcmp("ubject", s + 1) == 0)) { + /* OSSL_STORE_PARAM_SUBJECT */ + if (ossl_unlikely(r->sub != NULL)) { + ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER, + "param %s is repeated", s); + return 0; + } + r->sub = (OSSL_PARAM *)p; + } + } + return 1; +} +#endif +/* End of machine generated */ From feafe524aefe6ebaa50a3aa4d39ab877da135faa Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:18:11 -0700 Subject: [PATCH 12/18] OpensslPkg: Update configure.py for OpenSSL 4.0.0-beta1 Fix X64-MSFT assembly filename conversion to handle both .S and .s extensions. Disable SM3 assembly sources in the asm filter to work around build issues with OpenSSL 4.0.0-beta1. SM3 support will need to be re-evaluated in a future update. Signed-off-by: Doug Flick --- OpensslPkg/Library/OpensslLib/configure.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpensslPkg/Library/OpensslLib/configure.py b/OpensslPkg/Library/OpensslLib/configure.py index cc5adc910..da8afffbc 100755 --- a/OpensslPkg/Library/OpensslLib/configure.py +++ b/OpensslPkg/Library/OpensslLib/configure.py @@ -162,7 +162,7 @@ def generate_files(openssldir, opensslgendir, asm, filelist): if 'IA32-MSFT' in asm: filename = filename.replace('.S', '.nasm') elif 'X64-MSFT' in asm: - filename = filename.replace('.s', '.nasm') + filename = filename.replace('.S', '.nasm').replace('.s', '.nasm') dst = os.path.join(opensslgendir, asm, filename) else: dst = os.path.join(opensslgendir, filename) @@ -225,6 +225,8 @@ def asm_filter_fn(filename): '/ec/', 'ECP_NISTZ256_ASM', 'X25519_ASM', + '/sm3/', + 'OPENSSL_SM3_ASM', ] for item in exclude: if item in filename: @@ -338,7 +340,7 @@ def update_MSFT_asm_format(asm, filelist): filelist[file_index] = filelist[file_index].replace('.S', '.nasm') elif 'X64-MSFT' in asm: for file_index in range(len(filelist)): - filelist[file_index] = filelist[file_index].replace('.s', '.nasm') + filelist[file_index] = filelist[file_index].replace('.S', '.nasm').replace('.s', '.nasm') def main(): # prepare From 5b193e49338026401716a023a010ff393e1b60f1 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:18:33 -0700 Subject: [PATCH 13/18] OpensslPkg: Update INFs for OpenSSL 4.0.0-beta1 sources Update the autogenerated source file lists in all OpensslLib INF files to reflect the new and changed source files in OpenSSL 4.0.0-beta1. Signed-off-by: Doug Flick --- OpensslPkg/Library/OpensslLib/OpensslLib.inf | 32 +++-- .../Library/OpensslLib/OpensslLibAccel.inf | 108 +++++++++++------ .../Library/OpensslLib/OpensslLibCrypto.inf | 27 +++-- .../Library/OpensslLib/OpensslLibFull.inf | 33 ++++-- .../OpensslLib/OpensslLibFullAccel.inf | 111 ++++++++++++------ 5 files changed, 212 insertions(+), 99 deletions(-) diff --git a/OpensslPkg/Library/OpensslLib/OpensslLib.inf b/OpensslPkg/Library/OpensslLib/OpensslLib.inf index 1329559da..02e1127b9 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslLib.inf +++ b/OpensslPkg/Library/OpensslLib/OpensslLib.inf @@ -50,6 +50,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -157,7 +158,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -190,7 +191,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -218,10 +218,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -246,6 +244,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -255,6 +255,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -306,6 +307,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -335,7 +338,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -353,6 +355,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -443,7 +446,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -458,6 +460,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -581,10 +584,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -594,6 +602,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -615,9 +624,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -646,7 +655,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_rsa_key.c $(OPENSSL_PATH)/providers/common/provider_ctx.c $(OPENSSL_PATH)/providers/common/provider_err.c @@ -660,8 +668,13 @@ $(OPENSSL_PATH)/providers/implementations/digests/digestcommon.c $(OPENSSL_PATH)/ssl/record/methods/tls_pad.c $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -697,7 +710,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c diff --git a/OpensslPkg/Library/OpensslLib/OpensslLibAccel.inf b/OpensslPkg/Library/OpensslLib/OpensslLibAccel.inf index 944f7a879..4dcc640bf 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslLibAccel.inf +++ b/OpensslPkg/Library/OpensslLib/OpensslLibAccel.inf @@ -25,7 +25,7 @@ DEFINE OPENSSL_FLAGS = -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DEDK2_OPENSSL_NOEC=1 -D OPENSSL_NO_INLINE_ASM DEFINE OPENSSL_FLAGS_IA32 = -DAES_ASM -DGHASH_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM DEFINE OPENSSL_FLAGS_X64 = -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM - DEFINE OPENSSL_FLAGS_AARCH64 = -DBSAES_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DOPENSSL_SM3_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM + DEFINE OPENSSL_FLAGS_AARCH64 = -DBSAES_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM # # VALID_ARCHITECTURES = IA32 X64 AARCH64 @@ -71,6 +71,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -177,7 +178,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -210,7 +211,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -238,10 +238,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -266,6 +264,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -275,6 +275,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -326,6 +327,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -354,7 +357,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -372,6 +374,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -462,7 +465,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -477,6 +479,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -600,10 +603,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -613,6 +621,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -634,9 +643,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -665,7 +674,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_rsa_key.c $(OPENSSL_PATH)/providers/common/provider_ctx.c $(OPENSSL_PATH)/providers/common/provider_err.c @@ -679,8 +687,13 @@ $(OPENSSL_PATH)/providers/implementations/digests/digestcommon.c $(OPENSSL_PATH)/ssl/record/methods/tls_pad.c $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -716,7 +729,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -774,6 +786,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -880,7 +893,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -915,7 +928,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -943,10 +955,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -971,6 +981,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -980,6 +992,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -1031,6 +1044,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -1059,7 +1074,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -1077,6 +1091,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -1167,7 +1182,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -1181,6 +1195,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -1304,10 +1319,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -1317,6 +1337,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -1338,9 +1359,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -1369,7 +1390,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_rsa_key.c $(OPENSSL_PATH)/providers/common/provider_ctx.c $(OPENSSL_PATH)/providers/common/provider_err.c @@ -1383,8 +1403,13 @@ $(OPENSSL_PATH)/providers/implementations/digests/digestcommon.c $(OPENSSL_PATH)/ssl/record/methods/tls_pad.c $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -1420,7 +1445,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -1434,6 +1458,7 @@ $(OPENSSL_PATH)/ssl/statem/statem_clnt.c $(OPENSSL_PATH)/ssl/statem/statem_dtls.c $(OPENSSL_PATH)/ssl/statem/statem_lib.c + $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aes-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aesni-mb-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1453,6 +1478,7 @@ $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha256-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha512-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aes-cfb-avx512.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aes-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aesni-mb-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aesni-sha1-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1500,6 +1526,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -1607,7 +1634,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -1640,7 +1667,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -1668,10 +1694,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -1696,6 +1720,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -1705,6 +1731,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -1756,6 +1783,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -1784,7 +1813,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -1802,6 +1830,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -1892,7 +1921,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -1906,6 +1934,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -2029,10 +2058,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -2042,6 +2076,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -2063,9 +2098,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -2094,7 +2129,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_rsa_key.c $(OPENSSL_PATH)/providers/common/provider_ctx.c $(OPENSSL_PATH)/providers/common/provider_err.c @@ -2108,8 +2142,13 @@ $(OPENSSL_PATH)/providers/implementations/digests/digestcommon.c $(OPENSSL_PATH)/ssl/record/methods/tls_pad.c $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -2145,7 +2184,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -2159,6 +2197,9 @@ $(OPENSSL_PATH)/ssl/statem/statem_clnt.c $(OPENSSL_PATH)/ssl/statem/statem_dtls.c $(OPENSSL_PATH)/ssl/statem/statem_lib.c + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aesv8-armx.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/bsaes-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/vpaes-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe @@ -2171,7 +2212,9 @@ $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha1-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha256-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha512-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe - $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sm3/sm3-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha1-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha256-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha512-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aesv8-armx.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/bsaes-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/vpaes-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe @@ -2184,7 +2227,6 @@ $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha1-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha256-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha512-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe - $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sm3/sm3-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe # Autogenerated files list ends here [Packages] diff --git a/OpensslPkg/Library/OpensslLib/OpensslLibCrypto.inf b/OpensslPkg/Library/OpensslLib/OpensslLibCrypto.inf index bf32ca207..f767816d1 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslLibCrypto.inf +++ b/OpensslPkg/Library/OpensslLib/OpensslLibCrypto.inf @@ -51,6 +51,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -158,7 +159,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -191,7 +192,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -219,10 +219,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -247,6 +245,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -256,6 +256,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -307,6 +308,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -336,7 +339,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -354,6 +356,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -444,7 +447,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -459,6 +461,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -582,10 +585,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -595,6 +603,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -616,9 +625,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -647,7 +656,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_rsa_key.c $(OPENSSL_PATH)/providers/common/provider_ctx.c $(OPENSSL_PATH)/providers/common/provider_err.c @@ -661,6 +669,7 @@ $(OPENSSL_PATH)/providers/implementations/digests/digestcommon.c $(OPENSSL_PATH)/ssl/record/methods/tls_pad.c $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c # Autogenerated files list ends here diff --git a/OpensslPkg/Library/OpensslLib/OpensslLibFull.inf b/OpensslPkg/Library/OpensslLib/OpensslLibFull.inf index 762de528f..b3c386ac3 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslLibFull.inf +++ b/OpensslPkg/Library/OpensslLib/OpensslLibFull.inf @@ -55,6 +55,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -162,7 +163,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -195,7 +196,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -228,7 +228,6 @@ $(OPENSSL_PATH)/crypto/ec/ec_lib.c $(OPENSSL_PATH)/crypto/ec/ec_mult.c $(OPENSSL_PATH)/crypto/ec/ec_oct.c - $(OPENSSL_PATH)/crypto/ec/ec_pmeth.c $(OPENSSL_PATH)/crypto/ec/ec_print.c $(OPENSSL_PATH)/crypto/ec/ecdh_kdf.c $(OPENSSL_PATH)/crypto/ec/ecdh_ossl.c @@ -261,10 +260,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -289,6 +286,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -298,6 +297,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -349,6 +349,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -378,7 +380,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -396,6 +397,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -486,7 +488,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -501,6 +502,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -624,10 +626,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -637,6 +644,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -660,9 +668,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -698,7 +706,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_ec_key.c $(OPENSSL_PATH)/providers/common/der/der_ec_sig.c $(OPENSSL_PATH)/providers/common/der/der_ecx_key.c @@ -717,8 +724,13 @@ $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ec_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ecx_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -754,7 +766,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c diff --git a/OpensslPkg/Library/OpensslLib/OpensslLibFullAccel.inf b/OpensslPkg/Library/OpensslLib/OpensslLibFullAccel.inf index f26b1f371..6a5593faa 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslLibFullAccel.inf +++ b/OpensslPkg/Library/OpensslLib/OpensslLibFullAccel.inf @@ -30,7 +30,7 @@ DEFINE OPENSSL_FLAGS = -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D OPENSSL_NO_INLINE_ASM DEFINE OPENSSL_FLAGS_IA32 = -DAES_ASM -DGHASH_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM DEFINE OPENSSL_FLAGS_X64 = -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM - DEFINE OPENSSL_FLAGS_AARCH64 = -DBSAES_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DOPENSSL_SM3_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM + DEFINE OPENSSL_FLAGS_AARCH64 = -DBSAES_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM # # VALID_ARCHITECTURES = IA32 X64 AARCH64 @@ -76,6 +76,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -182,7 +183,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -215,7 +216,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -248,7 +248,6 @@ $(OPENSSL_PATH)/crypto/ec/ec_lib.c $(OPENSSL_PATH)/crypto/ec/ec_mult.c $(OPENSSL_PATH)/crypto/ec/ec_oct.c - $(OPENSSL_PATH)/crypto/ec/ec_pmeth.c $(OPENSSL_PATH)/crypto/ec/ec_print.c $(OPENSSL_PATH)/crypto/ec/ecdh_kdf.c $(OPENSSL_PATH)/crypto/ec/ecdh_ossl.c @@ -281,10 +280,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -309,6 +306,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -318,6 +317,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -369,6 +369,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -397,7 +399,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -415,6 +416,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -505,7 +507,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -520,6 +521,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -643,10 +645,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -656,6 +663,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -679,9 +687,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -717,7 +725,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_ec_key.c $(OPENSSL_PATH)/providers/common/der/der_ec_sig.c $(OPENSSL_PATH)/providers/common/der/der_ecx_key.c @@ -736,8 +743,13 @@ $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ec_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ecx_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -773,7 +785,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -831,6 +842,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -937,7 +949,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -972,7 +984,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -1005,7 +1016,6 @@ $(OPENSSL_PATH)/crypto/ec/ec_lib.c $(OPENSSL_PATH)/crypto/ec/ec_mult.c $(OPENSSL_PATH)/crypto/ec/ec_oct.c - $(OPENSSL_PATH)/crypto/ec/ec_pmeth.c $(OPENSSL_PATH)/crypto/ec/ec_print.c $(OPENSSL_PATH)/crypto/ec/ecdh_kdf.c $(OPENSSL_PATH)/crypto/ec/ecdh_ossl.c @@ -1038,10 +1048,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -1066,6 +1074,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -1075,6 +1085,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -1126,6 +1137,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -1154,7 +1167,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -1172,6 +1184,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -1262,7 +1275,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -1276,6 +1288,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -1399,10 +1412,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -1412,6 +1430,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -1435,9 +1454,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -1473,7 +1492,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_ec_key.c $(OPENSSL_PATH)/providers/common/der/der_ec_sig.c $(OPENSSL_PATH)/providers/common/der/der_ecx_key.c @@ -1492,8 +1510,13 @@ $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ec_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ecx_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -1529,7 +1552,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -1543,6 +1565,7 @@ $(OPENSSL_PATH)/ssl/statem/statem_clnt.c $(OPENSSL_PATH)/ssl/statem/statem_dtls.c $(OPENSSL_PATH)/ssl/statem/statem_lib.c + $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aes-cfb-avx512.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aes-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aesni-mb-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aesni-sha1-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1562,6 +1585,7 @@ $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha256-mb-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha256-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/sha/sha512-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aes-cfb-avx512.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aes-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aesni-mb-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aesni-sha1-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1609,6 +1633,7 @@ $(OPENSSL_PATH)/crypto/asn1/a_strex.c $(OPENSSL_PATH)/crypto/asn1/a_strnid.c $(OPENSSL_PATH)/crypto/asn1/a_time.c + $(OPENSSL_PATH)/crypto/asn1/a_time_posix.c $(OPENSSL_PATH)/crypto/asn1/a_type.c $(OPENSSL_PATH)/crypto/asn1/a_utctm.c $(OPENSSL_PATH)/crypto/asn1/a_utf8.c @@ -1716,7 +1741,7 @@ $(OPENSSL_PATH)/crypto/bn/bn_print.c $(OPENSSL_PATH)/crypto/bn/bn_rand.c $(OPENSSL_PATH)/crypto/bn/bn_recp.c - $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_4.c + $(OPENSSL_PATH)/crypto/bn/bn_rsa_fips186_5.c $(OPENSSL_PATH)/crypto/bn/bn_shift.c $(OPENSSL_PATH)/crypto/bn/bn_sqr.c $(OPENSSL_PATH)/crypto/bn/bn_sqrt.c @@ -1749,7 +1774,6 @@ $(OPENSSL_PATH)/crypto/dh/dh_key.c $(OPENSSL_PATH)/crypto/dh/dh_lib.c $(OPENSSL_PATH)/crypto/dh/dh_meth.c - $(OPENSSL_PATH)/crypto/dh/dh_pmeth.c $(OPENSSL_PATH)/crypto/dh/dh_prn.c $(OPENSSL_PATH)/crypto/dh/dh_rfc5114.c $(OPENSSL_PATH)/crypto/dso/dso_dl.c @@ -1782,7 +1806,6 @@ $(OPENSSL_PATH)/crypto/ec/ec_lib.c $(OPENSSL_PATH)/crypto/ec/ec_mult.c $(OPENSSL_PATH)/crypto/ec/ec_oct.c - $(OPENSSL_PATH)/crypto/ec/ec_pmeth.c $(OPENSSL_PATH)/crypto/ec/ec_print.c $(OPENSSL_PATH)/crypto/ec/ecdh_kdf.c $(OPENSSL_PATH)/crypto/ec/ecdh_ossl.c @@ -1815,10 +1838,8 @@ $(OPENSSL_PATH)/crypto/evp/bio_b64.c $(OPENSSL_PATH)/crypto/evp/bio_enc.c $(OPENSSL_PATH)/crypto/evp/bio_md.c - $(OPENSSL_PATH)/crypto/evp/bio_ok.c $(OPENSSL_PATH)/crypto/evp/c_allc.c $(OPENSSL_PATH)/crypto/evp/c_alld.c - $(OPENSSL_PATH)/crypto/evp/cmeth_lib.c $(OPENSSL_PATH)/crypto/evp/ctrl_params_translate.c $(OPENSSL_PATH)/crypto/evp/dh_ctrl.c $(OPENSSL_PATH)/crypto/evp/dh_support.c @@ -1843,6 +1864,8 @@ $(OPENSSL_PATH)/crypto/evp/e_xcbc_d.c $(OPENSSL_PATH)/crypto/evp/ec_ctrl.c $(OPENSSL_PATH)/crypto/evp/ec_support.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_avx2.c + $(OPENSSL_PATH)/crypto/evp/enc_b64_scalar.c $(OPENSSL_PATH)/crypto/evp/encode.c $(OPENSSL_PATH)/crypto/evp/evp_cnf.c $(OPENSSL_PATH)/crypto/evp/evp_enc.c @@ -1852,6 +1875,7 @@ $(OPENSSL_PATH)/crypto/evp/evp_lib.c $(OPENSSL_PATH)/crypto/evp/evp_pbe.c $(OPENSSL_PATH)/crypto/evp/evp_pkey.c + $(OPENSSL_PATH)/crypto/evp/evp_pkey_type.c $(OPENSSL_PATH)/crypto/evp/evp_rand.c $(OPENSSL_PATH)/crypto/evp/evp_utils.c $(OPENSSL_PATH)/crypto/evp/exchange.c @@ -1903,6 +1927,8 @@ $(OPENSSL_PATH)/crypto/kdf/kdf_err.c $(OPENSSL_PATH)/crypto/lhash/lh_stats.c $(OPENSSL_PATH)/crypto/lhash/lhash.c + $(OPENSSL_PATH)/crypto/aligned_alloc.c + $(OPENSSL_PATH)/crypto/array_alloc.c $(OPENSSL_PATH)/crypto/asn1_dsa.c $(OPENSSL_PATH)/crypto/bsearch.c $(OPENSSL_PATH)/crypto/comp_methods.c @@ -1931,7 +1957,6 @@ $(OPENSSL_PATH)/crypto/o_fopen.c $(OPENSSL_PATH)/crypto/o_init.c $(OPENSSL_PATH)/crypto/o_str.c - $(OPENSSL_PATH)/crypto/o_time.c $(OPENSSL_PATH)/crypto/packet.c $(OPENSSL_PATH)/crypto/param_build.c $(OPENSSL_PATH)/crypto/param_build_set.c @@ -1949,6 +1974,7 @@ $(OPENSSL_PATH)/crypto/sleep.c $(OPENSSL_PATH)/crypto/sparse_array.c $(OPENSSL_PATH)/crypto/ssl_err.c + $(OPENSSL_PATH)/crypto/threads_common.c $(OPENSSL_PATH)/crypto/threads_lib.c $(OPENSSL_PATH)/crypto/threads_none.c $(OPENSSL_PATH)/crypto/threads_pthread.c @@ -2039,7 +2065,6 @@ $(OPENSSL_PATH)/crypto/rsa/rsa_oaep.c $(OPENSSL_PATH)/crypto/rsa/rsa_ossl.c $(OPENSSL_PATH)/crypto/rsa/rsa_pk1.c - $(OPENSSL_PATH)/crypto/rsa/rsa_pmeth.c $(OPENSSL_PATH)/crypto/rsa/rsa_prn.c $(OPENSSL_PATH)/crypto/rsa/rsa_pss.c $(OPENSSL_PATH)/crypto/rsa/rsa_saos.c @@ -2053,6 +2078,7 @@ $(OPENSSL_PATH)/crypto/sha/sha1dgst.c $(OPENSSL_PATH)/crypto/sha/sha256.c $(OPENSSL_PATH)/crypto/sha/sha3.c + $(OPENSSL_PATH)/crypto/sha/sha3_encode.c $(OPENSSL_PATH)/crypto/sha/sha512.c $(OPENSSL_PATH)/crypto/sm3/legacy_sm3.c $(OPENSSL_PATH)/crypto/sm3/sm3.c @@ -2176,10 +2202,15 @@ $(OPENSSL_PATH)/providers/implementations/asymciphers/rsa_enc.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_etm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha512_etm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha_etm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_ccm_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_cfb_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_gcm_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_hw.c @@ -2189,6 +2220,7 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c + $(OPENSSL_PATH)/providers/implementations/digests/cshake_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c $(OPENSSL_PATH)/providers/implementations/digests/md5_sha1_prov.c $(OPENSSL_PATH)/providers/implementations/digests/null_prov.c @@ -2212,9 +2244,9 @@ $(OPENSSL_PATH)/providers/implementations/kdfs/kbkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/krb5kdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2.c - $(OPENSSL_PATH)/providers/implementations/kdfs/pbkdf2_fips.c $(OPENSSL_PATH)/providers/implementations/kdfs/pkcs12kdf.c - $(OPENSSL_PATH)/providers/implementations/kdfs/scrypt.c + $(OPENSSL_PATH)/providers/implementations/kdfs/snmpkdf.c + $(OPENSSL_PATH)/providers/implementations/kdfs/srtpkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sshkdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/sskdf.c $(OPENSSL_PATH)/providers/implementations/kdfs/tls1_prf.c @@ -2250,7 +2282,6 @@ $(OPENSSL_PATH)/providers/implementations/skeymgmt/aes_skmgmt.c $(OPENSSL_PATH)/providers/implementations/skeymgmt/generic.c $(OPENSSL_PATH)/ssl/record/methods/ssl3_cbc.c - $(OPENSSL_GEN_PATH)/crypto/params_idx.c $(OPENSSL_PATH)/providers/common/der/der_ec_key.c $(OPENSSL_PATH)/providers/common/der/der_ec_sig.c $(OPENSSL_PATH)/providers/common/der/der_ecx_key.c @@ -2269,8 +2300,13 @@ $(OPENSSL_GEN_PATH)/providers/common/der/der_digests_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ec_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_ecx_gen.c + $(OPENSSL_GEN_PATH)/providers/common/der/der_hkdf_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_rsa_gen.c $(OPENSSL_GEN_PATH)/providers/common/der/der_wrap_gen.c + $(OPENSSL_PATH)/ssl/ech/ech_helper.c + $(OPENSSL_PATH)/ssl/ech/ech_internal.c + $(OPENSSL_PATH)/ssl/ech/ech_ssl_apis.c + $(OPENSSL_PATH)/ssl/ech/ech_store.c $(OPENSSL_PATH)/ssl/bio_ssl.c $(OPENSSL_PATH)/ssl/d1_lib.c $(OPENSSL_PATH)/ssl/d1_msg.c @@ -2306,7 +2342,6 @@ $(OPENSSL_PATH)/ssl/record/rec_layer_d1.c $(OPENSSL_PATH)/ssl/record/rec_layer_s3.c $(OPENSSL_PATH)/ssl/record/methods/dtls_meth.c - $(OPENSSL_PATH)/ssl/record/methods/ssl3_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls13_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls1_meth.c $(OPENSSL_PATH)/ssl/record/methods/tls_common.c @@ -2320,6 +2355,9 @@ $(OPENSSL_PATH)/ssl/statem/statem_clnt.c $(OPENSSL_PATH)/ssl/statem/statem_dtls.c $(OPENSSL_PATH)/ssl/statem/statem_lib.c + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha1-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha256-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aes-sha512-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/aesv8-armx.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/bsaes-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/aes/vpaes-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe @@ -2332,7 +2370,9 @@ $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha1-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha256-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sha/sha512-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe - $(OPENSSL_GEN_PATH)/AARCH64-ELF/crypto/sm3/sm3-armv8.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha1-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha256-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe + $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aes-sha512-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/aesv8-armx.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/bsaes-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/aes/vpaes-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe @@ -2345,7 +2385,6 @@ $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha1-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha256-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sha/sha512-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe - $(OPENSSL_GEN_PATH)/AARCH64-PE/crypto/sm3/sm3-armv8.S ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStylePe # Autogenerated files list ends here [Packages] From 5f05563c4509b3a68a073a875c50fb1000b9b8ac Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:18:58 -0700 Subject: [PATCH 14/18] OpensslPkg: Add OpensslGen root to package include paths Add Library/OpensslLib/OpensslGen as a package include path in OpensslPkg.dec. OpenSSL 4.0 introduces .inc files generated from .inc.in templates that are included by provider source files using paths relative to the build root. The OpensslGen directory must be in the include search path to resolve these references. Signed-off-by: Doug Flick --- OpensslPkg/OpensslPkg.dec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OpensslPkg/OpensslPkg.dec b/OpensslPkg/OpensslPkg.dec index 6cc02af9e..06cdb9879 100644 --- a/OpensslPkg/OpensslPkg.dec +++ b/OpensslPkg/OpensslPkg.dec @@ -19,13 +19,14 @@ [Includes.Common.Private] Private Library/Include + Library/OpensslLib/OpensslGen + Library/OpensslLib/OpensslGen/include + Library/OpensslLib/OpensslGen/providers/common/include Library/OpensslLib/openssl Library/OpensslLib/openssl/include Library/OpensslLib/openssl/providers/common/include Library/OpensslLib/openssl/providers/fips/include Library/OpensslLib/openssl/providers/implementations/include - Library/OpensslLib/OpensslGen/include - Library/OpensslLib/OpensslGen/providers/common/include [LibraryClasses.Common.Private] ## @libraryclass Provides library functions from the openssl project. From 0b0acfa08cba18cc7290cff9d2bd6c399c274b16 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:19:22 -0700 Subject: [PATCH 15/18] OpensslPkg: Add CRT compat macros for OpenSSL 4.0 Add va_copy, vsnprintf, INT64_C, UINT64_C, INT32_C, and UINT32_C macros to CrtLibSupport.h. These are required by OpenSSL 4.0 source files that were not needed in previous versions. Signed-off-by: Doug Flick --- OpensslPkg/Library/Include/CrtLibSupport.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/OpensslPkg/Library/Include/CrtLibSupport.h b/OpensslPkg/Library/Include/CrtLibSupport.h index 613d41849..420e7551b 100644 --- a/OpensslPkg/Library/Include/CrtLibSupport.h +++ b/OpensslPkg/Library/Include/CrtLibSupport.h @@ -58,6 +58,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define va_arg VA_ARG #define va_start VA_START #define va_end VA_END +#define va_copy VA_COPY // // Definitions for global constants used by CRT library routines @@ -444,6 +445,7 @@ strpbrk ( #define strcasecmp(str1, str2) (int)AsciiStriCmp(str1,str2) #define strstr(s1, s2) AsciiStrStr(s1,s2) #define sprintf(buf, ...) AsciiSPrint(buf,MAX_STRING_SIZE,__VA_ARGS__) +#define vsnprintf(buf, size, fmt, args) (int)AsciiVSPrint(buf,(UINTN)(size),fmt,args) #define localtime(timer) NULL #define assert(expression) #define offsetof(type, member) OFFSET_OF(type,member) @@ -465,6 +467,19 @@ strpbrk ( #define INT64_MIN (-0x7FFFFFFFFFFFFFFFL - 1) #endif +#ifndef INT64_C +#define INT64_C(c) (c##LL) +#endif +#ifndef UINT64_C +#define UINT64_C(c) (c##ULL) +#endif +#ifndef INT32_C +#define INT32_C(c) (c) +#endif +#ifndef UINT32_C +#define UINT32_C(c) (c##U) +#endif + #ifndef INT16_MAX #define INT16_MIN (-32768) #define INT16_MAX (32767) From a2486183a6f634f4c84124f1461b597dc39f26b1 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:19:46 -0700 Subject: [PATCH 16/18] OpensslPkg: Update BaseCryptLib for OpenSSL 4.0 API changes Replace direct struct member access with OpenSSL accessor functions for ASN1_STRING, ASN1_TYPE, and ASN1_OBJECT types. OpenSSL 4.0 makes these struct fields opaque, requiring use of ASN1_STRING_get0_data(), ASN1_STRING_length(), ASN1_STRING_type(), OBJ_get0_data(), and OBJ_length(). Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/Pk/CryptAuthenticode.c | 2 +- .../Library/BaseCryptLib/Pk/CryptPkcs7VerifyBase.c | 6 +++--- .../Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c | 4 ++-- OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptAuthenticode.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptAuthenticode.c index ff1e05988..0609dd5d7 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptAuthenticode.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptAuthenticode.c @@ -127,7 +127,7 @@ AuthenticodeVerify ( goto _Exit; } - SpcIndirectDataContent = (UINT8 *)(Pkcs7->d.sign->contents->d.other->value.asn1_string->data); + SpcIndirectDataContent = (UINT8 *)ASN1_STRING_get0_data (Pkcs7->d.sign->contents->d.other->value.asn1_string); // // Retrieve the SEQUENCE data size from ASN.1-encoded SpcIndirectDataContent. diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyBase.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyBase.c index aac98ae4f..254a4d372 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyBase.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyBase.c @@ -165,15 +165,15 @@ Pkcs7GetAttachedContent ( goto _Exit; } - if ((OctStr->length > 0) && (OctStr->data != NULL)) { - *ContentSize = OctStr->length; + if ((ASN1_STRING_length (OctStr) > 0) && (ASN1_STRING_get0_data (OctStr) != NULL)) { + *ContentSize = ASN1_STRING_length (OctStr); *Content = AllocatePool (*ContentSize); if (*Content == NULL) { *ContentSize = 0; goto _Exit; } - CopyMem (*Content, OctStr->data, *ContentSize); + CopyMem (*Content, ASN1_STRING_get0_data (OctStr), *ContentSize); } } diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c index 63cd49434..25604780a 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c @@ -217,8 +217,8 @@ IsEkuInCertificate ( goto Exit; } - if ((Asn1InCert->length == Asn1ToFind->length) && - (CompareMem (Asn1InCert->data, Asn1ToFind->data, Asn1InCert->length) == 0)) + if ((OBJ_length (Asn1InCert) == OBJ_length (Asn1ToFind)) && + (CompareMem (OBJ_get0_data (Asn1InCert), OBJ_get0_data (Asn1ToFind), OBJ_length (Asn1InCert)) == 0)) { // // Found Eku in certificate. diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c index 71519cc32..5638c2c6c 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c @@ -171,18 +171,18 @@ ConvertAsn1TimeToEfiTime ( return FALSE; } - Str = (CONST CHAR8 *)Asn1Time->data; + Str = (CONST CHAR8 *)ASN1_STRING_get0_data (Asn1Time); SetMem (EfiTime, sizeof (EFI_TIME), 0); Index = 0; - if (Asn1Time->type == V_ASN1_UTCTIME) { + if (ASN1_STRING_type (Asn1Time) == V_ASN1_UTCTIME) { /* two digit year */ EfiTime->Year = (Str[Index++] - '0') * 10; EfiTime->Year += (Str[Index++] - '0'); if (EfiTime->Year < 70) { EfiTime->Year += 100; } - } else if (Asn1Time->type == V_ASN1_GENERALIZEDTIME) { + } else if (ASN1_STRING_type (Asn1Time) == V_ASN1_GENERALIZEDTIME) { /* four digit year */ EfiTime->Year = (Str[Index++] - '0') * 1000; EfiTime->Year += (Str[Index++] - '0') * 100; @@ -679,8 +679,8 @@ ImageTimestampVerify ( goto _Exit; } - TSToken = Asn1Type->value.octet_string->data; - TokenSize = Asn1Type->value.octet_string->length; + TSToken = (UINT8 *)ASN1_STRING_get0_data (Asn1Type->value.octet_string); + TokenSize = ASN1_STRING_length (Asn1Type->value.octet_string); // // TimeStamp counterSignature (Token) verification. @@ -690,8 +690,8 @@ ImageTimestampVerify ( TokenSize, TsaCert, CertSize, - EncDigest->data, - EncDigest->length, + ASN1_STRING_get0_data (EncDigest), + ASN1_STRING_length (EncDigest), SigningTime ); From 4d6955c15c17b0c30ff841306dbd6686fdb331c7 Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Thu, 26 Mar 2026 11:20:09 -0700 Subject: [PATCH 17/18] OpensslPkg: Update stubs for OpenSSL 4.0 API changes Add null stubs for tls_parse_ctos_ech() and tls_construct_stoc_ech() in SslExtServNull.c for the new Encrypted Client Hello (ECH) extension in OpenSSL 4.0. Update tls_construct_cert_status_body() signature in SslStatServNull.c to include the new OCSP_RESPONSE parameter. Update OSSL_STORE_SEARCH_by_name() in ossl_store.c to use const X509_NAME parameter matching the OpenSSL 4.0 API. Signed-off-by: Doug Flick --- .../BaseCryptLib/Pk/CryptPkcs7VerifyCommon.c | 20 ++++----- .../BaseCryptLib/Pk/CryptPkcs7VerifyEku.c | 16 +++---- OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c | 4 +- .../Library/BaseCryptLib/Pk/CryptX509.c | 44 +++++++++---------- .../OpensslLib/OpensslStub/SslExtServNull.c | 24 ++++++++++ .../OpensslLib/OpensslStub/SslStatServNull.c | 1 + .../OpensslLib/OpensslStub/ossl_store.c | 2 +- 7 files changed, 68 insertions(+), 43 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyCommon.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyCommon.c index 7dff25b77..dce8ab62c 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyCommon.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyCommon.c @@ -477,16 +477,16 @@ Pkcs7GetCertificatesList ( X509 *CtxCert; STACK_OF (X509) *Signers; - X509 *Signer; - X509 *Cert; - X509 *Issuer; - X509_NAME *IssuerName; - UINT8 *CertBuf; - UINT8 *OldBuf; - UINTN BufferSize; - UINTN OldSize; - UINT8 *SingleCert; - UINTN CertSize; + X509 *Signer; + X509 *Cert; + X509 *Issuer; + CONST X509_NAME *IssuerName; + UINT8 *CertBuf; + UINT8 *OldBuf; + UINTN BufferSize; + UINTN OldSize; + UINT8 *SingleCert; + UINTN CertSize; // // Initializations diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c index 25604780a..b41396831 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptPkcs7VerifyEku.c @@ -140,14 +140,14 @@ IsEkuInCertificate ( IN ASN1_OBJECT *Asn1ToFind ) { - EFI_STATUS Status; - X509 *ClonedCert; - X509_EXTENSION *Extension; - EXTENDED_KEY_USAGE *Eku; - INT32 ExtensionIndex; - INTN NumExtensions; - ASN1_OBJECT *Asn1InCert; - INTN Index; + EFI_STATUS Status; + X509 *ClonedCert; + CONST X509_EXTENSION *Extension; + EXTENDED_KEY_USAGE *Eku; + INT32 ExtensionIndex; + INTN NumExtensions; + ASN1_OBJECT *Asn1InCert; + INTN Index; Status = EFI_NOT_FOUND; ClonedCert = NULL; diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c index 5638c2c6c..17243526d 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c @@ -573,8 +573,8 @@ ImageTimestampVerify ( STACK_OF (X509_ATTRIBUTE) *Sk; X509_ATTRIBUTE *Xa; - ASN1_OBJECT *XaObj; - ASN1_TYPE *Asn1Type; + CONST ASN1_OBJECT *XaObj; + CONST ASN1_TYPE *Asn1Type; ASN1_OCTET_STRING *EncDigest; UINT8 *TSToken; UINTN TokenSize; diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c index 64e6f87f2..2f32ce8e0 100644 --- a/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c +++ b/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c @@ -287,10 +287,10 @@ X509GetSubjectName ( IN OUT UINTN *SubjectSize ) { - BOOLEAN Status; - X509 *X509Cert; - X509_NAME *X509Name; - UINTN X509NameSize; + BOOLEAN Status; + X509 *X509Cert; + CONST X509_NAME *X509Name; + UINTN X509NameSize; // // Check input parameters. @@ -380,15 +380,15 @@ InternalX509GetNIDName ( IN OUT UINTN *CommonNameSize ) { - RETURN_STATUS ReturnStatus; - BOOLEAN Status; - X509 *X509Cert; - X509_NAME *X509Name; - INT32 Index; - INTN Length; - X509_NAME_ENTRY *Entry; - ASN1_STRING *EntryData; - UINT8 *UTF8Name; + RETURN_STATUS ReturnStatus; + BOOLEAN Status; + X509 *X509Cert; + CONST X509_NAME *X509Name; + INT32 Index; + INTN Length; + CONST X509_NAME_ENTRY *Entry; + CONST ASN1_STRING *EntryData; + UINT8 *UTF8Name; ReturnStatus = RETURN_INVALID_PARAMETER; UTF8Name = NULL; @@ -1176,10 +1176,10 @@ X509GetIssuerName ( IN OUT UINTN *CertIssuerSize ) { - BOOLEAN Status; - X509 *X509Cert; - X509_NAME *X509Name; - UINTN X509NameSize; + BOOLEAN Status; + X509 *X509Cert; + CONST X509_NAME *X509Name; + UINTN X509NameSize; // // Check input parameters. @@ -1360,11 +1360,11 @@ X509GetExtensionData ( X509 *X509Cert; CONST STACK_OF (X509_EXTENSION) *Extensions; - ASN1_OBJECT *Asn1Obj; - ASN1_OCTET_STRING *Asn1Oct; - X509_EXTENSION *Ext; - UINTN ObjLength; - UINTN OctLength; + CONST ASN1_OBJECT *Asn1Obj; + CONST ASN1_OCTET_STRING *Asn1Oct; + CONST X509_EXTENSION *Ext; + UINTN ObjLength; + UINTN OctLength; // // Check input parameters. diff --git a/OpensslPkg/Library/OpensslLib/OpensslStub/SslExtServNull.c b/OpensslPkg/Library/OpensslLib/OpensslStub/SslExtServNull.c index edd8d556a..5bf4be1f8 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslStub/SslExtServNull.c +++ b/OpensslPkg/Library/OpensslLib/OpensslStub/SslExtServNull.c @@ -563,3 +563,27 @@ tls_parse_ctos_server_cert_type ( { return 0; } + +int +tls_parse_ctos_ech ( + SSL_CONNECTION *s, + PACKET *pkt, + unsigned int context, + X509 *x, + size_t chainidx + ) +{ + return 0; +} + +EXT_RETURN +tls_construct_stoc_ech ( + SSL_CONNECTION *s, + WPACKET *pkt, + unsigned int context, + X509 *x, + size_t chainidx + ) +{ + return EXT_RETURN_NOT_SENT; +} diff --git a/OpensslPkg/Library/OpensslLib/OpensslStub/SslStatServNull.c b/OpensslPkg/Library/OpensslLib/OpensslStub/SslStatServNull.c index 82a95f50d..59dad27e8 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslStub/SslStatServNull.c +++ b/OpensslPkg/Library/OpensslLib/OpensslStub/SslStatServNull.c @@ -263,6 +263,7 @@ tls_construct_new_session_ticket ( int tls_construct_cert_status_body ( SSL_CONNECTION *s, + OCSP_RESPONSE *resp, WPACKET *pkt ) { diff --git a/OpensslPkg/Library/OpensslLib/OpensslStub/ossl_store.c b/OpensslPkg/Library/OpensslLib/OpensslStub/ossl_store.c index f1e1b8b60..9c1206772 100644 --- a/OpensslPkg/Library/OpensslLib/OpensslStub/ossl_store.c +++ b/OpensslPkg/Library/OpensslLib/OpensslStub/ossl_store.c @@ -161,7 +161,7 @@ OSSL_STORE_INFO_free ( OSSL_STORE_SEARCH * OSSL_STORE_SEARCH_by_name ( - X509_NAME *name + const X509_NAME *name ) { return NULL; From a60ea5ffaa8756e8019e7559046add576ed7b63f Mon Sep 17 00:00:00 2001 From: Doug Flick Date: Sun, 5 Apr 2026 23:11:01 -0700 Subject: [PATCH 18/18] OpensslPkg: Add C-compatible vsnprintf and sprintf wrappers Replace the vsnprintf and sprintf macros in CrtLibSupport.h with proper function implementations that translate standard C format specifiers to EDK2 BasePrintLib equivalents. OpenSSL 4.0 error reporting calls BIO_vsnprintf with C %s (ASCII string), but EDK2 BasePrintLib treats %s as Unicode, causing a segfault in the host unit tests. The new TranslateFormatSpecifiers helper converts C %s to EDK2 %a before calling AsciiVSPrint. Signed-off-by: Doug Flick --- .../Library/BaseCryptLib/SysCall/CrtWrapper.c | 92 +++++++++++++++++++ OpensslPkg/Library/Include/CrtLibSupport.h | 23 ++++- 2 files changed, 110 insertions(+), 5 deletions(-) diff --git a/OpensslPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c b/OpensslPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c index 8a8fdfefc..418b2b85c 100644 --- a/OpensslPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c +++ b/OpensslPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c @@ -651,3 +651,95 @@ printf ( { return 0; } + +// +// OpenSSL uses standard C format specifiers (%s for ASCII strings), +// but EDK2 BasePrintLib uses %a for ASCII and %s for Unicode. +// Translate %s -> %a and %S -> %s before calling AsciiVSPrint. +// +STATIC +VOID +TranslateFormatSpecifiers ( + OUT CHAR8 *Dest, + IN UINTN DestSize, + IN CONST CHAR8 *Src + ) +{ + UINTN Index; + + Index = 0; + while ((*Src != '\0') && (Index < DestSize - 1)) { + if (*Src == '%') { + Dest[Index++] = *Src++; + if (Index >= DestSize - 1) { + break; + } + + // + // Skip flags, width, precision, and length modifiers + // + while ((*Src == '-') || (*Src == '+') || (*Src == ' ') || + (*Src == '#') || (*Src == '0') || + ((*Src >= '1') && (*Src <= '9')) || (*Src == '.') || + (*Src == 'l') || (*Src == 'h') || (*Src == 'z') || + (*Src == 'j') || (*Src == 't') || (*Src == 'L') || + (*Src == '*')) + { + Dest[Index++] = *Src++; + if (Index >= DestSize - 1) { + break; + } + } + + if (Index >= DestSize - 1) { + break; + } + + // + // Translate the conversion specifier: + // C %s (ASCII) -> EDK2 %a + // C %S (wide) -> EDK2 %s + // + if (*Src == 's') { + Dest[Index++] = 'a'; + Src++; + } else { + Dest[Index++] = *Src++; + } + } else { + Dest[Index++] = *Src++; + } + } + + Dest[Index] = '\0'; +} + +int +vsnprintf ( + char *buf, + size_t size, + const char *fmt, + va_list args + ) +{ + CHAR8 TranslatedFmt[512]; + + TranslateFormatSpecifiers (TranslatedFmt, sizeof (TranslatedFmt), fmt); + return (int)AsciiVSPrint (buf, (UINTN)size, TranslatedFmt, args); +} + +int +sprintf ( + char *buf, + const char *fmt, + ... + ) +{ + VA_LIST Args; + int Ret; + + VA_START (Args, fmt); + Ret = vsnprintf (buf, MAX_STRING_SIZE, fmt, Args); + VA_END (Args); + return Ret; +} diff --git a/OpensslPkg/Library/Include/CrtLibSupport.h b/OpensslPkg/Library/Include/CrtLibSupport.h index 420e7551b..cf4fc19eb 100644 --- a/OpensslPkg/Library/Include/CrtLibSupport.h +++ b/OpensslPkg/Library/Include/CrtLibSupport.h @@ -444,9 +444,22 @@ strpbrk ( #define strncmp(string1, string2, count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count))) #define strcasecmp(str1, str2) (int)AsciiStriCmp(str1,str2) #define strstr(s1, s2) AsciiStrStr(s1,s2) -#define sprintf(buf, ...) AsciiSPrint(buf,MAX_STRING_SIZE,__VA_ARGS__) -#define vsnprintf(buf, size, fmt, args) (int)AsciiVSPrint(buf,(UINTN)(size),fmt,args) -#define localtime(timer) NULL +int +sprintf ( + char *buf, + const char *fmt, + ... + ); + +int +vsnprintf ( + char *buf, + size_t size, + const char *fmt, + va_list args + ); + +#define localtime(timer) NULL #define assert(expression) #define offsetof(type, member) OFFSET_OF(type,member) #define atoi(nptr) AsciiStrDecimalToUintn(nptr) @@ -468,13 +481,13 @@ strpbrk ( #endif #ifndef INT64_C -#define INT64_C(c) (c##LL) +#define INT64_C(c) (c##LL) #endif #ifndef UINT64_C #define UINT64_C(c) (c##ULL) #endif #ifndef INT32_C -#define INT32_C(c) (c) +#define INT32_C(c) (c) #endif #ifndef UINT32_C #define UINT32_C(c) (c##U)