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 } 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 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; 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/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] } 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_ 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/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/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 63cd49434..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; @@ -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/CryptRsaBasic.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptRsaBasic.c index 56df73e64..f2c3292d9 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,277 @@ 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) { + goto Fail; // MU_CHANGE + } + + if (EVP_PKEY_get_bn_param (Pkey, OSSL_PKEY_PARAM_RSA_E, &RsaPkeyCtx->E) != 1) { + goto Fail; // MU_CHANGE + } + + // + // 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; + // 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] +} + +/** + 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 +307,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 +324,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 cached EVP_PKEY. // MU_CHANGE + // + // MU_CHANGE [BEGIN] + if (RsaPkeyCtx->Pkey != NULL) { + EVP_PKEY_free (RsaPkeyCtx->Pkey); + } + // - // Free OpenSSL RSA Context + // Free public components. + // + BN_free (RsaPkeyCtx->N); + BN_free (RsaPkeyCtx->E); + // - RSA_free ((RSA *)RsaContext); + // 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 +393,11 @@ 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 +406,91 @@ 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; - } + // MU_CHANGE [BEGIN] + BnTarget = &RsaPkeyCtx->QInv; + break; + default: + return FALSE; + } - if (BnQInv == NULL) { - BnQInv = BN_new (); - AllocatedBn[2] = BnQInv; - } + // MU_CHANGE [END] - if ((BnDp == NULL) || (BnDq == NULL) || (BnQInv == NULL)) { - 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] } - 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 = NULL; + } - if (RSA_set0_crt_params (RsaKey, BN_dup (BnDp), BN_dup (BnDq), BN_dup (BnQInv)) == 0) { - return FALSE; - } + // MU_CHANGE [END] - BN_clear_free (AllocatedBn[0]); - BN_clear_free (AllocatedBn[1]); - BN_clear_free (AllocatedBn[2]); + // MU_CHANGE [BEGIN] + return TRUE; + } - break; + // 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 +525,14 @@ 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 +547,65 @@ 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; + } - case SHA1_DIGEST_SIZE: - DigestType = NID_sha1; - break; + // MU_CHANGE [END] - case SHA256_DIGEST_SIZE: - DigestType = NID_sha256; - break; + // MU_CHANGE [BEGIN] + RsaPkeyCtx = (RSA_PKEY_CTX *)RsaContext; + Result = FALSE; + PkeyCtx = NULL; + // MU_CHANGE [END] - case SHA384_DIGEST_SIZE: - DigestType = NID_sha384; - break; + // MU_CHANGE [BEGIN] + // + // Build EVP_PKEY from stored key components. + // + Pkey = RsaBuildEvpPkey (RsaPkeyCtx); + if (Pkey == NULL) { + return FALSE; + } - case SHA512_DIGEST_SIZE: - DigestType = NID_sha512; - break; + // MU_CHANGE [END] - default: - return FALSE; + // MU_CHANGE [BEGIN] + PkeyCtx = EVP_PKEY_CTX_new_from_pkey (NULL, Pkey, NULL); + 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] + 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..8511334b6 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,49 @@ 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. @@ -32,7 +77,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent 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. @@ -54,9 +102,12 @@ 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 +116,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 +239,14 @@ 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 +255,93 @@ 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 (PublicExponent == NULL) { - if (BN_set_word (KeyE, 0x10001) == 0) { + if (EVP_PKEY_CTX_set_rsa_keygen_bits (KeyGenCtx, (INT32)ModulusLength) != 1) { + goto _Exit; + } + + // MU_CHANGE [END] + + // 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 +370,13 @@ 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 +385,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 +449,15 @@ 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 +466,86 @@ 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; + } - case SHA1_DIGEST_SIZE: - DigestType = NID_sha1; - break; + // MU_CHANGE [END] - case SHA256_DIGEST_SIZE: - DigestType = NID_sha256; - break; + // MU_CHANGE [BEGIN] + if (Signature == NULL) { + return FALSE; + } - case SHA384_DIGEST_SIZE: - DigestType = NID_sha384; - break; + // MU_CHANGE [END] - case SHA512_DIGEST_SIZE: - DigestType = NID_sha512; - break; + // MU_CHANGE [BEGIN] + PkeyCtx = EVP_PKEY_CTX_new_from_pkey (NULL, Pkey, NULL); + if (PkeyCtx == NULL) { + goto _Exit; + } - default: - return FALSE; + // 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] + 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_ 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; diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptTs.c index 71519cc32..17243526d 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; @@ -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; @@ -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 ); diff --git a/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c b/OpensslPkg/Library/BaseCryptLib/Pk/CryptX509.c index 25b7882a4..2f32ce8e0 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 } @@ -281,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. @@ -374,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; @@ -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: @@ -1111,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. @@ -1295,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/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 613d41849..cf4fc19eb 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 @@ -443,8 +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 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) @@ -465,6 +480,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) 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 */ 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] 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; 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 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 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.