mirror of https://github.com/openssl/openssl.git
Compare commits
8 Commits
64e9477727
...
faf154ff19
Author | SHA1 | Date |
---|---|---|
|
faf154ff19 | |
|
296f1f6dd8 | |
|
fd7fc90346 | |
|
fcb5e20ac7 | |
|
b9ff440dd6 | |
|
f77fafd16e | |
|
f12f8cc035 | |
|
2775bcb423 |
|
@ -93,7 +93,6 @@ EOF
|
|||
|
||||
my %cmd_disabler = (
|
||||
ciphers => "sock",
|
||||
genrsa => "rsa",
|
||||
gendsa => "dsa",
|
||||
dsaparam => "dsa",
|
||||
gendh => "dh",
|
||||
|
@ -107,7 +106,7 @@ EOF
|
|||
# [2] = preprocessor conditional for excluding irrespective of deprecation
|
||||
# rsa => [ "pkey", "3_0", "rsa" ],
|
||||
# genrsa => [ "genpkey", "3_0", "rsa" ],
|
||||
rsautl => [ "pkeyutl", "3_0", "rsa" ],
|
||||
rsautl => [ "pkeyutl", "3_0", "" ],
|
||||
# dhparam => [ "pkeyparam", "3_0", "dh" ],
|
||||
# dsaparam => [ "pkeyparam", "3_0", "dsa" ],
|
||||
# dsa => [ "pkey", "3_0", "dsa" ],
|
||||
|
|
|
@ -32,7 +32,7 @@ open OUT,"| \"$^X\" $xlate $flavour \"$output\""
|
|||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
# Theses are offsets into the CIPH_DIGEST struct
|
||||
// These are offsets into the CIPH_DIGEST struct
|
||||
#define CIPHER_KEY 0
|
||||
#define CIPHER_KEY_ROUNDS 8
|
||||
#define CIPHER_IV 16
|
||||
|
@ -149,68 +149,70 @@ ___
|
|||
}
|
||||
|
||||
$code.=<<___;
|
||||
# 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
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
.global asm_aescbc_sha1_hmac
|
||||
.type asm_aescbc_sha1_hmac,%function
|
||||
|
@ -2322,68 +2324,70 @@ $code.=<<___;
|
|||
|
||||
.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.
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
.global asm_sha1_hmac_aescbc_dec
|
||||
.type asm_sha1_hmac_aescbc_dec,%function
|
||||
|
|
|
@ -32,7 +32,7 @@ open OUT,"| \"$^X\" $xlate $flavour \"$output\""
|
|||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
# Theses are offsets into the CIPH_DIGEST struct
|
||||
// These are offsets into the CIPH_DIGEST struct
|
||||
#define CIPHER_KEY 0
|
||||
#define CIPHER_KEY_ROUNDS 8
|
||||
#define CIPHER_IV 16
|
||||
|
@ -149,67 +149,69 @@ ___
|
|||
}
|
||||
|
||||
$code.=<<___;
|
||||
# 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
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
.global asm_aescbc_sha256_hmac
|
||||
.type asm_aescbc_sha256_hmac,%function
|
||||
|
@ -2472,68 +2474,70 @@ $code.=<<___;
|
|||
|
||||
.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.
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
.global asm_sha256_hmac_aescbc_dec
|
||||
.type asm_sha256_hmac_aescbc_dec,%function
|
||||
|
|
|
@ -24,7 +24,7 @@ open OUT,"| \"$^X\" $xlate $flavour \"$output\""
|
|||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
# Theses are offsets into the CIPH_DIGEST struct
|
||||
// These are offsets into the CIPH_DIGEST struct
|
||||
#define CIPHER_KEY 0
|
||||
#define CIPHER_KEY_ROUNDS 8
|
||||
#define CIPHER_IV 16
|
||||
|
|
|
@ -261,10 +261,12 @@ int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
|
|||
|
||||
cipher = ctx->op.ciph.cipher;
|
||||
desc = cipher->description != NULL ? cipher->description : "";
|
||||
ERR_set_mark();
|
||||
ret = cipher->encrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
||||
"%s encrypt:%s", cipher->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
|
||||
legacy:
|
||||
|
@ -309,10 +311,12 @@ int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
|
|||
|
||||
cipher = ctx->op.ciph.cipher;
|
||||
desc = cipher->description != NULL ? cipher->description : "";
|
||||
ERR_set_mark();
|
||||
ret = cipher->decrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
||||
"%s decrypt:%s", cipher->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -460,10 +460,12 @@ void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ERR_set_mark();
|
||||
ret = keymgmt->gen(genctx, cb, cbarg);
|
||||
if (ret == NULL)
|
||||
if (ret == NULL && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_KEYMGMT_FAILURE,
|
||||
"%s key generation:%s", keymgmt->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -426,10 +426,12 @@ int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize)
|
|||
return 0;
|
||||
}
|
||||
|
||||
ERR_set_mark();
|
||||
ret = signature->digest_sign_update(pctx->op.sig.algctx, data, dsize);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_sign_update:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
|
||||
legacy:
|
||||
|
@ -474,10 +476,12 @@ int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize)
|
|||
return 0;
|
||||
}
|
||||
|
||||
ERR_set_mark();
|
||||
ret = signature->digest_verify_update(pctx->op.sig.algctx, data, dsize);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_verify_update:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
|
||||
legacy:
|
||||
|
@ -527,11 +531,13 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
|
|||
pctx = dctx;
|
||||
}
|
||||
|
||||
ERR_set_mark();
|
||||
r = signature->digest_sign_final(pctx->op.sig.algctx, sigret, siglen,
|
||||
sigret == NULL ? 0 : *siglen);
|
||||
if (!r)
|
||||
if (!r && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_sign_final:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
if (dctx == NULL && sigret != NULL)
|
||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||
else
|
||||
|
@ -638,11 +644,13 @@ int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,
|
|||
|
||||
if (sigret != NULL)
|
||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||
ERR_set_mark();
|
||||
ret = signature->digest_sign(pctx->op.sig.algctx, sigret, siglen,
|
||||
sigret == NULL ? 0 : *siglen, tbs, tbslen);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_sign:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
|
@ -693,10 +701,12 @@ int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
|
|||
pctx = dctx;
|
||||
}
|
||||
|
||||
ERR_set_mark();
|
||||
r = signature->digest_verify_final(pctx->op.sig.algctx, sig, siglen);
|
||||
if (!r)
|
||||
if (!r && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_verify_final:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
if (dctx == NULL)
|
||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||
else
|
||||
|
@ -769,10 +779,12 @@ int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
|
|||
int ret;
|
||||
|
||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||
ERR_set_mark();
|
||||
ret = signature->digest_verify(pctx->op.sig.algctx, sigret, siglen, tbs, tbslen);
|
||||
if (ret <= 0)
|
||||
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||
"%s digest_verify:%s", signature->type_name, desc);
|
||||
ERR_clear_last_mark();
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -2419,6 +2419,11 @@ static int core_pop_error_to_mark(const OSSL_CORE_HANDLE *handle)
|
|||
return ERR_pop_to_mark();
|
||||
}
|
||||
|
||||
static int core_count_to_mark(const OSSL_CORE_HANDLE *handle)
|
||||
{
|
||||
return ERR_count_to_mark();
|
||||
}
|
||||
|
||||
static void core_indicator_get_callback(OPENSSL_CORE_CTX *libctx,
|
||||
OSSL_INDICATOR_CALLBACK **cb)
|
||||
{
|
||||
|
@ -2600,6 +2605,7 @@ static const OSSL_DISPATCH core_dispatch_[] = {
|
|||
{ OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK,
|
||||
(void (*)(void))core_clear_last_error_mark },
|
||||
{ OSSL_FUNC_CORE_POP_ERROR_TO_MARK, (void (*)(void))core_pop_error_to_mark },
|
||||
{ OSSL_FUNC_CORE_COUNT_TO_MARK, (void (*)(void))core_count_to_mark },
|
||||
{ OSSL_FUNC_BIO_NEW_FILE, (void (*)(void))ossl_core_bio_new_file },
|
||||
{ OSSL_FUNC_BIO_NEW_MEMBUF, (void (*)(void))ossl_core_bio_new_mem_buf },
|
||||
{ OSSL_FUNC_BIO_READ_EX, (void (*)(void))ossl_core_bio_read_ex },
|
||||
|
|
|
@ -154,6 +154,10 @@ provider):
|
|||
core_new_error OSSL_FUNC_CORE_NEW_ERROR
|
||||
core_set_error_debug OSSL_FUNC_CORE_SET_ERROR_DEBUG
|
||||
core_vset_error OSSL_FUNC_CORE_VSET_ERROR
|
||||
core_set_error_mark OSSL_FUNC_CORE_SET_ERROR_MARK
|
||||
core_clear_last_error_mark OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK
|
||||
core_pop_error_to_mark OSSL_FUNC_CORE_POP_ERROR_TO_MARK
|
||||
core_count_to_mark OSSL_FUNC_CORE_COUNT_TO_MARK
|
||||
core_obj_add_sigid OSSL_FUNC_CORE_OBJ_ADD_SIGID
|
||||
core_obj_create OSSL_FUNC_CORE_OBJ_CREATE
|
||||
CRYPTO_malloc OSSL_FUNC_CRYPTO_MALLOC
|
||||
|
@ -270,6 +274,33 @@ error occurred or was reported.
|
|||
|
||||
This corresponds to the OpenSSL function L<ERR_vset_error(3)>.
|
||||
|
||||
=item core_set_error_mark()
|
||||
|
||||
sets a mark on the current topmost error record if there is one.
|
||||
|
||||
This corresponds to the OpenSSL function L<ERR_set_mark(3)>.
|
||||
|
||||
=item core_clear_last_error_mark()
|
||||
|
||||
removes the last mark added if there is one.
|
||||
|
||||
This corresponds to the OpenSSL function L<ERR_clear_last_mark(3)>.
|
||||
|
||||
=item core_pop_error_to_mark()
|
||||
|
||||
pops the top of the error stack until a mark is found. The mark is then removed.
|
||||
If there is no mark, the whole stack is removed.
|
||||
|
||||
This corresponds to the OpenSSL function L<ERR_pop_to_mark(3)>.
|
||||
|
||||
=item core_count_to_mark()
|
||||
|
||||
returns the number of entries on the error stack above the most recently
|
||||
marked entry, not including that entry. If there is no mark in the error stack,
|
||||
the number of entries in the error stack is returned.
|
||||
|
||||
This corresponds to the OpenSSL function L<ERR_count_to_mark(3)>.
|
||||
|
||||
=back
|
||||
|
||||
The core_obj_create() function registers a new OID and associated short name
|
||||
|
|
|
@ -590,10 +590,7 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len)
|
|||
SSL *server;
|
||||
BIO *in;
|
||||
BIO *out;
|
||||
#if !defined(OPENSSL_NO_EC) \
|
||||
|| (!defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0))
|
||||
BIO *bio_buf;
|
||||
#endif
|
||||
SSL_CTX *ctx;
|
||||
int ret;
|
||||
#ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
|
|
|
@ -253,6 +253,10 @@ OSSL_CORE_MAKE_FUNC(int, provider_up_ref,
|
|||
OSSL_CORE_MAKE_FUNC(int, provider_free,
|
||||
(const OSSL_CORE_HANDLE *prov, int deactivate))
|
||||
|
||||
/* Additional error functions provided by the core */
|
||||
# define OSSL_FUNC_CORE_COUNT_TO_MARK 120
|
||||
OSSL_CORE_MAKE_FUNC(int, core_count_to_mark, (const OSSL_CORE_HANDLE *prov))
|
||||
|
||||
/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */
|
||||
# define OSSL_FUNC_PROVIDER_TEARDOWN 1024
|
||||
OSSL_CORE_MAKE_FUNC(void, provider_teardown, (void *provctx))
|
||||
|
|
|
@ -65,6 +65,7 @@ static OSSL_FUNC_core_vset_error_fn *c_vset_error;
|
|||
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
||||
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
||||
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
||||
static OSSL_FUNC_core_count_to_mark_fn *c_count_to_mark;
|
||||
static OSSL_FUNC_CRYPTO_malloc_fn *c_CRYPTO_malloc;
|
||||
static OSSL_FUNC_CRYPTO_zalloc_fn *c_CRYPTO_zalloc;
|
||||
static OSSL_FUNC_CRYPTO_free_fn *c_CRYPTO_free;
|
||||
|
@ -834,6 +835,9 @@ int OSSL_provider_init_int(const OSSL_CORE_HANDLE *handle,
|
|||
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
||||
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(in));
|
||||
break;
|
||||
case OSSL_FUNC_CORE_COUNT_TO_MARK:
|
||||
set_func(c_count_to_mark, OSSL_FUNC_core_count_to_mark(in));
|
||||
break;
|
||||
case OSSL_FUNC_CRYPTO_MALLOC:
|
||||
set_func(c_CRYPTO_malloc, OSSL_FUNC_CRYPTO_malloc(in));
|
||||
break;
|
||||
|
@ -1072,6 +1076,11 @@ int ERR_pop_to_mark(void)
|
|||
return c_pop_error_to_mark(NULL);
|
||||
}
|
||||
|
||||
int ERR_count_to_mark(void)
|
||||
{
|
||||
return c_count_to_mark != NULL ? c_count_to_mark(NULL) : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* This must take a library context, since it's called from the depths
|
||||
* of crypto/initthread.c code, where it's (correctly) assumed that the
|
||||
|
|
|
@ -22,7 +22,7 @@ const PROV_CIPHER_HW_AES_HMAC_SHA_ETM *ossl_prov_cipher_hw_aes_cbc_hmac_sha1_etm
|
|||
#else
|
||||
void sha1_block_data_order(void *c, const void *p, size_t len);
|
||||
|
||||
# if defined(__aarch64__)
|
||||
# if defined(__aarch64__) || defined(_M_ARM64)
|
||||
int asm_aescbc_sha1_hmac(const uint8_t *csrc, uint8_t *cdst, uint64_t clen,
|
||||
uint8_t *dsrc, uint8_t *ddst, uint64_t dlen,
|
||||
CIPH_DIGEST *arg);
|
||||
|
|
|
@ -22,7 +22,7 @@ const PROV_CIPHER_HW_AES_HMAC_SHA_ETM *ossl_prov_cipher_hw_aes_cbc_hmac_sha256_e
|
|||
#else
|
||||
void sha256_block_data_order(void *c, const void *p, size_t len);
|
||||
|
||||
# if defined(__aarch64__)
|
||||
# if defined(__aarch64__) || defined(_M_ARM64)
|
||||
int asm_aescbc_sha256_hmac(const uint8_t *csrc, uint8_t *cdst, uint64_t clen,
|
||||
uint8_t *dsrc, uint8_t *ddst, uint64_t dlen,
|
||||
CIPH_DIGEST *arg);
|
||||
|
|
|
@ -26,7 +26,7 @@ const PROV_CIPHER_HW_AES_HMAC_SHA_ETM *ossl_prov_cipher_hw_aes_cbc_hmac_sha512_e
|
|||
return NULL;
|
||||
}
|
||||
#else
|
||||
# if defined(__aarch64__)
|
||||
# if defined(__aarch64__) || defined(_M_ARM64)
|
||||
void asm_aescbc_sha512_hmac(const uint8_t *csrc, uint8_t *cdst, uint64_t clen,
|
||||
uint8_t *dsrc, uint8_t *ddst, uint64_t dlen,
|
||||
CIPH_DIGEST *arg);
|
||||
|
|
|
@ -48,6 +48,7 @@ static OSSL_FUNC_core_vset_error_fn *c_vset_error;
|
|||
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
||||
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
||||
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
||||
static OSSL_FUNC_core_count_to_mark_fn *c_count_to_mark;
|
||||
#endif
|
||||
|
||||
/* Parameters we provide to the core */
|
||||
|
@ -234,6 +235,9 @@ int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
|
|||
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
||||
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(tmp));
|
||||
break;
|
||||
case OSSL_FUNC_CORE_COUNT_TO_MARK:
|
||||
set_func(c_count_to_mark, OSSL_FUNC_core_count_to_mark(in));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -301,4 +305,9 @@ int ERR_pop_to_mark(void)
|
|||
{
|
||||
return c_pop_error_to_mark(NULL);
|
||||
}
|
||||
|
||||
int ERR_count_to_mark(void)
|
||||
{
|
||||
return c_count_to_mark != NULL ? c_count_to_mark(NULL) : 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -23,9 +23,19 @@ print <<"_____";
|
|||
#ifndef OPENSSL_NO_STDIO
|
||||
# include <stdio.h>
|
||||
#endif
|
||||
_____
|
||||
|
||||
if (${name_uc} eq "RSA") {
|
||||
print("#include <openssl/rsa.h>");
|
||||
}
|
||||
else {
|
||||
print <<"_____";
|
||||
#ifndef OPENSSL_NO_${name_uc}
|
||||
# include <openssl/$name.h>
|
||||
#endif
|
||||
_____
|
||||
}
|
||||
print <<"_____";
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
|
|
@ -24,6 +24,6 @@ test -d "$QUICHE_TARGET_PATH" || exit 1
|
|||
|
||||
"$QUICHE_TARGET_PATH/debug/quiche-server" --cert "$SRCTOP/test/certs/servercert.pem" \
|
||||
--key "$SRCTOP/test/certs/serverkey.pem" --disable-gso \
|
||||
--http-version HTTP/0.9 --root "$SRCTOP" --no-grease --disable-hystart &
|
||||
--http-version HTTP/0.9 --root "$SRCTOP" --no-grease --disable-hystart > quiche_server_log 2>&1 &
|
||||
|
||||
echo $! >server.pid
|
||||
|
|
|
@ -1984,7 +1984,7 @@ static int test_tlsext_status_type(void)
|
|||
if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(),
|
||||
TLS1_VERSION, 0,
|
||||
&sctx, &cctx, leaf, skey))
|
||||
return 0;
|
||||
goto end;
|
||||
if (SSL_CTX_use_certificate_chain_file(sctx, leaf_chain) <= 0)
|
||||
goto end;
|
||||
if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
|
||||
|
|
Loading…
Reference in New Issue